# Vishap Oberon master makefile. # # Makes sure configuration parameters are up to date and then hands off # to src/tools/make/oberon.mk. # To build and install the Oberon compiler and library on a Unix based # OS (Linux/Mac/BSD etc.) or on cygwin, run: # # make full # # To override your OSs default C compiler, first run # # export CC=compiler # # Where compiler is one of: # # clang # gcc # tcc # i686-w64-mingw32-gcc (32 bit cygwin only) # x86_64-w64-mingw32-gcc (64 bit cygwin only) # # (To build on native Windows use make.cmd, not this makefile. Make.cmd automatically # assumes use of the Microsoft compiler cl.) # C compiler data models and sizes and alignments of Oberon types. # # There are just three distinct data models that we build for: # # 44 - 32 bit pointers, 32 bit alignment # 48 - 32 bit pointers, 64 bit alignment # 88 - 64 bit pointers, 64 bit alignment # # Meaning of n bit alignment: # # Individual variables of up to n bits are aligned in memory to # whole multiples of their own size, rounded up to a power of two. # Variables larger than n bits are aligned to n bits. # # (n will always be a power of 2). # # Thus: # # Size 32 bit alignment 64 bit alignment # -------- ---------------- ---------------- # CHAR 1 byte 1 byte 1 byte # INTEGER 4 bytes 4 bytes 4 bytes # LONGINT 8 bytes 4 bytes 8 bytes # # Note that in practice for 32 and 64 bit systems, this only affects # LONGINT. # # C data model names: # # name 32 bit types 64 bit types alignment # --------- ------------------ ------------------------ --------- # ILP32 int, long, pointer long long 32 or 64 # LP64 int long, long long, pointer 64 # LLP64 int, long long long 64 # Default make target - explain usage usage: @echo "" @echo Usage: @echo "" @echo " make full" @echo "" @echo " Does a full, clean build, and runs confidence tests." @echo " An installation directory image is left in the local repository install directory." @echo "" @echo "Targets for building and installation:" @echo " make clean - Clean out the build directory" @echo " make compiler - Build the compiler but not the library" @echo " make browsercmd - Build the symbol browser (showdef)" @echo " make library - Build all library files and make library" @echo " make O2library - Build all library files with Oberon-2 type sizes" @echo " make OClibrary - Build all library files with Component Pascal type sizes" @echo " make install - Install built compiler and library in /opt or C:\\PROGRAM FILES*" @echo " (Needs root access)" @echo "" @echo "Targets for (re)creating and reverting bootstrap C sources:" @echo " make bootstrap - Update bootstrap C source directories." @echo " make revertbootstrap - Use git checkout to restore bootstrap C source directories" # Code navigation helper # doc/ctags.md .PHONY: tags tags: ctags -R --options=oberon.ctags --extras=+q # Generate config files Configuration.Make and Configuration.Mod FORCE: configuration: FORCE @$(CC) -I src/runtime -o a.o src/tools/make/configure.c @./a.o @rm a.o @echo BRANCH=$$(git rev-parse --abbrev-ref HEAD)>>Configuration.Make @echo Branch: $$(git rev-parse --abbrev-ref HEAD). bootstrapconfiguration: FORCE @$(CC) -I src/runtime -o a.o src/tools/make/configure.c @./a.o bootstrap @rm a.o @echo BRANCH=$$(git rev-parse --abbrev-ref HEAD)>>Configuration.Make @echo Branch: $$(git rev-parse --abbrev-ref HEAD). reportsizes: FORCE @$(CC) -I src/runtime -o a.o src/tools/make/configure.c @./a.o report @rm a.o # --- Building and installation --- # clean - clean out the bulid directory clean: configuration @make -f src/tools/make/oberon.mk -s clean # full: Full build of compiler and libarary. full: configuration @make -f src/tools/make/oberon.mk -s clean # Make bootstrap compiler from source suitable for current data model @printf "\n\n--- Compiler build started ---\n\n" @make -f src/tools/make/oberon.mk -s compilerfromsavedsource MODEL=2 # Use bootstrap compiler to make compiler binary from latest compiler sources @make -f src/tools/make/oberon.mk -s translate MODEL=2 @make -f src/tools/make/oberon.mk -s assemble MODEL=2 # Use latest compiler to make compiler binary from latest compiler sources @make -f src/tools/make/oberon.mk -s translate MODEL=2 @make -f src/tools/make/oberon.mk -s assemble MODEL=2 @printf "\n\n--- Compiler build successfull ---\n\n" @make -f src/tools/make/oberon.mk -s browsercmd MODEL=2 @printf "\n\n--- Library build started ---\n\n" @make -f src/tools/make/oberon.mk -s library MODEL=2 @make -f src/tools/make/oberon.mk -s library MODEL=C @printf "\n\n--- Library build successfull ---\n\n" @make -f src/tools/make/oberon.mk -s sourcechanges @make -f src/tools/make/oberon.mk -s makeinstalldir @printf "\n\n--- Confidence tests started ---\n\n" @make -f src/tools/make/oberon.mk -s confidence MODEL=2 @make -f src/tools/make/oberon.mk -s instructions assemble: @make -f src/tools/make/oberon.mk -s assemble MODEL=2 compilerfromsavedsource: @make -f src/tools/make/oberon.mk -s compilerfromsavedsource # compile: compiler only, without cleaning compiler: configuration @make -f src/tools/make/oberon.mk -s translate MODEL=2 @make -f src/tools/make/oberon.mk -s assemble MODEL=2 # Report changes to compiler source relative to bootstrap compiler sourcechanges: @make -f src/tools/make/oberon.mk -s sourcechanges # browsercmd: build the 'showdef' command browsercmd: configuration @make -f src/tools/make/oberon.mk -s browsercmd MODEL=2 # library: build all directories under src/library O2library: configuration @make -f src/tools/make/oberon.mk -s library MODEL=2 OClibrary: configuration @make -f src/tools/make/oberon.mk -s library MODEL=C # Individual library components v4: configuration @make -f src/tools/make/oberon.mk -s v4 MODEL=2 ooc2: configuration @make -f src/tools/make/oberon.mk -s ooc2 MODEL=2 ooc: configuration @make -f src/tools/make/oberon.mk -s ooc MODEL=2 ulm: configuration @make -f src/tools/make/oberon.mk -s ulm MODEL=2 pow32: configuration @make -f src/tools/make/oberon.mk -s pow32 MODEL=2 misc: configuration @make -f src/tools/make/oberon.mk -s misc MODEL=2 s3: configuration @make -f src/tools/make/oberon.mk -s s3 MODEL=2 # makeinstalldir: Copy built files to local install directory makeinstalldir: @make -f src/tools/make/oberon.mk -s makeinstalldir # install: Copy built files to install directory install: configuration @make -f src/tools/make/oberon.mk -s install uninstall: configuration @make -f src/tools/make/oberon.mk -s uninstall # confidence: Run a set of confidence tests confidence: configuration @make -f src/tools/make/oberon.mk -s confidence MODEL=2 planned-binary-change: @date >src/test/confidence/planned-binary-change # --- Bootstrap C source generation and reversion --- # bootstrap: Rebuild the bootstrap directories # If the bootstrap directories are broken or only partially # built then run 'make revertbootstrap' first. bootstrap: bootstrapconfiguration @make -f src/tools/make/oberon.mk -s clean @make -f src/tools/make/oberon.mk -s translate MODEL=2 @make -f src/tools/make/oberon.mk -s assemble MODEL=2 rm -rf bootstrap/* make -f src/tools/make/oberon.mk -s translate MODEL=2 INTSIZE=2 ADRSIZE=4 ALIGNMENT=4 PLATFORM=unix BUILDDIR=bootstrap/unix-44 && rm bootstrap/unix-44/*.sym make -f src/tools/make/oberon.mk -s translate MODEL=2 INTSIZE=2 ADRSIZE=4 ALIGNMENT=8 PLATFORM=unix BUILDDIR=bootstrap/unix-48 && rm bootstrap/unix-48/*.sym make -f src/tools/make/oberon.mk -s translate MODEL=2 INTSIZE=4 ADRSIZE=8 ALIGNMENT=8 PLATFORM=unix BUILDDIR=bootstrap/unix-88 && rm bootstrap/unix-88/*.sym make -f src/tools/make/oberon.mk -s translate MODEL=2 INTSIZE=2 ADRSIZE=4 ALIGNMENT=8 PLATFORM=windows BUILDDIR=bootstrap/windows-48 && rm bootstrap/windows-48/*.sym make -f src/tools/make/oberon.mk -s translate MODEL=2 INTSIZE=4 ADRSIZE=8 ALIGNMENT=8 PLATFORM=windows BUILDDIR=bootstrap/windows-88 && rm bootstrap/windows-88/*.sym cp src/runtime/*.[ch] bootstrap bootstrapunclean: bootstrapconfiguration rm -rf bootstrap/* make -f src/tools/make/oberon.mk -s translate MODEL=2 INTSIZE=2 ADRSIZE=4 ALIGNMENT=4 PLATFORM=unix BUILDDIR=bootstrap/unix-44 && rm bootstrap/unix-44/*.sym make -f src/tools/make/oberon.mk -s translate MODEL=2 INTSIZE=2 ADRSIZE=4 ALIGNMENT=8 PLATFORM=unix BUILDDIR=bootstrap/unix-48 && rm bootstrap/unix-48/*.sym make -f src/tools/make/oberon.mk -s translate MODEL=2 INTSIZE=4 ADRSIZE=8 ALIGNMENT=8 PLATFORM=unix BUILDDIR=bootstrap/unix-88 && rm bootstrap/unix-88/*.sym make -f src/tools/make/oberon.mk -s translate MODEL=2 INTSIZE=2 ADRSIZE=4 ALIGNMENT=8 PLATFORM=windows BUILDDIR=bootstrap/windows-48 && rm bootstrap/windows-48/*.sym make -f src/tools/make/oberon.mk -s translate MODEL=2 INTSIZE=4 ADRSIZE=8 ALIGNMENT=8 PLATFORM=windows BUILDDIR=bootstrap/windows-88 && rm bootstrap/windows-88/*.sym cp src/runtime/*.[ch] bootstrap revertbootstrap: @rm -rf bootstrap/* git checkout bootstrap # --- multi-machine multi-platform build management --- # NOTE: No longer used. Obsoleted by postpush.pl and buildall.pl. # coordinator: Start the test machine coordinator coordinator: configuration @make -f src/tools/make/oberon.mk -s clean @make -f src/tools/make/oberon.mk -s translate @make -f src/tools/make/oberon.mk -s assemble @make -f src/tools/make/oberon.mk -s testtools @rm -f "build/*.log" cd build && ../testcoordinator.exe # auto: machine specific build server auto: configuration @make -f src/tools/make/oberon.mk -s auto # autoonce: What auto does each time a build is triggered. autoonce: configuration git pull @if make -s full; then echo \*\* Succeeded \*\*; else echo \*\* Failed \*\*;fi # autobuild: Start test clients. autobuild: configuration ./testclient -c "make -s autoonce" # autostop: Tell test clients to exit their wait loop. autostop: configuration ./testclient -c "exit"