Welcome to the LLVM project!
This repository contains the source code for LLVM, a toolkit for the construction of highly optimized compilers, optimizers, and run-time environments.
The LLVM project has multiple components. The core of the project is itself called "LLVM". This contains all of the tools, libraries, and header files needed to process intermediate representations and convert them into object files. Tools include an assembler, disassembler, bitcode analyzer, and bitcode optimizer.
C-like languages use the Clang frontend. This component compiles C, C++, Objective-C, and Objective-C++ code into LLVM bitcode -- and from there into object files, using LLVM.
Other components include: the libc++ C++ standard library, the LLD linker, and more.
Consult the Getting Started with LLVM page for detailed information on configuring and compiling LLVM. You can visit Directory Layout to learn about the layout of the source code tree.
This is a very experimental port. It's is designed to work inside ios_system (https://github.com/holzschu/ios_system), which itself is supposed to be embedded inside shell applications such as OpenTerm, a-Shell or Blink:
Compilation of the entire package takes several hours (divided by the number of cores you can give to the compiler).
The steps for compilation are:
- compile LLVM, clang, lld, libcxx and libcxxabi for OSX
- make sure ios_system has been compiled, and if not compile it.
- compile LLVM and clang for iOS and the Simulator (that's the long step)
"bootstrap.sh" in this directory takes care of all these steps. Remember, you have time for a long walk in the woods while it compiles.
You can also embed the precompiled Swift binary packages from the release, using Xcode -> Swift Packages -> Add package dependency for Xcode 12 and above.
Once you have compiled everything, add the binaries you want (at least clang) to the list of embedded binaries, along with libLLVM.dylib and libclang.dylib.
Once you have the binaries inside your app, you need to provide the header files. I copied them from wasi-sdk
: https://github.com/holzschu/wasi-sdk since the focus is on creating webAssembly files, but you can also copy from the Xcode iPhone SDK if you plan on compiling for iOS (you will not be able to execute files compiled for iOS without signing them, which requires moving them to a Mac, but still).
I welcome all help on this project, including on this README file.
Getting Started with LLVM page for information on building and running LLVM.
For information on how to contribute to the LLVM project, please take a look at the Contributing to LLVM guide.
Join the LLVM Discourse forums, Discord chat, LLVM Office Hours or Regular sync-ups.
The LLVM project has adopted a code of conduct for participants to all modes of communication within the project.