add target_from_cc=1 option

This commit is contained in:
dzaima 2024-10-01 21:04:48 +03:00
parent 7774d8ba5e
commit d24031a125
4 changed files with 128 additions and 87 deletions

View File

@ -37,31 +37,32 @@ For native builds, targeted extensions are determined by `/proc/cpuinfo` (or `sy
### Build flags ### Build flags
`notui=1` - display build progress in a plain-text format - `notui=1` - display build progress in a plain-text format
`version=...` - specify the version to report in `--version` (default is commit hash) - `version=...` - specify the version to report in `--version` (default is commit hash)
`nogit=1` - error if something attempts to use `git` - `nogit=1` - error if something attempts to use `git`
`CC=...` - choose a different C compiler (default is `clang`, or `cc` if unavailable; CBQN is more tuned for clang, but gcc also works) - `CC=...` - choose a different C compiler (default is `clang`, or `cc` if unavailable; CBQN is more tuned for clang, but gcc also works)
`CXX=...` - choose a different C++ compiler; needed only for REPLXX (default is `c++`) - `CXX=...` - choose a different C++ compiler; needed only for REPLXX (default is `c++`)
`OUTPUT=path/to/somewhere` - change output location; for `emcc-o3` it will be the destination folder for `BQN.js` and `BQN.wasm`, for everything else - the filename - `j=8` - override the default parallel job count (default is the output of `nproc`)
`target_arch=(x86-64|aarch64|generic)` - target architecture. Inferred from `uname` by default. Used for deciding target optimizations. - `OUTPUT=path/to/somewhere` - change output location; for `emcc-o3` it will be the destination folder for `BQN.js` and `BQN.wasm`, for everything else - the filename
`target_os=(linux|bsd|macos|windows)` - target OS. Inferred from `uname` by default. Used for determining default output names and slight configuration changes. - `target_arch=(x86-64|aarch64|generic)` - target architecture; if abscent, inferred from `uname`, or `CC` if `target_from_cc=1`; used for enabling architecture-specific optimizations
`j=8` - override the default parallel job count (default is the output of `nproc`) - `target_os=(linux|bsd|macos|windows)` - target OS; if abscent, inferred from `uname`, or `CC` if `target_from_cc=1`; used for determining default output names and slight configuration changes
`has=...` - assume specified architecture extensions/properties (x86-64-only). Takes a comma-separated list which, beyond what is architecturally guaranteed, infer additional extensions as noted which hold on existing hardware (at least as of the time of writing): - `target_from_cc=1` - infer the target architecture and OS from C macros that `CC` defines via `-dM -E`; additionally infers available extensions, allowing e.g. `make f=-march=x86-64-v3 - target_from_cc=1` to optimize assuming AVX2, which would otherwise need `has=avx2`
- `pclmul` (implies SSE4.2) - `has=...` - assume specified architecture extensions/properties (x86-64-only); takes a comma-separated list which, beyond what is architecturally guaranteed, infer additional extensions as noted which hold on existing hardware (at least as of the time of writing):
- `avx2` (implies `pclmul`, POPCNT, BMI1) - `pclmul` (implies SSE4.2)
- `bmi2` (implies `pclmul`, AVX1) - `avx2` (implies `pclmul`, POPCNT, BMI1)
- `slow-pdep` (specifies Zen 1 & Zen 2's slow `pdep`/`pext`) - `bmi2` (implies `avx2`)
- `slow-pdep` (implies `bmi2`; specifies Zen 1 & Zen 2's slow `pdep`/`pext`)
`REPLXX=0` - disable REPLXX <!-- separator -->
`singeli=0` - disable usage of Singeli - `REPLXX=0` - disable REPLXX
`FFI=0` - disable `•FFI`, thus not depending on libffi - `singeli=0` - disable usage of Singeli
`usz=64` - support arrays with length over 2<sup>32</sup> - `FFI=0` - disable `•FFI`, thus not depending on libffi
- `usz=64` - support arrays with length over 2<sup>32</sup>
`f=...` - add extra C compiler flags for CBQN file compilation <!-- separator -->
`lf=...` - add extra linking flags (`LDFLAGS` is a synonym) - `f=...` - add extra C compiler flags for CBQN file compilation
`CCFLAGS=...` - add flags for all CC/CXX/linking invocations - `lf=...` - add extra linking flags (`LDFLAGS` is a synonym)
`REPLXX_FLAGS=...` - override replxx build flags (default is `-std=c++11 -Os`) - `CCFLAGS=...` - add flags for all CC/CXX/linking invocations
`CXXFLAGS=...` - add additional CXX flags - `REPLXX_FLAGS=...` - override replxx build flags (default is `-std=c++11 -Os`)
- `CXXFLAGS=...` - add additional CXX flags
Alternatively, `build/build` (aka build.bqn) can be invoked manually, though note that it has slightly different argument naming (see `build/build --help`) and doesn't have predefined build types (i.e. `make o3ng` is done as `build/build replxx singeli native g`) Alternatively, `build/build` (aka build.bqn) can be invoked manually, though note that it has slightly different argument naming (see `build/build --help`) and doesn't have predefined build types (i.e. `make o3ng` is done as `build/build replxx singeli native g`)
@ -113,12 +114,11 @@ AArch64 ARMv8-A (within Termux on Android 8):
``` ```
Additionally, CBQN is known to compile as-is on macOS. Windows builds can be made by cross-compilation ([Docker setup](https://github.com/vylsaz/cbqn-win-docker-build)). Additionally, CBQN is known to compile as-is on macOS. Windows builds can be made by cross-compilation ([Docker setup](https://github.com/vylsaz/cbqn-win-docker-build)).
The build will attempt to use `pkg-config` to find libffi, `uname` to determine `target_arch` & `target_os`, and `nproc` for parallel job count, with defaults if unavailable (`-lffi` for linking libffi (+ `-ldl` on non-BSD), `target_arch=generic`, `target_os=linux`, `j=4`; these can of course also be specified manually). The build will attempt to use `pkg-config` to find libffi, `uname` to determine `target_arch` & `target_os` if not using `target_from_cc`, and `nproc` for parallel job count, with defaults if unavailable (`-lffi` for linking libffi (+ `-ldl` on non-BSD), `target_arch=generic`, `target_os=linux`, `j=4`; these can of course also be specified manually).
Furthermore, `git` is used to determine the version to present for `--version` (override with `version=...`), and to update submodules. Git submodules are used for Singeli, replxx, and precompiled bytecode. To avoid automatic usage of `git` here, link local copies to `build/singeliLocal`, `build/replxxLocal`, and `build/bytecodeLocal`.
Submodules are used for Singeli, replxx, and precompiled bytecode. To avoid automatic usage of `git`, link local copies to `build/singeliLocal`, `build/replxxLocal`, and `build/bytecodeLocal`.
Furthermore, `git` is used to determine the version that `--version` should display (override with `version=...`). Use `nogit=1` to disallow automatic `git` usage.
### Precompiled bytecode ### Precompiled bytecode
@ -145,7 +145,9 @@ Note that, after either of those, the compiled bytecode may become desynchronize
You must manually set up a cross-compilation environment. It's possible to pass flags to all CC/CXX/linking invocations via `CCFLAGS=...`, and `LDFLAGS=...` to pass ones to the linking step specifically (more configuration options [above](#build-flags)). You must manually set up a cross-compilation environment. It's possible to pass flags to all CC/CXX/linking invocations via `CCFLAGS=...`, and `LDFLAGS=...` to pass ones to the linking step specifically (more configuration options [above](#build-flags)).
A `target_arch=(x86-64|aarch64|generic)` make argument must be present (`generic` will work always, but a more specific argument will enable significant optimizations), as otherwise it'll choose based on `uname`. Similarly, `target_os=(linux|bsd|macos|windows)` should be present if the target OS differs from the host. A `target_arch=(x86-64|aarch64|generic)` make argument should be added (`generic` will work always, but a more specific argument will enable significant optimizations), as otherwise it'll choose based on `uname`. Similarly, `target_os=(linux|bsd|macos|windows)` should be present if the target OS differs from the host.
Alternatively, the `target_from_cc=1` make argument can be used, replacing the need of `target_arch` and `target_os` (although they can be still set, overriding the values inferred from CC).
Furthermore, all build targets (except `-makeonly` ones) will need a non-cross-compiled version of CBQN at build time to run build.bqn and Singeli. For those, a `make for-build` will need to be ran before the primary build, configured to not cross-compile. (this step only needs a C compiler (default is `CC=cc` here), and doesn't need libffi, nor a C++ compiler). Furthermore, all build targets (except `-makeonly` ones) will need a non-cross-compiled version of CBQN at build time to run build.bqn and Singeli. For those, a `make for-build` will need to be ran before the primary build, configured to not cross-compile. (this step only needs a C compiler (default is `CC=cc` here), and doesn't need libffi, nor a C++ compiler).

@ -1 +1 @@
Subproject commit 5ae2e77d7d4704bf7440eabc9146dedf7c8a902d Subproject commit b43f3999b0c5a40b43ceee258fbe6bb8245d06af

View File

@ -34,6 +34,7 @@ opts ← ⟨
1, "color", @, "Whether to enable colored diagnostics; default based on notui" 1, "color", @, "Whether to enable colored diagnostics; default based on notui"
0, "os", @, "Target OS (linux, bsd, macos)" # used for .so vs .dylib, and changing linker flags for bsd 0, "os", @, "Target OS (linux, bsd, macos)" # used for .so vs .dylib, and changing linker flags for bsd
0, "arch", @, "Target architecture (x86-64, aarch64, generic)" # used for selecting Singeli target 0, "arch", @, "Target architecture (x86-64, aarch64, generic)" # used for selecting Singeli target
1, "target-from-cc",0, "Detect arch, OS, and target-supported extensions from CC"
1, "pie", @, "Position-independent executable; default based on OS & arch"@+10 1, "pie", @, "Position-independent executable; default based on OS & arch"@+10
0, "OUTPUT", "", "Output location; defaults to ./BQN for regular builds" 0, "OUTPUT", "", "Output location; defaults to ./BQN for regular builds"
@ -51,14 +52,14 @@ opts ← ⟨
1, "static-bin", 0, "Statically link the executable" 1, "static-bin", 0, "Statically link the executable"
1, "wasi", 0, "Build with WASI; default output name is BQN.wasm" 1, "wasi", 0, "Build with WASI; default output name is BQN.wasm"
1, "emcc", 0, "Build with emscripten; outputs two files - BQN.wasm and BQN.js" 1, "emcc", 0, "Build with emscripten; outputs two files - BQN.wasm and BQN.js"
1, "clangd", 0, "Don't build, instead generate a compile_commands.json for clangd"@+10 1, "clangd", 0, "Generate a compile_commands.json for clangd"@+10
1, "FFI", @, "Enable FFI through libffi; On by default for linux, BSD, macos" 1, "FFI", @, "Enable FFI through libffi; off by default for Windows"
1, "pkgconfig", 1, "Whether to attempt to use pkg-config to find libffi flags" 1, "pkgconfig", 1, "Whether to attempt to use pkg-config to find libffi flags"
1, "singeli", 0, "Enable compilation with Singeli" 1, "singeli", 0, "Enable Singeli usage"
1, "replxx", 0, "Enable REPLXX"@+10 1, "replxx", 0, "Enable REPLXX"@+10
0, "usz", "32", "Size of array length fields in bits; default 32, can be 32 or 64" 0, "usz", "32", "Size of array length fields in bits; 32 or 64 (default: 32)"
1, "c", 0, "Disable some default flags" 1, "c", 0, "Disable some default flags"
1, "O3", @, "Use '-O3'; On by default unless 'c=1'" 1, "O3", @, "Use '-O3'; On by default unless 'c=1'"
1, "native", @, "Use '-march=native'" 1, "native", @, "Use '-march=native'"
@ -182,10 +183,12 @@ po ← { # parsed options
emcc, wasm, replxx, singeli, staticLib, emcc, wasm, replxx, singeli, staticLib,
usz, ffi, o3, debug, rtverify, heapverify, usz, ffi, o3, debug, rtverify, heapverify,
bytecodeDir, replxxDir, singeliDir, bytecodeDir, replxxDir, singeliDir,
CBQNc, ccColor, singeliFlags, siCFlags, singeliArch, REPLXXc, Linker CBQNc, ccColor, singeliFlags, singeliCFlags, singeliArch, REPLXXc, Linker
compat GetOpt "from-makefile" compat GetOpt "from-makefile"
compatTgt compat/"target_"
custom GetOpt "c" custom GetOpt "c"
clangd GetOpt "clangd" clangd GetOpt "clangd"
DOpt {@,𝕨 GetOpt 𝕩} DOpt {@,𝕨 GetOpt 𝕩}
@ -194,6 +197,7 @@ po ← { # parsed options
warnStored GetOpt "stored-warn" warnStored GetOpt "stored-warn"
loud ¬GetOpt "quiet" loud ¬GetOpt "quiet"
nogit GetOpt "nogit" nogit GetOpt "nogit"
truecc GetOpt "target-from-cc"
dry GetOpt "dry-run" dry GetOpt "dry-run"
CacheList { CacheList {
@ -234,12 +238,10 @@ po ← { # parsed options
cc {emcc? "emcc"; "clang"} DOpt "CC" cc {emcc? "emcc"; "clang"} DOpt "CC"
ccClang { ccClang {
clangd? 1; clangd? 1;
TryVersion {𝕩 SH cc"--version"} TryVersion {𝕩 SH cc"--version"}
vs TryVersion {@GetOpt"CC"? ¯1; @} vs TryVersion {@GetOpt"CC"? ¯1; @}
{𝕊: cc"cc" Log "Note: default CC 'clang' wasn't found; building with 'cc'; add a `CC=cc` argument to hide" vsTryVersion@} vs¯1 {𝕊: Logloud "Note: default CC '"cc"' wasn't found; using 'cc'; add 'CC=cc' to hide" cc"cc" vsTryVersion@} vs¯1
´"clang"vs ´"clang"vs
} }
@ -250,31 +252,83 @@ po ← { # parsed options
ubsan GetOpt "ubsan" ubsan GetOpt "ubsan"
o3 (¬custom) DOpt "O3" o3 (¬custom) DOpt "O3"
uname ""{𝕊: Lowercase "" TrySH "uname""-sm"} ´ (@GetOpt)¨ "os""arch" allFlags GetOpt "CCFLAGS"
InUname {𝕊: ´ 𝕩uname} minCCFlags allFlags GetOpt "f"
os Lowercase {InUname"linux"? "linux"; InUname"darwin"? "macos"; InUname"bsd"? "bsd"; "linux"} DOpt "os" CDefines {𝕊: cDefines (@+10) Split SH cc minCCFlags "-dM", "-E", "-"}
linuxbsdmacoswindows os¨ {𝕊: "Error: Unsupported OS; options:"1", "¨𝕩}_assert_(os<) "linux""bsd""macos""windows"
arch {'-'¨(('_'=𝕩)/)𝕩} Lowercase {InUname"x86_64"? "x86-64"; ´InUname¨"aarch64""arm64"? "aarch64"; "generic"} DOpt "arch" Uname {𝕊: uname Lowercase "" TrySH "uname""-sm"}
{𝕊: arch "generic"} wasm InUname {𝕊: ´ 𝕩Uname@}
{𝕊: "Error: Unsupported arch; options:"1", "¨𝕩}_assert_(arch<) "x86-64""aarch64""generic"
ffi ((¬windows)¬wasm) DOpt "FFI"
singeli GetOpt "singeli" singeli GetOpt "singeli"
replxx GetOpt "REPLXX" replxx GetOpt "REPLXX"
SubmoduleDir "build"•file.At(@) {𝕨0?@; •file.Exists rAtRoot "build"•file.At 𝕩"Local"? r; 𝕩"Submodule"}
LogDir {𝕩@? 𝕨": not used"; 𝕨" directory: "AtRoot 𝕩}_verboseLog
bytecodeDir 1 SubmoduleDir "bytecode" "Bytecode" LogDir bytecodeDir
replxxDir replxx SubmoduleDir "replxx" "REPLXX" LogDir replxxDir
singeliDir singeli SubmoduleDir "singeli" "Singeli" LogDir singeliDir
arch {'-'¨(('_'=𝕩)/)𝕩} Lowercase {trueccwasm? "generic"; InUname"x86_64"? "x86-64"; ´InUname¨"aarch64""arm64"? "aarch64"; "generic"} DOpt "arch"
{𝕊: "Error: Unsupported arch; options:"1", "¨𝕩}_assert_(arch<) "x86-64""aarch64""riscv64""generic"
arch {"riscv64": "RV64"; "generic": "NONE"; Uppercase {'_'¨(('-'=𝕩)/)𝕩} 𝕩} # translate to Singeli
has ','Split¨Lowercase GetOpt "has" has ','Split¨Lowercase GetOpt "has"
has has ("slow-pdep"<has)/"bmi2" has has ("slow-pdep"< has) / "bmi2"
{𝕊: "Error: Unsupported 'has' options; options:"1", "¨𝕩}_assert_(´has) "ssse3""sse4.1""sse4.2""avx2""bmi2""pclmul""slow-pdep" {𝕊: "Error: Invalid 'has' value; options:"1", "¨𝕩}_assert_(´has) "ssse3""sse4.1""sse4.2""avx2""bmi2""pclmul""slow-pdep"
{𝕊: "Error: Cannot have 'has' options on architecture '"arch"'; remove 'has=...' or add an argument of "compat"arch=x86-64""target_arch=x86-64"}_assert_¬ (arch"x86-64") 0has "Error: Cannot use 'has=...' if Singeli isn't enabled"_assert_ singeli has
singeliArch ({"x86-64":"X86_64"; "aarch64":"AARCH64"; "none"} arch) < Uppercase "ssse3""sse4.1""sse4.2""avx2""bmi2""pclmul"/ has {𝕊: has (´(("#define __tune_znver""__ 1")¨ "12")CDefines@) / "slow-pdep"} truecc
{𝕊: "Target: "os" "arch 1 ", "¨ hasnative/"native"} _verboseLog@ singeliArch @
singeliCFlags
pie {(¬sharedLibstaticLib)linuxarch"x86-64"? 0; 1} DOpt "pie" {
{𝕊: pie 0} wasm ¬singeli? @;
UpdateSubmodule singeliDir
SingeliUtil {𝕨 •Import AtRoot singeliDir •file.At 𝕩}
singeliArch {
truecc @GetOpt"arch"?
archutil SingeliUtil "archutil.bqn"
foundArch archutil.ParseCDefines CDefines@
arch foundArch
foundArch
;
Uppercase arch
}
{
arch"X86_64"?
singeliArch Uppercase "ssse3""sse4.1""sse4.2""avx2""bmi2""pclmul"/ has
ArchInfo {({native? ; singeliArch}, 𝕩 SingeliUtil "arch.bqn").GetCFlags @}
singeliCFlags ArchInfo 1
{𝕊: Log "Note: inferred the following C flags:"' '¨𝕩}(loud ×) singeliCFlags (¬/) ArchInfo 0
;@
}
}
{𝕊: "Error: Cannot have 'has' options on architecture '"arch"'; remove 'has=...' or use '"compatTgt"arch=x86-64'"}_assert_¬ (arch"X86_64") 0has
os GetOpt "os"
{
os@?
os Lowercase ;
¬truecc?
os {InUname"linux"? "linux"; InUname"darwin"? "macos"; InUname"bsd"? "bsd"; "linux"};
osKeysosVals <˘>
"_WIN32", "windows"
"__FreeBSD__", "bsd"
"__OpenBSD__", "bsd"
"__APPLE__", "macos"
"__MACH__", "macos"
"__linux", "linux"
osOpts osVals /˜ osKeys{𝕩˜𝕩' '}¨ 8¨ ("#define "8)¨/ CDefines@
{𝕊: "Error: Couldn't detect OS from C-defined macros; add explicit '"compatTgt"os=...'"} _assert_ 1=osOpts
os osOpts
}
linuxbsdmacoswindows os¨ {𝕊: "Error: Unsupported OS; options:"1", "¨𝕩}_assert_(os<) "linux""bsd""macos""windows"
{𝕊: "Target: ", os, " ", Lowercase arch, 1 ", "¨ hasnative/"native"} _verboseLog@
output GetOpt "OUTPUT" output GetOpt "OUTPUT"
output •wdpath•file.At {𝕊: output •wdpath•file.At {𝕊:
@ -285,6 +339,12 @@ po ← { # parsed options
windows? "BQN.exe"; windows? "BQN.exe";
"BQN" "BQN"
}("") output }("") output
{𝕊: "Output location: "𝕩}_verboseLog output
pie {(¬sharedLibstaticLib)linuxarch"X86_64"? 0; 1} DOpt "pie"
{𝕊: pie 0} wasm
ffi ((¬windows)¬wasm) DOpt "FFI"
exportSymbols ffilib exportSymbols ffilib
@ -298,21 +358,6 @@ po ← { # parsed options
} }
} }
SubmoduleDir "build"•file.At(@) {𝕨0?@; •file.Exists rAtRoot "build"•file.At 𝕩"Local"? r; 𝕩"Submodule"}
LogDir {𝕩@? 𝕨": not used"; 𝕨" directory: "AtRoot 𝕩}_verboseLog
bytecodeDir 1 SubmoduleDir "bytecode" "Bytecode" LogDir bytecodeDir
replxxDir replxx SubmoduleDir "replxx" "REPLXX" LogDir replxxDir
singeliDir singeli SubmoduleDir "singeli" "Singeli" LogDir singeliDir
{𝕊: "Output location: "𝕩}_verboseLog output
siCFlags {
¬singeli? @;
UpdateSubmodule singeliDir
({native? ; singeliArch}, 1 •Import AtRoot singeliDir •file.At "arch.bqn").GetCFlags@
}
allFlags GetOpt "CCFLAGS"
allFlags ubsan/"-fsanitize=undefined", "-fno-sanitize=float-cast-overflow", "-fno-sanitize=vla-bound"
ccColor ((¬clangd) tui DOpt "color") / ccClang"-fdiagnostics-color=always""-fcolor-diagnostics" ccColor ((¬clangd) tui DOpt "color") / ccClang"-fdiagnostics-color=always""-fcolor-diagnostics"
cbqnc { cbqnc {
@ -334,12 +379,11 @@ po ← { # parsed options
args 0GetLibs@ args 0GetLibs@
args minCCFlags
args GetOpt "f" args ubsan / "-fsanitize=undefined", "-fno-sanitize=float-cast-overflow", "-fno-sanitize=vla-bound"
args allFlags args (singeli arch "X86_64") / "-DSINGELI_X86_64" {singeli? "-mavx2" singeliCFlags; 0} / "-DSINGELI_AVX2"
args (singeli arch "x86-64") / "-DSINGELI_X86_64" {singeli? "-mssse3""-mavx2" siCFlags; 0} / "-DSINGELI_SSSE3""-DSINGELI_AVX2" args (singeli arch"AARCH64") / "-DSINGELI_NEON"
args (singeli arch"aarch64") / "-DSINGELI_NEON" args (singeli arch<"X86_64""AARCH64") / "-DSINGELI_SIMD"
args (singeli arch<"x86-64""aarch64") / "-DSINGELI_SIMD"
args ( wasm) / "-DWASM" args ( wasm) / "-DWASM"
args ( wasi) / "-DWASI", "-DNO_MMAP", "-DUSE_SETJMP=0", "-D_WASI_EMULATED_MMAN", "--target=wasm32-wasi" args ( wasi) / "-DWASI", "-DNO_MMAP", "-DUSE_SETJMP=0", "-D_WASI_EMULATED_MMAN", "--target=wasm32-wasi"
args ( emcc) / "-DEMCC", "-O3" args ( emcc) / "-DEMCC", "-O3"
@ -358,13 +402,8 @@ po ← { # parsed options
args (replxx windows) / "-DUSE_REPLXX_IO" args (replxx windows) / "-DUSE_REPLXX_IO"
args ( @versionName) / "-DHAS_VERSION" args ( @versionName) / "-DHAS_VERSION"
args ( usz64) / "-DUSZ_64" args ( usz64) / "-DUSZ_64"
args (´"slow-pdep"¨ has) / "-DSLOW_PDEP" args ("slow-pdep"< has) / "-DSLOW_PDEP"
args { args {native? "-march=native"; singeliCFlags}
native? "-march=native";
: ;
"Error: Cannot use has=... if Singeli isn't enabled"_assert_ singeli
siCFlags
} has
args args (¬/) GetOpt "rm_f" args args (¬/) GetOpt "rm_f"
{"CBQN C compiler: "•Repr 𝕩} _verboseLog args {"CBQN C compiler: "•Repr 𝕩} _verboseLog args
args args
@ -694,7 +733,7 @@ cachedBin‿linkerCache ← {
"src/utils/", "ryu.c", "utf.c", "hash.c", "file.c", "mut.c", "each.c", "bits.c" "src/utils/", "ryu.c", "utf.c", "hash.c", "file.c", "mut.c", "each.c", "bits.c"
cbqnSrc cbqnSrc clangd.Files "src" cbqnSrc cbqnSrc clangd.Files "src"
singeliMap 1¨ ({´ (po.arch) 𝕩}¨ ¨)/ singeliMap 1¨ ({ ({"X86_64":'x'; "AARCH64":'a'; "RV64":'g'; "NONE":'g'} po.arch) 𝕩}¨ ¨)/
"xa.""src/builtins/arithm.c""monarith", "xa.""src/builtins/compare.c""equal", "xa.""src/builtins/arithm.c""monarith", "xa.""src/builtins/compare.c""equal",
"xa.""src/builtins/arithd.c""dyarith", "xa.""src/builtins/cmp.c""cmp", "xa.""src/builtins/arithd.c""dyarith", "xa.""src/builtins/cmp.c""cmp",
"xa.""src/builtins/squeeze.c""squeeze", "xa.""src/utils/mut.c""copy", "xa.""src/builtins/squeeze.c""squeeze", "xa.""src/utils/mut.c""copy",
@ -722,7 +761,7 @@ cachedBin‿linkerCache ← {
singeliObjs @ singeliObjs @
singeliCache { singeliCache {
¬po.singeli? @; ¬po.singeli? @;
singeliCache GetCache "singeli", "Singeli generated code location", po.native, po.arch, po.usz, po.has, po.singeliFlags, po.singeliDir singeliCache GetCache "singeli", "Singeli generated code location", po.native, po.singeliArch, po.arch, po.usz, po.has, po.singeliFlags, po.singeliDir
# genArithTables # genArithTables
ga "src/singeli/src/genArithTables.bqn" ga "src/singeli/src/genArithTables.bqn"
@ -738,11 +777,11 @@ cachedBin‿linkerCache ← {
singeliArgs singeliArgs
po.singeliFlags po.singeliFlags
"-l", "gen="AtRoot singeliCache.folder, "-c", "usz=u"•Repr po.usz "-l", "gen="AtRoot singeliCache.folder, "-c", "usz=u"•Repr po.usz
("slow-pdep"<po.has)/"-c", "SLOW_PDEP=1" ("slow-pdep"< po.has) / "-c", "SLOW_PDEP=1"
{po.native? ; "-a" 1 ','¨ po.singeliArch} {po.native? ; "-a" 1 ','¨ po.singeliArch}
{𝕊: "Singeli args: "•Repr singeliArgs} _verboseLog @ {𝕊: "Singeli args: "•Repr singeliArgs} _verboseLog @
{𝕊: "Singeli-required C args: "•Repr po.siCFlags; @} _verboseLog @ {𝕊: "Singeli-determined C arch: "•Repr po.singeliCFlags; @} _verboseLog @
singeliObjs {MakeSingeliInv singeliArgs, {𝕊:UpdateSubmodule po.singeliDir}, singeliCache, 𝕩, "src/singeli/src/"•file.At 𝕩".singeli", (𝕩"dyarith")/gaRule}¨ 1¨singeliMap singeliObjs {MakeSingeliInv singeliArgs, {𝕊:UpdateSubmodule po.singeliDir}, singeliCache, 𝕩, "src/singeli/src/"•file.At 𝕩".singeli", (𝕩"dyarith")/gaRule}¨ 1¨singeliMap
singeliCache singeliCache

View File

@ -86,7 +86,7 @@ endif
@build/build from-makefile CC="$(CC)" CXX="$(CXX)" PIE="$(ENABLE_PIE)" OUTPUT="$(OUTPUT)" j="$(j)" \ @build/build from-makefile CC="$(CC)" CXX="$(CXX)" PIE="$(ENABLE_PIE)" OUTPUT="$(OUTPUT)" j="$(j)" \
verbose="$(verbose)" notui="$(notui)" v="$(version)" stored-warn="$(stored-warn)" \ verbose="$(verbose)" notui="$(notui)" v="$(version)" stored-warn="$(stored-warn)" \
f="$(f)" lf="$(lf)" CCFLAGS="$(CCFLAGS)" LDFLAGS="$(LDFLAGS)" REPLXX_FLAGS="$(REPLXX_FLAGS)" CXXFLAGS="$(CXXFLAGS)" \ f="$(f)" lf="$(lf)" CCFLAGS="$(CCFLAGS)" LDFLAGS="$(LDFLAGS)" REPLXX_FLAGS="$(REPLXX_FLAGS)" CXXFLAGS="$(CXXFLAGS)" \
LD_LIBS="$(LD_LIBS)" NO_LDL="$(NO_LDL)" no_fPIC="$(no_fPIC)" \ LD_LIBS="$(LD_LIBS)" NO_LDL="$(NO_LDL)" no_fPIC="$(no_fPIC)" target-from-cc="$(target_from_cc)" \
c="$(build_c)" debug="$(debug)" $(i_build_opts) $(build_opts) \ c="$(build_c)" debug="$(debug)" $(i_build_opts) $(build_opts) \
os="$(target_os)" arch="$(target_arch)" has="$(has)" usz="$(usz)" nogit="$(nogit)" \ os="$(target_os)" arch="$(target_arch)" has="$(has)" usz="$(usz)" nogit="$(nogit)" \
shared="$(i_SHARED)" singeli="$(i_singeli_1)" replxx="$(i_REPLXX_1)" FFI="$(FFI)" shared="$(i_SHARED)" singeli="$(i_singeli_1)" replxx="$(i_REPLXX_1)" FFI="$(FFI)"