Skip to content

Commit e1aceb5

Browse files
committed
Clean up build logic
1 parent a7d677c commit e1aceb5

File tree

6 files changed

+64
-68
lines changed

6 files changed

+64
-68
lines changed

CMakeLists.txt

Lines changed: 58 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ project(
66
VERSION 1.0.0
77
LANGUAGES CXX)
88

9-
option(BUILD_WASM "Build for WebAssembly" OFF)
109
option(BUILD_EXAMPLES "Build examples" ON)
1110
option(BUILD_TESTS "Build tests" ON)
1211
option(BENCHMARK "Build with benchmark mode" OFF)
@@ -16,11 +15,16 @@ set(CMAKE_CXX_STANDARD 17)
1615
set(CMAKE_CXX_STANDARD_REQUIRED ON)
1716
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
1817

19-
if(WIN32)
20-
# Forcing MSVC to use utf-8 encoding
21-
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
22-
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
23-
endif(WIN32)
18+
# Library target
19+
add_library(${PROJECT_NAME} INTERFACE)
20+
21+
target_include_directories(
22+
${PROJECT_NAME}
23+
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
24+
$<INSTALL_INTERFACE:include>)
25+
26+
include(CheckLanguage)
27+
include(FetchContent)
2428

2529
if(BUILD_WASM)
2630
# Ensure we're using Emscripten compiler
@@ -46,59 +50,59 @@ if(BUILD_WASM)
4650

4751
# Set output extension
4852
set(CMAKE_EXECUTABLE_SUFFIX .js)
49-
50-
# Disable CUDA/Metal when building for web
51-
set(CUDA_FOUND FALSE)
52-
set(METAL_FOUND FALSE)
53-
set(BUILD_TESTS FALSE)
5453
else()
55-
include(CheckLanguage)
56-
# Check for CUDA
57-
check_language(CUDA)
58-
if(CMAKE_CUDA_COMPILER)
59-
enable_language(CUDA)
60-
find_package(CUDA REQUIRED)
61-
include_directories(${CUDA_INCLUDE_DIRS})
62-
set(CMAKE_CUDA_STANDARD 14)
63-
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_CUDA)
64-
set(CUDA_FOUND TRUE)
65-
message(STATUS "CUDA found. Building with CUDA support.")
54+
# Metal Support (macOS/iOS)
55+
if(APPLE)
56+
find_library(METAL_FRAMEWORK Metal)
57+
find_library(METALKIT_FRAMEWORK MetalKit)
58+
find_library(FOUNDATION_FRAMEWORK Foundation)
59+
60+
if(METAL_FRAMEWORK AND METALKIT_FRAMEWORK)
61+
message(STATUS "Apple Metal found. Building with Metal support")
62+
enable_language(OBJCXX)
63+
set(CMAKE_OBJCXX_STANDARD 20)
64+
set(CMAKE_OBJCXX_STANDARD_REQUIRED ON)
65+
# Fetch Metal-cpp
66+
FetchContent_Declare(
67+
metal-cpp
68+
GIT_REPOSITORY https://github.com/rizajin/metal-cpp.git
69+
GIT_TAG "main"
70+
GIT_PROGRESS TRUE)
71+
FetchContent_MakeAvailable(metal-cpp)
72+
target_link_libraries(
73+
${PROJECT_NAME} INTERFACE "-framework Metal" "-framework Foundation"
74+
"-framework QuartzCore" "-framework MetalKit")
75+
add_compile_definitions("__METAL__")
76+
else()
77+
message(STATUS "Apple Metal not found. Building without Metal support")
78+
endif()
79+
80+
# set(CMAKE_THREAD_LIBS_INIT "-lpthread")
81+
# set(CMAKE_HAVE_THREADS_LIBRARY 1)
82+
# set(CMAKE_USE_WIN32_THREADS_INIT 0)
83+
# set(CMAKE_USE_PTHREADS_INIT 1)
84+
# set(THREADS_PREFER_PTHREAD_FLAG ON)
6685
else()
67-
set(CUDA_FOUND FALSE)
68-
message(STATUS "CUDA not found. Checking for Apple Metal support.")
69-
endif()
70-
71-
# Check for Apple Metal (only if CUDA is not found)
72-
if(NOT CUDA_FOUND AND APPLE)
73-
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
74-
set(CMAKE_HAVE_THREADS_LIBRARY 1)
75-
set(CMAKE_USE_WIN32_THREADS_INIT 0)
76-
set(CMAKE_USE_PTHREADS_INIT 1)
77-
set(THREADS_PREFER_PTHREAD_FLAG ON)
78-
# Set the SDK path set(CMAKE_OSX_SYSROOT
79-
# /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk)
80-
# find_library(METAL_LIBRARY Metal) find_library(FOUNDATION_LIBRARY
81-
# Foundation) if(METAL_LIBRARY AND FOUNDATION_LIBRARY) set(METAL_FOUND TRUE)
82-
# target_compile_definitions(${PROJECT_NAME} PRIVATE USE_METAL)
83-
# message(STATUS "Apple Metal found. Building with Metal support.") else()
84-
# message(WARNING "Neither CUDA nor Apple Metal found. Building without GPU
85-
# acceleration.")
86+
if(WIN32)
87+
# Forcing MSVC to use utf-8 encoding
88+
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
89+
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
90+
endif(WIN32)
91+
92+
check_language(CUDA)
93+
if(CMAKE_CUDA_COMPILER)
94+
message(STATUS "CUDA found. Building with CUDA support")
95+
enable_language(CUDA)
96+
set(CMAKE_CUDA_STANDARD 14)
97+
find_package(CUDA REQUIRED)
98+
include_directories(${CUDA_INCLUDE_DIRS})
99+
add_compile_definitions("__CUDA__")
100+
else()
101+
message(STATUS "CUDA not found. Building without CUDA support")
102+
endif()
86103
endif()
87104
endif()
88105

