diff --git a/build/src/build.bqn b/build/src/build.bqn index 0f3c41f6..f992780e 100755 --- a/build/src/build.bqn +++ b/build/src/build.bqn @@ -165,8 +165,12 @@ po ← { # parsed options tui ⇐ ¬GetOpt "notui" {𝕊: _verboseLog ↩ {Log𝕨𝔽𝕩⋄𝕩}}⍟⊢ verbose⇐GetOpt "verbose" - Max1 ← {𝕩 {𝕊: a‿b←2↑𝕩/𝕨 ⋄ ∾⟨"Error: '",a,"' and '",b,"' cannot both be enabled"⟩}_assert_(1≥+´) GetOpt¨ 𝕩} - Max1 "REPLXX"‿"shared"‿"wasi"‿"emcc" + ErrBoth ← {a‿b: ∾⟨"Error: '",a,"' and '",b,"' cannot both be enabled"⟩} + Max1 ← {𝕩 ErrBoth∘(2↑/˜) _assert_(1≥+´) GetOpt¨ 𝕩} + NotWith ← {¬GetOpt 𝕨?@; ErrBoth∘(𝕨⋈0⊑/⟜𝕩) _assert_(¬∨´) GetOpt¨ 𝕩} + + Max1 "REPLXX"‿"wasi"‿"emcc" + "shared" NotWith "REPLXX"‿"emcc" shared ← GetOpt "shared" @@ -176,7 +180,7 @@ po ← { # parsed options usz ⇐ •ParseFloat GetOpt "usz" {𝕊: "Error: usz can only be 32 or 64"}_assert_⊢ ⊑usz∊32‿64 versionName ← {compat ∧ shared? @; "0"⊸≡◶⊢‿@ GetOpt "v"} - {𝕊: "Error: Specifying version for shared build is useless"}_assert_¬ shared ∧ versionName≢@ + {𝕊: "Error: Specifying version for shared build is useless"}_assert_¬ shared ∧ versionName≢"" wasm ⇐ wasi∨emcc cc ← {emcc? "emcc"; "clang"} DOpt "CC" @@ -308,7 +312,7 @@ po ← { # parsed options singeliFlags ← GetOpt "sf" Linker ⇐ { 𝕊: - rdynamic ← exportSymbols ∧ ¬windows + rdynamic ← (¬wasi) ∧ exportSymbols ∧ ¬windows args ← ⟨{replxx? cxx; cc} DOpt "LD"⟩ args∾↩ defLibs / ⟨"-lm"⟩ args∾↩ ⟨⟩ DOpt "LD_LIBS" @@ -317,12 +321,13 @@ po ← { # parsed options args∾↩ GetOpt "lf" args∾↩ GetOpt "CCFLAGS" args∾↩ GetOpt "LDFLAGS" - args∾↩ ( wasi) / ⟨"-lwasi-emulated-mman", "--target=wasm32-wasi", "-Wl,-z,stack-size=8388608", "-Wl,--initial-memory=67108864"⟩ args∾↩ ( emcc) / ⟨"-s", "EXPORTED_FUNCTIONS=_main,_cbqn_runLine,_cbqn_evalSrc", "-s", "EXPORTED_RUNTIME_METHODS=ccall,cwrap", "-s", "ALLOW_MEMORY_GROWTH=1"⟩ + args∾↩ ( wasi) / ⟨"-lwasi-emulated-mman", "--target=wasm32-wasi", "-Wl,-z,stack-size=8388608", "-Wl,--initial-memory=67108864"⟩ + args∾↩ (shared ∧ wasi) / ⟨"-mexec-model=reactor", "-Wl,--export-dynamic", "-Wl,--export=malloc", "-Wl,--export=free"⟩ + args∾↩ (shared ∧¬wasi) / ⟨"-shared"⟩ args∾↩ ( rdynamic) / ⟨"-rdynamic"⟩ - args∾↩ ( ¬pie) / ⟨"-no-pie"⟩ + args∾↩ ((¬wasm)∧ ¬pie) / ⟨"-no-pie"⟩ args∾↩ (pie ∧ ¬shared) / ⟨"-fPIE", "-pie"⟩ - args∾↩ ( shared) / ⟨"-shared"⟩ args∾↩ ( windows) / ⟨"-lpthread"⟩ args ↩ args (¬∘∊/⊣) GetOpt "rm_lf" {"linker: "∾•Repr 𝕩} _verboseLog args diff --git a/makefile b/makefile index e4516117..9ac76859 100644 --- a/makefile +++ b/makefile @@ -20,11 +20,11 @@ rtverify: heapverify: @"${MAKE}" i_singeli=0 i_t=heapverify i_f="-DDEBUG -g -DHEAP_VERIFY" run_incremental_0 wasi-o3: - @"${MAKE}" i_singeli=0 i_t=wasi_o3 i_OUTPUT_DEF=BQN.wasm i_f="-DWASM -DWASI -DNO_MMAP -O3 -DCATCH_ERRORS=0 -D_WASI_EMULATED_MMAN --target=wasm32-wasi" i_lf="-lwasi-emulated-mman --target=wasm32-wasi -Wl,-z,stack-size=8388608 -Wl,--initial-memory=67108864" i_LIBS_LD= i_PIE= i_FFI=0 run_incremental_0 + @"${MAKE}" to-bqn-build REPLXX=0 i_build_opts="wasi" wasi-reactor-o3: - @"${MAKE}" i_singeli=0 i_t=wasi_o3 i_SHARED=1 i_OUTPUT_DEF=BQN.wasm i_f="-DWASM -DWASI -DNO_MMAP -O3 -DCATCH_ERRORS=0 -D_WASI_EMULATED_MMAN --target=wasm32-wasi" i_lf="-lwasi-emulated-mman --target=wasm32-wasi -Wl,-z,stack-size=8388608 -Wl,--initial-memory=67108864 -mexec-model=reactor -Wl,--export-dynamic -Wl,--export=malloc -Wl,--export=free" i_LIBS_LD= i_PIE= i_FFI=0 run_incremental_0 + @"${MAKE}" to-bqn-build REPLXX=0 i_build_opts="wasi" i_SHARED=1 emcc-o3: - @"${MAKE}" i_singeli=0 i_t=emcc_o3 i_OUTPUT_DEF=. i_emcc=1 CC=emcc i_f='-DWASM -DEMCC -O3' i_lf='-s EXPORTED_FUNCTIONS=_main,_cbqn_runLine,_cbqn_evalSrc -s EXPORTED_RUNTIME_METHODS=ccall,cwrap -s ALLOW_MEMORY_GROWTH=1' i_FFI=0 run_incremental_0 + @"${MAKE}" to-bqn-build REPLXX=0 i_build_opts="emcc" for-build: @"${MAKE}" i_singeli=0 i_CC=cc REPLXX=0 i_t=forbuild i_f="-O2 -DFOR_BUILD" i_FFI=0 i_OUTPUT_DEF=build/obj2/for_build2 run_incremental_0 for-bootstrap: