Skip to content

Commit 4685d1e

Browse files
committed
Create CMakeLists.txt
1 parent cdf3870 commit 4685d1e

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

CMakeLists.txt

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
cmake_minimum_required(VERSION 3.20)
2+
project(vger LANGUAGES C CXX OBJC OBJCXX)
3+
4+
set(CMAKE_CXX_STANDARD 17)
5+
6+
# Paths
7+
set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Sources/vger")
8+
set(METAL_SRC "${SRC_DIR}/vger.metal")
9+
set(AIR_FILE "${CMAKE_CURRENT_BINARY_DIR}/vger.air")
10+
set(METALLIB_FILE "${CMAKE_CURRENT_BINARY_DIR}/vger.metallib")
11+
set(METALLIB_OBJ "${CMAKE_CURRENT_BINARY_DIR}/vger_metallib.cpp")
12+
13+
# Collect source files (.cpp, .mm)
14+
file(GLOB_RECURSE VGER_SOURCES
15+
"${SRC_DIR}/*.cpp"
16+
"${SRC_DIR}/*.mm"
17+
)
18+
19+
# Step 1: Compile .metal to .air
20+
add_custom_command(
21+
OUTPUT ${AIR_FILE}
22+
COMMAND xcrun -sdk macosx metal -c ${METAL_SRC} -o ${AIR_FILE}
23+
DEPENDS ${METAL_SRC}
24+
COMMENT "Compiling vger.metal to AIR"
25+
)
26+
27+
# Step 2: Compile .air to .metallib
28+
add_custom_command(
29+
OUTPUT ${METALLIB_FILE}
30+
COMMAND xcrun -sdk macosx metallib ${AIR_FILE} -o ${METALLIB_FILE}
31+
DEPENDS ${AIR_FILE}
32+
COMMENT "Linking AIR to METALLIB"
33+
)
34+
35+
# Step 3: Convert .metallib to C array using xxd
36+
add_custom_command(
37+
OUTPUT ${METALLIB_OBJ}
38+
COMMAND xxd -i ${METALLIB_FILE} > ${METALLIB_OBJ}
39+
DEPENDS ${METALLIB_FILE}
40+
COMMENT "Embedding metallib into C++ source"
41+
)
42+
43+
# Custom target to ensure shader embedding is done first
44+
add_custom_target(EmbedShader ALL DEPENDS ${METALLIB_OBJ})
45+
46+
# Step 4: Create dylib
47+
add_library(vger SHARED
48+
${VGER_SOURCES}
49+
${METALLIB_OBJ}
50+
)
51+
52+
add_dependencies(vger EmbedShader)
53+
54+
# Link necessary Apple frameworks
55+
target_link_libraries(vger
56+
"-framework Foundation"
57+
"-framework Metal"
58+
)
59+
60+
# Optional: Make it rpath-loadable
61+
set_target_properties(vger PROPERTIES
62+
MACOSX_RPATH ON
63+
OUTPUT_NAME "vger"
64+
INSTALL_NAME_DIR "@rpath"
65+
)
66+

0 commit comments

Comments
 (0)