Microcontroller Port of CBQN
Go to file
2022-09-27 17:53:06 +03:00
docs update build & packaging information 2022-09-27 17:53:06 +03:00
include mark direct access result const 2022-07-01 21:30:47 +03:00
SingeliClone@4a4cee084d pull latest singeli 2022-05-07 15:28:30 +03:00
src update build & packaging information 2022-09-27 17:53:06 +03:00
test better bitarr fill 2022-09-24 19:31:46 +03:00
.gitignore shared library build 2022-06-03 22:04:48 +03:00
.gitmodules singeli 2021-10-22 00:17:44 +03:00
cc.bqn compact strings 2022-08-18 09:50:45 +03:00
genRuntime support calling explain for an expression 2022-06-18 22:09:36 +03:00
genRuntimeSrc add explain source compiling to genRuntimeSrc 2022-07-10 04:25:27 +03:00
LICENSE license 2021-04-20 14:26:56 +03:00
makefile Move Group to its own file 2022-09-16 22:01:56 -04:00
README.md update build & packaging information 2022-09-27 17:53:06 +03:00
SingeliMake.bqn attempt at fixing some makefile problems 2022-09-01 17:55:36 +03:00

A BQN implementation in C

CBQN-specific documentationsource code overview

Running

  1. make
    • Third-party packages and other ways to run BQN are listed here
    • make CC=gcc if clang isn't installed
    • make PIE="" on ARM CPUs (incl. Android & M1)
    • make FFI=0 if your system doesn't have libffi
    • Use gmake on BSD
    • make clean if anything breaks and you want a clean build slate
    • Run sudo make install afterwards to install into /usr/local/bin/bqn (a PREFIX=/some/path argument will install to /some/path/bin/bqn); sudo make uninstall to uninstall
    • If you want to use custom build types but your system doesn't have shasum/sha256sum, add force_build_dir=some_identifier. That identifier will be used to decide on the directory for incremental build object files.
  2. ./BQN somefile.bqn to execute a file, or rlwrap ./BQN for a REPL

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
    • make o3g - -g -O3
    • make debug - unoptimized debug build
    • make 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 correctly
    • make o3n-singeli - a Singeli build, currently only for x86-64 CPUs supporting AVX2 & BMI2
    • make shared-o3 - produce the shared library libcbqn.so
    • make c - a build with no flags, for manual customizing
    • make shared-c - like make c but for a shared library
    • make single-(o3|o3g|debug|c) - compile everything as a single translation unit. Will compile slower & won't have incremental compilation.
  • For any of the above (especially make c), you can add extra flags with f=... (and linker flags with lf=...), e.g.
    make f='-O3 -DSOME_MACRO=whatever -some_other_cc_flag' c
    Macros that you may want to define are listed in src/h.h.
  • A specific build type can be cleaned by adding clean=1 to the make argument list. Similarly, adding builddir=1 will give you the build directory.
  • Tests can be run with ./BQN path/to/mlochbaum/BQN/test/this.bqn (add -noerr if using make heapverify).
  • Some implementation docs

License

Any file without an explicit copyright message is copyright (c) 2021 dzaima, GNU GPLv3 - see LICENSE