[llvm-dev] Cross compiling C++ program (original) (raw)
Matthias Braun via llvm-dev llvm-dev at lists.llvm.org
Fri Aug 4 14:04:17 PDT 2017
- Previous message: [llvm-dev] Cross compiling C++ program
- Next message: [llvm-dev] Cross compiling C++ program
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
You may also take a look at the ELLCC project (www.ellcc.org <http://www.ellcc.org/>). As far as I understand it they produce and package cross toolchains for a number of popular targets.
- Matthias
On Aug 4, 2017, at 12:54 PM, Jonathan Roelofs via llvm-dev <llvm-dev at lists.llvm.org> wrote:
On 8/4/17 1:14 PM, Goran Mekić via llvm-dev wrote: On Thu, Aug 03, 2017 at 08:22:24AM -0600, Jonathan Roelofs wrote: IIUC, you don't want to cross compile llvm itself (which is what those instructions are for), but instead you want to use llvm to cross compile things.
To build your sysroot, you'll need to cross-build: 1) A libc. Good choices for that for baremetal are: newlib or musl. 2) Builtins. In llvm, that's provided in the compiler-rt repo. Otherwise you can use libgcc from an arm-none-eabi-gcc toolchain. 3) If you want c++, you'll also need: 3A) c++ abi library. llvm provides this as libcxxabi. There's also libsupc++, and libcxxrt, depending on what licenses you're comfortable with. 3B) An unwinder. llvm provides libunwind. There's also one packaged in libgccs (depending on how it was built), and another from the old HP libunwind project (different codebase, but same name as the llvm one). 3C) A c++ standard library. llvm provides this as libcxx. There's also libstdc++.
To start with, I recommend using the cmake cache in: $clangsrc/cmake/caches/BaremetalARM.cmake. You'll want the stuff in it that references the armv7em-none-eabi triple. To use it, do something like: $ cmake -G -DBAREMETALARMV7EMSYSROOT=path/to/your/v7em/sysroot -C path/to/BaremetalARM.cmake [other CMake Options] Assuming your sysroot has libc headers in it, that should get you a clang that's capable of compiling basic things, which you can use to build all the libraries above. Jon Hello, Your input was very valuable, but I must be too noob so I have to ask. I tried to read as much as I could about musl, compiler-rt and libunwind to understand what are those libs and I decided to go with a "relexed" licenced alternatives. :o) If I got it right, the order of repos I need to compile is: - musl - compiler-rt - libcxxabi - libunwind - libcxx - clang (with the suggestion about baremetal cache) Not quite. You'll need clang built in order to build the other things. (I guess you could use your existing toolchain to do that, but IIUC, you want to use clang for all of it & bootstrap a full clang-based toolchain). For that, the usual order is to: 1) Pick a directory as your sysroot 2) Install the libc headers there (without having built it) 3) Build clang w/ baremetal cache, pointing it at the partially built sysroot. 4) Build your libc. 4A) Test your libc. 4B) Install your libc in your sysroot. 5) Build libcxxabi. (it's build needs to know where the source for libcxx lives) 5A) Test libcxxabi. (testing it requires knowing where source for libcxx lives. use remote executors & linker scripts to run on your board, or in qemu) 5B) Install libcxxabi in your sysroot. 6) Build libunwind. 6A) Test libunwind. (testing it requires knowing where source for libcxx lives. use remote executors & linker scripts to run on your board, or in qemu) 6B) Install libunwind in your sysroot. 7) Build libcxx. 7A) Test libcxx. (use remote executors & linker scripts to run on your board, or in qemu) 7B) Install libcxx in your sysroot. A note on linker scripts: support for them in lld is still a bit rough around the edges, so you may want to use the linker that comes with your board (presumably binutils ld). If you know any doc on how to get clang++ compile for any bare metal arm, I'll be glad to RTFM. :o) Sorry, I don't have a doc for that. We're getting closer to making it work "out of the tin", but it's not there yet. We (wearing my CodeSourcery hat) are working on it, but it's going to take some time before it "just works" upstream. Jon
LLVM Developers mailing list llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev> -- Jon Roelofs jonathan at codesourcery.com <mailto:jonathan at codesourcery.com> CodeSourcery / Mentor Embedded / Siemens
LLVM Developers mailing list llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev> -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170804/9f9a06ff/attachment.html>
- Previous message: [llvm-dev] Cross compiling C++ program
- Next message: [llvm-dev] Cross compiling C++ program
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]