[swift-dev] Cross-compiling with Toolchain files

Tom Birch froody at gmail.com
Tue Feb 16 15:48:44 CST 2016

I'm working on cross-compiling swift using OS X to build a linux-arm
runtime/stdlib, and I've had some success. My change is here:


Steps to repro are in cmake/modules/Toolchain-linux-arm.cmake

It's still a work in progress, but I wanted to get some feedback on whether
or not I'm going in the right direction. Toolchain files are the
recommended way for cross-compiling with CMake, but it seems like it
doesn't mesh well with the current system of building multiple mach-o
targets from a single CMake invocation (e.g. OS X, iOS, tvOS and watchOS
built on OS X). I've also had to fight the build-system a lot (using many
--skip-build-foo flags, and two invocations of ./utils/build-script) in
order to avoid building ninja targets that don't exist, and I'm wondering
if there's a better way to do this, i.e. to build llvm/clang/swiftc for OS
X in llvm-macosx-x86_64/swift-macosx-x86_64 build directories, and use that
to build (swiftc?)/stdlib/tests for linux-arm in a swift-linux-armv7 build
directory. Maybe this is a good reason to do
https://bugs.swift.org/browse/SR-237 first/in parallel?

I also required a change to LLVM:


to fix this error:

CMake Error: The inter-target dependency graph contains the following
strongly connected component (cycle):
  "NativeLLVMConfig" of type UTILITY
    depends on "llvm-config" (strong)
  "llvm-config" of type EXECUTABLE
    depends on "NativeLLVMConfig" (strong)

Maybe Chris Bieneman has an idea about this? I seemed to successfully
cross-compile with the "False AND" hack, not sure what's going on.

Anyway, I'd appreciate any feedback on the direction/next steps.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-dev/attachments/20160216/8d7859ea/attachment.html>

More information about the swift-dev mailing list