-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
133 lines (97 loc) · 3.91 KB
/
CMakeLists.txt
File metadata and controls
133 lines (97 loc) · 3.91 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
project(CellModeller5)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
# Set build output directories
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
if(APPLE)
set(USE_VULKAN_COMPAT_MODE ON)
else()
set(USE_VULKAN_COMPAT_MODE OFF)
endif()
############ Setup Vulkan-Headers ############
set(VK_HEADERS_INCLUDE "${PROJECT_SOURCE_DIR}/third_party/Vulkan-Headers/include")
add_library(Vulkan-Headers INTERFACE)
target_include_directories(Vulkan-Headers INTERFACE ${VK_HEADERS_INCLUDE})
############ Setup volk ############
set(VOLK_ROOT "${PROJECT_SOURCE_DIR}/third_party/volk")
add_library(volk ${VOLK_ROOT}/volk.h ${VOLK_ROOT}/volk.c)
target_include_directories(volk PUBLIC ${VOLK_ROOT}/)
target_link_libraries(volk Vulkan-Headers)
if(USE_VULKAN_COMPAT_MODE)
target_compile_definitions(volk PUBLIC VK_ENABLE_BETA_EXTENSIONS)
endif()
# set_target_properties(volk PROPERTIES LINKER_LANGUAGE CXX)
########### Setup glslang ############
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(SKIP_GLSLANG_INSTALL ON CACHE BOOL "" FORCE)
set(ENABLE_SPVREMAPPER OFF CACHE BOOL "")
set(ENABLE_GLSLANG_BINARIES OFF CACHE BOOL "")
set(ENABLE_CTEST OFF CACHE BOOL "")
set(ENABLE_HLSL OFF CACHE BOOL "")
add_subdirectory(third_party/glslang)
############ Setup pynind11 ############
set(PYBIND11_INSTALL OFF CACHE BOOL "" FORCE)
set(PYBIND11_TEST OFF CACHE BOOL "" FORCE)
add_subdirectory(third_party/pybind11)
############ Setup zlib ############
add_subdirectory(third_party)
############ Setup sources ############
if (WIN32)
set(GLOBAL_DEFINES VK_USE_PLATFORM_WIN32_KHR)
elseif()
# Other platforms
endif()
file(GLOB_RECURSE SOURCE_FILES "${PROJECT_SOURCE_DIR}/native/*.cpp" "${PROJECT_SOURCE_DIR}/native/*.h")
if (NOT CELLMODELLER_PYTHON_MODULE_NAME)
set(CELLMODELLER_PYTHON_MODULE_NAME "native")
endif()
if (NOT CELLMODELLER_ARTIFACT_NAME)
set(CELLMODELLER_ARTIFACT_NAME "native")
endif()
if (NOT CELLMODELLER_ARTIFACT_SUFFIX)
set(CELLMODELLER_ARTIFACT_SUFFIX ".pyd")
endif()
if(MSVC)
add_definitions(/MP)
endif()
# Just so we don't have to type the whole name every time
set(MODULE_NAME ${CELLMODELLER_PYTHON_MODULE_NAME})
pybind11_add_module(${MODULE_NAME} ${SOURCE_FILES})
include_directories("${PROJECT_SOURCE_DIR}/src/")
target_link_libraries(${MODULE_NAME} PRIVATE Vulkan-Headers)
target_link_libraries(${MODULE_NAME} PRIVATE volk)
target_link_libraries(${MODULE_NAME} PRIVATE glslang)
target_link_libraries(${MODULE_NAME} PRIVATE SPIRV)
target_link_libraries(${MODULE_NAME} PRIVATE zlibstatic)
target_include_directories(${MODULE_NAME} PUBLIC src)
target_compile_definitions(${MODULE_NAME} PRIVATE ${GLOBAL_DEFINES})
target_compile_definitions(${MODULE_NAME} PRIVATE CM_MODULE_NAME=${MODULE_NAME})
if(USE_VULKAN_COMPAT_MODE)
target_compile_definitions(${MODULE_NAME} PRIVATE CM_VULKAN_COMPAT=1)
endif()
if(USE_DEBUG_DIALOG)
target_compile_definitions(${MODULE_NAME} PRIVATE CM_WITH_DEBUG_DIALOG)
endif()
if(USE_RENDERDOC_CAPTURE)
target_compile_definitions(${MODULE_NAME} PRIVATE CM_WITH_FRAME_CAPTURE)
endif()
set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME ${CELLMODELLER_ARTIFACT_NAME})
set_target_properties(${MODULE_NAME} PROPERTIES SUFFIX ${CELLMODELLER_ARTIFACT_SUFFIX})
############ Setup IDE filters ############
macro(ConvertToFilters curdir)
file(GLOB children RELATIVE ${PROJECT_SOURCE_DIR}/${curdir} ${PROJECT_SOURCE_DIR}/${curdir}/*)
foreach(child ${children})
if(IS_DIRECTORY ${PROJECT_SOURCE_DIR}/${curdir}/${child})
ConvertToFilters(${curdir}/${child})
else()
string(REPLACE "/" "\\" groupname ${curdir})
source_group(${groupname} FILES ${PROJECT_SOURCE_DIR}/${curdir}/${child})
endif()
endforeach()
endmacro()
ConvertToFilters(data)
ConvertToFilters(src)