From 882ecdecc9c012bab996ca96a69e63930b17f533 Mon Sep 17 00:00:00 2001 From: Andre Heider Date: Sun, 15 Dec 2019 21:35:18 +0100 Subject: [PATCH] llvm: fix cross compilation issues llvm-config is a compiled host binary used to get infos about the target installation (sic). It currently lives in the target sysroot, which may not be usable because now we're mixing build host and target libraries: toolchain/x86_64-libreelec-linux-gnu/sysroot/usr/bin/llvm-config-host: relocation error: /lib/x86_64-linux-gnu/libpthread.so.0: symbol __libc_vfork version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference Move it to $TOOLCHAIN/bin where host binaries belong. But llvm-config doesn't support spitting out a library path from a different prefix than its own (which explains the placement in sysroot). Patch that in to prevail sanity. Then disable the z3 solver so the target doesn't use build host libraries. But that's broken too, use debian's patch to fix it up (with the addition to default to "OFF" instead on "ON"). Finally, disable new options and use the build type "MinSizeRel" for the host as well, courtesy if @MilhouseVH. --- config/functions | 4 +- packages/graphics/mesa/package.mk | 1 - packages/lang/llvm/package.mk | 19 +++++--- packages/lang/llvm/patches/llvm-config.patch | 13 ++++++ packages/lang/llvm/patches/no-z3.patch | 47 ++++++++++++++++++++ 5 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 packages/lang/llvm/patches/llvm-config.patch create mode 100644 packages/lang/llvm/patches/no-z3.patch diff --git a/config/functions b/config/functions index 04d32756da..e7d7002a85 100644 --- a/config/functions +++ b/config/functions @@ -416,7 +416,7 @@ cpp = '$CXX' ar = '$AR' strip = '$STRIP' pkgconfig = '$PKG_CONFIG' -llvm-config = '$SYSROOT_PREFIX/usr/bin/llvm-config-host' +llvm-config = '$TOOLCHAIN/bin/llvm-config-host' libgcrypt-config = '$SYSROOT_PREFIX/usr/bin/libgcrypt-config' [host_machine] @@ -446,7 +446,7 @@ cpp = '$TARGET_CXX' ar = '$TARGET_AR' strip = '$TARGET_STRIP' pkgconfig = '$PKG_CONFIG' -llvm-config = '$SYSROOT_PREFIX/usr/bin/llvm-config-host' +llvm-config = '$TOOLCHAIN/bin/llvm-config-host' libgcrypt-config = '$SYSROOT_PREFIX/usr/bin/libgcrypt-config' [host_machine] diff --git a/packages/graphics/mesa/package.mk b/packages/graphics/mesa/package.mk index d8091d6587..3cd2b77706 100644 --- a/packages/graphics/mesa/package.mk +++ b/packages/graphics/mesa/package.mk @@ -53,7 +53,6 @@ fi if [ "${LLVM_SUPPORT}" = "yes" ]; then PKG_DEPENDS_TARGET+=" elfutils llvm" - export LLVM_CONFIG="${SYSROOT_PREFIX}/usr/bin/llvm-config-host" PKG_MESON_OPTS_TARGET+=" -Dllvm=true" else PKG_MESON_OPTS_TARGET+=" -Dllvm=false" diff --git a/packages/lang/llvm/package.mk b/packages/lang/llvm/package.mk index 1a017bf314..bb63ca1b96 100644 --- a/packages/lang/llvm/package.mk +++ b/packages/lang/llvm/package.mk @@ -13,7 +13,8 @@ PKG_DEPENDS_HOST="toolchain:host" PKG_DEPENDS_TARGET="toolchain llvm:host zlib" PKG_LONGDESC="Low-Level Virtual Machine (LLVM) is a compiler infrastructure." -PKG_CMAKE_OPTS_COMMON="-DLLVM_INCLUDE_TOOLS=ON \ +PKG_CMAKE_OPTS_COMMON="-DCMAKE_BUILD_TYPE=MinSizeRel \ + -DLLVM_INCLUDE_TOOLS=ON \ -DLLVM_BUILD_TOOLS=OFF \ -DLLVM_BUILD_UTILS=OFF \ -DLLVM_BUILD_EXAMPLES=OFF \ @@ -21,10 +22,13 @@ PKG_CMAKE_OPTS_COMMON="-DLLVM_INCLUDE_TOOLS=ON \ -DLLVM_BUILD_TESTS=OFF \ -DLLVM_INCLUDE_TESTS=OFF \ -DLLVM_INCLUDE_GO_TESTS=OFF \ + -DLLVM_BUILD_BENCHMARKS=OFF \ -DLLVM_BUILD_DOCS=OFF \ -DLLVM_INCLUDE_DOCS=OFF \ -DLLVM_ENABLE_DOXYGEN=OFF \ -DLLVM_ENABLE_SPHINX=OFF \ + -DLLVM_ENABLE_OCAMLDOC=OFF \ + -DLLVM_ENABLE_BINDINGS=OFF \ -DLLVM_TARGETS_TO_BUILD="AMDGPU" \ -DLLVM_ENABLE_TERMINFO=OFF \ -DLLVM_ENABLE_ASSERTIONS=OFF \ @@ -35,14 +39,16 @@ PKG_CMAKE_OPTS_COMMON="-DLLVM_INCLUDE_TOOLS=ON \ -DLLVM_OPTIMIZED_TABLEGEN=ON \ -DLLVM_APPEND_VC_REV=OFF \ -DLLVM_ENABLE_RTTI=ON \ - -DLLVM_ENABLE_UNWIND_TABLES=OFF" + -DLLVM_ENABLE_UNWIND_TABLES=OFF \ + -DLLVM_ENABLE_Z3_SOLVER=OFF" -PKG_CMAKE_OPTS_HOST="$PKG_CMAKE_OPTS_COMMON \ - -DCMAKE_INSTALL_RPATH=$TOOLCHAIN/lib" +pre_configure_host() { + CXXFLAGS+=" -DLLVM_CONFIG_EXEC_PREFIX=\\\"$SYSROOT_PREFIX/usr\\\"" + PKG_CMAKE_OPTS_HOST="$PKG_CMAKE_OPTS_COMMON" +} pre_configure_target() { PKG_CMAKE_OPTS_TARGET="$PKG_CMAKE_OPTS_COMMON \ - -DCMAKE_BUILD_TYPE=MinSizeRel \ -DCMAKE_C_FLAGS="$CFLAGS" \ -DCMAKE_CXX_FLAGS="$CXXFLAGS" \ -DLLVM_TARGET_ARCH="$TARGET_ARCH" \ @@ -54,7 +60,8 @@ make_host() { } makeinstall_host() { - cp -a bin/llvm-config $SYSROOT_PREFIX/usr/bin/llvm-config-host + cp -a lib/libLLVM-*.so $TOOLCHAIN/lib + cp -a bin/llvm-config $TOOLCHAIN/bin/llvm-config-host cp -a bin/llvm-tblgen $TOOLCHAIN/bin } diff --git a/packages/lang/llvm/patches/llvm-config.patch b/packages/lang/llvm/patches/llvm-config.patch new file mode 100644 index 0000000000..b50c1a963e --- /dev/null +++ b/packages/lang/llvm/patches/llvm-config.patch @@ -0,0 +1,13 @@ +--- a/tools/llvm-config/llvm-config.cpp 2019-12-15 20:54:21.898634608 +0100 ++++ b/tools/llvm-config/llvm-config.cpp 2019-12-15 20:56:12.280223943 +0100 +@@ -285,6 +285,10 @@ + CurrentExecPrefix = + sys::path::parent_path(sys::path::parent_path(CurrentPath)).str(); + ++#ifdef LLVM_CONFIG_EXEC_PREFIX ++ CurrentExecPrefix = LLVM_CONFIG_EXEC_PREFIX; ++#endif ++ + // Check to see if we are inside a development tree by comparing to possible + // locations (prefix style or CMake style). + if (sys::fs::equivalent(CurrentExecPrefix, LLVM_OBJ_ROOT)) { diff --git a/packages/lang/llvm/patches/no-z3.patch b/packages/lang/llvm/patches/no-z3.patch new file mode 100644 index 0000000000..fc468ca3b7 --- /dev/null +++ b/packages/lang/llvm/patches/no-z3.patch @@ -0,0 +1,47 @@ +Description: + Disable z3 to avoid pulling ocaml into main. + For some reason the cmake option LLVM_ENABLE_Z3_SOLVER was not taken into account +Author: Gianfranco Costamagna + +Last-Update: 2019-11-26 + +Index: llvm-toolchain-9-9.0.0/CMakeLists.txt +=================================================================== +--- llvm-toolchain-9-9.0.0.orig/CMakeLists.txt ++++ llvm-toolchain-9-9.0.0/CMakeLists.txt +@@ -340,24 +340,22 @@ + + set(LLVM_Z3_INSTALL_DIR "" CACHE STRING "Install directory of the Z3 solver.") + +-find_package(Z3 4.7.1) +- +-if (LLVM_Z3_INSTALL_DIR) +- if (NOT Z3_FOUND) +- message(FATAL_ERROR "Z3 >= 4.7.1 has not been found in LLVM_Z3_INSTALL_DIR: ${LLVM_Z3_INSTALL_DIR}.") +- endif() +-endif() +- +-set(LLVM_ENABLE_Z3_SOLVER_DEFAULT "${Z3_FOUND}") +- + option(LLVM_ENABLE_Z3_SOLVER + "Enable Support for the Z3 constraint solver in LLVM." +- ${LLVM_ENABLE_Z3_SOLVER_DEFAULT} ++ OFF + ) + + if (LLVM_ENABLE_Z3_SOLVER) +- if (NOT Z3_FOUND) +- message(FATAL_ERROR "LLVM_ENABLE_Z3_SOLVER cannot be enabled when Z3 is not available.") ++ find_package(Z3 4.7.1) ++ ++ if (LLVM_Z3_INSTALL_DIR) ++ if (NOT Z3_FOUND) ++ message(FATAL_ERROR "Z3 >= 4.7.1 has not been found in LLVM_Z3_INSTALL_DIR: ${LLVM_Z3_INSTALL_DIR}.") ++ endif() ++ else() ++ if (NOT Z3_FOUND) ++ message(FATAL_ERROR "LLVM_ENABLE_Z3_SOLVER cannot be enabled when Z3 is not available.") ++ endif() + endif() + + set(LLVM_WITH_Z3 1)