13 Commits

Author SHA1 Message Date
Alex Bradbury
d84755b10d [docs] Fix broken formatting for link in HowToCrossCompileLLVM
The usual `_ vs _` problem.
2025-03-11 20:37:41 +00:00
Alex Bradbury
ba11e1e522
[docs] Rewrite HowToCrossCompileLLVM (#129451)
The document has had a few minor tweaks over the years, but the last
major piece of work on it was 2016, after first being introduced in
2013. My aim is to provide a clear and clean recipe for cross-compiling
LLVM that:
* Should be achievable for anyone on common variants of Linux
(_including_ the step of acquiring a working sysroot).
* I think I've kept the coverage of setting up acquiring a Debian
sysroot minimal enough that it can reasonably be included. `debootstrap`
is packaged for most common Linux distributions including non-Debian
derived distributions like Arch Linux and Fedora.
* Describes a setup that we can reasonably support within the community.
* I realise with the ninja symlink canonicalisation issue I haven't
completely avoided hacks, but I look particularly to point 2 under hacks
in the current docs which talks about libraries on the host being found
by CMake and adding `-L` and `-I` to try to hack around this. We've all
been there and made these kind of temporary workarounds to see if we can
get further, but it's very hard to support someone who has problems with
a setup that's improperly leaking between the host and target like this.
The approach I describe with a clean sysroot and setting appropriate
`CMAKE_FIND_ROOT_PATH_MODE_*` settings doesn't have this issue.
* Cuts down on extraneous / outdated information, especially where it is
better covered elsewhere (e.g. detailed descriptions of CMake options
not directly relevant to cross compilation).

I've run through the instructions for AArch64, RISC-V (64-bit), and
armhf.
2025-03-11 18:33:53 +00:00
Martin Storsjö
4cda8e6267 [docs] Rewrite/improve the docs for LLVM_NATIVE_TOOL_DIR
Don't include it among the mandatory options; the automatically built
tools via a nested cmake build work fine these days
(in particular, since 93010544a813dfbfa64dd7cee68785f572f974d1 /
https://reviews.llvm.org/D126313).

Clarify the directory path-to-host-bin into something more verbose,
to avoid ambiguity with LLVM_HOST_TRIPLE.

Differential Revision: https://reviews.llvm.org/D142960
2023-02-03 10:55:33 +02:00
Martin Storsjö
cb19e3b20d [docs] Prefer setting LLVM_HOST_TRIPLE instead of LLVM_DEFAULT_TARGET_TRIPLE and LLVM_TARGET_ARCH
Setting LLVM_HOST_TRIPLE propagates the information to a few more
places than if only setting LLVM_TARGET_ARCH and
LLVM_DEFAULT_TARGET_TRIPLE, while both of those settings get their
defaults implied from LLVM_HOST_TRIPLE if they're not overridden.

Differential Revision: https://reviews.llvm.org/D142404
2023-02-03 10:54:29 +02:00
Martin Storsjö
95a2aeca3b [docs] Add/update docs regarding LLVM_NATIVE_TOOL_DIR vs LLVM_TABLEGEN
Differential Revision: https://reviews.llvm.org/D142349
2023-01-23 23:49:37 +02:00
Tobias Hieta
350bdf9227 [CMake] Make omitting CMAKE_BUILD_TYPE an error
After a lot of discussion in this diff the consensus was that it is really hard to guess the users intention with their LLVM build. Instead of trying to guess if Debug or Release is the correct default option we opted for just not specifying CMAKE_BUILD_TYPE a error.

Discussion on discourse here:
https://discourse.llvm.org/t/rfc-select-a-better-linker-by-default-or-warn-about-using-bfd

Reviewed By: hans, mehdi_amini, aaron.ballman, jhenderson, MaskRay, awarzynski

Differential Revision: https://reviews.llvm.org/D124153
2022-05-04 14:01:33 +02:00
fourdim
bc53ebbda8 [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
2022-02-19 20:37:12 +08:00
Fangrui Song
d2cc23a337 [docs] HowToCrossCompileLLVM.rst: prefer --target= over legacy -target 2022-01-25 12:39:32 -08:00
Sylvestre Ledru
72fd1033ea Doc: Links should use https 2020-03-22 22:49:33 +01:00
Renato Golin
e01a94a6c5 [docs] Fix unexpected indentation in HowToCrossCompileLLVM.rst
Seems like my sphynx version is different than the one in the bot, as it
accepted everything locally. I think this is the right fix...

llvm-svn: 269062
2016-05-10 14:02:46 +00:00
Renato Golin
6617236572 [docs] Change CrossCompilation guidde to reflect changes in Clang/GCC
HowToCrossCompile was outdated and generating too much traffic on the mailing
list with similar queries. This change helps offset most of the problems that
were reported recently including:

 * Removing the -ccc-gcc-name, adding --sysroot
 * Making references to Debian's multiarch for target libraries
 * Expanding -DCMAKE_CXX_FLAGS for both GCC and Clang
 * Some formatting and clarifications in the text

llvm-svn: 269054
2016-05-10 12:54:12 +00:00
Sean Silva
23d2f6989e [docs] Some typographical fixes.
llvm-svn: 190324
2013-09-09 19:05:03 +00:00
Renato Golin
d24899bfc2 Cross-compilation doc
llvm-svn: 190282
2013-09-08 20:44:48 +00:00