mirror of
https://github.com/hermitcore/libhermit.git
synced 2025-03-09 00:00:03 +01:00
68 lines
2.3 KiB
Markdown
68 lines
2.3 KiB
Markdown
![]() |
HermitCore CMake build system
|
||
|
=============================
|
||
|
|
||
|
HermitCore requires at least CMake version `3.7`, which (at the time of
|
||
|
introduction) is not yet available on most Linux distributions. We therefore
|
||
|
provide a script `cmake/local-cmake.sh` that fetches precompiled binaries from
|
||
|
the CMake project and installs them locally in `cmake/cmake-3.7*`. Only when
|
||
|
sourced for the first time it will download CMake, on further runs it detects
|
||
|
the existing download and adds it to `PATH` automatically.
|
||
|
|
||
|
```bash
|
||
|
$ . cmake/local-cmake.sh
|
||
|
-- Downloading CMake
|
||
|
cmake-3.7.2-Linux-x 100%[=================>] 29,26M 837KB/s in 19s
|
||
|
-- Unpacking CMake
|
||
|
-- Local CMake v3.7.2 installed to cmake/cmake-3.7.2-Linux-x86_64
|
||
|
-- Next time you source this script, no download will be neccessary
|
||
|
$ which cmake
|
||
|
/home/[...]/HermitCore/cmake/cmake-3.7.2-Linux-x86_64/bin/cmake
|
||
|
```
|
||
|
|
||
|
## Directory structure
|
||
|
|
||
|
```
|
||
|
cmake/
|
||
|
├── golang
|
||
|
│ ├── CMakeDetermineGoCompiler.cmake
|
||
|
│ ├── CMakeGoCompiler.cmake.in
|
||
|
│ ├── CMakeGoInformation.cmake
|
||
|
│ └── CMakeTestGoCompiler.cmake
|
||
|
├── HermitCore-Application.cmake
|
||
|
├── HermitCore.cmake
|
||
|
├── HermitCore-Paths.cmake
|
||
|
├── HermitCore-Toolchain-x86.cmake
|
||
|
├── HermitCore-Utils.cmake
|
||
|
├── local-cmake.sh
|
||
|
└── README.md
|
||
|
```
|
||
|
|
||
|
## Additional language support
|
||
|
|
||
|
Currently, HermitCore supports `C, C++, Fortran, Go` through Cmake. While the
|
||
|
former are supported and detected by CMake out-of-the-box, Go support has been
|
||
|
added manually for HermitCore.
|
||
|
|
||
|
Adding a new language requires you to provide CMake hints where to find the
|
||
|
toolchain and then how to compile and link binaries. The Go support in
|
||
|
`cmake/golang` may serve as an example on how to add a new language.
|
||
|
|
||
|
To finally enable the language it has to be added to CMake's module path in
|
||
|
`cmake/HermitCore.cmake`:
|
||
|
|
||
|
```
|
||
|
# scripts to detect HermitCore Go compiler
|
||
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/golang/)
|
||
|
|
||
|
# scripts to detect new language
|
||
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/new-language/)
|
||
|
```
|
||
|
|
||
|
|
||
|
## User applications
|
||
|
|
||
|
You just have to include `HermitCore-Application.cmake` before the `project()`
|
||
|
command in your `CMakeLists.txt` in order to build applications for HermitCore.
|
||
|
For configuration parameters of the project, please consult the `README.md` in
|
||
|
the root of this repository.
|