X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=GNUmakefile;h=bad078a8859eb2b0265320d2c2b60acd0a948609;hp=09aa5ee6bf06297b95e8b33424efb02ede9e773f;hb=20327d5e219699456e684ed7773bf408a8fb4960;hpb=53a8f004d0c34ff8b0f444ba9bb042a1efb18b55 diff --git a/GNUmakefile b/GNUmakefile old mode 100755 new mode 100644 index 09aa5ee6bf..bad078a885 --- a/GNUmakefile +++ b/GNUmakefile @@ -1,23 +1,48 @@ ifdef CONFIG - CC = gcc - CPP = g++ - AR = ar - LD = ld + VERSION = 0.99 + GIT_LABEL = $(shell echo `git describe --all`-`git rev-parse HEAD`) + BUNDLE = Factor.app + DEBUG ?= 0 + REPRODUCIBLE ?= 0 - VERSION = 0.94 + # gmake's default CXX is g++, we prefer c++ + SHELL_CXX = $(shell printenv CXX) + ifeq ($(SHELL_CXX),) + CXX=c++ + else + CXX=$(SHELL_CXX) + endif - BUNDLE = Factor.app - LIBPATH = -L/usr/X11R6/lib + XCODE_PATH ?= /Applications/Xcode.app + MACOSX_32_SDK ?= MacOSX10.11.sdk - CFLAGS = -Wall $(SITE_CFLAGS) + include $(CONFIG) + + CFLAGS += -Wall \ + -Wextra \ + -pedantic \ + -DFACTOR_VERSION="$(VERSION)" \ + -DFACTOR_GIT_LABEL="$(GIT_LABEL)" \ + $(SITE_CFLAGS) - ifdef DEBUG + CXXFLAGS += -std=c++11 + + # SANITIZER=address ./build.sh compile + # address,thread,undefined,leak + ifdef SANITIZER + CFLAGS += -fsanitize=$(SANITIZER) + CXXFLAGS += -fsanitize=$(SANITIZER) + endif + + ifneq ($(DEBUG), 0) CFLAGS += -g -DFACTOR_DEBUG else CFLAGS += -O3 endif - include $(CONFIG) + ifneq ($(REPRODUCIBLE), 0) + CFLAGS += -DFACTOR_REPRODUCIBLE + endif ENGINE = $(DLL_PREFIX)factor$(DLL_SUFFIX)$(DLL_EXTENSION) EXECUTABLE = factor$(EXE_SUFFIX)$(EXE_EXTENSION) @@ -28,7 +53,6 @@ ifdef CONFIG vm/alien.o \ vm/arrays.o \ vm/bignum.o \ - vm/booleans.o \ vm/byte_arrays.o \ vm/callbacks.o \ vm/callstack.o \ @@ -43,10 +67,8 @@ ifdef CONFIG vm/entry_points.o \ vm/errors.o \ vm/factor.o \ - vm/free_list.o \ vm/full_collector.o \ vm/gc.o \ - vm/gc_info.o \ vm/image.o \ vm/inline_cache.o \ vm/instruction_operands.o \ @@ -58,16 +80,71 @@ ifdef CONFIG vm/object_start_map.o \ vm/objects.o \ vm/primitives.o \ - vm/profiler.o \ vm/quotations.o \ vm/run.o \ + vm/safepoints.o \ + vm/sampling_profiler.o \ vm/strings.o \ vm/to_tenured_collector.o \ vm/tuples.o \ vm/utilities.o \ - vm/vm.o \ + vm/vm.o \ vm/words.o + MASTER_HEADERS = $(PLAF_MASTER_HEADERS) \ + vm/assert.hpp \ + vm/debug.hpp \ + vm/layouts.hpp \ + vm/platform.hpp \ + vm/primitives.hpp \ + vm/segments.hpp \ + vm/gc_info.hpp \ + vm/contexts.hpp \ + vm/run.hpp \ + vm/objects.hpp \ + vm/sampling_profiler.hpp \ + vm/errors.hpp \ + vm/bignumint.hpp \ + vm/bignum.hpp \ + vm/booleans.hpp \ + vm/instruction_operands.hpp \ + vm/code_blocks.hpp \ + vm/bump_allocator.hpp \ + vm/bitwise_hacks.hpp \ + vm/mark_bits.hpp \ + vm/free_list.hpp \ + vm/fixup.hpp \ + vm/write_barrier.hpp \ + vm/object_start_map.hpp \ + vm/aging_space.hpp \ + vm/tenured_space.hpp \ + vm/data_heap.hpp \ + vm/code_heap.hpp \ + vm/gc.hpp \ + vm/float_bits.hpp \ + vm/io.hpp \ + vm/image.hpp \ + vm/callbacks.hpp \ + vm/dispatch.hpp \ + vm/vm.hpp \ + vm/allot.hpp \ + vm/tagged.hpp \ + vm/data_roots.hpp \ + vm/code_roots.hpp \ + vm/generic_arrays.hpp \ + vm/callstack.hpp \ + vm/slot_visitor.hpp \ + vm/to_tenured_collector.hpp \ + vm/arrays.hpp \ + vm/math.hpp \ + vm/byte_arrays.hpp \ + vm/jit.hpp \ + vm/quotations.hpp \ + vm/inline_cache.hpp \ + vm/mvm.hpp \ + vm/factor.hpp \ + vm/utilities.hpp + EXE_OBJS = $(PLAF_EXE_OBJS) FFI_TEST_LIBRARY = libfactor-ffi-test$(SHARED_DLL_EXTENSION) @@ -76,94 +153,77 @@ ifdef CONFIG endif default: - $(MAKE) `./build-support/factor.sh make-target` + $(MAKE) `./build.sh make-target` help: @echo "Run '$(MAKE)' with one of the following parameters:" @echo "" - @echo "freebsd-x86-32" - @echo "freebsd-x86-64" @echo "linux-x86-32" @echo "linux-x86-64" - @echo "linux-ppc" - @echo "linux-arm" - @echo "openbsd-x86-32" - @echo "openbsd-x86-64" - @echo "netbsd-x86-32" - @echo "netbsd-x86-64" + @echo "linux-ppc-32" + @echo "linux-ppc-64" + @echo "linux-arm-64" + @echo "freebsd-x86-32" + @echo "freebsd-x86-64" @echo "macosx-x86-32" @echo "macosx-x86-64" - @echo "macosx-ppc" - @echo "solaris-x86-32" - @echo "solaris-x86-64" - @echo "wince-arm" - @echo "winnt-x86-32" - @echo "winnt-x86-64" + @echo "macosx-x86-fat" + @echo "macosx-arm64" + @echo "windows-x86-32" + @echo "windows-x86-64" @echo "" @echo "Additional modifiers:" @echo "" @echo "DEBUG=1 compile VM with debugging information" + @echo "REPRODUCIBLE=1 compile VM without timestamp" @echo "SITE_CFLAGS=... additional optimization flags" - @echo "NO_UI=1 don't link with X11 libraries (ignored on Mac OS X)" @echo "X11=1 force link with X11 libraries instead of Cocoa (only on Mac OS X)" ALL = factor factor-ffi-test factor-lib -openbsd-x86-32: - $(MAKE) $(ALL) CONFIG=vm/Config.openbsd.x86.32 - -openbsd-x86-64: - $(MAKE) $(ALL) CONFIG=vm/Config.openbsd.x86.64 - freebsd-x86-32: $(MAKE) $(ALL) CONFIG=vm/Config.freebsd.x86.32 freebsd-x86-64: $(MAKE) $(ALL) CONFIG=vm/Config.freebsd.x86.64 -netbsd-x86-32: - $(MAKE) $(ALL) CONFIG=vm/Config.netbsd.x86.32 - -netbsd-x86-64: - $(MAKE) $(ALL) CONFIG=vm/Config.netbsd.x86.64 - -macosx-ppc: - $(MAKE) $(ALL) macosx.app CONFIG=vm/Config.macosx.ppc - macosx-x86-32: $(MAKE) $(ALL) macosx.app CONFIG=vm/Config.macosx.x86.32 macosx-x86-64: $(MAKE) $(ALL) macosx.app CONFIG=vm/Config.macosx.x86.64 +macosx-x86-fat: + $(MAKE) $(ALL) macosx.app CONFIG=vm/Config.macosx.x86.fat + +macosx-arm64: + $(MAKE) $(ALL) macosx.app CONFIG=vm/Config.macosx.arm64 + +linux-arm-32: + $(MAKE) $(ALL) CONFIG=vm/Config.linux.arm.32 + +linux-arm-64: + $(MAKE) $(ALL) CONFIG=vm/Config.linux.arm.64 + linux-x86-32: $(MAKE) $(ALL) CONFIG=vm/Config.linux.x86.32 linux-x86-64: $(MAKE) $(ALL) CONFIG=vm/Config.linux.x86.64 -linux-ppc: - $(MAKE) $(ALL) CONFIG=vm/Config.linux.ppc - -linux-arm: - $(MAKE) $(ALL) CONFIG=vm/Config.linux.arm +linux-ppc-32: + $(MAKE) $(ALL) CONFIG=vm/Config.linux.ppc.32 -solaris-x86-32: - $(MAKE) $(ALL) CONFIG=vm/Config.solaris.x86.32 +linux-ppc-64: + $(MAKE) $(ALL) CONFIG=vm/Config.linux.ppc.64 -solaris-x86-64: - $(MAKE) $(ALL) CONFIG=vm/Config.solaris.x86.64 +windows-x86-32: + $(MAKE) $(ALL) CONFIG=vm/Config.windows.x86.32 + $(MAKE) factor-console CONFIG=vm/Config.windows.x86.32 -winnt-x86-32: - $(MAKE) $(ALL) CONFIG=vm/Config.windows.nt.x86.32 - $(MAKE) factor-console CONFIG=vm/Config.windows.nt.x86.32 - -winnt-x86-64: - $(MAKE) $(ALL) CONFIG=vm/Config.windows.nt.x86.64 - $(MAKE) factor-console CONFIG=vm/Config.windows.nt.x86.64 - -wince-arm: - $(MAKE) $(ALL) CONFIG=vm/Config.windows.ce.arm +windows-x86-64: + $(MAKE) $(ALL) CONFIG=vm/Config.windows.x86.64 + $(MAKE) factor-console CONFIG=vm/Config.windows.x86.64 ifdef CONFIG @@ -171,7 +231,7 @@ macosx.app: factor mkdir -p $(BUNDLE)/Contents/MacOS mkdir -p $(BUNDLE)/Contents/Frameworks mv $(EXECUTABLE) $(BUNDLE)/Contents/MacOS/factor - ln -s Factor.app/Contents/MacOS/factor ./factor + ln -s $(BUNDLE)/Contents/MacOS/factor ./factor $(ENGINE): $(DLL_OBJS) $(TOOLCHAIN_PREFIX)$(LINKER) $(ENGINE) $(DLL_OBJS) @@ -179,38 +239,42 @@ $(ENGINE): $(DLL_OBJS) factor-lib: $(ENGINE) factor: $(EXE_OBJS) $(DLL_OBJS) - $(TOOLCHAIN_PREFIX)$(CPP) $(LIBS) $(LIBPATH) -L. $(DLL_OBJS) \ - $(CFLAGS) -o $(EXECUTABLE) $(EXE_OBJS) + $(TOOLCHAIN_PREFIX)$(CXX) -L. $(DLL_OBJS) \ + $(CFLAGS) $(CXXFLAGS) -o $(EXECUTABLE) $(LIBS) $(EXE_OBJS) factor-console: $(EXE_OBJS) $(DLL_OBJS) - $(TOOLCHAIN_PREFIX)$(CPP) $(LIBS) $(LIBPATH) -L. $(DLL_OBJS) \ - $(CFLAGS) $(CFLAGS_CONSOLE) -o $(CONSOLE_EXECUTABLE) $(EXE_OBJS) + $(TOOLCHAIN_PREFIX)$(CXX) -L. $(DLL_OBJS) \ + $(CFLAGS) $(CXXFLAGS) $(CFLAGS_CONSOLE) -o $(CONSOLE_EXECUTABLE) $(LIBS) $(EXE_OBJS) factor-ffi-test: $(FFI_TEST_LIBRARY) $(FFI_TEST_LIBRARY): vm/ffi_test.o - $(TOOLCHAIN_PREFIX)$(CC) $(LIBPATH) $(CFLAGS) $(FFI_TEST_CFLAGS) $(SHARED_FLAG) -o $(FFI_TEST_LIBRARY) $(TEST_OBJS) + $(TOOLCHAIN_PREFIX)$(CC) $(CFLAGS) $(FFI_TEST_CFLAGS) $(SHARED_FLAG) -o $(FFI_TEST_LIBRARY) $(TEST_OBJS) vm/resources.o: $(TOOLCHAIN_PREFIX)$(WINDRES) vm/factor.rs vm/resources.o vm/ffi_test.o: vm/ffi_test.c - $(TOOLCHAIN_PREFIX)$(CC) -c $(CFLAGS) $(FFI_TEST_CFLAGS) -o $@ $< + $(TOOLCHAIN_PREFIX)$(CC) -c $(CFLAGS) $(FFI_TEST_CFLAGS) -std=c99 -o $@ $< + +vm/master.hpp.gch: vm/master.hpp $(MASTER_HEADERS) + $(TOOLCHAIN_PREFIX)$(CXX) -c -x c++-header $(CFLAGS) $(CXXFLAGS) -o $@ $< -.cpp.o: - $(TOOLCHAIN_PREFIX)$(CPP) -c $(CFLAGS) -o $@ $< +%.o: %.cpp vm/master.hpp.gch + $(TOOLCHAIN_PREFIX)$(CXX) -c $(CFLAGS) $(CXXFLAGS) -o $@ $< -.S.o: - $(TOOLCHAIN_PREFIX)$(CC) -x assembler-with-cpp -c $(CFLAGS) -o $@ $< +%.o: %.S + $(TOOLCHAIN_PREFIX)$(CC) -c $(CFLAGS) $(CXXFLAGS) -o $@ $< -.mm.o: - $(TOOLCHAIN_PREFIX)$(CPP) -c $(CFLAGS) -o $@ $< +%.o: %.mm vm/master.hpp.gch + $(TOOLCHAIN_PREFIX)$(CXX) -c $(CFLAGS) $(CXXFLAGS) -o $@ $< .SUFFIXES: .mm endif clean: + rm -f vm/*.gch rm -f vm/*.o rm -f factor.dll rm -f factor.lib @@ -220,3 +284,4 @@ clean: rm -f Factor.app/Contents/Frameworks/libfactor.dylib .PHONY: factor factor-lib factor-console factor-ffi-test tags clean macosx.app +.PHONY: linux-x86-32 linux-x86-64 linux-ppc-32 linux-ppc-64 linux-arm-64 freebsd-x86-32 freebsd-x86-64 macosx-x86-32 macosx-x86-64 macosx-x86-fat macosx-arm64 windows-x86-32 windows-x86-64