Palmer has nice section on it as well as some useful tools in his book here
. I use that spreadsheet linked at the bottom of one of those pages. Just choose your target color (SRM) and input your source water. By choosing your target color you estimate the acidity of the grain bill (this way you don't have to plug in your 'target water' profile). Make sure to use the dropdown selection for 'Bicarbonate' instead of 'Alkalinity as CaCO3' if your water report gives Bicarbonate. Then plug in your mash volume and play with the salt additions and it will show you your resultant water at the bottom. Also...look at those Nomographs in that link above. I printed one out and drew out my Spring water and Drinking water (the spreadsheet does the same thing as the nomograph) and then my 'adjusted' water and it really helped to see the balancing act between effective hardness and Alkalinity with respect to residual alkalinity.
I just brewed an Oatmeal Stout and only treated the mash water...I just used straight bottled Drinking water (which still has 190 ppm Bicarbonate from my source) for the sparge. But I didn't get my pH strips in time to measure it.
FWIW, I'm pretty green on water chemistry but I did similar to what Big Ed said...most of my addition was CaCO3 (chalk) and it didn't dissolve until the grains were added (or it hit the mash). I then added some NaHCO3, CaCl, and MgSO4 to kind of balance everything out. Gypsum is probably more appropriate for a Stout though (as BigEd suggested).