From: Luke Lau Date: Sat, 9 Nov 2019 18:15:38 +0000 (+0000) Subject: Add rules for statically linking the standard library in X-Git-Url: http://git.lukelau.me/?p=kaleidoscope-hs.git;a=commitdiff_plain;h=894c2f2dcce94febb19d49af15c49b676ae78a98 Add rules for statically linking the standard library in If statically linking in the Makefile, we need to make sure that our putchard symbol/function doesn't get stripped out, as GHC passes the -dead_strip flag to the linker to remove any unused functions. Since nothing directly calls putchard in our program, it will get stripped out unless we specify that we want to export it. We can use an export list to indicate that we still want the symbol. (On Linux, you might need to remove the underscore from _putchard. ) --- diff --git a/.gitignore b/.gitignore index 699f4dd..38b1613 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ stdlib.dylib +stdlib.o +Main diff --git a/Makefile b/Makefile index 4e533dc..1a37353 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,14 @@ stdlib.dylib: stdlib.c clang -shared $< -o $@ + +# for statically linking the stdlib: +# make sure to change in Main.hs +# loadLibraryPermanently (Just "stdlib.dylib") +# to +# loadLibraryPermanently Nothing +stdlib.o: stdlib.c + clang -c $< -o $@ + +Main: Main.hs stdlib.o + ghc $^ -o $@ -optl -Wl,-exported_symbols_list,stdlib.syms \ + -no-keep-hi-files -no-keep-o-files diff --git a/stdlib.syms b/stdlib.syms new file mode 100644 index 0000000..94f22f1 --- /dev/null +++ b/stdlib.syms @@ -0,0 +1 @@ +_putchard