From e3e501ab6a7940342c0d87f6be526039336c2065 Mon Sep 17 00:00:00 2001 From: Sidi Liang <1467329765@qq.com> Date: Sat, 7 Oct 2023 13:45:44 +0800 Subject: [PATCH 1/4] Update makefile Updated makefile to have the C++ standard libraries statically linked, so that older macOSs can still execute the program --- makefile | 161 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 134 insertions(+), 27 deletions(-) diff --git a/makefile b/makefile index 5ec7f3e..b35cdea 100644 --- a/makefile +++ b/makefile @@ -53,9 +53,15 @@ NASAL_OBJECT=\ build/repl.o\ build/main.o +OS := $(shell uname) + # for test nasal: $(NASAL_OBJECT) | build - $(CXX) $(NASAL_OBJECT) -O3 -o nasal -ldl -lpthread + @if [ OS = "Darwin" ]; then\ + $(CXX) $(NASAL_OBJECT) -O3 -o nasal -ldl -lpthread -static -lstdc++;\ + else\ + $(CXX) $(NASAL_OBJECT) -O3 -o nasal -ldl -lpthread;\ + fi nasal.exe: $(NASAL_OBJECT) | build $(CXX) $(NASAL_OBJECT) -O3 -o nasal.exe @@ -64,19 +70,39 @@ build: @ if [ ! -d build ]; then mkdir build; fi build/main.o: $(NASAL_HEADER) src/main.cpp | build - $(CXX) -std=$(STD) -c -O3 src/main.cpp -fno-exceptions -fPIC -o build/main.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/main.cpp -fno-exceptions -fPIC -o build/main.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/main.cpp -fno-exceptions -fPIC -o build/main.o -I .;\ + fi build/nasal_misc.o: src/nasal.h src/nasal_misc.cpp | build - $(CXX) -std=$(STD) -c -O3 src/nasal_misc.cpp -fno-exceptions -fPIC -o build/nasal_misc.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/nasal_misc.cpp -fno-exceptions -fPIC -o build/nasal_misc.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/nasal_misc.cpp -fno-exceptions -fPIC -o build/nasal_misc.o -I .;\ + fi build/repl.o: src/nasal.h src/repl.h src/repl.cpp | build - $(CXX) -std=$(STD) -c -O3 src/repl.cpp -fno-exceptions -fPIC -o build/repl.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/repl.cpp -fno-exceptions -fPIC -o build/repl.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/repl.cpp -fno-exceptions -fPIC -o build/repl.o -I .;\ + fi build/nasal_err.o: src/nasal.h src/repl.h src/nasal_err.h src/nasal_err.cpp | build - $(CXX) -std=$(STD) -c -O3 src/nasal_err.cpp -fno-exceptions -fPIC -o build/nasal_err.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/nasal_err.cpp -fno-exceptions -fPIC -o build/nasal_err.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/nasal_err.cpp -fno-exceptions -fPIC -o build/nasal_err.o -I .;\ + fi build/nasal_gc.o: src/nasal.h src/nasal_gc.h src/nasal_gc.cpp | build - $(CXX) -std=$(STD) -c -O3 src/nasal_gc.cpp -fno-exceptions -fPIC -o build/nasal_gc.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/nasal_gc.cpp -fno-exceptions -fPIC -o build/nasal_gc.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/nasal_gc.cpp -fno-exceptions -fPIC -o build/nasal_gc.o -I .;\ + fi build/nasal_import.o: \ src/nasal.h\ @@ -84,77 +110,130 @@ build/nasal_import.o: \ src/nasal_lexer.h\ src/nasal_parse.h\ src/nasal_import.h src/nasal_import.cpp | build - $(CXX) -std=$(STD) -c -O3 src/nasal_import.cpp -fno-exceptions -fPIC -o build/nasal_import.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/nasal_import.cpp -fno-exceptions -fPIC -o build/nasal_import.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/nasal_import.cpp -fno-exceptions -fPIC -o build/nasal_import.o -I .;\ + fi build/nasal_lexer.o: \ src/nasal.h\ src/repl.h\ src/nasal_err.h\ src/nasal_lexer.h src/nasal_lexer.cpp | build - $(CXX) -std=$(STD) -c -O3 src/nasal_lexer.cpp -fno-exceptions -fPIC -o build/nasal_lexer.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/nasal_lexer.cpp -fno-exceptions -fPIC -o build/nasal_lexer.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/nasal_lexer.cpp -fno-exceptions -fPIC -o build/nasal_lexer.o -I .;\ + fi build/nasal_ast.o: \ src/nasal.h\ src/nasal_err.h\ src/nasal_ast.h src/nasal_ast.cpp | build - $(CXX) -std=$(STD) -c -O3 src/nasal_ast.cpp -fno-exceptions -fPIC -o build/nasal_ast.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/nasal_ast.cpp -fno-exceptions -fPIC -o build/nasal_ast.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/nasal_ast.cpp -fno-exceptions -fPIC -o build/nasal_ast.o -I .;\ + fi build/nasal_builtin.o: \ src/nasal.h\ src/nasal_gc.h\ src/nasal_builtin.h src/nasal_builtin.cpp | build - $(CXX) -std=$(STD) -c -O3 src/nasal_builtin.cpp -fno-exceptions -fPIC -o build/nasal_builtin.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/nasal_builtin.cpp -fno-exceptions -fPIC -o build/nasal_builtin.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/nasal_builtin.cpp -fno-exceptions -fPIC -o build/nasal_builtin.o -I .;\ + fi build/coroutine.o: \ src/nasal.h\ src/nasal_gc.h\ src/coroutine.h src/coroutine.cpp | build - $(CXX) -std=$(STD) -c -O3 src/coroutine.cpp -fno-exceptions -fPIC -o build/coroutine.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/coroutine.cpp -fno-exceptions -fPIC -o build/coroutine.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/coroutine.cpp -fno-exceptions -fPIC -o build/coroutine.o -I .;\ + fi build/bits_lib.o: \ src/nasal.h\ src/nasal_gc.h\ src/bits_lib.h src/bits_lib.cpp | build - $(CXX) -std=$(STD) -c -O3 src/bits_lib.cpp -fno-exceptions -fPIC -o build/bits_lib.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/bits_lib.cpp -fno-exceptions -fPIC -o build/bits_lib.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/bits_lib.cpp -fno-exceptions -fPIC -o build/bits_lib.o -I .;\ + fi + build/math_lib.o: \ src/nasal.h\ src/nasal_gc.h\ src/math_lib.h src/math_lib.cpp | build - $(CXX) -std=$(STD) -c -O3 src/math_lib.cpp -fno-exceptions -fPIC -o build/math_lib.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/math_lib.cpp -fno-exceptions -fPIC -o build/math_lib.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/math_lib.cpp -fno-exceptions -fPIC -o build/math_lib.o -I .;\ + fi build/io_lib.o: \ src/nasal.h\ src/nasal_gc.h\ src/io_lib.h src/io_lib.cpp | build - $(CXX) -std=$(STD) -c -O3 src/io_lib.cpp -fno-exceptions -fPIC -o build/io_lib.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/io_lib.cpp -fno-exceptions -fPIC -o build/io_lib.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/io_lib.cpp -fno-exceptions -fPIC -o build/io_lib.o -I .;\ + fi build/dylib_lib.o: \ src/nasal.h\ src/nasal_gc.h\ src/dylib_lib.h src/dylib_lib.cpp | build - $(CXX) -std=$(STD) -c -O3 src/dylib_lib.cpp -fno-exceptions -fPIC -o build/dylib_lib.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/dylib_lib.cpp -fno-exceptions -fPIC -o build/dylib_lib.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/dylib_lib.cpp -fno-exceptions -fPIC -o build/dylib_lib.o -I .;\ + fi build/unix_lib.o: \ src/nasal.h\ src/nasal_gc.h\ src/unix_lib.h src/unix_lib.cpp | build - $(CXX) -std=$(STD) -c -O3 src/unix_lib.cpp -fno-exceptions -fPIC -o build/unix_lib.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/unix_lib.cpp -fno-exceptions -fPIC -o build/unix_lib.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/unix_lib.cpp -fno-exceptions -fPIC -o build/unix_lib.o -I .;\ + fi build/fg_props.o: \ src/nasal.h\ src/nasal_gc.h\ src/fg_props.h src/fg_props.cpp | build - $(CXX) -std=$(STD) -c -O3 src/fg_props.cpp -fno-exceptions -fPIC -o build/fg_props.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/fg_props.cpp -fno-exceptions -fPIC -o build/fg_props.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/fg_props.cpp -fno-exceptions -fPIC -o build/fg_props.o -I .;\ + fi build/nasal_codegen.o: $(NASAL_HEADER) src/nasal_codegen.h src/nasal_codegen.cpp | build - $(CXX) -std=$(STD) -c -O3 src/nasal_codegen.cpp -fno-exceptions -fPIC -o build/nasal_codegen.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/nasal_codegen.cpp -fno-exceptions -fPIC -o build/nasal_codegen.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/nasal_codegen.cpp -fno-exceptions -fPIC -o build/nasal_codegen.o -I .;\ + fi build/nasal_opcode.o: \ src/nasal.h\ src/nasal_builtin.h\ src/nasal_opcode.h src/nasal_opcode.cpp | build - $(CXX) -std=$(STD) -c -O3 src/nasal_opcode.cpp -fno-exceptions -fPIC -o build/nasal_opcode.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/nasal_opcode.cpp -fno-exceptions -fPIC -o build/nasal_opcode.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/nasal_opcode.cpp -fno-exceptions -fPIC -o build/nasal_opcode.o -I .;\ + fi build/nasal_parse.o: \ src/nasal.h\ @@ -162,7 +241,11 @@ build/nasal_parse.o: \ src/nasal_lexer.h\ src/nasal_err.h\ src/nasal_parse.h src/nasal_parse.cpp src/nasal_ast.h | build - $(CXX) -std=$(STD) -c -O3 src/nasal_parse.cpp -fno-exceptions -fPIC -o build/nasal_parse.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/nasal_parse.cpp -fno-exceptions -fPIC -o build/nasal_parse.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/nasal_parse.cpp -fno-exceptions -fPIC -o build/nasal_parse.o -I .;\ + fi build/optimizer.o: \ src/nasal.h\ @@ -170,7 +253,11 @@ build/optimizer.o: \ src/nasal_ast.h\ src/ast_visitor.h\ src/optimizer.h src/optimizer.cpp src/nasal_ast.h | build - $(CXX) -std=$(STD) -c -O3 src/optimizer.cpp -fno-exceptions -fPIC -o build/optimizer.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/optimizer.cpp -fno-exceptions -fPIC -o build/optimizer.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/optimizer.cpp -fno-exceptions -fPIC -o build/optimizer.o -I .;\ + fi build/symbol_finder.o: \ src/nasal.h\ @@ -178,14 +265,22 @@ build/symbol_finder.o: \ src/nasal_ast.h\ src/ast_visitor.h\ src/symbol_finder.h src/symbol_finder.cpp src/nasal_ast.h | build - $(CXX) -std=$(STD) -c -O3 src/symbol_finder.cpp -fno-exceptions -fPIC -o build/symbol_finder.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/symbol_finder.cpp -fno-exceptions -fPIC -o build/symbol_finder.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/symbol_finder.cpp -fno-exceptions -fPIC -o build/symbol_finder.o -I .;\ + fi build/ast_visitor.o: \ src/nasal.h\ src/nasal_err.h\ src/nasal_ast.h\ src/ast_visitor.h src/ast_visitor.cpp | build - $(CXX) -std=$(STD) -c -O3 src/ast_visitor.cpp -fno-exceptions -fPIC -o build/ast_visitor.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/ast_visitor.cpp -fno-exceptions -fPIC -o build/ast_visitor.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/ast_visitor.cpp -fno-exceptions -fPIC -o build/ast_visitor.o -I .;\ + fi build/ast_dumper.o: \ src/nasal.h\ @@ -193,13 +288,25 @@ build/ast_dumper.o: \ src/nasal_ast.h\ src/ast_visitor.h\ src/ast_dumper.h src/ast_dumper.cpp | build - $(CXX) -std=$(STD) -c -O3 src/ast_dumper.cpp -fno-exceptions -fPIC -o build/ast_dumper.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/ast_dumper.cpp -fno-exceptions -fPIC -o build/ast_dumper.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/ast_dumper.cpp -fno-exceptions -fPIC -o build/ast_dumper.o -I .;\ + fi build/nasal_vm.o: $(NASAL_HEADER) src/nasal_vm.h src/nasal_vm.cpp | build - $(CXX) -std=$(STD) -c -O3 src/nasal_vm.cpp -fno-exceptions -fPIC -o build/nasal_vm.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/nasal_vm.cpp -fno-exceptions -fPIC -o build/nasal_vm.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/nasal_vm.cpp -fno-exceptions -fPIC -o build/nasal_vm.o -I .;\ + fi build/nasal_dbg.o: $(NASAL_HEADER) src/nasal_dbg.h src/nasal_dbg.cpp | build - $(CXX) -std=$(STD) -c -O3 src/nasal_dbg.cpp -fno-exceptions -fPIC -o build/nasal_dbg.o -I . + @if [ OS = "Darwin" ]; then\ + $(CXX) -std=$(STD) -c -O3 src/nasal_dbg.cpp -fno-exceptions -fPIC -o build/nasal_dbg.o -I -static -lstdc++ .;\ + else\ + $(CXX) -std=$(STD) -c -O3 src/nasal_dbg.cpp -fno-exceptions -fPIC -o build/nasal_dbg.o -I .;\ + fi .PHONY: clean clean: @@ -246,4 +353,4 @@ test:nasal @ ./nasal -t -d test/turingmachine.nas @ ./nasal -d test/wavecollapse.nas @ ./nasal test/word_collector.nas test/md5compare.nas - @ ./nasal -t -d test/ycombinator.nas \ No newline at end of file + @ ./nasal -t -d test/ycombinator.nas From 56e3e4353b78013bc6bc4d4bfbc0ca7edaa3e90f Mon Sep 17 00:00:00 2001 From: Sidi Liang <1467329765@qq.com> Date: Sat, 7 Oct 2023 14:25:37 +0800 Subject: [PATCH 2/4] Update makefile --- makefile | 165 ++++++++++++------------------------------------------- 1 file changed, 36 insertions(+), 129 deletions(-) diff --git a/makefile b/makefile index b35cdea..5dba41c 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,12 @@ STD=c++17 +OS := $(shell uname) +ifeq ($(OS), Darwin) + CXXFLAGS=-std=$(STD) -c -O3 -fno-exceptions -fPIC -stdlib=libc++ -static-libstdc++ -l:libc++abi.a -static-libgcc +else + CXXFLAGS=-std=$(STD) -c -O3 -fno-exceptions -fPIC +endif +CPPFLAGS=-I . + NASAL_HEADER=\ src/ast_dumper.h\ @@ -53,15 +61,14 @@ NASAL_OBJECT=\ build/repl.o\ build/main.o -OS := $(shell uname) # for test nasal: $(NASAL_OBJECT) | build @if [ OS = "Darwin" ]; then\ - $(CXX) $(NASAL_OBJECT) -O3 -o nasal -ldl -lpthread -static -lstdc++;\ + $(CXX) $(NASAL_OBJECT) -O3 -o nasal -ldl -lpthread -stdlib=libc++ -static-libstdc++;\ else\ - $(CXX) $(NASAL_OBJECT) -O3 -o nasal -ldl -lpthread;\ - fi + $(CXX) $(NASAL_OBJECT) -O3 -o nasal -ldl -lpthread;\ + fi nasal.exe: $(NASAL_OBJECT) | build $(CXX) $(NASAL_OBJECT) -O3 -o nasal.exe @@ -70,39 +77,19 @@ build: @ if [ ! -d build ]; then mkdir build; fi build/main.o: $(NASAL_HEADER) src/main.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/main.cpp -fno-exceptions -fPIC -o build/main.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/main.cpp -fno-exceptions -fPIC -o build/main.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/main.cpp -o build/main.o build/nasal_misc.o: src/nasal.h src/nasal_misc.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/nasal_misc.cpp -fno-exceptions -fPIC -o build/nasal_misc.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/nasal_misc.cpp -fno-exceptions -fPIC -o build/nasal_misc.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/nasal_misc.cpp -o build/nasal_misc.o build/repl.o: src/nasal.h src/repl.h src/repl.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/repl.cpp -fno-exceptions -fPIC -o build/repl.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/repl.cpp -fno-exceptions -fPIC -o build/repl.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/repl.cpp -o build/repl.o build/nasal_err.o: src/nasal.h src/repl.h src/nasal_err.h src/nasal_err.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/nasal_err.cpp -fno-exceptions -fPIC -o build/nasal_err.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/nasal_err.cpp -fno-exceptions -fPIC -o build/nasal_err.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/nasal_err.cpp -o build/nasal_err.o build/nasal_gc.o: src/nasal.h src/nasal_gc.h src/nasal_gc.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/nasal_gc.cpp -fno-exceptions -fPIC -o build/nasal_gc.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/nasal_gc.cpp -fno-exceptions -fPIC -o build/nasal_gc.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/nasal_gc.cpp -o build/nasal_gc.o build/nasal_import.o: \ src/nasal.h\ @@ -110,130 +97,78 @@ build/nasal_import.o: \ src/nasal_lexer.h\ src/nasal_parse.h\ src/nasal_import.h src/nasal_import.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/nasal_import.cpp -fno-exceptions -fPIC -o build/nasal_import.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/nasal_import.cpp -fno-exceptions -fPIC -o build/nasal_import.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/nasal_import.cpp -o build/nasal_import.o build/nasal_lexer.o: \ src/nasal.h\ src/repl.h\ src/nasal_err.h\ src/nasal_lexer.h src/nasal_lexer.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/nasal_lexer.cpp -fno-exceptions -fPIC -o build/nasal_lexer.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/nasal_lexer.cpp -fno-exceptions -fPIC -o build/nasal_lexer.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/nasal_lexer.cpp -o build/nasal_lexer.o build/nasal_ast.o: \ src/nasal.h\ src/nasal_err.h\ src/nasal_ast.h src/nasal_ast.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/nasal_ast.cpp -fno-exceptions -fPIC -o build/nasal_ast.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/nasal_ast.cpp -fno-exceptions -fPIC -o build/nasal_ast.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/nasal_ast.cpp -o build/nasal_ast.o build/nasal_builtin.o: \ src/nasal.h\ src/nasal_gc.h\ src/nasal_builtin.h src/nasal_builtin.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/nasal_builtin.cpp -fno-exceptions -fPIC -o build/nasal_builtin.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/nasal_builtin.cpp -fno-exceptions -fPIC -o build/nasal_builtin.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/nasal_builtin.cpp -o build/nasal_builtin.o build/coroutine.o: \ src/nasal.h\ src/nasal_gc.h\ src/coroutine.h src/coroutine.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/coroutine.cpp -fno-exceptions -fPIC -o build/coroutine.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/coroutine.cpp -fno-exceptions -fPIC -o build/coroutine.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/coroutine.cpp -o build/coroutine.o build/bits_lib.o: \ src/nasal.h\ src/nasal_gc.h\ src/bits_lib.h src/bits_lib.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/bits_lib.cpp -fno-exceptions -fPIC -o build/bits_lib.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/bits_lib.cpp -fno-exceptions -fPIC -o build/bits_lib.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/bits_lib.cpp -o build/bits_lib.o build/math_lib.o: \ src/nasal.h\ src/nasal_gc.h\ src/math_lib.h src/math_lib.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/math_lib.cpp -fno-exceptions -fPIC -o build/math_lib.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/math_lib.cpp -fno-exceptions -fPIC -o build/math_lib.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/math_lib.cpp -o build/math_lib.o build/io_lib.o: \ src/nasal.h\ src/nasal_gc.h\ src/io_lib.h src/io_lib.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/io_lib.cpp -fno-exceptions -fPIC -o build/io_lib.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/io_lib.cpp -fno-exceptions -fPIC -o build/io_lib.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/io_lib.cpp -o build/io_lib.o build/dylib_lib.o: \ src/nasal.h\ src/nasal_gc.h\ src/dylib_lib.h src/dylib_lib.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/dylib_lib.cpp -fno-exceptions -fPIC -o build/dylib_lib.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/dylib_lib.cpp -fno-exceptions -fPIC -o build/dylib_lib.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/dylib_lib.cpp -o build/dylib_lib.o build/unix_lib.o: \ src/nasal.h\ src/nasal_gc.h\ src/unix_lib.h src/unix_lib.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/unix_lib.cpp -fno-exceptions -fPIC -o build/unix_lib.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/unix_lib.cpp -fno-exceptions -fPIC -o build/unix_lib.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/unix_lib.cpp -o build/unix_lib.o build/fg_props.o: \ src/nasal.h\ src/nasal_gc.h\ src/fg_props.h src/fg_props.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/fg_props.cpp -fno-exceptions -fPIC -o build/fg_props.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/fg_props.cpp -fno-exceptions -fPIC -o build/fg_props.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/fg_props.cpp -o build/fg_props.o build/nasal_codegen.o: $(NASAL_HEADER) src/nasal_codegen.h src/nasal_codegen.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/nasal_codegen.cpp -fno-exceptions -fPIC -o build/nasal_codegen.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/nasal_codegen.cpp -fno-exceptions -fPIC -o build/nasal_codegen.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/nasal_codegen.cpp -o build/nasal_codegen.o build/nasal_opcode.o: \ src/nasal.h\ src/nasal_builtin.h\ src/nasal_opcode.h src/nasal_opcode.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/nasal_opcode.cpp -fno-exceptions -fPIC -o build/nasal_opcode.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/nasal_opcode.cpp -fno-exceptions -fPIC -o build/nasal_opcode.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/nasal_opcode.cpp -o build/nasal_opcode.o build/nasal_parse.o: \ src/nasal.h\ @@ -241,11 +176,7 @@ build/nasal_parse.o: \ src/nasal_lexer.h\ src/nasal_err.h\ src/nasal_parse.h src/nasal_parse.cpp src/nasal_ast.h | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/nasal_parse.cpp -fno-exceptions -fPIC -o build/nasal_parse.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/nasal_parse.cpp -fno-exceptions -fPIC -o build/nasal_parse.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/nasal_parse.cpp -o build/nasal_parse.o build/optimizer.o: \ src/nasal.h\ @@ -253,11 +184,7 @@ build/optimizer.o: \ src/nasal_ast.h\ src/ast_visitor.h\ src/optimizer.h src/optimizer.cpp src/nasal_ast.h | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/optimizer.cpp -fno-exceptions -fPIC -o build/optimizer.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/optimizer.cpp -fno-exceptions -fPIC -o build/optimizer.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/optimizer.cpp -o build/optimizer.o build/symbol_finder.o: \ src/nasal.h\ @@ -265,22 +192,14 @@ build/symbol_finder.o: \ src/nasal_ast.h\ src/ast_visitor.h\ src/symbol_finder.h src/symbol_finder.cpp src/nasal_ast.h | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/symbol_finder.cpp -fno-exceptions -fPIC -o build/symbol_finder.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/symbol_finder.cpp -fno-exceptions -fPIC -o build/symbol_finder.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/symbol_finder.cpp -o build/symbol_finder.o build/ast_visitor.o: \ src/nasal.h\ src/nasal_err.h\ src/nasal_ast.h\ src/ast_visitor.h src/ast_visitor.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/ast_visitor.cpp -fno-exceptions -fPIC -o build/ast_visitor.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/ast_visitor.cpp -fno-exceptions -fPIC -o build/ast_visitor.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/ast_visitor.cpp -o build/ast_visitor.o build/ast_dumper.o: \ src/nasal.h\ @@ -288,25 +207,13 @@ build/ast_dumper.o: \ src/nasal_ast.h\ src/ast_visitor.h\ src/ast_dumper.h src/ast_dumper.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/ast_dumper.cpp -fno-exceptions -fPIC -o build/ast_dumper.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/ast_dumper.cpp -fno-exceptions -fPIC -o build/ast_dumper.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/ast_dumper.cpp -o build/ast_dumper.o build/nasal_vm.o: $(NASAL_HEADER) src/nasal_vm.h src/nasal_vm.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/nasal_vm.cpp -fno-exceptions -fPIC -o build/nasal_vm.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/nasal_vm.cpp -fno-exceptions -fPIC -o build/nasal_vm.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/nasal_vm.cpp -o build/nasal_vm.o build/nasal_dbg.o: $(NASAL_HEADER) src/nasal_dbg.h src/nasal_dbg.cpp | build - @if [ OS = "Darwin" ]; then\ - $(CXX) -std=$(STD) -c -O3 src/nasal_dbg.cpp -fno-exceptions -fPIC -o build/nasal_dbg.o -I -static -lstdc++ .;\ - else\ - $(CXX) -std=$(STD) -c -O3 src/nasal_dbg.cpp -fno-exceptions -fPIC -o build/nasal_dbg.o -I .;\ - fi + $(CXX) $(CXXFLAGS) src/nasal_dbg.cpp -o build/nasal_dbg.o .PHONY: clean clean: From 3874856f2b3112a450b33f815cc526cec42c4f97 Mon Sep 17 00:00:00 2001 From: Sidi Liang <1467329765@qq.com> Date: Sat, 7 Oct 2023 14:34:12 +0800 Subject: [PATCH 3/4] Specify mmacosx-version-min in makefile So apparently the static linking isn't working --- makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makefile b/makefile index 5dba41c..9cd7d14 100644 --- a/makefile +++ b/makefile @@ -1,7 +1,7 @@ STD=c++17 OS := $(shell uname) ifeq ($(OS), Darwin) - CXXFLAGS=-std=$(STD) -c -O3 -fno-exceptions -fPIC -stdlib=libc++ -static-libstdc++ -l:libc++abi.a -static-libgcc + CXXFLAGS=-std=$(STD) -c -O3 -fno-exceptions -fPIC -mmacosx-version-min=10.15 else CXXFLAGS=-std=$(STD) -c -O3 -fno-exceptions -fPIC endif From 5233cef16e2a95da9f76102a789e1e1262f27f7e Mon Sep 17 00:00:00 2001 From: Sidi Liang <1467329765@qq.com> Date: Sat, 7 Oct 2023 14:41:46 +0800 Subject: [PATCH 4/4] Update makefile --- module/makefile | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/module/makefile b/module/makefile index 1e28906..8006573 100644 --- a/module/makefile +++ b/module/makefile @@ -7,6 +7,11 @@ used_header = ../src/nasal.h ../src/nasal_gc.h used_object = ../build/nasal_misc.o ../build/nasal_gc.o STD=c++17 +ifeq ($(OS), Darwin) + CXXFLAGS-std=$(STD) -c -O3 -fPIC -mmacosx-version-min=10.15 +else + CXXFLAGS=-std=$(STD) -c -O3 -fPIC +endif all: $(dynamic_libs_so) @ echo "[Compiling] done" @@ -15,7 +20,7 @@ winall: $(dynamic_libs_dll) libfib.so: fib.cpp $(used_header) $(used_object) @ echo "[Compiling] libfib.so" - @ $(CXX) -std=$(STD) -c -O3 fib.cpp -fPIC -o fib.o + @ $(CXX) $(CXXFLAGS) fib.cpp -o fib.o @ $(CXX) -shared -o libfib.so fib.o $(used_object) @ rm fib.o libfib.dll: fib.cpp $(used_header) $(used_object) @@ -26,7 +31,7 @@ libfib.dll: fib.cpp $(used_header) $(used_object) libkey.so: keyboard.cpp $(used_header) $(used_object) @ echo "[Compiling] libkey.so" - @ $(CXX) -std=$(STD) -c -O3 keyboard.cpp -fPIC -o keyboard.o + @ $(CXX) $(CXXFLAGS) keyboard.cpp -o keyboard.o @ $(CXX) -shared -o libkey.so keyboard.o $(used_object) @ rm keyboard.o libkey.dll: keyboard.cpp $(used_header) $(used_object) @@ -37,7 +42,7 @@ libkey.dll: keyboard.cpp $(used_header) $(used_object) libnasock.so: nasocket.cpp $(used_header) $(used_object) @ echo "[Compiling] libnasock.so" - @ $(CXX) -std=$(STD) -c -O3 nasocket.cpp -fPIC -o nasocket.o + @ $(CXX) $(CXXFLAGS) nasocket.cpp -o nasocket.o @ $(CXX) -shared -o libnasock.so nasocket.o $(used_object) @ rm nasocket.o libnasock.dll: nasocket.cpp $(used_header) $(used_object) @@ -48,7 +53,7 @@ libnasock.dll: nasocket.cpp $(used_header) $(used_object) libmat.so: matrix.cpp $(used_header) $(used_object) @ echo "[Compiling] libmat.so" - @ $(CXX) -std=$(STD) -c -O3 matrix.cpp -fPIC -o matrix.o + @ $(CXX) $(CXXFLAGS) matrix.cpp -o matrix.o @ $(CXX) -shared -o libmat.so matrix.o $(used_object) @ rm matrix.o libmat.dll: matrix.cpp $(used_header) $(used_object) @@ -65,4 +70,4 @@ clean: @ echo "[clean] libfib.dll" &&if [ -e libfib.dll ]; then rm libfib.dll; fi @ echo "[clean] libkey.dll" &&if [ -e libkey.dll ]; then rm libkey.dll; fi @ echo "[clean] libnasock.dll" &&if [ -e libnasock.dll ]; then rm libnasock.dll; fi - @ echo "[clean] libmat.dll" &&if [ -e libmat.dll ]; then rm libmat.dll; fi \ No newline at end of file + @ echo "[clean] libmat.dll" &&if [ -e libmat.dll ]; then rm libmat.dll; fi