move precompiled bytecode to submodule
This commit is contained in:
parent
274d02b98b
commit
5c65a1a7eb
6
.gitignore
vendored
6
.gitignore
vendored
@ -10,6 +10,7 @@ libcbqn.so
|
||||
/build/obj/
|
||||
/build/singeliLocal
|
||||
/build/replxxLocal
|
||||
/build/bytecodeLocal
|
||||
/src/singeli/gen
|
||||
|
||||
# files generated by CBQN or other utilities
|
||||
@ -31,7 +32,8 @@ CBQNHeapDump
|
||||
compile_commands.json
|
||||
/.cache/
|
||||
|
||||
# things not used anymore, but still may be present in existing clones:
|
||||
# things not used anymore, but still may be present in existing clones
|
||||
/Singeli/
|
||||
/SingeliClone/
|
||||
/obj/
|
||||
/obj/
|
||||
/src/gen/
|
||||
@ -17,9 +17,6 @@
|
||||
|
||||
## Configuration options
|
||||
|
||||
- `some-other-bqn-implementation ./genRuntime path/to/mlochbaum/BQN` can be used to avoid pulling precompiled bytecode with git from `remotes/origin/bytecode`.
|
||||
This creates the dummy file `src/gen/customRuntime`, which will disable automated bytecode retrieval, leading to the bytecode going out-of-sync whenever it needs updating.
|
||||
`make clean-runtime` (which is included in `make clean`) can be used to reset this to the default state.
|
||||
- Different build types:
|
||||
- `make o3` - `-O3`, the default build
|
||||
- `make o3n` - `-O3 -march=native`
|
||||
|
||||
23
genRuntime
23
genRuntime
@ -1,13 +1,14 @@
|
||||
#!/usr/bin/env bqn
|
||||
# to revert to using precompiled bytecode, remove the file src/gen/customRuntime
|
||||
args←•args
|
||||
"Usage: ./getRuntime.bqn path/to/mlochbaum/BQN"!1≤≠args
|
||||
path←⊑•args
|
||||
CC ← {𝕨 •FChars ⟨1,path,𝕩⟩ •Import "cc.bqn"}
|
||||
"src/gen/src" •FChars "#define RT_SRC 0"∾@+10
|
||||
"src/gen/compiles"CC"cc"
|
||||
"src/gen/runtime0"CC"r0"
|
||||
"src/gen/runtime1"CC"r1"
|
||||
"src/gen/formatter"CC"f"
|
||||
"src/gen/explain"CC"eu"
|
||||
"src/gen/customRuntime"•FChars""
|
||||
"Usage: ./getRuntime.bqn path/to/mlochbaum/BQN output/path"!2≤≠args
|
||||
bqnSrc‿outputPath←2↑•args
|
||||
|
||||
rtSrc ← ⊑(<"src")∊2↓•args
|
||||
|
||||
CC ← {𝕨 •FChars (⟨1,bqnSrc⟩∾(rtSrc/⟨"-i"⟩)∾⟨𝕩⟩) •Import "cc.bqn"}
|
||||
(outputPath•file.At "gen/src" )•FChars "#define RT_SRC "∾('0'+rtSrc)∾@+10
|
||||
(outputPath•file.At "gen/compiles" )CC"cc"
|
||||
(outputPath•file.At "gen/runtime0" )CC"r0"
|
||||
(outputPath•file.At "gen/runtime1" )CC"r1"
|
||||
(outputPath•file.At "gen/formatter")CC"f"
|
||||
(outputPath•file.At "gen/explain" )CC"eu"
|
||||
|
||||
@ -1,13 +1,3 @@
|
||||
#!./BQN
|
||||
# a version of genRuntime that also generates source maps, so that errors in the runtime or compiler get error messages
|
||||
args←•args
|
||||
"Usage: ./getRuntime.bqn path/to/mlochbaum/BQN"!1≤≠args
|
||||
path←⊑•args
|
||||
CC ← {𝕨 •FChars ⟨1,path,"-i",𝕩⟩ •Import "cc.bqn"}
|
||||
"src/gen/src" •FChars "#define RT_SRC 1"∾@+10
|
||||
"src/gen/compiles"CC"cc"
|
||||
"src/gen/runtime0"CC"r0"
|
||||
"src/gen/runtime1"CC"r1"
|
||||
"src/gen/formatter"CC"f"
|
||||
"src/gen/explain"CC"eu"
|
||||
"src/gen/customRuntime"•FChars""
|
||||
({𝕩∾<"src"}⍟(2≤≠) •args) •Import "genRuntime"
|
||||
22
makefile
22
makefile
@ -120,6 +120,10 @@ endif
|
||||
ifeq ($(i_singeli),1)
|
||||
SINGELI_DIR = $(shell if [ -d build/singeliLocal ]; then echo build/singeliLocal; else echo build/singeliSubmodule; fi)
|
||||
endif
|
||||
BYTECODE_DIR = $(shell if [ -d build/bytecodeLocal ]; then echo bytecodeLocal; else echo bytecodeSubmodule; fi)
|
||||
ifeq ($(BYTECODE_DIR),bytecodeLocal)
|
||||
custom = 1
|
||||
endif
|
||||
|
||||
i_LD = $(i_CC)
|
||||
|
||||
@ -130,7 +134,7 @@ else
|
||||
NOWARN = -Wno-parentheses
|
||||
endif
|
||||
|
||||
ALL_CC_FLAGS = -std=gnu11 -Wall -Wno-unused-function -fms-extensions -ffp-contract=off -fno-math-errno $(CCFLAGS) $(f) $(i_f) $(NOWARN) -DSINGELI=$(i_singeli) -DFFI=$(i_FFI) $(SHARED_CCFLAGS)
|
||||
ALL_CC_FLAGS = -std=gnu11 -Wall -Wno-unused-function -fms-extensions -ffp-contract=off -fno-math-errno $(CCFLAGS) $(f) $(i_f) $(NOWARN) -DBYTECODE_DIR=$(BYTECODE_DIR) -DSINGELI=$(i_singeli) -DFFI=$(i_FFI) $(SHARED_CCFLAGS)
|
||||
ALL_LD_FLAGS = $(LDFLAGS) $(lf) $(i_lf) $(i_PIE) $(i_LD_LIBS)
|
||||
|
||||
ifneq (${manualJobs},1)
|
||||
@ -150,7 +154,7 @@ ifeq ($(custom),)
|
||||
else
|
||||
@[ -x "$$(command -v sha256sum)" ] && hashInput="sha256sum"; \
|
||||
[ -x "$$(command -v shasum)" ] && hashInput="shasum -a 256"; \
|
||||
printf "%s\0%s\0%s\0%s\0%s\0%s\0%s\0%s" "${i_CC}" "${ALL_CC_FLAGS}" "${ALL_LD_FLAGS}" "${REPLXX}" "${REPLXX_FLAGS}" "${i_CXX}" "${REPLXX_DIR}" "${SINGELI_DIR}" | $$hashInput | grep -oE '[0-9a-z]{64}' | head -c32
|
||||
printf "%s\0%s\0%s\0%s\0%s\0%s\0%s\0%s\0%s" "${i_CC}" "${ALL_CC_FLAGS}" "${ALL_LD_FLAGS}" "${REPLXX}" "${REPLXX_FLAGS}" "${i_CXX}" "${BYTECODE_DIR}" "${REPLXX_DIR}" "${SINGELI_DIR}" | $$hashInput | grep -oE '[0-9a-z]{64}' | head -c32
|
||||
endif
|
||||
else
|
||||
@printf "%s" "$(force_build_dir)"
|
||||
@ -186,6 +190,10 @@ endif
|
||||
ifeq ($(REPLXX_DIR),build/replxxSubmodule)
|
||||
@git submodule update --init build/replxxSubmodule
|
||||
endif
|
||||
ifeq ($(BYTECODE_DIR),bytecodeSubmodule)
|
||||
@echo "Using precompiled bytecode; see readme for how to build your own"
|
||||
@git submodule update --init build/bytecodeSubmodule
|
||||
endif
|
||||
|
||||
@export bd=$$(${MAKE} builddir); \
|
||||
mkdir -p "$$bd"; \
|
||||
@ -233,12 +241,6 @@ ${bd}/%.o: src/builtins/%.c
|
||||
|
||||
.INTERMEDIATE: core base utils jit builtins
|
||||
|
||||
src/gen/customRuntime:
|
||||
@echo "Copying precompiled bytecode from the bytecode branch"
|
||||
git checkout remotes/origin/bytecode src/gen/{compiles,formatter,runtime0,runtime1,src,explain}
|
||||
git reset src/gen/{compiles,formatter,runtime0,runtime1,src,explain}
|
||||
${bd}/load.o: src/gen/customRuntime
|
||||
|
||||
|
||||
|
||||
# singeli
|
||||
@ -313,8 +315,6 @@ clean-singeli:
|
||||
rm -rf src/singeli/gen/
|
||||
rm -rf build/obj/singeli/
|
||||
@${MAKE} clean-specific bd=build/obj/presingeli
|
||||
clean-runtime:
|
||||
rm -f src/gen/customRuntime
|
||||
clean-build:
|
||||
rm -f build/obj/*/*.o
|
||||
rm -f build/obj/*/*.d
|
||||
@ -328,4 +328,4 @@ clean-submodules:
|
||||
git submodule deinit build/singeliSubmodule/ build/replxxSubmodule/
|
||||
|
||||
|
||||
clean: clean-build clean-runtime clean-singeli
|
||||
clean: clean-build clean-singeli
|
||||
|
||||
2
src/gen/.gitignore
vendored
2
src/gen/.gitignore
vendored
@ -1,2 +0,0 @@
|
||||
*
|
||||
!.gitignore
|
||||
18
src/load.c
18
src/load.c
@ -4,6 +4,10 @@
|
||||
#include "ns.h"
|
||||
#include "builtins.h"
|
||||
|
||||
#define PRECOMPILED_FILE0(X) #X
|
||||
#define PRECOMPILED_FILE1(X) PRECOMPILED_FILE0(X)
|
||||
#define PRECOMPILED_FILE(END) PRECOMPILED_FILE1(../build/BYTECODE_DIR/gen/END)
|
||||
|
||||
#define FOR_INIT(F) F(base) F(harr) F(mutF) F(fillarr) F(tyarr) F(hash) F(sfns) F(fns) F(arith) F(md1) F(md2) F(derv) F(comp) F(rtWrap) F(ns) F(nfn) F(sysfn) F(inverse) F(slash) F(search) F(load) F(sysfnPost) F(dervPost) F(ffi) F(mmap) F(typesFinished)
|
||||
#define F(X) void X##_init(void);
|
||||
FOR_INIT(F)
|
||||
@ -114,7 +118,7 @@ Block* load_compObj(B x, B src, B path, Scope* sc) { // consumes x,src
|
||||
return r;
|
||||
}
|
||||
|
||||
#include "gen/src"
|
||||
#include PRECOMPILED_FILE(src)
|
||||
#if RT_SRC
|
||||
Block* load_compImport(char* name, B bc, B objs, B blocks, B bodies, B inds, B src) { // consumes all
|
||||
return compile(bc, objs, blocks, bodies, inds, bi_N, src, m_c8vec_0(name), NULL);
|
||||
@ -380,14 +384,14 @@ void load_init() { // very last init function
|
||||
B runtime_0[] = {bi_floor,bi_ceil,bi_stile,bi_lt,bi_gt,bi_ne,bi_ge,bi_rtack,bi_ltack,bi_join,bi_pair,bi_take,bi_drop,bi_select,bi_const,bi_swap,bi_each,bi_fold,bi_atop,bi_over,bi_before,bi_after,bi_cond,bi_repeat};
|
||||
#else
|
||||
Block* runtime0_b = load_compImport("(self-hosted runtime0)",
|
||||
#include "gen/runtime0"
|
||||
#include PRECOMPILED_FILE(runtime0)
|
||||
);
|
||||
B r0r = evalFunBlock(runtime0_b, 0); ptr_dec(runtime0_b);
|
||||
B* runtime_0 = toHArr(r0r)->a;
|
||||
#endif
|
||||
|
||||
Block* runtime_b = load_compImport("(self-hosted runtime1)",
|
||||
#include "gen/runtime1"
|
||||
#include PRECOMPILED_FILE(runtime1)
|
||||
);
|
||||
|
||||
#ifdef ALL_R0
|
||||
@ -465,7 +469,7 @@ void load_init() { // very last init function
|
||||
|
||||
#ifdef PRECOMP
|
||||
Block* c = compile(
|
||||
#include "gen/interp"
|
||||
#include PRECOMPILED_FILE(interp)
|
||||
, bi_N, bi_N, bi_N, bi_N, NULL
|
||||
);
|
||||
B interp = evalFunBlock(c, 0); ptr_dec(c);
|
||||
@ -483,7 +487,7 @@ void load_init() { // very last init function
|
||||
B prevAsrt = runtime[n_asrt];
|
||||
runtime[n_asrt] = bi_casrt; // horrible but GC is off so it's fiiiiiine
|
||||
Block* comp_b = load_compImport("(compiler)",
|
||||
#include "gen/compiles"
|
||||
#include PRECOMPILED_FILE(compiles)
|
||||
);
|
||||
runtime[n_asrt] = prevAsrt;
|
||||
load_glyphs = m_hVec3(m_c32vec_0(U"+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍⋈↑↓↕«»⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!"), m_c32vec_0(U"˙˜˘¨⌜⁼´˝`"), m_c32vec_0(U"∘○⊸⟜⌾⊘◶⎉⚇⍟⎊"));
|
||||
@ -494,7 +498,7 @@ void load_init() { // very last init function
|
||||
|
||||
#if FORMATTER
|
||||
Block* fmt_b = load_compImport("(formatter)",
|
||||
#include "gen/formatter"
|
||||
#include PRECOMPILED_FILE(formatter)
|
||||
);
|
||||
B fmtM = evalFunBlock(fmt_b, 0); ptr_dec(fmt_b);
|
||||
B fmtR = c1(fmtM, m_caB(4, (B[]){incG(bi_type), incG(bi_decp), incG(bi_glyph), incG(bi_repr)}));
|
||||
@ -532,7 +536,7 @@ B bqn_explain(B str, B path) {
|
||||
if (load_explain.u==0) {
|
||||
B* runtime = harr_ptr(load_rtObj);
|
||||
Block* expl_b = load_compImport("(explain)",
|
||||
#include "gen/explain"
|
||||
#include PRECOMPILED_FILE(explain)
|
||||
);
|
||||
load_explain = evalFunBlock(expl_b, 0); ptr_dec(expl_b);
|
||||
gc_add(load_explain);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user