I think what you're looking for might be called: enumeration of partitions (only you restricted to a base list, not all integers). Maybe that will help you hunt for this. I'd be shocked if there weren't a LOT of theory and/or code for exactly this. It wouldn't surprise me if exactly what you're requesting doesn't already exist as a routine in one of the major math software packages. However, I don't know of it - that's just a guess. If you're at a university, you might want to ask a professor, especially a comp sci professor or math professor.
There are various recurrsive algorithms: Here's one off the top of my head, where you shrink down your choice list in one part and the size of your sum in the other. I've no idea if this is a good approach - I'm offering it up to give you some ideas.
ResultList (SumsTo=N; Uses=ChoiceList; RunningAppendList)
(Pick a k in the incoming ChoiceList)
ResultList (SumsTo=N-k; Uses=ChoiceList; RunningAppendList.AppendWith(k))
ResultList (SumsTo=N; Uses=ChoiceList.Remove(k); RunningAppendList)