A BQN implementation in C
CBQN-specific documentation • source code overview
make
make CC=gcc
if you don't have clang installedmake PIE=""
on ARM CPUs (incl. Android & M1)make FFI=0
if your system doesn't have libffi (i.e. an error about missing<ffi.h>
appears)gmake
on BSDs- For Windows, CBQN works in WSL, and WinBQN provides Cygwin/Msys2 builds.
make clean
if anything goes bad and you want a clean slatemake [...]; sudo make install
to install into/usr/local/bin/bqn
;sudo make uninstall
to uninstall- If you want to use custom build types but your system doesn't have
shasum
/sha256sum
, addforce_build_dir=some_identifier
. That identifier will be used to decide on the directory for incremental build object files.
./BQN somefile.bqn
to execute a file, orrlwrap ./BQN
for a REPL
some-other-bqn-implementation ./genRuntime path/to/mlochbaum/BQN
can be used to avoid pulling precompiled bytecode with git fromremotes/origin/bytecode
.
This creates the dummy filesrc/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 inmake clean
) can be used to reset this to the default state.- Different build types:
make o3
--O3
, the default buildmake o3n
--O3 -march=native
make o3g
--g -O3
make debug
- unoptimized debug buildmake debug1
- debug build without parallel compilation. Useful if everything errors, and you don't want error messages of multiple threads to be written at the same time.make heapverify
- verify that refcounting is done correctlymake o3n-singeli
- a Singeli build, currently only for x86-64 CPUs supporting AVX2make shared-o3
- produce the shared librarylibcbqn.so
make c
- a build with no flags, for manual customizingmake shared-c
- likemake c
but for a shared librarymake single-(o3|o3g|debug|c)
- compile everything as a single translation unit. Slower for optimized builds, but may allow some more optimizations
- For any of the above (especially
make c
), you can add extra flags withf=...
(and linker flags withlf=...
), e.g.
make f='-O3 -DSOME_MACRO=whatever -some_other_cc_flag' c
Macros that you may want to define are listed insrc/h.h
. - A specific build type can be cleaned by adding
clean=1
to the make argument list. Similarly, addingbuilddir=1
will give you the build directory. - Tests can be run with
./BQN path/to/mlochbaum/BQN/test/this.bqn
(add-noerr
if usingmake heapverify
). - Some implementation docs
Any file without an explicit copyright message is copyright (c) 2021 dzaima, GNU GPLv3 - see LICENSE