mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-06 06:38:20 +00:00
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.
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user