Release:
https://github.com/llvm/llvm-project/releases/tag/llvmorg-20.1.5
Major Changes and Fixes:
-- CMake 3.20 minimum required
-- Issue encountered during standalone LLVM build:
CMake Error at CMakeLists.txt:8 (include):
include could not find requested file:
This error is due to the line:
include(${LLVM_COMMON_CMAKE_UTILS}/Modules/CMakePolicy.cmake)
Upstream commit [1] harmonized policy handling by introducing this shared include
for all LLVM sub-projects. However, in the LLVM CMakeLists, LLVM_COMMON_CMAKE_UTILS
is set unconditionally, preventing external override — which is required in
Buildroot when building from separated archives.
To solve this:
We apply a patch to wrap the assignment of LLVM_COMMON_CMAKE_UTILS in an
`if(NOT DEFINED ...)` block, allowing Buildroot to set the path externally.
In the `llvm-cmake` package, we also **adjust the installation path** of the
CMake modules: instead of installing directly into `lib/cmake/llvm`, we now
install them under `lib/cmake/llvm/Modules` to match the expected layout.
This ensures that:
LLVM can include `${LLVM_COMMON_CMAKE_UTILS}/Modules/CMakePolicy.cmake`
without errors.
-- Also the Clang build system has removed support for
the GCC_INSTALL_PREFIX option, raising a fatal error when attempting to use it:
CMake Error at CMakeLists.txt:211 (message):
GCC_INSTALL_PREFIX is deprecated and will be removed.
Use configuration files (https://clang.llvm.org/docs/UsersManual.html#configuration-files)
to specify the default --gcc-install-dir= or --gcc-triple=.
--gcc-toolchain= is discouraged.
See https://github.com/llvm/llvm-project/pull/77537
for details.
Remove the use of GCC_INSTALL_PREFIX and replace it with a
Clang configuration file as recommended by upstream.
A configuration file is now automatically generated at:
$(HOST_DIR)/lib/clang/$(CLANG_VERSION_MAJOR)/$(GNU_TARGET_NAME).cfg
It contains:
--gcc-install-dir=<path to external toolchain's lib/gcc/...>
--target=<GNU target triplet>
We dynamically detect the GCC install path by scanning
$(TOOLCHAIN_EXTERNAL_INSTALL_DIR)/lib/gcc/<target>/<version>/
The Clang toolchain wrapper was also updated to add --config=<file> when
BR_CLANG_CONFIG_FILE is defined.
-- Fix LLVM_MAIN_SRC_DIR path:
set(LLVM_MAIN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../llvm" CACHE PATH ...)
This path isn't correct when using standalone archive builds. We explicitly pass
LLVM_MAIN_SRC_DIR=$(BUILD_DIR)/llvm-$(LLVM_PROJECT_VERSION) to fix the path. [2]
-- Add LLVM_ENABLE_RUNTIMES:
Upstream added LLVM_ENABLE_RUNTIMES for runtimes [3]
-- Removed LLVM_INCLUDE_GO_TESTS:
Upstream dropped this option; we remove it too [4]
-- Disable TensorFlow Lite integration:
LLVM_HAVE_TFLITE is added to the CMakelist
We now explicitly disable it to avoid unexpected
TensorFlow Lite dependency.
-- Clang introduced CLANG_ENABLE_LIBXML2 [5]
We now explicitly disable it by setting CLANG_ENABLE_LIBXLM2=OFF
since we set LLVM_ENABLE_LIBXML2 to OFF in LLVM
-- Host-python3, which is now always needed by Clang’s resource bundling
script. [6]
-- Clang explicitly request to disable llvm tests when llvm_gtest is missing.[7]
CMake Error at CMakeLists.txt:126 (message):
llvm-gtest not found. Please install llvm-gtest or disable tests with
-DLLVM_INCLUDE_TESTS=OFF
-- Also update the installation path in COMPILER_RT_SETUP_RUNTIME_LIBS
to use CLANG_VERSION_MAJOR instead of HOST_CLANG_VERSION,
ensuring that the runtime files are placed correctly
in the /lib/clang/<major>/ folder. [8]
-- Add llvm-runtimes dependency
libunwind needs runtimes [9]
-- Fix for libclc out of tree patch
Due to upstream changes in libclc, the old patch no longer
applies. Only the fix related to invoking './prepare_builtins'
directly is still relevant and preserved, as it is required to avoid
a build failure when the binary is not in PATH.
-- Upstream commit [10] removed the use of llvm-config in libclc and
replaced it with proper use of LLVM_CMAKE_DIR. We now pass
-DLLVM_CMAKE_DIR instead of DLLVM_CONFIG
-- Libclc expects to invoke some LLVM tools. We explicitly set
LIBCLC_CUSTOM_LLVM_TOOLS_BINARY_DIR to ensure it finds these tools. [11]
-- Remove LLAsm_COMPILER and CLC_COMPILER [12]
-- LIBUNWIND_INSTALL_HEADERS is On by default [13]
-- Update spirv-llvm-translator to align with LLVM 20.1.5
Release:
https://github.com/KhronosGroup/SPIRV-LLVM-Translator/releases/tag/v20.1.2
[1] 9dd01a5241
[2] d2b158e29e
[3] 176db3b3ab
[4] 6ce8727248
[5] df239a6c17
[6] 96962d5512
[7] 8216910395
[8] e1b88c8a09
[9] 0af67d167d
[10] b264787453
[11] 0aeeff3059
[12] 72f9881c3f
[13] f8409af354
Signed-off-by: El Mehdi YOUNES <elmehdi.younes@smile.fr>
Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
[Bernd: rebased, removed gcc-15 patches for llvm 15, bumped to 20.1.5]
used 'git describe' to set the version number for spirv-llvm-translator]
[Mehdi: changed llvm-runtimes version to $(LLVM_PROJECT_VERSION)]
Signed-off-by: Julien Olivain <ju.o@free.fr>