build: Skip gcc, mlibc, guile or mes builds using CC=, CC32=, GUILE= or MES=.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 28 May 2017 16:32:53 +0000 (18:32 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 28 May 2017 16:32:53 +0000 (18:32 +0200)
* GNUmakefile (build-scripts): New target
  (HELP_TOP): Mention it.
* configure (main): Write GUILE_FOR_BUILD.
* make/bin-mlibc.make: Skip if CC32 is not set.
* make/bin.make: Skip if CC is not set.
* make/install.make (install): Only install $(OUT)/mes.mes if
  MES_BOOTSTRAP is set.
* make/mescc-guile.make: Skip if GUILE is not set.
* make/mescc-mes.make: Skip if MES is not set.
* HACKING: write something about

GNUmakefile
HACKING
configure
make/bin-mlibc.make
make/bin.make
make/install.make
make/mescc-guile.make
make/mescc-mes.make
scaffold/scaffold.make
src/src.make

index e8c18f9ad687f8c38e1f810160932aa37058d67f..5d49d1f729020881eb1888ab4326f614b51a6df0 100644 (file)
@@ -21,6 +21,15 @@ SUBDIRS:=\
 include make/common.make
 -include .local.make
 
+build-scripts:
+       make --dry-run MES=$(OUT)/mes CC= CC32= GUILE= MES_BOOTSTRAP=1 > $(OUT)/make.sh
+       make --dry-run MES=$(OUT)/mes CC= CC32= GUILE= MES_BOOTSTRAP=1 | tail +$(wc -l make.sh) > $(OUT)/make-check.sh
+       make --dry-run MES=$(OUT)/mes CC= CC32= GUILE= MES_BOOTSTRAP=1 | tail +$(wc -l make.sh) > $(OUT)/make-install.sh
+
+       make --dry-run > $(OUT)/make-dev.sh
+       make --dry-run | tail +$(wc -l make.sh) > $(OUT)/make-dev-check.sh
+       make --dry-run | tail +$(wc -l make.sh) > $(OUT)/make-dev-install.sh
+
 help: help-top
 
 install: all
@@ -34,6 +43,7 @@ Usage: make [OPTION]... [TARGET]...
 
 Targets:
   all               update everything
+  build-scripts     generate build scripts
   check             run unit tests
   clean             remove all generated stuff
   dist              create tarball in $(TARBALL)
diff --git a/HACKING b/HACKING
index c4c971ff8c4383b6a81e31476a6a1b48f8cbf4c5..3038bfb7676a0fea6f8801e15db1739b27fe1aa7 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -3,6 +3,40 @@
 * SETUP
     guix environment -l guix.scm     #64 bit + 32bit
     guix environment --system=i686-linux -l guix.scm #32 bit only
+* BUILD
+There are two major modes to build Mes: true bootstrap and
+development.
+
+** DEVELOPMENT BUILD
+To help development we assume ./configure sets these variables for make
+
+   CC    -- gcc
+   CC32  -- i686-unknown-linux-gnu-gcc (or on x86, also gcc)
+   GUILE -- guile
+   MES   -- unset
+
+Mes is supposed to serve as a full equivalent for GUILE, however mes is much, much
+slower than guile.  That's why we usually don't use mes during development.
+
+gcc is used to verify the sanity of our C sources.
+
+i686-unknown-linux-gnu-gcc is used to compare hex/assembly, to test
+the gcc variant of mlbic: libc/libc-gcc.c and steal ideas.
+
+guile is used to develop mescc, the C compiler in Scheme that during
+bootstrapping will be executed by mes.
+
+** BOOTSTRAP BUILD
+In bootstrap mode, we don't have gcc (CC), we don't have pa 32 bit gcc
+(CC32), we have no guile (GUILE)...but we should have a bootstrap mes
+(MES).  FIXME.
+
+mes is built from src/*.c and some out/src/*.h files that are snarfed from
+src/*.c by build-aux/mes-snarf.scm.
+
+Also, during bootstrap we don't have make.  Running `make build-scripts'
+generates several recipies of sh build scripts in out/.
+
 * ROADMAP
 ** TODO 
 *** release 0.x, unsorted
index 6b7cc98b5e61c244c68eea5b3a0e992e8079e2e2..bbb14ec50806888c821f7c6eef5d80bc7cf317e5 100755 (executable)
--- a/configure
+++ b/configure
@@ -237,6 +237,7 @@ Usage: ./configure [OPTION]...
         (stdout "CC:=~a\n" CC)
         (stdout "CC32:=~a\n" CC32)
         (stdout "GUILE:=~a\n" GUILE)
+        (stdout "GUILE_FOR_BUILD:=~a\n" GUILE)
         (stdout "GUILE_EFFECTIVE_VERSION:=~a\n" GUILE_EFFECTIVE_VERSION)
         (stdout "GUIX_P:=~a\n" (if guix? guix? ""))
         (stdout "PACKAGE:=~a\n" PACKAGE)
index df30bc20089eeeaceb15d1f218c61d2d2ada348b..e898a57ce2bae373d87a352d815a8ff066ea6e0a 100644 (file)
@@ -1,5 +1,7 @@
+ifneq ($(CC32),)
 C_FLAGS:=-nostdinc -fno-builtin
 LD_FLAGS:=-nostdlib
 CROSS:=$(CC32:%gcc=%)
 
 include make/bin.make
+endif
index 42196b3bae6aa228b064565aeeff4b192196cb1d..c57bd4bcaaf0d2fff300f36b76a0054321f7c4c0 100644 (file)
@@ -1,3 +1,4 @@
+ifneq ($(CC),)
 O_FILES := $(C_FILES:%.c=$(OUT)/%.$(CROSS)o)
 D_FILES := $(O_FILES:%o=%d)
 
@@ -23,3 +24,4 @@ $(OUT)/$(TARGET): $(O_FILES)
        $(QUIET)$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
 
 include make/compile.make
+endif
index 65c64cab954afc18540c3b1e7a905e8d33f9a475..17535db378beca08fc814288e49a346653cd6cf2 100644 (file)
@@ -62,7 +62,7 @@ INSTALL_GO_FILES:=
 install: $(CLEAN) ChangeLog
        mkdir -p $(DESTDIR)$(PREFIX)/bin
        install $(OUT)/mes $(DESTDIR)$(PREFIX)/bin/mes
-ifeq (0,1) # No bootstrap mes.mes ATM
+ifneq ($(MES_BOOTSTRAP),)
        install $(OUT)/mes.mes $(DESTDIR)$(PREFIX)/bin/mes.mes
 endif
        install scripts/mescc.mes $(DESTDIR)$(PREFIX)/bin/mescc.mes
index fb46365ceea8bcb9fbcf3c2a5f2f4f88f9653a95..f89e16012ddf0071ebea0d9ee39ab6343a3ac272 100644 (file)
@@ -1,3 +1,4 @@
+ifneq ($(GUILE),)
 CROSS:=guile-
 C_FILES:=libc/libc-mes.c $(C_FILES)
 #C_FILES:=libc/mini-libc-mes.c $(C_FILES)
@@ -83,4 +84,5 @@ $(foreach c-file,$(strip $(filter %.c,$(C_FILES))),$(eval $(call mescc.scm-c-pre
 $(foreach c-file,$(strip $(filter %.c,$(C_FILES))),$(eval $(call mescc.scm-c-compile-E,$(c-file:%.c=$(OUT)/%.$(CROSS)E),$(DEFINES),$(INCLUDES))))
 endif
 
+endif
 include make/reset.make
index 06022400c7bbfcab287ef579e83da3bf45c9e648..b6f49ac810288083360934333b17d0a3c2128992 100644 (file)
@@ -1,3 +1,4 @@
+ifneq ($(MES),)
 CROSS:=mes-
 C_FILES:=libc/libc-mes.c $(C_FILES)
 O_FILES:=$(C_FILES:%.c=$(OUT)/%.$(CROSS)o)
@@ -93,4 +94,5 @@ $(foreach c-file,$(strip $(filter %.c,$(C_FILES))),$(eval $(call mescc.mes-c-pre
 $(foreach c-file,$(strip $(filter %.c,$(C_FILES))),$(eval $(call mescc.mes-c-compile-E,$(c-file:%.c=$(OUT)/%.$(CROSS)E),$(DEFINES),$(INCLUDES))))
 endif
 
+endif
 include make/reset.make
index fbc215d7033990f3751c31e024f1ff5a64780319..6939d4c3a0d952ef8b8670f968cd001c545bab8e 100644 (file)
@@ -94,7 +94,7 @@ TARGET:=t.guile
 include make/check.make
 
 # scripts/mescc.mes
-ifeq ($(MES_SKIP_MES),)
+ifneq ($(MES),)
 TARGET:=m.mes
 C_FILES:=$(DIR)/m.c
 include make/mescc-mes.make
@@ -103,7 +103,7 @@ TARGET:=m.mes
 EXPECT:=255
 include make/check.make
 
-ifneq ($(SCAFFOLD),)
+ifneq ($(MES_SCAFFOLD),)
 TARGET:=hello.mes
 C_FILES:=$(DIR)/hello.c
 include make/mescc-mes.make
index 33743ff515a60b4a39949029446518114be1b966..0cf248eaeb1bfc8460c29c63a9872b6e1204fb51 100644 (file)
@@ -40,7 +40,6 @@ snarf-mes: $(SNARF.MES)
 
 include make/reset.make
 
-# TARGET:=$(CROSS)mes
 CROSS:=$(CC32:%gcc=%)
 $(OUT)/$(CROSS)%: $(OUT)/%.mlibc
        @ln -sf $(<F) $@
@@ -56,7 +55,7 @@ $(OUT)/mes.guile: $(SNARF.MES)
 C_FILES:=$(DIR)/mes.c
 include make/mescc-guile.make
 
-ifeq (0,1) # No bootstrap mes.mes ATM
+ifneq ($(MES_BOOTSTRAP),)
 safe-MES_MAX_ARENA:=$(MES_MAX_ARENA)
 MES_MAX_ARENA:=80000000
 TARGET:=mes.mes