
I'm trying to figure out how to generate a release build. I thought it should be "perf" setting, but then I realized ghc-stage1 is called with -O (instead of -O2) when building stage2 with perf setting. So either perf is not the release setting, or I need stage3 which is probably compiled with stage2 using -O2? In any case, it'd be great to document this process of generating a release build in build.mk.sample. If it's "perf" setting, then maybe we can rename it to "release" or at least add a comment saying that that's the release build and you should wait until stage3 is done. Another thing that always confuses me is these settings: SRC_HC_OPTS = -O -H64m GhcStage1HcOpts = -O GhcStage2HcOpts = -O2 GhcLibHcOpts = -O2 As far as I can see, there's no documentation about these in the source tree. I figured that `GhcStage1HcOpts` is passed to system GHC when compiling stage1, and `GhcStage2Hcopts` is passed to ghc-stage1 when compiling stage 2. The lib one is obvious, and it's passed to stage 1 as libs are built using stage 1. But I still don't understand how is `SRC_HC_OPTS` is used, and what is used when building stage 3.