89-
# Library target
90-
add_library(${PROJECT_NAME} INTERFACE)
91-
92-
target_include_directories(
93-
${PROJECT_NAME}
94-
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
95-
$<INSTALL_INTERFACE:include>)
96-
97-
# Optional builds
98-
option(BUILD_EXAMPLES "Build examples" ON)
99-
option(BUILD_TESTS "Build tests" ON)
100-
option(BENCHMARK "Build with benchmark mode" OFF)
101-
102106
# Benchmark mode
103107
if(BENCHMARK)
104108
target_compile_definitions(${PROJECT_NAME} PRIVATE BENCHMARK_MODE)
@@ -128,7 +132,6 @@ endif()
128132
# Tests
129133
if(BUILD_TESTS)
130134
# Fetch GoogleTest
131-
include(FetchContent)
132135
FetchContent_Declare(
133136
googletest
134137
GIT_REPOSITORY https://github.com/google/googletest.git

examples/bunny/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ set(EXECUTABLE_NAME bunny)
22

33
file(GLOB_RECURSE PROJECT_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
44
file(GLOB_RECURSE PROJECT_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp)
5-
message(STATUS "PROJECT_SRCS: ${PROJECT_SRCS}")
6-
message(STATUS "PROJECT_INCLUDES: ${PROJECT_INCLUDES}")
75

86
add_executable(${EXECUTABLE_NAME} ${PROJECT_SRCS})
97
target_include_directories(${EXECUTABLE_NAME} PUBLIC ${PROJECT_INCLUDES})

examples/cube/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ set(EXECUTABLE_NAME cube)
22

33
file(GLOB_RECURSE PROJECT_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
44
file(GLOB_RECURSE PROJECT_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp)
5-
message(STATUS "PROJECT_SRCS: ${PROJECT_SRCS}")
6-
message(STATUS "PROJECT_INCLUDES: ${PROJECT_INCLUDES}")
75

86
add_executable(${EXECUTABLE_NAME} ${PROJECT_SRCS})
97
target_include_directories(${EXECUTABLE_NAME} PUBLIC ${PROJECT_INCLUDES})

examples/f22/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ set(EXECUTABLE_NAME f22)
22

33
file(GLOB_RECURSE PROJECT_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
44
file(GLOB_RECURSE PROJECT_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp)
5-
message(STATUS "PROJECT_SRCS: ${PROJECT_SRCS}")
6-
message(STATUS "PROJECT_INCLUDES: ${PROJECT_INCLUDES}")
75

86
add_executable(${EXECUTABLE_NAME} ${PROJECT_SRCS})
97
target_include_directories(${EXECUTABLE_NAME} PUBLIC ${PROJECT_INCLUDES})

examples/web/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ set(EXECUTABLE_NAME web)
22

33
file(GLOB_RECURSE PROJECT_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
44
file(GLOB_RECURSE PROJECT_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp)
5-
message(STATUS "PROJECT_SRCS: ${PROJECT_SRCS}")
6-
message(STATUS "PROJECT_INCLUDES: ${PROJECT_INCLUDES}")
75

86
add_executable(${EXECUTABLE_NAME} ${PROJECT_SRCS})
97
target_include_directories(${EXECUTABLE_NAME} PUBLIC ${PROJECT_INCLUDES})

include/kiwigl/graphics/display.hpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include "../geometry/vector.hpp"
1515
#include "../graphics/frame_buffer.hpp"
1616

17-
#ifdef USE_CUDA
17+
#ifdef __CUDA__
1818
#include "display.cuh"
1919
#elif USE_METAL
2020
#include "display.metal"
@@ -99,7 +99,7 @@ class Display {
9999
d_vertices = nullptr;
100100
d_projectedTriangles = nullptr;
101101

102-
#ifdef USE_CUDA
102+
#ifdef __CUDA__
103103
InitalizeCuda();
104104
#elif USE_METAL
105105
InitalizeMetal();
@@ -176,11 +176,12 @@ class Display {
176176
// Method to update the display
177177
void update() {
178178
#ifndef BENCHMARK_MODE
179-
while (!SDL_TICKS_PASSED(SDL_GetTicks(), prevTime + FRAME_TIME));
179+
while (!SDL_TICKS_PASSED(SDL_GetTicks(), prevTime + FRAME_TIME))
180+
;
180181
prevTime = SDL_GetTicks();
181182
#endif
182183

183-
#ifdef USE_CUDA
184+
#ifdef __CUDA__
184185
LaunchCuda(frameBuffer->getWidth(), frameBuffer->getHeight());
185186
#elif USE_METAL
186187
LaunchMetal();
@@ -273,7 +274,7 @@ class Display {
273274
#endif
274275
}
275276

276-
#ifdef USE_CUDA
277+
#ifdef __CUDA__
277278
// Method to initialize CUDA
278279
virtual void InitalizeCuda();
279280

0 commit comments

Comments
 (0)