diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2024-09-12 16:55:28 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2024-09-12 16:55:28 +0200 |
| commit | ca68b59475f6b1773fa62e6dbc4b68349602b441 (patch) | |
| tree | a03251fefc3e39b209770cd96b974150163d9df9 /configure.sh | |
| parent | 762d285f3b914c877887469de06a70cee9028159 (diff) | |
| download | nissy-core-ca68b59475f6b1773fa62e6dbc4b68349602b441.tar.gz nissy-core-ca68b59475f6b1773fa62e6dbc4b68349602b441.zip | |
Update build files to enable multithreading
Diffstat (limited to 'configure.sh')
| -rwxr-xr-x | configure.sh | 73 |
1 files changed, 52 insertions, 21 deletions
diff --git a/configure.sh b/configure.sh index 34da488..03873e5 100755 --- a/configure.sh +++ b/configure.sh | |||
| @@ -1,51 +1,82 @@ | |||
| 1 | #!/bin/sh | 1 | #!/bin/sh |
| 2 | 2 | ||
| 3 | cc=${CC:-cc} | 3 | greparch() { |
| 4 | $CC -march=native -dM -E - </dev/null 2>/dev/null | grep "$1" | ||
| 5 | } | ||
| 6 | |||
| 7 | grepsan() { | ||
| 8 | $CC -fsanitize=$1 -dM -E -x c - </dev/null 2>/dev/null | grep "SANITIZE" | ||
| 9 | } | ||
| 10 | |||
| 11 | detectthreads() { | ||
| 12 | echo 16 # TODO: choose based on system | ||
| 13 | } | ||
| 4 | 14 | ||
| 5 | detectarch() { | 15 | detectarch() { |
| 6 | ${cc} -march=native -dM -E - </dev/null 2>/dev/null | grep "$1" | 16 | [ -n "$(greparch __AVX2__)" ] && detected="AVX2" |
| 17 | [ -n "$(greparch __ARM_NEON)" ] && detected="NEON" | ||
| 18 | [ -z "$detected" ] && detected="PORTABLE" | ||
| 19 | |||
| 20 | echo "$detected" | ||
| 7 | } | 21 | } |
| 8 | detectsan() { | 22 | |
| 9 | ${cc} -fsanitize=$1 -dM -E -x c - </dev/null 2>/dev/null \ | 23 | validatecc() { |
| 10 | | grep "SANITIZE" | 24 | if ! (which "$CC" >/dev/null 2>&1) ; then |
| 25 | echo "Error: compiler '$CC' not found" | ||
| 26 | exit 1 | ||
| 27 | fi | ||
| 11 | } | 28 | } |
| 12 | 29 | ||
| 13 | [ -n "$(detectarch __AVX2__)" ] && detected="AVX2" | 30 | validatethreads() { |
| 14 | [ -n "$(detectarch __ARM_NEON)" ] && detected="NEON" | 31 | if [ "$THREADS" -le 0 ] || [ "$THREADS" -gt 128 ]; then |
| 15 | [ -z "$detected" ] && detected="PORTABLE" | 32 | echo "Error: number of threads must be between 1 and 128" |
| 33 | exit 1 | ||
| 34 | fi | ||
| 35 | } | ||
| 36 | |||
| 37 | validatearch() { | ||
| 38 | case "$ARCH" in | ||
| 39 | AVX2|NEON|PORTABLE) | ||
| 40 | ;; | ||
| 41 | *) | ||
| 42 | echo "Error: architecture '$ARCH' not supported" | ||
| 43 | exit 1 | ||
| 44 | ;; | ||
| 45 | esac | ||
| 46 | } | ||
| 16 | 47 | ||
| 17 | ARCH=${ARCH-"$detected"} | 48 | CC=${CC:-cc} |
| 49 | THREADS=${THREADS-"$(detectthreads)"} | ||
| 50 | ARCH=${ARCH-"$(detectarch)"} | ||
| 18 | 51 | ||
| 19 | case "$ARCH" in | 52 | validatecc |
| 20 | AVX2|NEON|PORTABLE) | 53 | validatethreads |
| 21 | ;; | 54 | validatearch |
| 22 | *) | ||
| 23 | echo "Error: architecture $ARCH not supported" | ||
| 24 | exit 1 | ||
| 25 | ;; | ||
| 26 | esac | ||
| 27 | 55 | ||
| 28 | STD="-std=c99" | 56 | STD="-std=c99" |
| 29 | WFLAGS="-pedantic -Wall -Wextra" | 57 | WFLAGS="-pedantic -Wall -Wextra" |
| 30 | WNOFLAGS="-Wno-unused-parameter -Wno-unused-function -Wno-unknown-pragmas" | 58 | WNOFLAGS="-Wno-unused-parameter -Wno-unused-function -Wno-unknown-pragmas" |
| 31 | 59 | ||
| 32 | [ "$ARCH" = "AVX2" ] && AVX="-mavx2" | 60 | [ "$ARCH" = "AVX2" ] && AVX="-mavx2" |
| 33 | [ -n "$(detectsan address)" ] && ADDR="-fsanitize=address" | 61 | [ -n "$(grepsan address)" ] && ADDR="-fsanitize=address" |
| 34 | [ -n "$(detectsan undefined)" ] && UNDEF="-fsanitize=undefined" | 62 | [ -n "$(grepsan undefined)" ] && UNDEF="-fsanitize=undefined" |
| 35 | SAN="$ADDR $UNDEF" | 63 | SAN="$ADDR $UNDEF" |
| 36 | LIBS="-lpthread" | 64 | LIBS="-lpthread" |
| 37 | 65 | ||
| 38 | CFLAGS="$STD $LIBS $WFLAGS $WNOFLAGS $AVX -O3" | 66 | CFLAGS="$STD $LIBS $WFLAGS $WNOFLAGS $AVX -O3" |
| 39 | DBGFLAGS="$STD $LIBS $WFLAGS $WNOFLAGS $SAN $AVX -g3 -DDEBUG" | 67 | DBGFLAGS="$STD $LIBS $WFLAGS $WNOFLAGS $SAN $AVX -g3 -DDEBUG" |
| 68 | MACROS="-DTHREADS=$THREADS -D$ARCH" | ||
| 40 | 69 | ||
| 41 | echo "Selected architecture: $ARCH" | 70 | echo "Selected architecture: $ARCH" |
| 42 | echo "Compiler: ${CC:-cc}" | 71 | echo "Number of threads: $THREADS" |
| 72 | echo "Compiler: $CC" | ||
| 43 | 73 | ||
| 44 | { | 74 | { |
| 45 | echo "ARCH = $ARCH"; | 75 | echo "ARCH = $ARCH"; |
| 46 | echo ""; | 76 | echo ""; |
| 47 | echo "CFLAGS = $CFLAGS"; | 77 | echo "CFLAGS = $CFLAGS"; |
| 48 | echo "DBGFLAGS = $DBGFLAGS"; | 78 | echo "DBGFLAGS = $DBGFLAGS"; |
| 79 | echo "MACROS = $MACROS" | ||
| 49 | echo ""; | 80 | echo ""; |
| 50 | echo "CC = ${cc}" | 81 | echo "CC = $CC" |
| 51 | } > config.mk | 82 | } > config.mk |
