2015-04-14 20:55:44 +00:00
# The name of our project is "VULKAN". CMakeLists files in this project can
# refer to the root source directory of the project as ${VULKAN_SOURCE_DIR} and
# to the root binary directory of the project as ${VULKAN_BINARY_DIR}.
2015-01-10 15:15:51 +00:00
cmake_minimum_required ( VERSION 2.8.11 )
2015-04-14 20:55:44 +00:00
project ( VULKAN )
2014-08-01 19:01:47 +00:00
# set (CMAKE_VERBOSE_MAKEFILE 1)
2014-07-24 14:36:15 +00:00
2016-11-07 17:44:23 +00:00
# The API_NAME allows renaming builds to avoid conflicts with installed SDKs
2015-07-09 18:44:38 +00:00
# The MAJOR number of the version we're building, used in naming
2016-11-07 17:44:23 +00:00
# <api-name>-<major>.dll (and other files).
set ( API_NAME "Vulkan" CACHE STRING "API name to use when building" )
2016-01-06 23:34:27 +00:00
set ( MAJOR "1" )
2016-11-07 17:44:23 +00:00
string ( TOLOWER ${ API_NAME } API_LOWERCASE )
2015-07-09 18:44:38 +00:00
2016-02-25 22:44:10 +00:00
find_package ( PythonInterp 3 REQUIRED )
2015-12-15 16:25:29 +00:00
2016-12-07 18:18:19 +00:00
if ( CMAKE_SYSTEM_NAME STREQUAL "Linux" )
2016-02-20 16:13:28 +00:00
option ( BUILD_WSI_XCB_SUPPORT "Build XCB WSI support" ON )
2016-04-12 19:35:51 +00:00
option ( BUILD_WSI_XLIB_SUPPORT "Build Xlib WSI support" ON )
2016-12-07 17:19:21 +00:00
option ( BUILD_WSI_WAYLAND_SUPPORT "Build Wayland WSI support" ON )
option ( BUILD_WSI_MIR_SUPPORT "Build Mir WSI support" ON )
2016-12-07 19:12:45 +00:00
option ( DEMOS_WSI_SELECTION "Select WSI to use to build demos" XCB )
2015-11-25 20:26:15 +00:00
endif ( )
2016-10-01 10:20:32 +00:00
set ( CMAKE_MODULE_PATH ${ CMAKE_MODULE_PATH } "${CMAKE_CURRENT_SOURCE_DIR}/cmake" )
2015-01-10 15:15:51 +00:00
2016-11-18 21:44:37 +00:00
set ( SCRIPTS_DIR "${CMAKE_SOURCE_DIR}/scripts" )
2014-07-24 14:36:15 +00:00
# Header file for CMake settings
include_directories ( "${PROJECT_SOURCE_DIR}/include" )
2015-12-16 21:57:33 +00:00
if ( NOT WIN32 )
include ( FindPkgConfig )
endif ( )
2014-08-02 01:14:28 +00:00
2015-02-17 16:55:34 +00:00
if ( CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang" )
2015-02-13 21:04:01 +00:00
set ( COMMON_COMPILE_FLAGS "-Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers" )
2015-02-05 21:14:33 +00:00
set ( COMMON_COMPILE_FLAGS "${COMMON_COMPILE_FLAGS} -fno-strict-aliasing -fno-builtin-memcmp" )
2014-12-19 03:34:46 +00:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 ${COMMON_COMPILE_FLAGS}" )
2016-05-12 16:28:57 +00:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_COMPILE_FLAGS} -std=c++11 -fno-rtti" )
2014-08-04 00:03:57 +00:00
if ( UNIX )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden" )
2015-01-18 03:09:29 +00:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden" )
2014-08-04 00:03:57 +00:00
endif ( )
endif ( )
2014-08-02 01:14:28 +00:00
2016-05-12 16:28:57 +00:00
if ( WIN32 )
# Disable RTTI
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR-" )
endif ( )
2016-03-15 21:39:08 +00:00
if ( NOT WIN32 )
2016-09-08 07:31:36 +00:00
if ( BUILD_WSI_XCB_SUPPORT )
find_package ( XCB REQUIRED )
endif ( )
2016-03-15 21:39:08 +00:00
set ( BUILDTGT_DIR build )
set ( BINDATA_DIR Bin )
set ( LIBSOURCE_DIR Lib )
else ( )
2016-04-18 17:04:36 +00:00
option ( DISABLE_BUILD_PATH_DECORATION "Disable the decoration of the gslang and SPIRV-Tools build path with MSVC build type info" OFF )
option ( DISABLE_BUILDTGT_DIR_DECORATION "Disable the decoration of the gslang and SPIRV-Tools build path with target info" OFF )
2016-03-15 21:39:08 +00:00
# For Windows, since 32-bit and 64-bit items can co-exist, we build each in its own build directory.
# 32-bit target data goes in build32, and 64-bit target data goes into build. So, include/link the
# appropriate data at build time.
2016-04-18 17:04:36 +00:00
if ( DISABLE_BUILDTGT_DIR_DECORATION )
set ( BUILDTGT_DIR "" )
set ( BINDATA_DIR "" )
set ( LIBSOURCE_DIR "" )
elseif ( CMAKE_CL_64 )
2016-03-15 21:39:08 +00:00
set ( BUILDTGT_DIR build )
set ( BINDATA_DIR Bin )
set ( LIBSOURCE_DIR Lib )
else ( )
set ( BUILDTGT_DIR build32 )
set ( BINDATA_DIR Bin32 )
set ( LIBSOURCE_DIR Lib32 )
endif ( )
endif ( )
2015-10-10 15:43:07 +00:00
option ( BUILD_LOADER "Build loader" ON )
option ( BUILD_TESTS "Build tests" ON )
option ( BUILD_LAYERS "Build layers" ON )
option ( BUILD_DEMOS "Build demos" ON )
2015-10-27 19:21:09 +00:00
option ( BUILD_VKJSON "Build vkjson" ON )
2016-04-18 17:04:36 +00:00
option ( CUSTOM_GLSLANG_BIN_ROOT "Use the user defined GLSLANG_BINARY_ROOT" OFF )
option ( CUSTOM_SPIRV_TOOLS_BIN_ROOT "Use the user defined SPIRV_TOOLS_BINARY_ROOT" OFF )
2015-10-10 15:43:07 +00:00
2016-04-18 17:04:36 +00:00
#Choose natural default paths for glslang and SPIRV-Tools binaries to support custom definition by the user on the CMake command line or in the GUI
set ( GLSLANG_BINARY_ROOT "${CMAKE_BINARY_DIR}/../glslang" CACHE STRING "User defined path to the glslang binaries for this project" )
2016-06-16 20:57:25 +00:00
set ( SPIRV_TOOLS_BINARY_ROOT "${CMAKE_BINARY_DIR}/../SPIRV-Tools" CACHE STRING "User defined path to the SPIRV-Tools binaries for this project" )
2016-04-18 17:04:36 +00:00
# Define a variable for a default root location to the gslang, SPIRV-Tools and other external sources and cache it to allow the user to customize it as needed
set ( EXTERNAL_SOURCE_ROOT "${CMAKE_SOURCE_DIR}/external" CACHE STRING "Root path to external sources such as glslang and SPIRV-Tools" )
2016-03-15 21:39:08 +00:00
if ( WIN32 )
2016-04-18 17:04:36 +00:00
if ( CUSTOM_GLSLANG_BIN_ROOT )
set ( GSLANG_FINAL_BINARY_PATH ${ GLSLANG_BINARY_ROOT } / ${ BUILDTGT_DIR } )
else ( )
set ( GSLANG_FINAL_BINARY_PATH "${EXTERNAL_SOURCE_ROOT}/glslang/${BUILDTGT_DIR}" )
endif ( )
if ( DISABLE_BUILD_PATH_DECORATION )
set ( DEBUG_DECORATION "" )
set ( RELEASE_DECORATION "" )
else ( )
set ( DEBUG_DECORATION "Debug" )
set ( RELEASE_DECORATION "Release" )
endif ( )
# Take some steps to set up a variable pointing to the final glslang binaries given the variety of input options
set ( GLSLANG_SEARCH_PATH "${GSLANG_FINAL_BINARY_PATH}/glslang/${RELEASE_DECORATION}"
" $ { G S L A N G _ F I N A L _ B I N A R Y _ P A T H } / g l s l a n g / O S D e p e n d e n t / W i n d o w s / $ { R E L E A S E _ D E C O R A T I O N } "
" $ { G S L A N G _ F I N A L _ B I N A R Y _ P A T H } / h l s l / $ { R E L E A S E _ D E C O R A T I O N } "
" $ { G S L A N G _ F I N A L _ B I N A R Y _ P A T H } / O G L C o m p i l e r s D L L / $ { R E L E A S E _ D E C O R A T I O N } "
" $ { G S L A N G _ F I N A L _ B I N A R Y _ P A T H } / S P I R V / $ { R E L E A S E _ D E C O R A T I O N } " )
set ( GLSLANG_DEBUG_SEARCH_PATH "${GSLANG_FINAL_BINARY_PATH}/glslang/${DEBUG_DECORATION}"
" $ { G S L A N G _ F I N A L _ B I N A R Y _ P A T H } / g l s l a n g / O S D e p e n d e n t / W i n d o w s / $ { D E B U G _ D E C O R A T I O N } "
" $ { G S L A N G _ F I N A L _ B I N A R Y _ P A T H } / h l s l / $ { D E B U G _ D E C O R A T I O N } "
" $ { G S L A N G _ F I N A L _ B I N A R Y _ P A T H } / O G L C o m p i l e r s D L L / $ { D E B U G _ D E C O R A T I O N } "
" $ { G S L A N G _ F I N A L _ B I N A R Y _ P A T H } / S P I R V / $ { D E B U G _ D E C O R A T I O N } " )
if ( CUSTOM_SPIRV_TOOLS_BIN_ROOT )
2016-06-16 20:57:25 +00:00
set ( SPIRV_TOOLS_SEARCH_PATH "${SPIRV_TOOLS_BINARY_ROOT}/${BUILDTGT_DIR}/source/${RELEASE_DECORATION}" )
set ( SPIRV_TOOLS_DEBUG_SEARCH_PATH "${SPIRV_TOOLS_BINARY_ROOT}/${BUILDTGT_DIR}/source/${DEBUG_DECORATION}" )
2016-04-18 17:04:36 +00:00
else ( )
set ( SPIRV_TOOLS_SEARCH_PATH "${EXTERNAL_SOURCE_ROOT}/spirv-tools/${BUILDTGT_DIR}/source/${RELEASE_DECORATION}" )
set ( SPIRV_TOOLS_DEBUG_SEARCH_PATH "${EXTERNAL_SOURCE_ROOT}/spirv-tools/${BUILDTGT_DIR}/source/${DEBUG_DECORATION}" )
endif ( )
2016-03-15 21:39:08 +00:00
else ( )
2016-04-18 17:04:36 +00:00
#non windows
if ( CUSTOM_GLSLANG_BIN_ROOT )
set ( GLSLANG_SEARCH_PATH "${GLSLANG_BINARY_ROOT}/install/lib"
" $ { G L S L A N G _ B I N A R Y _ R O O T } / g l s l a n g "
" $ { G L S L A N G _ B I N A R Y _ R O O T } / g l s l a n g / O S D e p e n d e n t / U n i x "
" $ { G L S L A N G _ B I N A R Y _ R O O T } / O G L C o m p i l e r s D L L "
" $ { G L S L A N G _ B I N A R Y _ R O O T } / S P I R V "
" $ { G L S L A N G _ B I N A R Y _ R O O T } / h l s l "
" $ { G L S L A N G _ B I N A R Y _ R O O T } / S t a n d A l o n e " )
else ( )
set ( GLSLANG_SEARCH_PATH "${EXTERNAL_SOURCE_ROOT}/glslang/${BUILDTGT_DIR}/install/lib" "${CMAKE_SOURCE_DIR}/../x86_64/lib/glslang" )
endif ( )
if ( CUSTOM_SPIRV_TOOLS_BIN_ROOT )
2016-06-16 20:57:25 +00:00
set ( SPIRV_TOOLS_SEARCH_PATH "${SPIRV_TOOLS_BINARY_ROOT}/source" )
2016-04-18 17:04:36 +00:00
else ( )
set ( SPIRV_TOOLS_SEARCH_PATH "${EXTERNAL_SOURCE_ROOT}/spirv-tools/${BUILDTGT_DIR}/source" "${CMAKE_SOURCE_DIR}/../x86_64/lib/spirv-tools" )
endif ( )
2016-03-15 21:39:08 +00:00
endif ( )
2015-10-10 15:43:07 +00:00
2016-04-18 17:04:36 +00:00
find_program ( GLSLANG_VALIDATOR NAMES glslangValidator
H I N T S " $ { C M A K E _ S O U R C E _ D I R } / e x t e r n a l / g l s l a n g / $ { B U I L D T G T _ D I R } / i n s t a l l / b i n "
" $ { G L S L A N G _ B I N A R Y _ R O O T } / S t a n d A l o n e "
" $ { P R O J E C T _ S O U R C E _ D I R } / e x t e r n a l / $ { B I N D A T A _ D I R } " )
find_path ( GLSLANG_SPIRV_INCLUDE_DIR SPIRV/spirv.hpp HINTS "${EXTERNAL_SOURCE_ROOT}/glslang"
" $ { C M A K E _ S O U R C E _ D I R } / . . / g l s l a n g "
D O C " P a t h t o S P I R V / s p i r v . h p p " )
find_path ( SPIRV_TOOLS_INCLUDE_DIR spirv-tools/libspirv.h HINTS "${EXTERNAL_SOURCE_ROOT}/spirv-tools/include"
" $ { E X T E R N A L _ S O U R C E _ R O O T } / S P I R V - T o o l s / i n c l u d e "
" $ { C M A K E _ S O U R C E _ D I R } / . . / s p i r v - t o o l s / i n c l u d e "
" $ { C M A K E _ S O U R C E _ D I R } / . . / S P I R V - T o o l s / i n c l u d e "
" $ { E X T E R N A L _ S O U R C E _ R O O T } / s o u r c e / s p i r v - t o o l s / e x t e r n a l / i n c l u d e "
D O C " P a t h t o s p i r v - t o o l s / l i b s p i r v . h " )
2016-03-15 21:39:08 +00:00
find_library ( GLSLANG_LIB NAMES glslang
H I N T S $ { G L S L A N G _ S E A R C H _ P A T H } )
find_library ( OGLCompiler_LIB NAMES OGLCompiler
H I N T S $ { G L S L A N G _ S E A R C H _ P A T H } )
find_library ( OSDependent_LIB NAMES OSDependent
H I N T S $ { G L S L A N G _ S E A R C H _ P A T H } )
2016-04-14 17:18:30 +00:00
find_library ( HLSL_LIB NAMES HLSL
H I N T S $ { G L S L A N G _ S E A R C H _ P A T H } )
2016-03-15 21:39:08 +00:00
find_library ( SPIRV_LIB NAMES SPIRV
H I N T S $ { G L S L A N G _ S E A R C H _ P A T H } )
2016-08-26 22:54:43 +00:00
find_library ( SPIRV_REMAPPER_LIB NAMES SPVRemapper
H I N T S $ { G L S L A N G _ S E A R C H _ P A T H } )
2016-03-15 21:39:08 +00:00
find_library ( SPIRV_TOOLS_LIB NAMES SPIRV-Tools
H I N T S $ { S P I R V _ T O O L S _ S E A R C H _ P A T H } )
if ( WIN32 )
add_library ( glslang STATIC IMPORTED )
add_library ( OGLCompiler STATIC IMPORTED )
add_library ( OSDependent STATIC IMPORTED )
2016-04-14 17:18:30 +00:00
add_library ( HLSL STATIC IMPORTED )
2016-03-15 21:39:08 +00:00
add_library ( SPIRV STATIC IMPORTED )
2016-08-26 22:54:43 +00:00
add_library ( SPVRemapper STATIC IMPORTED )
2016-03-15 21:39:08 +00:00
add_library ( Loader STATIC IMPORTED )
add_library ( SPIRV-Tools STATIC IMPORTED )
2016-07-18 15:40:37 +00:00
find_library ( GLSLANG_DLIB NAMES glslangd
2016-03-15 21:39:08 +00:00
H I N T S $ { G L S L A N G _ D E B U G _ S E A R C H _ P A T H } )
2016-07-18 15:40:37 +00:00
find_library ( OGLCompiler_DLIB NAMES OGLCompilerd
2016-03-15 21:39:08 +00:00
H I N T S $ { G L S L A N G _ D E B U G _ S E A R C H _ P A T H } )
2016-07-18 15:40:37 +00:00
find_library ( OSDependent_DLIB NAMES OSDependentd
2016-03-15 21:39:08 +00:00
H I N T S $ { G L S L A N G _ D E B U G _ S E A R C H _ P A T H } )
2016-07-18 15:40:37 +00:00
find_library ( HLSL_DLIB NAMES HLSLd
2016-04-14 17:18:30 +00:00
H I N T S $ { G L S L A N G _ D E B U G _ S E A R C H _ P A T H } )
2016-07-18 15:40:37 +00:00
find_library ( SPIRV_DLIB NAMES SPIRVd
2016-03-15 21:39:08 +00:00
H I N T S $ { G L S L A N G _ D E B U G _ S E A R C H _ P A T H } )
2016-08-26 22:54:43 +00:00
find_library ( SPIRV_REMAPPER_DLIB NAMES SPVRemapperd
H I N T S $ { G L S L A N G _ D E B U G _ S E A R C H _ P A T H } )
2016-03-15 21:39:08 +00:00
find_library ( SPIRV_TOOLS_DLIB NAMES SPIRV-Tools
H I N T S $ { S P I R V _ T O O L S _ D E B U G _ S E A R C H _ P A T H } )
set_target_properties ( glslang PROPERTIES
I M P O R T E D _ L O C A T I O N " $ { G L S L A N G _ L I B } "
I M P O R T E D _ L O C A T I O N _ D E B U G " $ { G L S L A N G _ D L I B } " )
set_target_properties ( OGLCompiler PROPERTIES
I M P O R T E D _ L O C A T I O N " $ { O G L C o m p i l e r _ L I B } "
I M P O R T E D _ L O C A T I O N _ D E B U G " $ { O G L C o m p i l e r _ D L I B } " )
set_target_properties ( OSDependent PROPERTIES
I M P O R T E D _ L O C A T I O N " $ { O S D e p e n d e n t _ L I B } "
I M P O R T E D _ L O C A T I O N _ D E B U G " $ { O S D e p e n d e n t _ D L I B } " )
2016-04-14 17:18:30 +00:00
set_target_properties ( HLSL PROPERTIES
I M P O R T E D _ L O C A T I O N " $ { H L S L _ L I B } "
I M P O R T E D _ L O C A T I O N _ D E B U G " $ { H L S L _ D L I B } " )
2016-03-15 21:39:08 +00:00
set_target_properties ( SPIRV PROPERTIES
I M P O R T E D _ L O C A T I O N " $ { S P I R V _ L I B } "
I M P O R T E D _ L O C A T I O N _ D E B U G " $ { S P I R V _ D L I B } " )
2016-08-26 22:54:43 +00:00
set_target_properties ( SPVRemapper PROPERTIES
I M P O R T E D _ L O C A T I O N " $ { S P I R V _ R E M A P P E R _ L I B } "
I M P O R T E D _ L O C A T I O N _ D E B U G " $ { S P I R V _ R E M A P P E R _ D L I B } " )
2016-03-15 21:39:08 +00:00
set_target_properties ( SPIRV-Tools PROPERTIES
I M P O R T E D _ L O C A T I O N " $ { S P I R V _ T O O L S _ L I B } "
I M P O R T E D _ L O C A T I O N _ D E B U G " $ { S P I R V _ T O O L S _ D L I B } " )
2016-08-26 22:54:43 +00:00
set ( GLSLANG_LIBRARIES glslang OGLCompiler OSDependent HLSL SPIRV SPVRemapper )
2016-03-15 21:39:08 +00:00
set ( SPIRV_TOOLS_LIBRARIES SPIRV-Tools )
else ( )
2016-08-26 22:54:43 +00:00
set ( GLSLANG_LIBRARIES ${ GLSLANG_LIB } ${ OGLCompiler_LIB } ${ OSDependent_LIB } ${ HLSL_LIB } ${ SPIRV_LIB } ${ SPIRV_REMAPPER_LIB } )
2016-03-15 21:39:08 +00:00
set ( SPIRV_TOOLS_LIBRARIES ${ SPIRV_TOOLS_LIB } )
2015-10-14 23:00:44 +00:00
endif ( )
2016-03-01 23:40:39 +00:00
set ( PYTHON_CMD ${ PYTHON_EXECUTABLE } )
2015-05-21 17:07:47 +00:00
if ( NOT WIN32 )
2015-07-23 20:29:26 +00:00
include ( GNUInstallDirs )
2016-10-22 19:20:29 +00:00
2016-10-22 17:42:44 +00:00
add_definitions ( -DSYSCONFDIR= "${CMAKE_INSTALL_FULL_SYSCONFDIR}" )
add_definitions ( -DDATADIR= "${CMAKE_INSTALL_FULL_DATADIR}" )
2016-10-22 19:20:29 +00:00
# Make sure /etc is searched by the loader
if ( NOT ( CMAKE_INSTALL_FULL_SYSCONFDIR STREQUAL "/etc" ) )
add_definitions ( -DEXTRASYSCONFDIR= "/etc" )
endif ( )
# Make sure /usr/share is searched by the loader
if ( NOT ( CMAKE_INSTALL_FULL_DATADIR STREQUAL "/usr/share" ) )
add_definitions ( -DEXTRADATADIR= "/usr/share" )
2015-07-24 00:39:37 +00:00
endif ( )
2014-10-03 21:34:53 +00:00
endif ( )
2016-10-12 23:36:35 +00:00
if ( UNIX )
2016-10-27 19:15:27 +00:00
install ( DIRECTORY "${PROJECT_SOURCE_DIR}/include/vulkan" DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR } )
2016-10-12 23:36:35 +00:00
endif ( )
2015-04-14 20:55:44 +00:00
# loader: Generic VULKAN ICD loader
# tests: VULKAN tests
2015-10-10 15:43:07 +00:00
if ( BUILD_LOADER )
add_subdirectory ( loader )
endif ( )
2015-07-09 23:31:46 +00:00
if ( BUILD_TESTS )
add_subdirectory ( tests )
endif ( )
2015-10-10 15:43:07 +00:00
if ( BUILD_LAYERS )
add_subdirectory ( layers )
endif ( )
if ( BUILD_DEMOS )
add_subdirectory ( demos )
endif ( )
2015-10-27 19:21:09 +00:00
if ( BUILD_VKJSON )
add_subdirectory ( libs/vkjson )
endif ( )