Skip to content

Commit 4b546c0

Browse files
committed
Initial commit
0 parents  commit 4b546c0

File tree

11 files changed

+81
-0
lines changed

11 files changed

+81
-0
lines changed

.gitignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
bin
2+
bin2
3+
compile_commands.json
4+
.clangd
5+
temp.*
6+
.vs
7+
.cache
8+
build*/
9+
.idea/
10+
cmake-build*/
11+
CMakeLists.txt.user

CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
cmake_minimum_required(VERSION 3.22)
2+
3+
project(cmake-zig)
4+
5+
add_library(mylib-static STATIC src/mylib.cpp)
6+
add_library(mylib-shared SHARED src/mylib.cpp)
7+
8+
add_executable(myexe src/myexe.cpp)
9+
target_link_libraries(myexe PRIVATE mylib-static)

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# zig-cross
2+
3+
Example of using [zig](https://ziglang.org) as a CMake Toolchain for cross compiling.
4+
5+
Reference: https://zig.news/kristoff/cross-compile-a-c-c-project-with-zig-3599
6+
7+
## Building
8+
9+
- [Install zig](https://ziglang.org/learn/getting-started/#installing-zig) in your PATH (`choco install zig` on Windows)
10+
- `cmake -B build-aarch64 -G Ninja -DCMAKE_TOOLCHAIN_FILE=cmake/zig-toolchain-aarch64.cmake`
11+
- `cmake --build build-arch64`

cmake/zig-ar.cmd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
@echo off
2+
zig ar %*

cmake/zig-ar.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/bin/sh
2+
zig ar "$@"

cmake/zig-ranlib.cmd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
@echo off
2+
zig ranlib %*

cmake/zig-ranlib.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/bin/sh
2+
zig ranlib "$@"

cmake/zig-toolchain-aarch64.cmake

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
if(CMAKE_GENERATOR MATCHES "Visual Studio")
2+
message(FATAL_ERROR "Visual Studio generator not supported, use: cmake -G Ninja")
3+
endif()
4+
set(CMAKE_SYSTEM_NAME "Linux")
5+
set(CMAKE_SYSTEM_VERSION 1)
6+
set(CMAKE_SYSTEM_PROCESSOR "aarch64")
7+
set(CMAKE_C_COMPILER "zig" cc -target aarch64-linux-gnu)
8+
set(CMAKE_CXX_COMPILER "zig" c++ -target aarch64-linux-gnu)
9+
10+
if(WIN32)
11+
set(SCRIPT_SUFFIX ".cmd")
12+
else()
13+
set(SCRIPT_SUFFIX ".sh")
14+
endif()
15+
16+
# This is working (thanks to Simon for finding this trick)
17+
set(CMAKE_AR "${CMAKE_CURRENT_LIST_DIR}/zig-ar${SCRIPT_SUFFIX}")
18+
set(CMAKE_RANLIB "${CMAKE_CURRENT_LIST_DIR}/zig-ranlib${SCRIPT_SUFFIX}")

src/myexe.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#include <cstdio>
2+
3+
#include "mylib.h"
4+
5+
int main()
6+
{
7+
puts(mylib());
8+
}

src/mylib.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#include "mylib.h"
2+
3+
const char* mylib()
4+
{
5+
return "hello from mylib";
6+
}

src/mylib.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#pragma once
2+
3+
#ifdef _WIN32
4+
#define MYLIB_EXPORT __declspec(dllexport)
5+
#else
6+
#define MYLIB_EXPORT
7+
#endif // _WIN32
8+
9+
10+
extern "C" MYLIB_EXPORT const char* mylib();

0 commit comments

Comments
 (0)