blob: 5d6ddd033cfe6ce1a74cd46848d567e9e3405107 (
plain)
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
134
135
136
|
CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
OPTION (VKH_BUILD_SHARED_LIB "Build using shared libraries" OFF)
OPTION(VKH_USE_VMA "enable Vulkan Memory Allocator" ON)
SET(LANG "C")
SET(CMAKE_${LANG}_STANDARD 11)
PROJECT(vkh VERSION 0.1.0 DESCRIPTION "Vulkan helpers library")# LANGUAGES ${LANG})
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE Release)
ENDIF()
IF (CYGWIN)
SET (CMAKE_FIND_LIBRARY_PREFIXES "")
SET (CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".LIB" ".dll" ".DLL")
ENDIF()
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
ADD_DEFINITIONS (-DDEBUG)
OPTION(ENABLE_VALIDATION "enable vulkan validation layer" ON)
IF (UNIX)
ADD_COMPILE_OPTIONS(-Wall -Wno-extra -Wno-unknown-pragmas)
ELSEIF (MSVC)
ADD_COMPILE_OPTIONS(/W4 /wd4204 /wd4221 /wd4100)
ENDIF()
ELSE()
UNSET(ENABLE_VALIDATION CACHE)
IF (UNIX)
ADD_COMPILE_OPTIONS(-w -fvisibility=hidden)
#ADD_COMPILE_OPTIONS(-flto)
ELSEIF(MSVC)
ADD_COMPILE_OPTIONS(/W0)
IF (${LANG} EQUAL "C" AND MSVC)
ADD_COMPILE_OPTIONS(/TC)
ENDIF ()
ENDIF()
ENDIF()
IF (ENABLE_VALIDATION)
ADD_DEFINITIONS (-DVKH_USE_VALIDATION)
ENDIF ()
FIND_PACKAGE(Vulkan REQUIRED)
FIND_PACKAGE(Threads REQUIRED)
INCLUDE(GNUInstallDirs)
FILE(GLOB VKH_SRC src/*.c src/deps/*.c)
CONFIGURE_FILE(vkh.pc.in vkh.pc @ONLY)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/vkh.pc DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig)
FUNCTION (setup_lib LibName)
SET_TARGET_PROPERTIES("${LibName}" PROPERTIES
OUTPUT_NAME ${PROJECT_NAME}
VERSION ${PROJECT_VERSION}
SOVERSION 1
C_STANDARD 11
C_EXTENSIONS OFF
PUBLIC_HEADER include/vkh.h
)
TARGET_INCLUDE_DIRECTORIES("${LibName}"
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${Vulkan_INCLUDE_DIRS}
)
TARGET_LINK_LIBRARIES("${LibName}"
PUBLIC
${Vulkan_LIBRARIES}
Threads::Threads
)
INSTALL(TARGETS "${LibName}"
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
ENDFUNCTION(setup_lib)
GET_DIRECTORY_PROPERTY (vkh_has_root_project PARENT_DIRECTORY)
if (VKH_USE_VMA)
ADD_DEFINITIONS (-DVKH_USE_VMA)
SET(VKH_USE_VMA ON PARENT_SCOPE)
ADD_LIBRARY(libVMA OBJECT src/VmaUsage.cpp)
SET_TARGET_PROPERTIES(
libVMA PROPERTIES
POSITION_INDEPENDENT_CODE ON
LINKER_LANGUAGE CXX
)
TARGET_INCLUDE_DIRECTORIES(libVMA
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${Vulkan_INCLUDE_DIRS}
)
SET (VKH_LIB_SRC $<TARGET_OBJECTS:vkh_obj> $<TARGET_OBJECTS:libVMA>)
ELSE()
SET (VKH_LIB_SRC $<TARGET_OBJECTS:vkh_obj>)
ENDIF()
ADD_LIBRARY(vkh_obj OBJECT ${VKH_SRC})
SET_PROPERTY(TARGET vkh_obj PROPERTY POSITION_INDEPENDENT_CODE ON)
TARGET_INCLUDE_DIRECTORIES(vkh_obj
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${Vulkan_INCLUDE_DIRS}
)
IF (vkh_has_root_project)
IF (VKH_BUILD_SHARED_LIBS)
ADD_LIBRARY("${PROJECT_NAME}" SHARED ${VKH_LIB_SRC})
TARGET_COMPILE_DEFINITIONS("${PROJECT_NAME}" PUBLIC -DVKH_SHARED_BUILD)
setup_lib ("${PROJECT_NAME}")
ELSE()
ADD_LIBRARY("${PROJECT_NAME}" STATIC ${VKH_LIB_SRC})
setup_lib ("${PROJECT_NAME}")
ENDIF()
ELSE()
ADD_LIBRARY("${PROJECT_NAME}_shared" SHARED ${VKH_LIB_SRC})
SET_PROPERTY(TARGET "${PROJECT_NAME}_shared" PROPERTY POSITION_INDEPENDENT_CODE ON)
TARGET_COMPILE_DEFINITIONS("${PROJECT_NAME}_shared" PUBLIC -DVKH_SHARED_BUILD)
setup_lib ("${PROJECT_NAME}_shared")
ADD_LIBRARY("${PROJECT_NAME}_static" STATIC ${VKH_LIB_SRC})
target_compile_definitions("${PROJECT_NAME}_static" PUBLIC -DVKH_STATIC_BUILD)
SET_PROPERTY(TARGET "${PROJECT_NAME}_static" PROPERTY POSITION_INDEPENDENT_CODE OFF)
setup_lib ("${PROJECT_NAME}_static")
ENDIF()
|