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 >>> libgcc_s (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: >>> $clang_src/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 <build system> >>> -DBAREMETAL_ARMV7EM_SYSROOT=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>
Jonathan Roelofs via llvm-dev
2017-Aug-04 21:34 UTC
[llvm-dev] Cross compiling C++ program
On 8/4/17 3:04 PM, Matthias Braun wrote:> 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.AFAIU, ELLCC doesn't support baremetal. It only has linux targets. Jon> > - Matthias > >> On Aug 4, 2017, at 12:54 PM, Jonathan Roelofs via llvm-dev >> <llvm-dev at lists.llvm.org <mailto: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 >>>> libgcc_s (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: >>>> $clang_src/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 <build system> >>>> -DBAREMETAL_ARMV7EM_SYSROOT=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 >> >> -- >> 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 >-- Jon Roelofs jonathan at codesourcery.com CodeSourcery / Mentor Embedded / Siemens -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170804/3acd8659/attachment-0001.html>
On Fri, Aug 04, 2017 at 02:04:17PM -0700, Matthias Braun wrote:> 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. > > - MatthiasI am talking with him on IRC to try to make ELLCC run on FreeBSD via Linux emulation and maybe get started with that. -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170804/80fd91bd/attachment.sig>
Richard Pennington via llvm-dev
2017-Aug-05 12:41 UTC
[llvm-dev] Cross compiling C++ program
On 08/04/2017 04:34 PM, Jonathan Roelofs via llvm-dev wrote:> > > > On 8/4/17 3:04 PM, Matthias Braun wrote: >> 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. > > AFAIU, ELLCC doesn't support baremetal. It only has linux targets. > > > Jon >ELLCC has been used for baremetal stuff, but it takes some work. I'm looking at adding NuttX support, which will make baremetal much easier. -Rich>> >> - Matthias >> >>> On Aug 4, 2017, at 12:54 PM, Jonathan Roelofs via llvm-dev >>> <llvm-dev at lists.llvm.org <mailto: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 >>>>> libgcc_s (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: >>>>> $clang_src/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 <build system> >>>>> -DBAREMETAL_ARMV7EM_SYSROOT=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 >>> >>> -- >>> 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 >> > > -- > Jon Roelofs > jonathan at codesourcery.com > CodeSourcery / Mentor Embedded / Siemens > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > 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/20170805/d2f1d8eb/attachment-0001.html>