-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
104 lines (80 loc) · 2.87 KB
/
Copy pathCMakeLists.txt
File metadata and controls
104 lines (80 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
include(./.env.cmake OPTIONAL RESULT_VARIABLE LOCAL_ENV)
message(STATUS "Local .env.cmake: ${LOCAL_ENV}")
cmake_minimum_required(VERSION 3.22.0)
# whether or not to build with address sanitizer
set(SPIRIT_USE_ASAN true)
set(NAME SpiritRender)
message(STATUS "using ${CMAKE_GENERATOR}")
if (CMAKE_GENERATOR STREQUAL "MinGW Makefiles")
if (NOT MINGW_PATH)
message(FATAL_ERROR "MINGW_PATH not set in .env.cmake")
endif()
set(USE_MINGW "True")
set(CMAKE_C_COMPILER ${MINGW_PATH}/bin/gcc.exe)
set(CMAKE_CXX_COMPILER ${MINGW_PATH}/bin/g++.exe)
endif()
project(${NAME} LANGUAGES C CXX VERSION 0.23.0)
# 1. Set VULKAN_SDK_PATH in .env.cmake to target specific vulkan version
if (DEFINED VULKAN_SDK_PATH)
set(Vulkan_INCLUDE_DIRS "${VULKAN_SDK_PATH}/Include") # 1.1 Make sure this include path is correct
set(Vulkan_LIBRARIES "${VULKAN_SDK_PATH}/Lib") # 1.2 Make sure lib path is correct
set(Vulkan_FOUND "True")
else()
find_package(Vulkan REQUIRED) # throws error if could not find Vulkan
message(STATUS "Found Vulkan: $ENV{VULKAN_SDK}")
endif()
if (NOT Vulkan_FOUND)
message(FATAL_ERROR "Could not find Vulkan library!")
else()
message(STATUS "Using vulkan lib at: ${Vulkan_LIBRARIES}")
endif()
file(GLOB_RECURSE SOURCES ${PROJECT_SOURCE_DIR}/src/*.c)
# COMPILE OPTIONS
set(LIB_COMPILE_FLAGS "-D_FORTIFY_SOURCE=2 -fsanitize=address")
# libraries
set(LIBRARY libs)
add_subdirectory(${LIBRARY})
add_executable(${PROJECT_NAME} ${SOURCES})
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 17)
set_property(TARGET ${PROJECT_NAME} PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin")
# BUILD TYPE
set(CMAKE_BUILD_TYPE "Debug")
set(CMD_ARGS -Wall -Wextra -Wno-unused-value -Wno-unused-parameter -fanalyzer)
# address sanitizer
if (SPIRIT_USE_ASAN)
target_compile_options(${PROJECT_NAME} PRIVATE -fsanitize=address ${CMD_ARGS})
target_link_options(${PROJECT_NAME} PRIVATE -fsanitize=address ${CMD_ARGS})
else()
target_compile_options(${PROJECT_NAME} PRIVATE ${CMD_ARGS})
target_link_options(${PROJECT_NAME} PRIVATE ${CMD_ARGS})
endif()
set(CMAKE_C_STANDARD gnu2x)
target_link_libraries(${PROJECT_NAME} PUBLIC
libs
)
if (WIN32)
message(STATUS "CREATING BUILD FOR WINDOWS")
if (USE_MINGW)
target_include_directories(${PROJECT_NAME} PUBLIC
${MINGW_PATH}/include
)
target_link_directories(${PROJECT_NAME} PUBLIC
${MINGW_PATH}/lib
)
endif()
target_include_directories(${PROJECT_NAME} PUBLIC
${PROJECT_SOURCE_DIR}/src
${Vulkan_INCLUDE_DIRS}
)
target_link_directories(${PROJECT_NAME} PUBLIC
${Vulkan_LIBRARIES}
)
target_link_libraries(${PROJECT_NAME} glfw3 vulkan-1)
elseif (UNIX)
message(STATUS "CREATING BUILD FOR UNIX")
target_include_directories(${PROJECT_NAME} PUBLIC
${PROJECT_SOURCE_DIR}/src
)
target_link_libraries(${PROJECT_NAME} PRIVATE
${Vulkan_LIBRARIES})
endif()