Generalize zig-toolchain.cmake
This commit is contained in:
@@ -9,3 +9,10 @@ Reference: https://zig.news/kristoff/cross-compile-a-c-c-project-with-zig-3599
|
|||||||
- [Install zig](https://ziglang.org/learn/getting-started/#installing-zig) in your PATH (`choco install zig` on Windows)
|
- [Install zig](https://ziglang.org/learn/getting-started/#installing-zig) in your PATH (`choco install zig` on Windows)
|
||||||
- `cmake -B build-aarch64 -G Ninja -DCMAKE_TOOLCHAIN_FILE=cmake/zig-toolchain-aarch64.cmake`
|
- `cmake -B build-aarch64 -G Ninja -DCMAKE_TOOLCHAIN_FILE=cmake/zig-toolchain-aarch64.cmake`
|
||||||
- `cmake --build build-arch64`
|
- `cmake --build build-arch64`
|
||||||
|
|
||||||
|
You can create toolchains for other triples like this. Here is an example to build for Windows on ARM64:
|
||||||
|
|
||||||
|
```cmake
|
||||||
|
set(ZIG_TARGET "aarch64-windows-gnu")
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/zig-toolchain.cmake)
|
||||||
|
```
|
||||||
|
|||||||
2
cmake/zig-rc.cmd
Normal file
2
cmake/zig-rc.cmd
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
@echo off
|
||||||
|
zig rc %*
|
||||||
2
cmake/zig-rc.sh
Executable file
2
cmake/zig-rc.sh
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
zig rc "$@"
|
||||||
@@ -1,18 +1,2 @@
|
|||||||
if(CMAKE_GENERATOR MATCHES "Visual Studio")
|
set(ZIG_TARGET "aarch64-linux-gnu")
|
||||||
message(FATAL_ERROR "Visual Studio generator not supported, use: cmake -G Ninja")
|
include(${CMAKE_CURRENT_LIST_DIR}/zig-toolchain.cmake)
|
||||||
endif()
|
|
||||||
set(CMAKE_SYSTEM_NAME "Linux")
|
|
||||||
set(CMAKE_SYSTEM_VERSION 1)
|
|
||||||
set(CMAKE_SYSTEM_PROCESSOR "aarch64")
|
|
||||||
set(CMAKE_C_COMPILER "zig" cc -target aarch64-linux-gnu)
|
|
||||||
set(CMAKE_CXX_COMPILER "zig" c++ -target aarch64-linux-gnu)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
set(SCRIPT_SUFFIX ".cmd")
|
|
||||||
else()
|
|
||||||
set(SCRIPT_SUFFIX ".sh")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# This is working (thanks to Simon for finding this trick)
|
|
||||||
set(CMAKE_AR "${CMAKE_CURRENT_LIST_DIR}/zig-ar${SCRIPT_SUFFIX}")
|
|
||||||
set(CMAKE_RANLIB "${CMAKE_CURRENT_LIST_DIR}/zig-ranlib${SCRIPT_SUFFIX}")
|
|
||||||
|
|||||||
2
cmake/zig-toolchain-winarm64.cmake
Normal file
2
cmake/zig-toolchain-winarm64.cmake
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
set(ZIG_TARGET "aarch64-windows-gnu")
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/zig-toolchain.cmake)
|
||||||
40
cmake/zig-toolchain.cmake
Normal file
40
cmake/zig-toolchain.cmake
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
include_guard()
|
||||||
|
|
||||||
|
if(CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||||
|
message(FATAL_ERROR "Visual Studio generator not supported, use: cmake -G Ninja")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT ZIG_TARGET MATCHES "^([a-zZ-Z0-9_]+)-([a-zZ-Z0-9_]+)-([a-zZ-Z0-9_]+)$")
|
||||||
|
message(FATAL_ERROR "Expected -DZIG_TARGET=<arch>-<os>-<abi>")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(ZIG_ARCH ${CMAKE_MATCH_1})
|
||||||
|
set(ZIG_OS ${CMAKE_MATCH_2})
|
||||||
|
set(ZIG_ABI ${CMAKE_MATCH_3})
|
||||||
|
|
||||||
|
if(ZIG_OS STREQUAL "linux")
|
||||||
|
set(CMAKE_SYSTEM_NAME "Linux")
|
||||||
|
elseif(ZIG_OS STREQUAL "windows")
|
||||||
|
set(CMAKE_SYSTEM_NAME "Windows")
|
||||||
|
elseif(ZIG_OS STREQUAL "macos")
|
||||||
|
set(CMAKE_SYSTEM_NAME "Darwin")
|
||||||
|
else()
|
||||||
|
message(WARNING "Unknown OS: ${ZIG_OS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_SYSTEM_VERSION 1)
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR ${ZIG_ARCH})
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER "zig" cc -target ${ZIG_TARGET})
|
||||||
|
set(CMAKE_CXX_COMPILER "zig" c++ -target ${ZIG_TARGET})
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
set(SCRIPT_SUFFIX ".cmd")
|
||||||
|
else()
|
||||||
|
set(SCRIPT_SUFFIX ".sh")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# This is working (thanks to Simon for finding this trick)
|
||||||
|
set(CMAKE_AR "${CMAKE_CURRENT_LIST_DIR}/zig-ar${SCRIPT_SUFFIX}")
|
||||||
|
set(CMAKE_RANLIB "${CMAKE_CURRENT_LIST_DIR}/zig-ranlib${SCRIPT_SUFFIX}")
|
||||||
|
set(CMAKE_RC "${CMAKE_CURRENT_LIST_DIR}/zig-rc${SCRIPT_SUFFIX}")
|
||||||
Reference in New Issue
Block a user