[llvm-dev] [CMake] CMAKE_TOOLCHAIN_FILE and projects

Joel Winarske via llvm-dev llvm-dev at lists.llvm.org
Thu Dec 27 11:46:30 PST 2018


Hi,

I'm working on cross-compiling llvm and sub-projects to dynamically build
Clang toolchain and associated libraries for an embedded project.

I'm starting with this mailing list, as I see the pattern using
"config-ix.cmake" a common one; it's found in all the sub-projects.

For those that are not aware, in CMake the standard approach for dealing
with unique toolchains, system roots, etc is through the use of  a
CMAKE_TOOLCHAIN_FILE variable.  This toolchain file is used to define the
compiler, system type, architecture, sysroot, etc.  It enables a simpler,
and more versatile build script.

With tip of the tree on llvm and sub-projects now, when I use a toolchain
file, I'm finding I have to make edits to the config-ix.cmake files.  The
issue is related to re-defining CMAKE_SYSROOT and the use of; among others:

    set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -nodefaultlibs")

When this flag is used in stand-alone cross-compiled builds (using
toolchain file to set the CMAKE_SYSROOT), it causes all the subsequent flag
checks to fail.

I think leveraging an implied CMake toolchain file for sub-projects should
be the preferred solution for "projects", and it's a fairly minor change to
accommodate.

Stand-alone cross-compiled example for libunwind, compiler-rt, libcxxabi,
and libcxx here (This config requires edits to the associated
config-ix.cmake files for this to work):

    https://github.com/jwinarske/flutter_embedded


Perhaps there is already a working solution to cross-compile the
sub-projects from a single build invocation now?  I found when
cross-compiling compiler-rt as part of the Clang build, it fails due to
sysroot issues.  Something which the CMake toolchain file scenario would
cleanly solve.  The end goal being, when I set the list
LLVM_TARGETS_TO_BUILD to desired targets, one could expect cross-compiled
bits (as applicable) for each sub-project.  This would greatly simplify
building a toolchain config.

Perhaps I'm not clear on the current solution, and this already does what
is needed for stand-alone cross-compiling?  Until convinced otherwise, I
think there is room for improvement here, and am willing to donate time to
address it.


Cheers,
Joel Winarske
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181227/c2334cff/attachment.html>


More information about the llvm-dev mailing list