Finalise meeting agenda.
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Fri, 25 Sep 2015 01:52:32 +0000 (02:52 +0100)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Fri, 25 Sep 2015 01:52:32 +0000 (02:52 +0100)
doc/meeting-25-September-2015.txt

index caf0e8e..dde2e45 100644 (file)
@@ -4,42 +4,74 @@ Things to discuss:
 ================================================\r
 \r
 1. Progress report\r
+------------------\r
 \r
+Done:\r
+* Build all libraries and compiler\r
+* Generate code (alex, happy, hsc2hs, genprimopcode, Config.hs, ghc_boot_platform.h)\r
+* Track changes in the build system\r
+* Extract accurate package dependencies from .cabal files\r
+* Improve complexity when searching for module files (40x)\r
 \r
-++ Dealing with seemingly dead-code artefacts of the old build systems. I used to carefully migrate all code to the new build system, but it is getting more in the way of readability. New proposal: drop all such suspicious instances and bring them back only if things break. Example:\r
+Todo:                                   Target:\r
+* Build utils, rts                      October\r
+* Better dependencies (.hs-incl etc.)   November\r
+* Support command line options          December\r
+* Validate                              November-December (GHC 8.0?)\r
+* Documentation                         December-January\r
+\r
+Notes:\r
+* Zero build: under 7 seconds\r
+* Full build (when compilation not required): under 12 minutes on 4 cores\r
+* Limited parallelism: ghc-cabal/ghc-pkg not thread-safe, ghc fails on > 4 cores\r
+* Codebase growing: 50 files\r
+\r
+\r
+2. Seemingly dead-code\r
+----------------------\r
+\r
+I used to carefully migrate all code to the new build system even when it seemed dead, but this is often getting in the way of readability. New proposal: drop all such suspicious instances and bring them back only if/when things break. \r
+\r
+Example (generating primops.txt):\r
 \r
 C:/msys/home/chEEtah/ghc/inplace/mingw/bin/gcc.exe -E -undef -traditional -P -Iincludes -Iincludes/dist -Iincludes/dist-derivedconstants/header -Iincludes/dist-ghcconstants/header  -Icompiler/stage2 -x c compiler/prelude/primops.txt.pp | grep -v '^#pragma GCC' > compiler/stage2/build/primops.txt\r
 \r
-But primops.txt.pp has no lines containing #pragma GCC! Dead code?\r
+But primops.txt.pp has no lines containing #pragma GCC. Dead code?\r
 \r
-++ Zero build is 7 seconds\r
+Another example (generating ghc_boot_platform.h):\r
 \r
-++ .hs-incl includes are currently not tracked properly (e.g. ghc -MM does not list them). See Dependencies.hs\r
+ifeq "$(TargetOS_CPP)" "irix"\r
+    @echo "#ifndef $(IRIX_MAJOR)_TARGET_OS"                   >> $@\r
+    @echo "#define $(IRIX_MAJOR)_TARGET_OS 1"                 >> $@\r
+    @echo "#endif"                                            >> $@\r
+endif\r
 \r
-++ Better names for build stages\r
+But IRIX_MAJOR is never set anywhere in the build system. Dead code?\r
 \r
-* Currently we have Stage0, Stage1, etc. It is not particularly clear\r
-from the names what they stand for. We no longer need to stick to\r
-numbers and can pick more helpful names, for example:\r
 \r
-Stage0 -> Boot    \r
-Stage1 -> Interim \r
-Stage2 -> Install \r
-Stage3 -> Selftest\r
+3. Command line options\r
+-----------------------\r
 \r
+Discuss the need for command line options, e.g. 'make GhcDebugged=YES'. Do we need to  support all options as in the old build system?\r
 \r
+Settings.User is fairly readable, so perhaps some options may be changeable only by editing this file and recompiling the build system (typically takes negligible time compared to building). This will simplify things. Can we come up with a must-have list for command line options?\r
 \r
 \r
-i. Unclear abstractions Builder/BuildRule...\r
+4. Better names for build stages\r
+--------------------------------\r
 \r
-ii. Limits to build parallelism: GHC crashes during parallel builds. Also ghc-pkg and ghc-cabal are apparently not thread-safe, so I had to use Shake resources to limit the parallelism...\r
+Currently we have Stage0, Stage1, etc. It is not particularly clear from the names what they stand for (as a newcomer to the build system I used to look up what these numbers stand for all the time). Shall we use this opportunity to pick more helpful names, for example:\r
 \r
-iii. Discuss the need for command line options, e.g. make GhcDebugged=YES. This is a bit annoying to implement since Settings.User seems fairly readable, but recompiling the build systems for changing a flag may be annoying too.\r
+Stage0 -> Boot    \r
+Stage1 -> Interim \r
+Stage2 -> Install \r
+Stage3 -> Selftest\r
 \r
 \r
-iv. Do we need a name for the new build system?\r
+5. Do we need a name for the new build system?\r
+----------------------------------------------\r
 \r
-* At least we need a name for the folder in the GHC tree\r
+* At least we need a name for the folder in the GHC tree.\r
 \r
 * If we call it 'shake' there may be a confusion with the Shake library.\r
 \r
@@ -47,4 +79,3 @@ iv. Do we need a name for the new build system?
   build system' is overly verbose. Calling it 'shake' is confusing.\r
 \r
 * I haven't thought about any names yet, just checking whether we want to. \r
-\r