use Singeli's arch.bqn to convert has= to cc flags

This commit is contained in:
dzaima 2023-12-04 16:14:15 +02:00
parent 4499d93f53
commit e30973e48b
2 changed files with 18 additions and 7 deletions

View File

@ -37,15 +37,20 @@ 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
`version=...` - specify the version to report in `--version` (default is commit hash)
`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 `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_arch=(x86-64|aarch64|generic)` - target architecture. Inferred from `uname` by default. Used for deciding target optimizations. `target_arch=(x86-64|aarch64|generic)` - target architecture. Inferred from `uname` by default. Used for deciding target optimizations.
`target_os=(linux|bsd|macos|windows)` - target OS. Inferred from `uname` by default. Used for determining default output names and slight configuration changes. `target_os=(linux|bsd|macos|windows)` - target OS. Inferred from `uname` by default. Used for determining default output names and slight configuration changes.
`j=8` - override the default parallel job count (default is the output of `nproc`) `j=8` - override the default parallel job count (default is the output of `nproc`)
`notui=1` - display build progress in a plain-text format `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):
`version=...` - specify the version to report in `--version` (default is commit hash) - `pclmul` (implies SSE4.2)
`nogit=1` - error if something attempts to use `git` - `avx2` (implies `pclmul`, POPCNT, BMI1)
- `bmi2` (implies `pclmul`, AVX1)
- `slow-pdep` (specifies Zen 1 & Zen 2's slow `pdep`/`pext`)
`REPLXX=0` - disable REPLXX `REPLXX=0` - disable REPLXX
`singeli=0` - disable usage of Singeli `singeli=0` - disable usage of Singeli

View File

@ -162,7 +162,7 @@ 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, REPLXXc, Linker CBQNc, ccColor, singeliFlags, singeliArch, REPLXXc, Linker
compat GetOpt "from-makefile" compat GetOpt "from-makefile"
@ -237,6 +237,7 @@ po ← { # parsed options
{𝕊: "Error: Unsupported 'has' options; options:"1", "¨𝕩}_assert_(´has) "avx2""bmi2""pclmul""slow-pdep" {𝕊: "Error: Unsupported 'has' options; options:"1", "¨𝕩}_assert_(´has) "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 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
singeliArch ({"x86-64":"X86_64"; "aarch64":"AARCH64"; "none"} arch) < Uppercase "avx2""bmi2""pclmul"/ has
avx2 (arch"x86-64") singeli native "avx2"<has avx2 (arch"x86-64") singeli native "avx2"<has
{𝕊: "Target: "os" "arch 1 ", "¨ hasnative/"native"} _verboseLog@ {𝕊: "Target: "os" "arch 1 ", "¨ hasnative/"native"} _verboseLog@
@ -312,7 +313,6 @@ po ← { # parsed options
args ( replxx) / "-DUSE_REPLXX", "-DREPLXX_STATIC=1", "-I"replxxDir"/include" # TODO maybe move to main.c only, and have it be in its own separate cache dir, so that adding replxx doesn't recompile everything? args ( replxx) / "-DUSE_REPLXX", "-DREPLXX_STATIC=1", "-I"replxxDir"/include" # TODO maybe move to main.c only, and have it be in its own separate cache dir, so that adding replxx doesn't recompile everything?
args ( debug DOpt "g") / "-g" args ( debug DOpt "g") / "-g"
args ( o3) / "-O3" args ( o3) / "-O3"
args ( native) / "-march=native"
args ( debug) / "-DDEBUG" args ( debug) / "-DDEBUG"
args ( rtverify) / "-DRT_VERIFY" args ( rtverify) / "-DRT_VERIFY"
args ( heapverify) / "-DHEAP_VERIFY" args ( heapverify) / "-DHEAP_VERIFY"
@ -325,7 +325,13 @@ 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": "-DSLOW_PDEP"; "-m"𝕩}¨ has args (´"slow-pdep"¨ has) / "-DSLOW_PDEP"
args {
native? "-march=native";
: ;
"Error: Cannot use has=... if Singeli isn't enabled"_assert_ singeli
(singeliArch, 1 •Import AtRoot singeliDir •file.At "arch.bqn").GetCFlags@
} 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
@ -690,7 +696,7 @@ cachedBin‿linkerCache ← {
singeliArgs po.singeliFlags"-l", "gen="AtRoot singeliCache.folder, "-c", "usz=u"•Repr po.usz{ singeliArgs po.singeliFlags"-l", "gen="AtRoot singeliCache.folder, "-c", "usz=u"•Repr po.usz{
po.native? ; po.native? ;
"-a" ({"x86-64":"X86_64"; "aarch64":"AARCH64"; "none"} po.arch) ','¨ Uppercase "avx2""bmi2""pclmul"/po.has "-a" 1 ','¨ po.singeliArch
} }
{𝕊: "Singeli args: "•Repr singeliArgs} _verboseLog @ {𝕊: "Singeli args: "•Repr singeliArgs} _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