From bd86cb22e065c500108c06ce3dfde7201cb34f12 Mon Sep 17 00:00:00 2001 From: jcmdln Date: Wed, 11 Oct 2023 21:06:42 -0400 Subject: [PATCH 01/13] Support LLVM >=17.0.1 on Darwin and Linux --- build_odin.sh | 6 ++++-- src/llvm_backend.cpp | 26 +++++++++++++++++++++++--- src/llvm_backend.hpp | 4 ++++ src/main.cpp | 4 ++-- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index cbda51bfc..ddfbe967c 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -52,7 +52,7 @@ config_darwin() { fi fi - MAX_LLVM_VERSION=("14.999.999") + MAX_LLVM_VERSION=("17.999.999") if [ $(version $($LLVM_CONFIG --version)) -gt $(version $MAX_LLVM_VERSION) ]; then echo "Tried to use " $(which $LLVM_CONFIG) "version" $($LLVM_CONFIG --version) panic "Requirement: llvm-config must be base version smaller than 15" @@ -102,6 +102,8 @@ config_linux() { LLVM_CONFIG=llvm-config-11-64 elif [ -x "$(command -v llvm-config-14)" ]; then LLVM_CONFIG=llvm-config-14 + elif [ -x "$(command -v llvm-config-17)" ]; then + LLVM_CONFIG=llvm-config-17 else panic "Unable to find LLVM-config" fi @@ -113,7 +115,7 @@ config_linux() { panic "Requirement: llvm-config must be base version greater than 11" fi - MAX_LLVM_VERSION=("14.999.999") + MAX_LLVM_VERSION=("17.999.999") if [ $(version $($LLVM_CONFIG --version)) -gt $(version $MAX_LLVM_VERSION) ]; then echo "Tried to use " $(which $LLVM_CONFIG) "version" $($LLVM_CONFIG --version) panic "Requirement: llvm-config must be base version smaller than 15" diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index ceb4dc1de..00c62f0f1 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2602,17 +2602,37 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { if (build_context.sanitizer_flags & SanitizerFlag_Address) { - auto paths = array_make(heap_allocator(), 0, 1); if (build_context.metrics.os == TargetOs_windows) { + auto paths = array_make(heap_allocator(), 0, 1); String path = concatenate_strings(permanent_allocator(), build_context.ODIN_ROOT, str_lit("\\bin\\llvm\\windows\\clang_rt.asan-x86_64.lib")); array_add(&paths, path); + Entity *lib = alloc_entity_library_name(nullptr, make_token_ident("asan_lib"), nullptr, slice_from_array(paths), str_lit("asan_lib")); + array_add(&gen->foreign_libraries, lib); + } else if (build_context.metrics.os == TargetOs_darwin || build_context.metrics.os == TargetOs_linux) { + if (!build_context.extra_linker_flags.text) { + build_context.extra_linker_flags = str_lit("-fsanitize=address"); + } else { + build_context.extra_linker_flags = concatenate_strings(permanent_allocator(), build_context.extra_linker_flags, str_lit(" -fsanitize=address")); + } } - Entity *lib = alloc_entity_library_name(nullptr, make_token_ident("asan_lib"), nullptr, slice_from_array(paths), str_lit("asan_lib")); - array_add(&gen->foreign_libraries, lib); } if (build_context.sanitizer_flags & SanitizerFlag_Memory) { + if (build_context.metrics.os == TargetOs_darwin || build_context.metrics.os == TargetOs_linux) { + if (!build_context.extra_linker_flags.text) { + build_context.extra_linker_flags = str_lit("-fsanitize=memory"); + } else { + build_context.extra_linker_flags = concatenate_strings(permanent_allocator(), build_context.extra_linker_flags, str_lit(" -fsanitize=memory")); + } + } } if (build_context.sanitizer_flags & SanitizerFlag_Thread) { + if (build_context.metrics.os == TargetOs_darwin || build_context.metrics.os == TargetOs_linux) { + if (!build_context.extra_linker_flags.text) { + build_context.extra_linker_flags = str_lit("-fsanitize=thread"); + } else { + build_context.extra_linker_flags = concatenate_strings(permanent_allocator(), build_context.extra_linker_flags, str_lit(" -fsanitize=thread")); + } + } } gb_sort_array(gen->foreign_libraries.data, gen->foreign_libraries.count, foreign_library_cmp); diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index abdeea4ba..fb0d67c21 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -15,6 +15,9 @@ #include #include #include +#if LLVM_VERSION_MAJOR >= 17 && (LLVM_VERSION_MINOR > 0 || (LLVM_VERSION_MINOR == 0 && LLVM_VERSION_PATCH > 0)) +#include +#else #include #include #include @@ -23,6 +26,7 @@ #include #include #endif +#endif #if LLVM_VERSION_MAJOR < 11 #error "LLVM Version 11 is the minimum required" diff --git a/src/main.cpp b/src/main.cpp index e9c988d95..79c2b3561 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -89,8 +89,8 @@ gb_global Timings global_timings = {0}; #if LLVM_VERSION_MAJOR < 11 #error LLVM Version 11+ is required => "brew install llvm@11" #endif - #if LLVM_VERSION_MAJOR > 14 - #error LLVM Version 11..=14 is required => "brew install llvm@14" + #if (LLVM_VERSION_MAJOR > 14 && LLVM_VERSION_MAJOR < 17) || LLVM_VERSION_MAJOR > 17 + #error LLVM Version 11..=14 or =17 is required => "brew install llvm@14" #endif #endif From fa2b68dac6c28290d39d1a381ec948c391b8e2ff Mon Sep 17 00:00:00 2001 From: jcmdln Date: Thu, 12 Oct 2023 01:47:51 -0400 Subject: [PATCH 02/13] Fix MAX_LLVM_VERSION panic messages --- build_odin.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index ddfbe967c..2c6cb06df 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -55,7 +55,7 @@ config_darwin() { MAX_LLVM_VERSION=("17.999.999") if [ $(version $($LLVM_CONFIG --version)) -gt $(version $MAX_LLVM_VERSION) ]; then echo "Tried to use " $(which $LLVM_CONFIG) "version" $($LLVM_CONFIG --version) - panic "Requirement: llvm-config must be base version smaller than 15" + panic "Requirement: llvm-config must be base version smaller than 18" fi LDFLAGS="$LDFLAGS -liconv -ldl -framework System" @@ -118,7 +118,7 @@ config_linux() { MAX_LLVM_VERSION=("17.999.999") if [ $(version $($LLVM_CONFIG --version)) -gt $(version $MAX_LLVM_VERSION) ]; then echo "Tried to use " $(which $LLVM_CONFIG) "version" $($LLVM_CONFIG --version) - panic "Requirement: llvm-config must be base version smaller than 15" + panic "Requirement: llvm-config must be base version smaller than 18" fi LDFLAGS="$LDFLAGS -ldl" From bdc74a03c0c87aaf8d5fdc2cd9f31791ba7a81e0 Mon Sep 17 00:00:00 2001 From: jcmdln Date: Sat, 14 Oct 2023 16:58:34 -0400 Subject: [PATCH 03/13] Refactor to improve handling of LLVM_VERSION checks --- build_odin.sh | 206 +++++++++++++------------------------------------- 1 file changed, 52 insertions(+), 154 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index 2c6cb06df..4111e61f1 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -1,135 +1,69 @@ #!/usr/bin/env bash set -eu -: ${CXX=clang++} : ${CPPFLAGS=} +: ${CXX=clang++} : ${CXXFLAGS=} : ${LDFLAGS=} -: ${ODIN_VERSION=dev-$(date +"%Y-%m")} -: ${GIT_SHA=} +: ${LLVM_CONFIG=llvm-config} +CPPFLAGS="$CPPFLAGS -DODIN_VERSION_RAW=\"dev-$(date +"%Y-%m")\"" CXXFLAGS="$CXXFLAGS -std=c++14" +DISABLED_WARNINGS="-Wno-switch -Wno-macro-redefined -Wno-unused-value" LDFLAGS="$LDFLAGS -pthread -lm -lstdc++" -if [ -d ".git" ] && [ $(which git) ]; then - versionTag=( $(git show --pretty='%cd %h' --date=format:%Y-%m --no-patch --no-notes HEAD) ) - if [ $? -eq 0 ]; then - ODIN_VERSION="dev-${versionTag[0]}" - GIT_SHA="${versionTag[1]}" - CPPFLAGS="$CPPFLAGS -DGIT_SHA=\"$GIT_SHA\"" - fi -fi +LLVM_VERSION="$($LLVM_CONFIG --version)" +LLVM_VERSION_MAJOR="$(echo $LLVM_VERSION | awk -F. '{print $1}')" +LLVM_VERSION_MINOR="$(echo $LLVM_VERSION | awk -F. '{print $2}')" +LLVM_VERSION_PATCH="$(echo $LLVM_VERSION | awk -F. '{print $3}')" +OS_ARCH="$(uname -m)" +OS_NAME="$(uname -s)" -CPPFLAGS="$CPPFLAGS -DODIN_VERSION_RAW=\"$ODIN_VERSION\"" - -DISABLED_WARNINGS="-Wno-switch -Wno-macro-redefined -Wno-unused-value" -OS=$(uname) - -panic() { - printf "%s\n" "$1" +error() { + printf "ERROR: %s\n" "$1" exit 1 } -version() { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; } +if [ -d ".git" ] && [ -n "$(command -v git)" ]; then + GIT_SHA=($(git show --pretty='%h'--no-patch --no-notes HEAD)) + CPPFLAGS="$CPPFLAGS -DGIT_SHA=\"$GIT_SHA\"" +fi -config_darwin() { - local ARCH=$(uname -m) - : ${LLVM_CONFIG=llvm-config} +if [ $LLVM_VERSION_MAJOR -lt 11 ] || + ([ $LLVM_VERSION_MAJOR -gt 14 ] && [ $LLVM_VERSION_MAJOR -lt 17 ]); then + error "Invalid LLVM version $LLVM_VERSION: must be 11, 12, 13, 14 or 17" +fi - # allow for arm only llvm's with version 13 - if [ "${ARCH}" == "arm64" ]; then - MIN_LLVM_VERSION=("13.0.0") - else - # allow for x86 / amd64 all llvm versions beginning from 11 - MIN_LLVM_VERSION=("11.1.0") - fi - - if [ $(version $($LLVM_CONFIG --version)) -lt $(version $MIN_LLVM_VERSION) ]; then - if [ "${ARCH}" == "arm64" ]; then - panic "Requirement: llvm-config must be base version 13 for arm64" - else - panic "Requirement: llvm-config must be base version greater than 11 for amd64/x86" +case "$OS_NAME" in +Darwin) + if [ "$OS_ARCH" == "arm64" ]; then + if [ $LLVM_VERSION_MAJOR -lt 13 ] || [ $LLVM_VERSION_MAJOR -gt 17 ]; then + error "Darwin Arm64 requires LLVM 13, 14 or 17" fi fi - MAX_LLVM_VERSION=("17.999.999") - if [ $(version $($LLVM_CONFIG --version)) -gt $(version $MAX_LLVM_VERSION) ]; then - echo "Tried to use " $(which $LLVM_CONFIG) "version" $($LLVM_CONFIG --version) - panic "Requirement: llvm-config must be base version smaller than 18" - fi - + CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)" LDFLAGS="$LDFLAGS -liconv -ldl -framework System" - CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)" LDFLAGS="$LDFLAGS -lLLVM-C" -} - -config_freebsd() { - : ${LLVM_CONFIG=} - - if [ ! "$LLVM_CONFIG" ]; then - if [ -x "$(command -v llvm-config11)" ]; then - LLVM_CONFIG=llvm-config11 - elif [ -x "$(command -v llvm-config12)" ]; then - LLVM_CONFIG=llvm-config12 - elif [ -x "$(command -v llvm-config13)" ]; then - LLVM_CONFIG=llvm-config13 - else - panic "Unable to find LLVM-config" - fi - fi - + ;; +FreeBSD) CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)" LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs)" -} - -config_openbsd() { - : ${LLVM_CONFIG=/usr/local/bin/llvm-config} - + ;; +Linux) + CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)" + LDFLAGS="$LDFLAGS -ldl -Wl,-rpath=$($LLVM_CONFIG --libdir)" + LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs --libfiles)" + ;; +OpenBSD) + CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)" LDFLAGS="$LDFLAGS -liconv" - CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)" LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs)" -} - -config_linux() { - : ${LLVM_CONFIG=} - - if [ ! "$LLVM_CONFIG" ]; then - if [ -x "$(command -v llvm-config)" ]; then - LLVM_CONFIG=llvm-config - elif [ -x "$(command -v llvm-config-11)" ]; then - LLVM_CONFIG=llvm-config-11 - elif [ -x "$(command -v llvm-config-11-64)" ]; then - LLVM_CONFIG=llvm-config-11-64 - elif [ -x "$(command -v llvm-config-14)" ]; then - LLVM_CONFIG=llvm-config-14 - elif [ -x "$(command -v llvm-config-17)" ]; then - LLVM_CONFIG=llvm-config-17 - else - panic "Unable to find LLVM-config" - fi - fi - - MIN_LLVM_VERSION=("11.0.0") - if [ $(version $($LLVM_CONFIG --version)) -lt $(version $MIN_LLVM_VERSION) ]; then - echo "Tried to use " $(which $LLVM_CONFIG) "version" $($LLVM_CONFIG --version) - panic "Requirement: llvm-config must be base version greater than 11" - fi - - MAX_LLVM_VERSION=("17.999.999") - if [ $(version $($LLVM_CONFIG --version)) -gt $(version $MAX_LLVM_VERSION) ]; then - echo "Tried to use " $(which $LLVM_CONFIG) "version" $($LLVM_CONFIG --version) - panic "Requirement: llvm-config must be base version smaller than 18" - fi - - LDFLAGS="$LDFLAGS -ldl" - CXXFLAGS="$CXXFLAGS $($LLVM_CONFIG --cxxflags --ldflags)" - LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs --libfiles) -Wl,-rpath=\$ORIGIN" - - # Creates a copy of the llvm library in the build dir, this is meant to support compiler explorer. - # The annoyance is that this copy can be cluttering the development folder. TODO: split staging folders - # for development and compiler explorer builds - cp $(readlink -f $($LLVM_CONFIG --libfiles)) ./ -} + ;; +*) + error "Platform \"OS_NAME\" unsupported" + ;; +esac build_odin() { case $1 in @@ -140,20 +74,19 @@ build_odin() { EXTRAFLAGS="-O3" ;; release-native) - local ARCH=$(uname -m) - if [ "${ARCH}" == "arm64" ]; then - # Use preferred flag for Arm (ie arm64 / aarch64 / etc) - EXTRAFLAGS="-O3 -mcpu=native" - else - # Use preferred flag for x86 / amd64 - EXTRAFLAGS="-O3 -march=native" - fi + if [ "OS_ARCH" == "arm64" ]; then + # Use preferred flag for Arm (ie arm64 / aarch64 / etc) + EXTRAFLAGS="-O3 -mcpu=native" + else + # Use preferred flag for x86 / amd64 + EXTRAFLAGS="-O3 -march=native" + fi ;; nightly) EXTRAFLAGS="-DNIGHTLY -O3" ;; *) - panic "Build mode unsupported!" + error "Build mode \"$1\" unsupported!" ;; esac @@ -166,55 +99,20 @@ run_demo() { ./odin run examples/demo/demo.odin -file } -have_which() { - if ! command -v which > /dev/null 2>&1 ; then - panic "Could not find \`which\`" - fi -} - -have_which - -case $OS in -Linux) - config_linux - ;; -Darwin) - config_darwin - ;; -OpenBSD) - config_openbsd - ;; -FreeBSD) - config_freebsd - ;; -*) - panic "Platform unsupported!" - ;; -esac - if [[ $# -eq 0 ]]; then build_odin debug run_demo - exit 0 -fi - -if [[ $# -eq 1 ]]; then +elif [[ $# -eq 1 ]]; then case $1 in report) - if [[ ! -f "./odin" ]]; then - build_odin debug - fi - + [ ! -f "./odin" ] && build_odin debug ./odin report - exit 0 ;; *) build_odin $1 ;; esac - run_demo - exit 0 else - panic "Too many arguments!" + error "Too many arguments!" fi From abde9a99c3e1b83a5e559ee3aa069939e684f0ee Mon Sep 17 00:00:00 2001 From: jcmdln Date: Sat, 14 Oct 2023 17:32:41 -0400 Subject: [PATCH 04/13] Fix typos in references to OS_ARCH, OS_NAME --- build_odin.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index 4111e61f1..30ecaaac5 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -61,7 +61,7 @@ OpenBSD) LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs)" ;; *) - error "Platform \"OS_NAME\" unsupported" + error "Platform \"$OS_NAME\" unsupported" ;; esac @@ -74,7 +74,7 @@ build_odin() { EXTRAFLAGS="-O3" ;; release-native) - if [ "OS_ARCH" == "arm64" ]; then + if [ "$OS_ARCH" == "arm64" ]; then # Use preferred flag for Arm (ie arm64 / aarch64 / etc) EXTRAFLAGS="-O3 -mcpu=native" else From c0ac3de272d78c160a308632b720f53488597abb Mon Sep 17 00:00:00 2001 From: jcmdln Date: Sat, 14 Oct 2023 17:41:19 -0400 Subject: [PATCH 05/13] Hunt for supported 'llvm-config' executable --- build_odin.sh | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index 30ecaaac5..7c9ae065f 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -11,13 +11,27 @@ CPPFLAGS="$CPPFLAGS -DODIN_VERSION_RAW=\"dev-$(date +"%Y-%m")\"" CXXFLAGS="$CXXFLAGS -std=c++14" DISABLED_WARNINGS="-Wno-switch -Wno-macro-redefined -Wno-unused-value" LDFLAGS="$LDFLAGS -pthread -lm -lstdc++" +OS_ARCH="$(uname -m)" +OS_NAME="$(uname -s)" + +if [ -z "$(command -v llvm-config)" ]; then + if [ -n "$(command -v llvm-config-17)" ]; then + LLVM_CONFIG="llvm-config-17" + elif [ -n "$(command -v llvm-config-14)" ]; then + LLVM_CONFIG="llvm-config-14" + elif [ -n "$(command -v llvm-config-13)" ]; then + LLVM_CONFIG="llvm-config-13" + elif [ -n "$(command -v llvm-config-12)" ]; then + LLVM_CONFIG="llvm-config-12" + elif [ -n "$(command -v llvm-config-11)" ]; then + LLVM_CONFIG="llvm-config-11" + fi +fi LLVM_VERSION="$($LLVM_CONFIG --version)" LLVM_VERSION_MAJOR="$(echo $LLVM_VERSION | awk -F. '{print $1}')" LLVM_VERSION_MINOR="$(echo $LLVM_VERSION | awk -F. '{print $2}')" LLVM_VERSION_PATCH="$(echo $LLVM_VERSION | awk -F. '{print $3}')" -OS_ARCH="$(uname -m)" -OS_NAME="$(uname -s)" error() { printf "ERROR: %s\n" "$1" @@ -29,6 +43,8 @@ if [ -d ".git" ] && [ -n "$(command -v git)" ]; then CPPFLAGS="$CPPFLAGS -DGIT_SHA=\"$GIT_SHA\"" fi + + if [ $LLVM_VERSION_MAJOR -lt 11 ] || ([ $LLVM_VERSION_MAJOR -gt 14 ] && [ $LLVM_VERSION_MAJOR -lt 17 ]); then error "Invalid LLVM version $LLVM_VERSION: must be 11, 12, 13, 14 or 17" From e5ed388191c368d7d64569414436c60520aada6c Mon Sep 17 00:00:00 2001 From: jcmdln Date: Sat, 14 Oct 2023 17:45:27 -0400 Subject: [PATCH 06/13] Ensure user defined LLVM_CONFIG is respected --- build_odin.sh | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index 7c9ae065f..ad295795e 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -5,7 +5,7 @@ set -eu : ${CXX=clang++} : ${CXXFLAGS=} : ${LDFLAGS=} -: ${LLVM_CONFIG=llvm-config} +: ${LLVM_CONFIG=} CPPFLAGS="$CPPFLAGS -DODIN_VERSION_RAW=\"dev-$(date +"%Y-%m")\"" CXXFLAGS="$CXXFLAGS -std=c++14" @@ -14,7 +14,12 @@ LDFLAGS="$LDFLAGS -pthread -lm -lstdc++" OS_ARCH="$(uname -m)" OS_NAME="$(uname -s)" -if [ -z "$(command -v llvm-config)" ]; then +error() { + printf "ERROR: %s\n" "$1" + exit 1 +} + +if [ -z "$LLVM_CONFIG" ]; then if [ -n "$(command -v llvm-config-17)" ]; then LLVM_CONFIG="llvm-config-17" elif [ -n "$(command -v llvm-config-14)" ]; then @@ -25,6 +30,10 @@ if [ -z "$(command -v llvm-config)" ]; then LLVM_CONFIG="llvm-config-12" elif [ -n "$(command -v llvm-config-11)" ]; then LLVM_CONFIG="llvm-config-11" + elif [ -n "$(command -v llvm-config)" ]; then + LLVM_CONFIG="llvm-config" + else + error "No supported llvm-config version found. Set LLVM_CONFIG to proceed." fi fi @@ -33,11 +42,6 @@ LLVM_VERSION_MAJOR="$(echo $LLVM_VERSION | awk -F. '{print $1}')" LLVM_VERSION_MINOR="$(echo $LLVM_VERSION | awk -F. '{print $2}')" LLVM_VERSION_PATCH="$(echo $LLVM_VERSION | awk -F. '{print $3}')" -error() { - printf "ERROR: %s\n" "$1" - exit 1 -} - if [ -d ".git" ] && [ -n "$(command -v git)" ]; then GIT_SHA=($(git show --pretty='%h'--no-patch --no-notes HEAD)) CPPFLAGS="$CPPFLAGS -DGIT_SHA=\"$GIT_SHA\"" From e232cabfaba3c4aa106c7a5a081a645972ae2103 Mon Sep 17 00:00:00 2001 From: jcmdln Date: Sat, 14 Oct 2023 17:46:34 -0400 Subject: [PATCH 07/13] Remove extra newlines --- build_odin.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index ad295795e..4331b8507 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -47,8 +47,6 @@ if [ -d ".git" ] && [ -n "$(command -v git)" ]; then CPPFLAGS="$CPPFLAGS -DGIT_SHA=\"$GIT_SHA\"" fi - - if [ $LLVM_VERSION_MAJOR -lt 11 ] || ([ $LLVM_VERSION_MAJOR -gt 14 ] && [ $LLVM_VERSION_MAJOR -lt 17 ]); then error "Invalid LLVM version $LLVM_VERSION: must be 11, 12, 13, 14 or 17" From 8eff75a484384ba9ffbe3f306b1f9bde2d178c81 Mon Sep 17 00:00:00 2001 From: jcmdln Date: Sat, 14 Oct 2023 17:51:28 -0400 Subject: [PATCH 08/13] Hoist GIT_SHA discovery --- build_odin.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index 4331b8507..4c7fce836 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -14,6 +14,11 @@ LDFLAGS="$LDFLAGS -pthread -lm -lstdc++" OS_ARCH="$(uname -m)" OS_NAME="$(uname -s)" +if [ -d ".git" ] && [ -n "$(command -v git)" ]; then + GIT_SHA=($(git show --pretty='%h'--no-patch --no-notes HEAD)) + CPPFLAGS="$CPPFLAGS -DGIT_SHA=\"$GIT_SHA\"" +fi + error() { printf "ERROR: %s\n" "$1" exit 1 @@ -42,11 +47,6 @@ LLVM_VERSION_MAJOR="$(echo $LLVM_VERSION | awk -F. '{print $1}')" LLVM_VERSION_MINOR="$(echo $LLVM_VERSION | awk -F. '{print $2}')" LLVM_VERSION_PATCH="$(echo $LLVM_VERSION | awk -F. '{print $3}')" -if [ -d ".git" ] && [ -n "$(command -v git)" ]; then - GIT_SHA=($(git show --pretty='%h'--no-patch --no-notes HEAD)) - CPPFLAGS="$CPPFLAGS -DGIT_SHA=\"$GIT_SHA\"" -fi - if [ $LLVM_VERSION_MAJOR -lt 11 ] || ([ $LLVM_VERSION_MAJOR -gt 14 ] && [ $LLVM_VERSION_MAJOR -lt 17 ]); then error "Invalid LLVM version $LLVM_VERSION: must be 11, 12, 13, 14 or 17" From afcdbf1ba61732c65cafb9595debfb33f07df968 Mon Sep 17 00:00:00 2001 From: jcmdln Date: Sat, 14 Oct 2023 18:07:20 -0400 Subject: [PATCH 09/13] Don't implicitly try 'llvm-config-14', try fallback or set LLVM_CONFIG; Restore FreeBSD llvm-config discovery --- build_odin.sh | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index 4c7fce836..e9df8b5ba 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -25,20 +25,20 @@ error() { } if [ -z "$LLVM_CONFIG" ]; then - if [ -n "$(command -v llvm-config-17)" ]; then - LLVM_CONFIG="llvm-config-17" - elif [ -n "$(command -v llvm-config-14)" ]; then - LLVM_CONFIG="llvm-config-14" - elif [ -n "$(command -v llvm-config-13)" ]; then - LLVM_CONFIG="llvm-config-13" - elif [ -n "$(command -v llvm-config-12)" ]; then - LLVM_CONFIG="llvm-config-12" - elif [ -n "$(command -v llvm-config-11)" ]; then - LLVM_CONFIG="llvm-config-11" - elif [ -n "$(command -v llvm-config)" ]; then - LLVM_CONFIG="llvm-config" + # darwin, linux, openbsd + if [ -n "$(command -v llvm-config-17)" ]; then LLVM_CONFIG="llvm-config-17" + elif [ -n "$(command -v llvm-config-13)" ]; then LLVM_CONFIG="llvm-config-13" + elif [ -n "$(command -v llvm-config-12)" ]; then LLVM_CONFIG="llvm-config-12" + elif [ -n "$(command -v llvm-config-11)" ]; then LLVM_CONFIG="llvm-config-11" + # freebsd + elif [ -n "$(command -v llvm-config17)" ]; then LLVM_CONFIG="llvm-config-17" + elif [ -n "$(command -v llvm-config13)" ]; then LLVM_CONFIG="llvm-config-13" + elif [ -n "$(command -v llvm-config12)" ]; then LLVM_CONFIG="llvm-config-12" + elif [ -n "$(command -v llvm-config11)" ]; then LLVM_CONFIG="llvm-config-11" + # fallback + elif [ -n "$(command -v llvm-config)" ]; then LLVM_CONFIG="llvm-config" else - error "No supported llvm-config version found. Set LLVM_CONFIG to proceed." + error "No llvm-config command found. Set LLVM_CONFIG to proceed." fi fi From b25fba6175ae19962ce98f66a24d9a8f9442f392 Mon Sep 17 00:00:00 2001 From: jcmdln Date: Sat, 14 Oct 2023 18:10:42 -0400 Subject: [PATCH 10/13] Fix typo in GIT_SHA collection --- build_odin.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_odin.sh b/build_odin.sh index e9df8b5ba..3900f5477 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -15,7 +15,7 @@ OS_ARCH="$(uname -m)" OS_NAME="$(uname -s)" if [ -d ".git" ] && [ -n "$(command -v git)" ]; then - GIT_SHA=($(git show --pretty='%h'--no-patch --no-notes HEAD)) + GIT_SHA=($(git show --pretty='%h' --no-patch --no-notes HEAD)) CPPFLAGS="$CPPFLAGS -DGIT_SHA=\"$GIT_SHA\"" fi From d0037fcf6b27dae0cbbd34fc22d9ed639be7646d Mon Sep 17 00:00:00 2001 From: jcmdln Date: Sat, 14 Oct 2023 22:01:38 -0400 Subject: [PATCH 11/13] Allow running in POSIX shells --- build_odin.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index 3900f5477..02baac382 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh set -eu : ${CPPFLAGS=} @@ -15,7 +15,7 @@ OS_ARCH="$(uname -m)" OS_NAME="$(uname -s)" if [ -d ".git" ] && [ -n "$(command -v git)" ]; then - GIT_SHA=($(git show --pretty='%h' --no-patch --no-notes HEAD)) + GIT_SHA=$(git show --pretty='%h' --no-patch --no-notes HEAD) CPPFLAGS="$CPPFLAGS -DGIT_SHA=\"$GIT_SHA\"" fi From 8fe431e53e538d1da1d7252ded845b58ce3f44bd Mon Sep 17 00:00:00 2001 From: jcmdln Date: Sun, 15 Oct 2023 12:03:56 -0400 Subject: [PATCH 12/13] Only check LLVM_VERSION_MAJOR >= 17 for PassBuilder inclusion --- src/llvm_backend.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index fb0d67c21..5894dd38a 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -15,7 +15,7 @@ #include #include #include -#if LLVM_VERSION_MAJOR >= 17 && (LLVM_VERSION_MINOR > 0 || (LLVM_VERSION_MINOR == 0 && LLVM_VERSION_PATCH > 0)) +#if LLVM_VERSION_MAJOR >= 17 #include #else #include From 51248270e1741bf0faffab4e93af6f85615903a4 Mon Sep 17 00:00:00 2001 From: jcmdln Date: Sun, 15 Oct 2023 12:18:51 -0400 Subject: [PATCH 13/13] Remove [[ for POSIX shell support --- build_odin.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index 02baac382..b7e5660f1 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -117,10 +117,10 @@ run_demo() { ./odin run examples/demo/demo.odin -file } -if [[ $# -eq 0 ]]; then +if [ $# -eq 0 ]; then build_odin debug run_demo -elif [[ $# -eq 1 ]]; then +elif [ $# -eq 1 ]; then case $1 in report) [ ! -f "./odin" ] && build_odin debug