Hello all, Pardon me if this has already been covered elsewhere, however I have not been able to find such documentation. Is there a consolidated set of documentation that clearly explains what's necessary to port LLVM to other OSes & how to add support for building executables (& libraries) for those OSes? I'm searching through the source in an attempt to understand what needs to be done, but this codebase isn't the most simple of codebases. Thanks for any potential help! Regards, Apollo D. Sharpe, Sr.
Robinson, Paul via llvm-dev
2016-Oct-11 20:42 UTC
[llvm-dev] Port to other Operating Systems
> -----Original Message----- > From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Dee > Sharpe via llvm-dev > Sent: Tuesday, October 11, 2016 8:23 AM > To: llvm-dev at lists.llvm.org > Subject: [llvm-dev] Port to other Operating Systems > > Hello all, > > Pardon me if this has already been covered elsewhere, however I have not > been able to find such documentation. Is there a consolidated set of > documentation that clearly explains what's necessary to port LLVM to other > OSes & how to add support for building executables (& libraries) for those > OSes? I'm searching through the source in an attempt to understand what > needs to be done, but this codebase isn't the most simple of codebases. > Thanks for any potential help!I assume you are interested in hosts (not targets). I'm not aware of any documentation per se. If your host OS is not Unix-like or Windows-like, it will probably take some doing. The first hurdle I can imagine is just getting the build system to work for you; we use CMake, which might or might not support your OS out of the box. After that you'd likely need to do some work in the source itself; we try to isolate much of the platform-dependent stuff in llvm/lib/Support but I think there are some other places scattered around that are still under conditional compilation. +John Reagan who is point man for a project to (ultimately) bootstrap Clang for OpenVMS. He might have a better idea what's needed, although last I talked to him they were going to use cross-compilation for quite some time. Hope this helps, --paulr> > Regards, > Apollo D. Sharpe, Sr. > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Hi, for a first impression you can have a look at this FOSDEM talk: https://archive.fosdem.org/2016/schedule/event/llvm_to_new_os/ Regards, Kai On 11.10.2016 17:23, Dee Sharpe via llvm-dev wrote:> Hello all, > > Pardon me if this has already been covered elsewhere, however I have not been able to find such documentation. Is there a consolidated set of documentation that clearly explains what's necessary to port LLVM to other OSes & how to add support for building executables (& libraries) for those OSes? I'm searching through the source in an attempt to understand what needs to be done, but this codebase isn't the most simple of codebases. Thanks for any potential help! > > Regards, > Apollo D. Sharpe, Sr. > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >
On Ubuntu 16.04 I just did: nm -D -u /usr/lib/llvm-3.8/bin/clang | grep -v llvm | grep -v LLVM | grep -v _Z I got 53 results: U abort U asctime U calloc U chdir U close U ConvertUTF8toUTF16 U ConvertUTF8toUTF32 U __cxa_atexit U __cxa_guard_acquire U __cxa_guard_release U __cxa_pure_virtual U __errno_location U exit U __fprintf_chk U free U getenv U getNumBytesForUTF8 U getuid w __gmon_start__ U isLegalUTF8Sequence w _ITM_deregisterTMCloneTable w _ITM_registerTMCloneTable w _Jv_RegisterClasses U __libc_start_main U localtime U malloc U memchr U memcmp U memcpy U __memcpy_chk U memmove U memset U __popcountdi2 U __printf_chk w __pthread_key_create U qsort U realloc U __realpath_chk U __snprintf_chk U __stack_chk_fail U stderr U strchr U strcmp U strdup U strlen U strncmp U strpbrk U strrchr U strstr U strtol U strtoul U time U __xstat Some of those are still provided in llvm itself (e.g. the UTF8 stuff) but most of the rest are dead standard C library things -- not even POSIX. Without thinking about it too much, the least portable and hardest to fake look like time, localtime, and getuid. Which means: not very hard. Build system is another matter entirely... That's clang, but I don't expect an optimizer to be very system dependent :-) On Wed, Oct 12, 2016 at 9:42 AM, Robinson, Paul via llvm-dev < llvm-dev at lists.llvm.org> wrote:> > > > -----Original Message----- > > From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Dee > > Sharpe via llvm-dev > > Sent: Tuesday, October 11, 2016 8:23 AM > > To: llvm-dev at lists.llvm.org > > Subject: [llvm-dev] Port to other Operating Systems > > > > Hello all, > > > > Pardon me if this has already been covered elsewhere, however I have not > > been able to find such documentation. Is there a consolidated set of > > documentation that clearly explains what's necessary to port LLVM to > other > > OSes & how to add support for building executables (& libraries) for > those > > OSes? I'm searching through the source in an attempt to understand what > > needs to be done, but this codebase isn't the most simple of codebases. > > Thanks for any potential help! > > I assume you are interested in hosts (not targets). I'm not aware of any > documentation per se. If your host OS is not Unix-like or Windows-like, > it will probably take some doing. The first hurdle I can imagine is just > getting the build system to work for you; we use CMake, which might or > might not support your OS out of the box. After that you'd likely need > to do some work in the source itself; we try to isolate much of the > platform-dependent stuff in llvm/lib/Support but I think there are some > other places scattered around that are still under conditional compilation. > > +John Reagan who is point man for a project to (ultimately) bootstrap > Clang for OpenVMS. He might have a better idea what's needed, although > last I talked to him they were going to use cross-compilation for quite > some time. > > Hope this helps, > --paulr > > > > > Regards, > > Apollo D. Sharpe, Sr. > > _______________________________________________ > > LLVM Developers mailing list > > llvm-dev at lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > _______________________________________________ > 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/20161012/f2d4043f/attachment.html>
As part of our port of OpenVMS to x86-64, we are using LLVM with our own frontends on OpenVMS Itanium. We are writing a converter between our old backend's IR and the LLVM IR. We can cross-compile (hosted on OpenVMS Itanium) and link/execute on x86-64 CentOS. At present, we pass over 88% of our C test suite. Porting starts with being able to compile the code. Since we are stuck with a C++03 (sorta) compiler that uses an EDG frontend and the Intel Itanium backend, we had to start with an older LLVM release that did not use C++11 source code. We went with 3.4.2. I was able to build LLVM 3.4.2 with our old C++ compiler with little issues (I think I had to add about 5 or so "#ifdef __vms" to some modules in lib/Support). There were a handful of missing RTL interfaces due to OpenVMS not having complete C99 header support (that is being worked on now). I wrote a bunch of empty jackets to work around the missing symbols. So far, I haven't had to come back and fill in ANY of them (I'm sure I will bump into them at some point). And we'll build clang 3.4.2 using the same old C++ compiler and then hopefully once we have working OpenVMS x86 systems, I can use that clang to cross-compile a newer clang/LLVM pair (perhaps in several small step or all at once - we'll just wing it). And we'll need a working cmake on OpenVMS by that time. From peeking at the code, that might be the harder part. We might have to just grab cmake generated Makefile's from a Linux box and hack our way to daylight. Do you have cmake? Do you have some sort of bash shell and gnu tools? (OpenVMS has a "GNV" package with a bash shell, fileutils, diffutils, make, grep, awk, etc. which really reduces the effort) Compiling the code is just a start however. You'll eventually want to link those objects you create. What OS are you using and what hardware platform?> -----Original Message----- > From: Robinson, Paul [mailto:paul.robinson at sony.com] > Sent: Tuesday, October 11, 2016 4:43 PM > To: Dee Sharpe > Cc: llvm-dev at lists.llvm.org; John Reagan > Subject: RE: [llvm-dev] Port to other Operating Systems > > > > > -----Original Message----- > > From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of > > Dee Sharpe via llvm-dev > > Sent: Tuesday, October 11, 2016 8:23 AM > > To: llvm-dev at lists.llvm.org > > Subject: [llvm-dev] Port to other Operating Systems > > > > Hello all, > > > > Pardon me if this has already been covered elsewhere, however I have > > not been able to find such documentation. Is there a consolidated set > > of documentation that clearly explains what's necessary to port LLVM > > to other OSes & how to add support for building executables (& > > libraries) for those OSes? I'm searching through the source in an > > attempt to understand what needs to be done, but this codebase isn't > the most simple of codebases. > > Thanks for any potential help! > > I assume you are interested in hosts (not targets). I'm not aware of > any documentation per se. If your host OS is not Unix-like or Windows- > like, it will probably take some doing. The first hurdle I can imagine > is just getting the build system to work for you; we use CMake, which > might or might not support your OS out of the box. After that you'd > likely need to do some work in the source itself; we try to isolate > much of the platform-dependent stuff in llvm/lib/Support but I think > there are some other places scattered around that are still under > conditional compilation. > > +John Reagan who is point man for a project to (ultimately) bootstrap > Clang for OpenVMS. He might have a better idea what's needed, although > last I talked to him they were going to use cross-compilation for quite > some time. > > Hope this helps, > --paulr > > > > > Regards, > > Apollo D. Sharpe, Sr. > > _______________________________________________ > > LLVM Developers mailing list > > llvm-dev at lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Seemingly Similar Threads
- Port to other Operating Systems
- [LLVMdev] Introduction for new consumer of LLVM
- x86-64 unwind additions
- [cfe-dev] Fwd: Raising CMake minimum version to 3.4.3
- [RFC] Coding Standards: "prefer `int` for, regular arithmetic, use `unsigned` only for bitmask and when you, intend to rely on wrapping behavior."