blob: 35610fecff135e565fefd052b53ff57ba7289bc5 [file] [log] [blame]
Courtney Goeltzenleuchterf53c3cb2015-04-14 14:55:44 -06001# The name of our project is "VULKAN". CMakeLists files in this project can
2# refer to the root source directory of the project as ${VULKAN_SOURCE_DIR} and
3# to the root binary directory of the project as ${VULKAN_BINARY_DIR}.
Chia-I Wuc3624592015-01-10 23:15:51 +08004cmake_minimum_required(VERSION 2.8.11)
Courtney Goeltzenleuchterf53c3cb2015-04-14 14:55:44 -06005project (VULKAN)
Courtney Goeltzenleuchter1d22ed82014-08-01 13:01:47 -06006# set (CMAKE_VERBOSE_MAKEFILE 1)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06007
David Pinedo0c083652015-07-09 12:44:38 -06008# The MAJOR number of the version we're building, used in naming
David Pinedo4bb0d302015-09-08 11:07:46 -06009# vulkan-<major>.dll (and other files).
David Pinedof2defe32016-01-06 16:34:27 -070010set(MAJOR "1")
David Pinedo0c083652015-07-09 12:44:38 -060011
Tony Barbour7ebd80c2016-02-25 15:44:10 -070012find_package(PythonInterp 3 REQUIRED)
Mark Lobodzinskie0204052015-12-15 09:25:29 -070013
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -070014if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
Mark Lobodzinskib49b6e52015-11-26 10:59:58 -070015 add_definitions(-DVK_USE_PLATFORM_WIN32_KHR -DWIN32_LEAN_AND_MEAN)
Mark Lobodzinskie0204052015-12-15 09:25:29 -070016 set(DisplayServer Win32)
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -070017elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
18 add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR)
Mark Lobodzinskie0204052015-12-15 09:25:29 -070019 set(DisplayServer Android)
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -070020elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
Jason Ekstrand5cd6a912016-02-20 08:13:28 -080021 # TODO: Basic support is present for Xlib but is untested.
Jason Ekstranda5ebe8a2016-02-12 17:25:03 -080022 # Mir support is stubbed in but unimplemented and untested.
Jason Ekstrand5cd6a912016-02-20 08:13:28 -080023 option(BUILD_WSI_XCB_SUPPORT "Build XCB WSI support" ON)
Tony Barbour0afb0eb2016-03-31 13:21:02 -060024 option(BUILD_WSI_XLIB_SUPPORT "Build Xlib WSI support" OFF)
Jason Ekstrand5cd6a912016-02-20 08:13:28 -080025 option(BUILD_WSI_WAYLAND_SUPPORT "Build Wayland WSI support" OFF)
26 option(BUILD_WSI_MIR_SUPPORT "Build Mir WSI support" OFF)
27
Jason Ekstrand5cd6a912016-02-20 08:13:28 -080028 if (BUILD_WSI_XCB_SUPPORT)
29 add_definitions(-DVK_USE_PLATFORM_XCB_KHR)
Mun, Gwan-gyeong5819d892016-02-22 20:32:17 +090030 set(DisplayServer Xcb)
Jason Ekstrand5cd6a912016-02-20 08:13:28 -080031 endif()
Mark Lobodzinskie0204052015-12-15 09:25:29 -070032
Jason Ekstrand5cd6a912016-02-20 08:13:28 -080033 if (BUILD_WSI_XLIB_SUPPORT)
34 add_definitions(-DVK_USE_PLATFORM_XLIB_KHR)
Karl Schultz82d82d12016-03-08 08:07:13 -070035 set(DisplayServer Xlib)
Jason Ekstrand5cd6a912016-02-20 08:13:28 -080036 endif()
Mark Lobodzinskie0204052015-12-15 09:25:29 -070037
Jason Ekstrand5cd6a912016-02-20 08:13:28 -080038 if (BUILD_WSI_WAYLAND_SUPPORT)
39 add_definitions(-DVK_USE_PLATFORM_WAYLAND_KHR)
Mun, Gwan-gyeong5819d892016-02-22 20:32:17 +090040 set(DisplayServer Wayland)
Jason Ekstrand5cd6a912016-02-20 08:13:28 -080041 endif()
Mark Lobodzinskie0204052015-12-15 09:25:29 -070042
Jason Ekstrand5cd6a912016-02-20 08:13:28 -080043 if (BUILD_WSI_MIR_SUPPORT)
44 add_definitions(-DVK_USE_PLATFORM_MIR_KHR)
Mun, Gwan-gyeong5819d892016-02-22 20:32:17 +090045 set(DisplayServer Mir)
Jason Ekstrand5cd6a912016-02-20 08:13:28 -080046 endif()
Mark Lobodzinskifaa90812015-11-25 13:26:15 -070047else()
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -070048 message(FATAL_ERROR "Unsupported Platform!")
Mark Lobodzinskifaa90812015-11-25 13:26:15 -070049endif()
50
Chia-I Wuc3624592015-01-10 23:15:51 +080051set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
52
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060053# Header file for CMake settings
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060054include_directories("${PROJECT_SOURCE_DIR}/include")
55
Tony Barbour89dc91c2015-12-16 14:57:33 -070056if(NOT WIN32)
57 include(FindPkgConfig)
58endif()
Chia-I Wu155be032014-08-02 09:14:28 +080059
Jon Ashburna0dffd62015-07-31 15:15:00 -060060set (CMAKE_INSTALL_PREFIX "")
61
Chia-I Wu084c8862015-02-17 09:55:34 -070062if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
Ian Elliott661dc372015-02-13 14:04:01 -070063 set(COMMON_COMPILE_FLAGS "-Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers")
Tony Barbourf4351602015-02-05 14:14:33 -070064 set(COMMON_COMPILE_FLAGS "${COMMON_COMPILE_FLAGS} -fno-strict-aliasing -fno-builtin-memcmp")
Chia-I Wubba8fc02014-12-19 11:34:46 +080065 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 ${COMMON_COMPILE_FLAGS}")
Adam Jackson77d5fd32015-06-23 15:33:48 -040066 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_COMPILE_FLAGS} -std=c++11")
Chia-I Wu19300602014-08-04 08:03:57 +080067 if (UNIX)
68 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
Chia-I Wu33ada632015-01-18 11:09:29 +080069 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
Chia-I Wu19300602014-08-04 08:03:57 +080070 endif()
71endif()
Chia-I Wu155be032014-08-02 09:14:28 +080072
Dustin Graves3402bdd2016-03-15 15:39:08 -060073if(NOT WIN32)
74 find_package(XCB REQUIRED)
75 set (BUILDTGT_DIR build)
76 set (BINDATA_DIR Bin)
77 set (LIBSOURCE_DIR Lib)
78else()
79 # For Windows, since 32-bit and 64-bit items can co-exist, we build each in its own build directory.
80 # 32-bit target data goes in build32, and 64-bit target data goes into build. So, include/link the
81 # appropriate data at build time.
82 if (CMAKE_CL_64)
83 set (BUILDTGT_DIR build)
84 set (BINDATA_DIR Bin)
85 set (LIBSOURCE_DIR Lib)
86 else()
87 set (BUILDTGT_DIR build32)
88 set (BINDATA_DIR Bin32)
89 set (LIBSOURCE_DIR Lib32)
90 endif()
91endif()
92
Jason Ekstrand5dfc4a92015-10-10 08:43:07 -070093option(BUILD_LOADER "Build loader" ON)
Jason Ekstrand5dfc4a92015-10-10 08:43:07 -070094option(BUILD_TESTS "Build tests" ON)
95option(BUILD_LAYERS "Build layers" ON)
96option(BUILD_DEMOS "Build demos" ON)
Antoine Labourd66cc922015-10-27 12:21:09 -070097option(BUILD_VKJSON "Build vkjson" ON)
Courtney Goeltzenleuchtera43bbd82014-10-03 15:34:53 -060098
Dustin Graves3402bdd2016-03-15 15:39:08 -060099find_program(GLSLANG_VALIDATOR NAMES glslangValidator
100 HINTS "${CMAKE_SOURCE_DIR}/../glslang/${BUILDTGT_DIR}/install/bin"
101 "${PROJECT_SOURCE_DIR}/../${BINDATA_DIR}" )
Jason Ekstrand5dfc4a92015-10-10 08:43:07 -0700102
Dustin Graves3402bdd2016-03-15 15:39:08 -0600103find_path(GLSLANG_SPIRV_INCLUDE_DIR SPIRV/spirv.hpp HINTS "${CMAKE_SOURCE_DIR}/../glslang" DOC "Path to SPIRV/spirv.hpp")
104find_path(SPIRV_TOOLS_INCLUDE_DIR spirv-tools/libspirv.h HINTS "${CMAKE_SOURCE_DIR}/../spirv-tools/include"
105 "${CMAKE_SOURCE_DIR}/../source/spirv-tools/include"
106 "${CMAKE_SOURCE_DIR}/../spirv-tools/external/include"
107 "${CMAKE_SOURCE_DIR}/../source/spirv-tools/external/include"
108 DOC "Path to spirv-tools/libspirv.h")
109
110if (WIN32)
111 set (GLSLANG_SEARCH_PATH "${CMAKE_SOURCE_DIR}/../glslang/${BUILDTGT_DIR}/glslang/Release"
112 "${CMAKE_SOURCE_DIR}/../glslang/${BUILDTGT_DIR}/glslang/OSDependent/Windows/Release"
113 "${CMAKE_SOURCE_DIR}/../glslang/${BUILDTGT_DIR}/OGLCompilersDLL/Release"
114 "${CMAKE_SOURCE_DIR}/../glslang/${BUILDTGT_DIR}/SPIRV/Release" )
GregFc283d0e2016-04-01 14:20:14 -0600115 set (SPIRV_TOOLS_SEARCH_PATH "${CMAKE_SOURCE_DIR}/../spirv-tools/${BUILDTGT_DIR}/source/Release")
Dustin Graves3402bdd2016-03-15 15:39:08 -0600116else()
117 set (GLSLANG_SEARCH_PATH "${CMAKE_SOURCE_DIR}/../glslang/build/install/lib" "${CMAKE_SOURCE_DIR}/../x86_64/lib/glslang" )
GregFc283d0e2016-04-01 14:20:14 -0600118 set (SPIRV_TOOLS_SEARCH_PATH "${CMAKE_SOURCE_DIR}/../spirv-tools/build/source" "${CMAKE_SOURCE_DIR}/../x86_64/lib/spirv-tools" )
Dustin Graves3402bdd2016-03-15 15:39:08 -0600119endif()
120
121find_library(GLSLANG_LIB NAMES glslang
122 HINTS ${GLSLANG_SEARCH_PATH} )
123
124find_library(OGLCompiler_LIB NAMES OGLCompiler
125 HINTS ${GLSLANG_SEARCH_PATH} )
126
127find_library(OSDependent_LIB NAMES OSDependent
128 HINTS ${GLSLANG_SEARCH_PATH} )
129
130find_library(SPIRV_LIB NAMES SPIRV
131 HINTS ${GLSLANG_SEARCH_PATH} )
132
133find_library(SPIRV_TOOLS_LIB NAMES SPIRV-Tools
134 HINTS ${SPIRV_TOOLS_SEARCH_PATH} )
135
136# On Windows, we must pair Debug and Release appropriately
137if (WIN32)
138 set (GLSLANG_DEBUG_SEARCH_PATH "${CMAKE_SOURCE_DIR}/../glslang/${BUILDTGT_DIR}/glslang/Debug"
139 "${CMAKE_SOURCE_DIR}/../glslang/${BUILDTGT_DIR}/glslang/OSDependent/Windows/Debug"
140 "${CMAKE_SOURCE_DIR}/../glslang/${BUILDTGT_DIR}/OGLCompilersDLL/Debug"
141 "${CMAKE_SOURCE_DIR}/../glslang/${BUILDTGT_DIR}/SPIRV/Debug")
GregFc283d0e2016-04-01 14:20:14 -0600142 set (SPIRV_TOOLS_DEBUG_SEARCH_PATH "${CMAKE_SOURCE_DIR}/../spirv-tools/${BUILDTGT_DIR}/source/Debug")
Dustin Graves3402bdd2016-03-15 15:39:08 -0600143
144 add_library(glslang STATIC IMPORTED)
145 add_library(OGLCompiler STATIC IMPORTED)
146 add_library(OSDependent STATIC IMPORTED)
147 add_library(SPIRV STATIC IMPORTED)
148 add_library(Loader STATIC IMPORTED)
149 add_library(SPIRV-Tools STATIC IMPORTED)
150
151 find_library(GLSLANG_DLIB NAMES glslang
152 HINTS ${GLSLANG_DEBUG_SEARCH_PATH} )
153 find_library(OGLCompiler_DLIB NAMES OGLCompiler
154 HINTS ${GLSLANG_DEBUG_SEARCH_PATH} )
155 find_library(OSDependent_DLIB NAMES OSDependent
156 HINTS ${GLSLANG_DEBUG_SEARCH_PATH} )
157 find_library(SPIRV_DLIB NAMES SPIRV
158 HINTS ${GLSLANG_DEBUG_SEARCH_PATH} )
159 find_library(SPIRV_TOOLS_DLIB NAMES SPIRV-Tools
160 HINTS ${SPIRV_TOOLS_DEBUG_SEARCH_PATH} )
161
162 set_target_properties(glslang PROPERTIES
163 IMPORTED_LOCATION "${GLSLANG_LIB}"
164 IMPORTED_LOCATION_DEBUG "${GLSLANG_DLIB}")
165 set_target_properties(OGLCompiler PROPERTIES
166 IMPORTED_LOCATION "${OGLCompiler_LIB}"
167 IMPORTED_LOCATION_DEBUG "${OGLCompiler_DLIB}")
168 set_target_properties(OSDependent PROPERTIES
169 IMPORTED_LOCATION "${OSDependent_LIB}"
170 IMPORTED_LOCATION_DEBUG "${OSDependent_DLIB}")
171 set_target_properties(SPIRV PROPERTIES
172 IMPORTED_LOCATION "${SPIRV_LIB}"
173 IMPORTED_LOCATION_DEBUG "${SPIRV_DLIB}")
174 set_target_properties(SPIRV-Tools PROPERTIES
175 IMPORTED_LOCATION "${SPIRV_TOOLS_LIB}"
176 IMPORTED_LOCATION_DEBUG "${SPIRV_TOOLS_DLIB}")
177
178 set (GLSLANG_LIBRARIES glslang OGLCompiler OSDependent SPIRV)
179 set (SPIRV_TOOLS_LIBRARIES SPIRV-Tools)
180else ()
181 set (GLSLANG_LIBRARIES ${GLSLANG_LIB} ${OGLCompiler_LIB} ${OSDependent_LIB} ${SPIRV_LIB})
182 set (SPIRV_TOOLS_LIBRARIES ${SPIRV_TOOLS_LIB})
Courtney Goeltzenleuchter5df372f2015-10-14 17:00:44 -0600183endif()
184
Tony Barbourbb54b4d2016-03-01 16:40:39 -0700185set (PYTHON_CMD ${PYTHON_EXECUTABLE})
186
Tony Barbour500194c2015-05-21 11:07:47 -0600187if(NOT WIN32)
Adam Jackson3869f412015-07-23 16:29:26 -0400188 include(GNUInstallDirs)
James Jonesc28b0a12015-07-23 17:39:37 -0700189 add_definitions(-DSYSCONFDIR="${CMAKE_INSTALL_SYSCONFDIR}")
190 add_definitions(-DDATADIR="${CMAKE_INSTALL_DATADIR}")
191 if (CMAKE_INSTALL_PREFIX STREQUAL "/usr")
Jon Ashburn86723b02015-07-31 15:47:59 -0600192 elseif (CMAKE_INSTALL_PREFIX STREQUAL "")
James Jonesc28b0a12015-07-23 17:39:37 -0700193 else()
194 add_definitions(-DLOCALPREFIX="${CMAKE_INSTALL_PREFIX}")
195 endif()
Courtney Goeltzenleuchtera43bbd82014-10-03 15:34:53 -0600196endif()
197
Courtney Goeltzenleuchterf53c3cb2015-04-14 14:55:44 -0600198# loader: Generic VULKAN ICD loader
Courtney Goeltzenleuchterf53c3cb2015-04-14 14:55:44 -0600199# tests: VULKAN tests
Jason Ekstrand5dfc4a92015-10-10 08:43:07 -0700200if(BUILD_LOADER)
201 add_subdirectory(loader)
202endif()
203
Tony Barboura05dbaa2015-07-09 17:31:46 -0600204if(BUILD_TESTS)
205 add_subdirectory(tests)
206endif()
Jason Ekstrand5dfc4a92015-10-10 08:43:07 -0700207
208if(BUILD_LAYERS)
209 add_subdirectory(layers)
210endif()
211
212if(BUILD_DEMOS)
213 add_subdirectory(demos)
214endif()
215
Antoine Labourd66cc922015-10-27 12:21:09 -0700216if(BUILD_VKJSON)
217 add_subdirectory(libs/vkjson)
218endif()