aboutsummaryrefslogtreecommitdiffstatsci
path: root/CMakeLists.txt
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()