Jon Ashburn | d38bfb1 | 2014-10-14 19:15:22 -0600 | [diff] [blame] | 1 | include_directories( |
Mark Young | 0f183a8 | 2017-02-28 09:58:04 -0700 | [diff] [blame] | 2 | ${CMAKE_CURRENT_SOURCE_DIR} |
| 3 | ${CMAKE_CURRENT_BINARY_DIR} |
| 4 | ${CMAKE_PROJECT_BINARY_DIR} |
| 5 | ${CMAKE_BINARY_DIR} |
Jon Ashburn | d38bfb1 | 2014-10-14 19:15:22 -0600 | [diff] [blame] | 6 | ) |
Mark Young | 0f183a8 | 2017-02-28 09:58:04 -0700 | [diff] [blame] | 7 | |
Mark Young | ba7ee02 | 2017-03-09 10:41:25 -0700 | [diff] [blame] | 8 | # Check for the existance of the secure_getenv or __secure_getenv commands |
| 9 | include(CheckFunctionExists) |
| 10 | CHECK_FUNCTION_EXISTS(secure_getenv HAVE_SECURE_GETENV) |
| 11 | CHECK_FUNCTION_EXISTS(__secure_getenv HAVE___SECURE_GETENV) |
| 12 | CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/loader_cmake_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/loader_cmake_config.h) |
| 13 | |
Karl Schultz | b4d31af | 2017-03-10 14:58:10 -0700 | [diff] [blame] | 14 | # Fetch header version from vulkan.h |
| 15 | file(STRINGS "../include/vulkan/vulkan.h" lines REGEX "^#define VK_HEADER_VERSION [0-9]+") |
| 16 | list(LENGTH lines len) |
| 17 | if(${len} EQUAL 1) |
| 18 | string(REGEX MATCHALL "[0-9]+" vk_header_version ${lines}) |
| 19 | else() |
| 20 | MESSAGE(FATAL_ERROR "Unable to fetch version from vulkan.h") |
| 21 | endif() |
| 22 | |
Tony Barbour | 29cc952 | 2016-12-07 11:18:19 -0700 | [diff] [blame] | 23 | if(CMAKE_SYSTEM_NAME STREQUAL "Windows") |
| 24 | add_definitions(-DVK_USE_PLATFORM_WIN32_KHR -DWIN32_LEAN_AND_MEAN) |
| 25 | set(DisplayServer Win32) |
| 26 | elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") |
| 27 | add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR) |
| 28 | elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") |
| 29 | if (BUILD_WSI_XCB_SUPPORT) |
| 30 | add_definitions(-DVK_USE_PLATFORM_XCB_KHR) |
| 31 | endif() |
| 32 | |
| 33 | if (BUILD_WSI_XLIB_SUPPORT) |
Mark Young | 3938987 | 2017-01-19 21:10:49 -0700 | [diff] [blame] | 34 | add_definitions(-DVK_USE_PLATFORM_XLIB_KHR -DVK_USE_PLATFORM_XLIB_XRANDR_EXT) |
Tony Barbour | 29cc952 | 2016-12-07 11:18:19 -0700 | [diff] [blame] | 35 | endif() |
| 36 | |
| 37 | if (BUILD_WSI_WAYLAND_SUPPORT) |
| 38 | add_definitions(-DVK_USE_PLATFORM_WAYLAND_KHR) |
| 39 | endif() |
| 40 | |
| 41 | if (BUILD_WSI_MIR_SUPPORT) |
| 42 | add_definitions(-DVK_USE_PLATFORM_MIR_KHR) |
Tony Barbour | c53c727 | 2016-12-07 10:19:21 -0700 | [diff] [blame] | 43 | include_directories(${MIR_INCLUDE_DIR}) |
Tony Barbour | 29cc952 | 2016-12-07 11:18:19 -0700 | [diff] [blame] | 44 | endif() |
| 45 | else() |
| 46 | message(FATAL_ERROR "Unsupported Platform!") |
| 47 | endif() |
Chia-I Wu | 0c10534 | 2014-08-03 09:31:26 +0800 | [diff] [blame] | 48 | |
David Pinedo | 0c08365 | 2015-07-09 12:44:38 -0600 | [diff] [blame] | 49 | if (WIN32) |
Lenny Komow | 7841316 | 2016-12-23 14:12:18 -0700 | [diff] [blame] | 50 | FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-${MAJOR}.def DEF_FILE) |
| 51 | FILE(READ ${DEF_FILE} DEF_TEXT) |
| 52 | STRING(REGEX REPLACE "vulkan-${MAJOR}.dll" "${API_LOWERCASE}-${MAJOR}.dll" DEF_EDITED "${DEF_TEXT}" ) |
| 53 | FILE(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${API_LOWERCASE}-${MAJOR}.def" "${DEF_EDITED}") |
David Pinedo | 0c08365 | 2015-07-09 12:44:38 -0600 | [diff] [blame] | 54 | endif() |
Tony Barbour | 1d825c7 | 2015-06-18 16:29:32 -0600 | [diff] [blame] | 55 | |
Courtney Goeltzenleuchter | 64ca923 | 2015-02-10 18:40:14 -0700 | [diff] [blame] | 56 | # DEBUG enables runtime loader ICD verification |
| 57 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG") |
| 58 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG") |
Mark Lobodzinski | 391bb6d | 2015-01-09 15:12:03 -0600 | [diff] [blame] | 59 | |
Jon Ashburn | 761de4b | 2016-03-11 10:58:56 -0700 | [diff] [blame] | 60 | set(NORMAL_LOADER_SRCS |
Mark Young | d66edd5 | 2017-03-10 17:31:18 -0700 | [diff] [blame] | 61 | extension_manual.c |
Jon Ashburn | 2077e38 | 2015-06-29 11:25:34 -0600 | [diff] [blame] | 62 | loader.c |
| 63 | loader.h |
Tobin Ehlis | b835d1b | 2015-07-03 10:34:49 -0600 | [diff] [blame] | 64 | vk_loader_platform.h |
Mark Lobodzinski | b87f902 | 2016-05-24 16:04:56 -0600 | [diff] [blame] | 65 | vk_loader_layer.h |
Jon Ashburn | 2077e38 | 2015-06-29 11:25:34 -0600 | [diff] [blame] | 66 | trampoline.c |
Ian Elliott | 954fa34 | 2015-10-30 15:28:23 -0600 | [diff] [blame] | 67 | wsi.c |
| 68 | wsi.h |
Jon Ashburn | 2077e38 | 2015-06-29 11:25:34 -0600 | [diff] [blame] | 69 | debug_report.c |
| 70 | debug_report.h |
Jon Ashburn | 2077e38 | 2015-06-29 11:25:34 -0600 | [diff] [blame] | 71 | gpa_helper.h |
| 72 | cJSON.c |
| 73 | cJSON.h |
Jon Ashburn | fc1031e | 2015-11-17 15:31:02 -0700 | [diff] [blame] | 74 | murmurhash.c |
| 75 | murmurhash.h |
Jon Ashburn | 2077e38 | 2015-06-29 11:25:34 -0600 | [diff] [blame] | 76 | ) |
Ian Elliott | 1962880 | 2015-02-04 12:06:46 -0700 | [diff] [blame] | 77 | |
Mark Young | 0f183a8 | 2017-02-28 09:58:04 -0700 | [diff] [blame] | 78 | set(OPT_LOADER_SRCS |
Jon Ashburn | 761de4b | 2016-03-11 10:58:56 -0700 | [diff] [blame] | 79 | dev_ext_trampoline.c |
Mark Young | 3938987 | 2017-01-19 21:10:49 -0700 | [diff] [blame] | 80 | phys_dev_ext.c |
Jon Ashburn | 761de4b | 2016-03-11 10:58:56 -0700 | [diff] [blame] | 81 | ) |
| 82 | |
Lenny Komow | 367c4ea | 2016-11-07 11:40:00 -0700 | [diff] [blame] | 83 | add_definitions(-DAPI_NAME="${API_NAME}") |
Ian Elliott | d3ef02f | 2015-07-06 14:36:13 -0600 | [diff] [blame] | 84 | |
Mark Young | 634bd7b | 2017-03-06 13:57:13 -0700 | [diff] [blame] | 85 | run_vk_xml_generate(loader_extension_generator.py vk_loader_extensions.h) |
| 86 | run_vk_xml_generate(loader_extension_generator.py vk_loader_extensions.c) |
| 87 | add_custom_target(loader_gen_files DEPENDS |
| 88 | vk_loader_extensions.h |
| 89 | vk_loader_extensions.c |
| 90 | ) |
Mark Young | 0f183a8 | 2017-02-28 09:58:04 -0700 | [diff] [blame] | 91 | |
Jon Ashburn | 2077e38 | 2015-06-29 11:25:34 -0600 | [diff] [blame] | 92 | if (WIN32) |
Dustin Graves | abe8b47 | 2016-05-31 16:32:29 -0600 | [diff] [blame] | 93 | # Use static MSVCRT libraries |
| 94 | foreach(configuration in CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO |
| 95 | CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO) |
| 96 | if(${configuration} MATCHES "/MD") |
| 97 | string(REGEX REPLACE "/MD" "/MT" ${configuration} "${${configuration}}") |
| 98 | endif() |
| 99 | endforeach() |
| 100 | |
Jon Ashburn | ce816b6 | 2016-01-12 11:33:33 -0700 | [diff] [blame] | 101 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS") |
Jon Ashburn | 761de4b | 2016-03-11 10:58:56 -0700 | [diff] [blame] | 102 | # Build dev_ext_trampoline.c with -O2 to allow tail-call optimization. |
| 103 | # Build other C files with normal options |
| 104 | # setup two Cmake targets (loader-norm and loader-opt) for the different compilation flags |
| 105 | separate_arguments(LOCAL_C_FLAGS_DBG WINDOWS_COMMAND ${CMAKE_C_FLAGS_DEBUG}) |
| 106 | set(CMAKE_C_FLAGS_DEBUG " ") |
| 107 | separate_arguments(LOCAL_C_FLAGS_REL WINDOWS_COMMAND ${CMAKE_C_FLAGS_RELEASE}) |
Jon Ashburn | 2077e38 | 2015-06-29 11:25:34 -0600 | [diff] [blame] | 108 | |
Jon Ashburn | 761de4b | 2016-03-11 10:58:56 -0700 | [diff] [blame] | 109 | add_library(loader-norm OBJECT ${NORMAL_LOADER_SRCS} dirent_on_windows.c) |
Mark Young | 634bd7b | 2017-03-06 13:57:13 -0700 | [diff] [blame] | 110 | add_dependencies(loader-norm generate_helper_files loader_gen_files) |
Mark Young | 0f183a8 | 2017-02-28 09:58:04 -0700 | [diff] [blame] | 111 | |
Jon Ashburn | 761de4b | 2016-03-11 10:58:56 -0700 | [diff] [blame] | 112 | target_compile_options(loader-norm PUBLIC "$<$<CONFIG:DEBUG>:${LOCAL_C_FLAGS_DBG}>") |
| 113 | add_library(loader-opt OBJECT ${OPT_LOADER_SRCS}) |
Mark Young | 634bd7b | 2017-03-06 13:57:13 -0700 | [diff] [blame] | 114 | add_dependencies(loader-opt generate_helper_files loader_gen_files) |
Mark Young | 0f183a8 | 2017-02-28 09:58:04 -0700 | [diff] [blame] | 115 | |
Jon Ashburn | 761de4b | 2016-03-11 10:58:56 -0700 | [diff] [blame] | 116 | target_compile_options(loader-opt PUBLIC "$<$<CONFIG:DEBUG>:${LOCAL_C_FLAGS_REL}>") |
Lenny Komow | 7841316 | 2016-12-23 14:12:18 -0700 | [diff] [blame] | 117 | add_library(${API_LOWERCASE}-${MAJOR} SHARED $<TARGET_OBJECTS:loader-opt> $<TARGET_OBJECTS:loader-norm> ${CMAKE_CURRENT_BINARY_DIR}/${API_LOWERCASE}-${MAJOR}.def ${CMAKE_CURRENT_SOURCE_DIR}/loader.rc) |
Jon Ashburn | 761de4b | 2016-03-11 10:58:56 -0700 | [diff] [blame] | 118 | add_library(VKstatic.${MAJOR} STATIC $<TARGET_OBJECTS:loader-opt> $<TARGET_OBJECTS:loader-norm>) |
Karl Schultz | 80b8aca | 2017-01-24 14:44:26 -0800 | [diff] [blame] | 119 | # Suppress conflicting libs warning for debug builds. |
| 120 | set_target_properties(${API_LOWERCASE}-${MAJOR} PROPERTIES LINK_FLAGS_DEBUG /ignore:4098) |
David Pinedo | 0c08365 | 2015-07-09 12:44:38 -0600 | [diff] [blame] | 121 | set_target_properties(VKstatic.${MAJOR} PROPERTIES OUTPUT_NAME VKstatic.${MAJOR}) |
Lenny Komow | 63fc169 | 2016-11-07 10:44:23 -0700 | [diff] [blame] | 122 | target_link_libraries(${API_LOWERCASE}-${MAJOR} shlwapi) |
Mark Young | 634bd7b | 2017-03-06 13:57:13 -0700 | [diff] [blame] | 123 | add_dependencies(${API_LOWERCASE}-${MAJOR} generate_helper_files loader_gen_files) |
Mark Young | 0f183a8 | 2017-02-28 09:58:04 -0700 | [diff] [blame] | 124 | |
Nekotekina | 9244350 | 2016-07-08 15:49:13 +0300 | [diff] [blame] | 125 | target_link_libraries(VKstatic.${MAJOR} shlwapi) |
Mark Mueller | b33052d | 2016-04-18 11:04:36 -0600 | [diff] [blame] | 126 | if (CMAKE_GENERATOR MATCHES "^Visual Studio.*") |
Lenny Komow | 63fc169 | 2016-11-07 10:44:23 -0700 | [diff] [blame] | 127 | file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/${API_LOWERCASE}-${MAJOR}.dll COPY_SRC_PATH) |
Mark Mueller | b33052d | 2016-04-18 11:04:36 -0600 | [diff] [blame] | 128 | file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/../demos/$<CONFIGURATION>/ COPY_DST_PATH) |
| 129 | file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/../tests/$<CONFIGURATION>/ COPY_DST_TEST_PATH) |
| 130 | else() |
Lenny Komow | 63fc169 | 2016-11-07 10:44:23 -0700 | [diff] [blame] | 131 | file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/${API_LOWERCASE}-${MAJOR}.dll COPY_SRC_PATH) |
Mark Mueller | b33052d | 2016-04-18 11:04:36 -0600 | [diff] [blame] | 132 | file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/../demos/ COPY_DST_PATH) |
| 133 | file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/../tests/ COPY_DST_TEST_PATH) |
| 134 | endif() |
Lenny Komow | 63fc169 | 2016-11-07 10:44:23 -0700 | [diff] [blame] | 135 | add_custom_command(TARGET ${API_LOWERCASE}-${MAJOR} POST_BUILD |
Jon Ashburn | f8b3c89 | 2016-03-28 14:43:53 -0600 | [diff] [blame] | 136 | COMMAND xcopy /Y /I ${COPY_SRC_PATH} ${COPY_DST_PATH}) |
Lenny Komow | 63fc169 | 2016-11-07 10:44:23 -0700 | [diff] [blame] | 137 | add_custom_command(TARGET ${API_LOWERCASE}-${MAJOR} POST_BUILD |
Jon Ashburn | f8b3c89 | 2016-03-28 14:43:53 -0600 | [diff] [blame] | 138 | COMMAND xcopy /Y /I ${COPY_SRC_PATH} ${COPY_DST_TEST_PATH}) |
Jon Ashburn | fd679d8 | 2016-03-25 15:57:50 -0600 | [diff] [blame] | 139 | |
Jon Ashburn | bb7e35b | 2016-02-12 16:39:20 -0700 | [diff] [blame] | 140 | else() |
Jon Ashburn | ce816b6 | 2016-01-12 11:33:33 -0700 | [diff] [blame] | 141 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith") |
Ian Elliott | 1962880 | 2015-02-04 12:06:46 -0700 | [diff] [blame] | 142 | |
Mark Young | 0f183a8 | 2017-02-28 09:58:04 -0700 | [diff] [blame] | 143 | add_library(${API_LOWERCASE} SHARED ${NORMAL_LOADER_SRCS} ${OPT_LOADER_SRCS}) |
Mark Young | 634bd7b | 2017-03-06 13:57:13 -0700 | [diff] [blame] | 144 | add_dependencies(${API_LOWERCASE} generate_helper_files loader_gen_files) |
Karl Schultz | b4d31af | 2017-03-10 14:58:10 -0700 | [diff] [blame] | 145 | set_target_properties(${API_LOWERCASE} PROPERTIES SOVERSION "1" VERSION "1.0.${vk_header_version}") |
Lenny Komow | 63fc169 | 2016-11-07 10:44:23 -0700 | [diff] [blame] | 146 | target_link_libraries(${API_LOWERCASE} -ldl -lpthread -lm) |
Mark Young | 0f183a8 | 2017-02-28 09:58:04 -0700 | [diff] [blame] | 147 | |
Lenny Komow | 63fc169 | 2016-11-07 10:44:23 -0700 | [diff] [blame] | 148 | install(TARGETS ${API_LOWERCASE} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) |
Karl Schultz | b4d31af | 2017-03-10 14:58:10 -0700 | [diff] [blame] | 149 | |
| 150 | # Generate pkg-config file. |
| 151 | include(FindPkgConfig QUIET) |
| 152 | if(PKG_CONFIG_FOUND) |
| 153 | set(VK_API_VERSION "1.0.${vk_header_version}") |
| 154 | foreach(LIB ${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES} ${PLATFORM_LIBS}) |
| 155 | set(PRIVATE_LIBS "${PRIVATE_LIBS} -l${LIB}") |
| 156 | endforeach() |
| 157 | configure_file("vulkan.pc.in" "vulkan.pc" @ONLY) |
| 158 | install(FILES "${CMAKE_CURRENT_BINARY_DIR}/vulkan.pc" |
leigh123linux | ebbc21c | 2017-03-15 09:59:36 +0000 | [diff] [blame] | 159 | DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") |
Karl Schultz | b4d31af | 2017-03-10 14:58:10 -0700 | [diff] [blame] | 160 | endif() |
Ian Elliott | 2d4ab1e | 2015-01-13 17:52:38 -0700 | [diff] [blame] | 161 | endif() |