From bc53ebbda8fb9727784a0429730b7902fed593e6 Mon Sep 17 00:00:00 2001 From: fourdim Date: Sat, 19 Feb 2022 20:36:31 +0800 Subject: [PATCH] [docs] HowToCrossCompileLLVM.rst: update cmake options This patch updates the cmake options suggested when cross compiling. This should fix [#52819](https://github.com/llvm/llvm-project/issues/52819). Brad King (Member of CMake) says: The linked [CMAKE_CROSSCOMPILING](https://cmake.org/cmake/help/v3.22/variable/CMAKE_CROSSCOMPILING.html) documentation says: This variable will be set to true by CMake if the `CMAKE_SYSTEM_NAME` variable has been set manually (i.e. in a toolchain file or as a cache entry from the cmake command line). It is not meant to be set by project code or toolchain files. It is always set automatically. Don't put `set(CMAKE_CROSSCOMPILING ON)` anywhere in your code. `CMAKE_CROSSCOMPILING` indicates only whether `CMAKE_SYSTEM_NAME` was set by the user/project/toolchain-file instead of by CMake. In LLVM project, `CMAKE_CROSSCOMPILING` is used to determine whether to execute some tests on the host machine. LLVM needs to use another method for that. `CMAKE_CROSSCOMPILING` is not a reliable indicator of whether produced binaries will run on the host, and does not claim so in its documentation. If one sets `CMAKE_SYSTEM_NAME` to Linux in a toolchain file, and builds on a Linux host, that doesn't mean the target architecture or minimum glibc version is the same. Reviewed By: rengolin Differential Revision: https://reviews.llvm.org/D119804 --- llvm/docs/HowToCrossCompileLLVM.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/llvm/docs/HowToCrossCompileLLVM.rst b/llvm/docs/HowToCrossCompileLLVM.rst index e1ad8e5f5f4f..0df4ba96517e 100644 --- a/llvm/docs/HowToCrossCompileLLVM.rst +++ b/llvm/docs/HowToCrossCompileLLVM.rst @@ -40,7 +40,7 @@ see :doc:`CMake`. The CMake options you need to add are: - * ``-DCMAKE_CROSSCOMPILING=True`` + * ``-DCMAKE_SYSTEM_NAME=`` * ``-DCMAKE_INSTALL_PREFIX=`` * ``-DLLVM_TABLEGEN=/llvm-tblgen`` * ``-DCLANG_TABLEGEN=/clang-tblgen`` @@ -48,6 +48,8 @@ The CMake options you need to add are: * ``-DLLVM_TARGET_ARCH=ARM`` * ``-DLLVM_TARGETS_TO_BUILD=ARM`` +Note: ``CMAKE_CROSSCOMPILING`` is always set automatically when ``CMAKE_SYSTEM_NAME`` is set. Don't put ``-DCMAKE_CROSSCOMPILING=TRUE`` in your options. + If you're compiling with GCC, you can use architecture options for your target, and the compiler driver will detect everything that it needs: