From a0692cd40bf147dc2193f33ae993f4211d6dfe77 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Thu, 19 Feb 2026 21:43:01 +0100 Subject: [PATCH] improve llvm version picking In arch, the `llvm` package points to the latest version of LLVM, this installs `llvm-config` but not a `llvm-config-21` link. This meant that we would check all our lower supported versions before falling back to the default `llvm-config`. This change makes sure that if `llvm-config` exists we check against the major version (by using `llvm-config --version`) and make sure we have the highest llvm version we support. --- build_odin.sh | 56 ++++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index b9545a6b5..64bb4c799 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -26,36 +26,42 @@ error() { exit 1 } +SUPPORTED_LLVM_VERSIONS="21 20 19 18 17 14" + # Brew advises people not to add llvm to their $PATH, so try and use brew to find it. if [ -z "$LLVM_CONFIG" ] && [ -n "$(command -v brew)" ]; then - if [ -n "$(command -v $(brew --prefix llvm@21)/bin/llvm-config)" ]; then LLVM_CONFIG="$(brew --prefix llvm@21)/bin/llvm-config" - elif [ -n "$(command -v $(brew --prefix llvm@20)/bin/llvm-config)" ]; then LLVM_CONFIG="$(brew --prefix llvm@20)/bin/llvm-config" - elif [ -n "$(command -v $(brew --prefix llvm@19)/bin/llvm-config)" ]; then LLVM_CONFIG="$(brew --prefix llvm@19)/bin/llvm-config" - elif [ -n "$(command -v $(brew --prefix llvm@18)/bin/llvm-config)" ]; then LLVM_CONFIG="$(brew --prefix llvm@18)/bin/llvm-config" - elif [ -n "$(command -v $(brew --prefix llvm@17)/bin/llvm-config)" ]; then LLVM_CONFIG="$(brew --prefix llvm@17)/bin/llvm-config" - elif [ -n "$(command -v $(brew --prefix llvm@14)/bin/llvm-config)" ]; then LLVM_CONFIG="$(brew --prefix llvm@14)/bin/llvm-config" - fi + for V in $SUPPORTED_LLVM_VERSIONS; do + if [ -n "$(command -v $(brew --prefix llvm@$V)/bin/llvm-config)" ]; then + LLVM_CONFIG="$(brew --prefix llvm@$V)/bin/llvm-config" + break + fi + done fi if [ -z "$LLVM_CONFIG" ]; then - # darwin, linux, openbsd - if [ -n "$(command -v llvm-config-21)" ]; then LLVM_CONFIG="llvm-config-21" - elif [ -n "$(command -v llvm-config-20)" ]; then LLVM_CONFIG="llvm-config-20" - elif [ -n "$(command -v llvm-config-19)" ]; then LLVM_CONFIG="llvm-config-19" - elif [ -n "$(command -v llvm-config-18)" ]; then LLVM_CONFIG="llvm-config-18" - elif [ -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" - # freebsd - elif [ -n "$(command -v llvm-config21)" ]; then LLVM_CONFIG="llvm-config21" - elif [ -n "$(command -v llvm-config20)" ]; then LLVM_CONFIG="llvm-config20" - elif [ -n "$(command -v llvm-config19)" ]; then LLVM_CONFIG="llvm-config19" - elif [ -n "$(command -v llvm-config18)" ]; then LLVM_CONFIG="llvm-config18" - elif [ -n "$(command -v llvm-config17)" ]; then LLVM_CONFIG="llvm-config17" - elif [ -n "$(command -v llvm-config14)" ]; then LLVM_CONFIG="llvm-config14" - # fallback - elif [ -n "$(command -v llvm-config)" ]; then LLVM_CONFIG="llvm-config" - else - error "No llvm-config command found. Set LLVM_CONFIG to proceed." + DEFAULT_VERSION="" + + if [ -n "$(command -v llvm-config)" ]; then + DEFAULT_VERSION=$(llvm-config --version | awk -F. '{print $1}') + fi + + for V in $SUPPORTED_LLVM_VERSIONS; do + if [ "$DEFAULT_VERSION" = "$V" ]; then + LLVM_CONFIG="llvm-config" + break + # darwin, linux, openbsd + elif [ -n "$(command -v "llvm-config-$V")" ]; then + LLVM_CONFIG="llvm-config-$V" + break + # freebsd + elif [ -n "$(command -v "llvm-config$V")" ]; then + LLVM_CONFIG="llvm-config$V" + break + fi + done + + if [ -z "$LLVM_CONFIG" ]; then + error "No supported llvm-config command found. Set LLVM_CONFIG to proceed." fi fi