about summary refs log tree commit diff homepage
path: root/scripts/build/p-sanitizer-linux.inc
diff options
context:
space:
mode:
authorMartin Nowack <m.nowack@imperial.ac.uk>2022-03-25 23:07:40 +0000
committerCristian Cadar <c.cadar@imperial.ac.uk>2022-03-30 12:18:59 +0100
commit0373fd7d10fb5b23c86ebec2e932ea8f059f5b71 (patch)
tree785721f0b4202b1d30fa77160368e969e12a4eaa /scripts/build/p-sanitizer-linux.inc
parent23548f09b7bff999b0b346a5511b2a316ec798b4 (diff)
downloadklee-0373fd7d10fb5b23c86ebec2e932ea8f059f5b71.tar.gz
Clearly separate between LLVM, a bitcode compiler, and sanitizer compiler
All three can be different but also provided by the same package.
By separating the different use-cases, it allows to set them
independently.
Diffstat (limited to 'scripts/build/p-sanitizer-linux.inc')
-rw-r--r--scripts/build/p-sanitizer-linux.inc42
1 files changed, 42 insertions, 0 deletions
diff --git a/scripts/build/p-sanitizer-linux.inc b/scripts/build/p-sanitizer-linux.inc
new file mode 100644
index 00000000..b7a7718e
--- /dev/null
+++ b/scripts/build/p-sanitizer-linux.inc
@@ -0,0 +1,42 @@
+setup_artifact_variables_sanitizer() {
+  local SANITIZER_LLVM_VERSION_MAJOR="${SANITIZER_LLVM_VERSION/.*/}"
+  local SANITIZER_LLVM_VERSION_MINOR="${SANITIZER_LLVM_VERSION/*./}"
+  local version=""
+  [[ "${SANITIZER_LLVM_VERSION_MAJOR}" -le 6 ]] && version="-${SANITIZER_LLVM_VERSION}"
+  [[ "${SANITIZER_LLVM_VERSION_MAJOR}" -ge 7 ]] && version="-${SANITIZER_LLVM_VERSION_MAJOR}"
+
+  # Only set LLVM_CONFIG if not set yet
+  if [[ -z "${SANITIZER_LLVM_CONFIG-}" ]]; then
+    SANITIZER_LLVM_CONFIG=$(which "llvm-config${version}")
+  fi
+
+
+  local bin_path=""
+  bin_path="$(dirname "$(readlink -f "$(which "clang${version}")")")"
+
+  SANITIZER_BITCODE_CC="${bin_path}/clang"
+  SANITIZER_BITCODE_CXX="${bin_path}/clang++"
+
+  if [[ -z ${SANITIZER_C_COMPILER:=} ]]; then
+    SANITIZER_C_COMPILER="${SANITIZER_BITCODE_CC}"
+  fi
+
+  if [[ -z ${SANITIZER_CXX_COMPILER:=} ]]; then
+    SANITIZER_CXX_COMPILER="${SANITIZER_BITCODE_CXX}"
+  fi
+}
+
+# Check if the binary artifact is installed
+is_installed_sanitizer() {
+  if [[ -z ${SANITIZER_BUILD:-} ]]; then
+   return 1
+  fi
+  local SANITIZER_LLVM_VERSION_MAJOR="${SANITIZER_LLVM_VERSION/.*/}"
+  local SANITIZER_LLVM_VERSION_MINOR="${SANITIZER_LLVM_VERSION/*./}"
+  local version=""
+  [[ "${SANITIZER_LLVM_VERSION_MAJOR}" -le 6 ]] && version="${SANITIZER_LLVM_VERSION}"
+  [[ "${SANITIZER_LLVM_VERSION_MAJOR}" -ge 7 ]] && version="${SANITIZER_LLVM_VERSION_MAJOR}"
+
+  # Check if clang with the right version exists
+  which "clang-${version}"
+}
\ No newline at end of file