1 if(CMAKE_SYSTEM_NAME STREQUAL "Windows") 2 add_definitions(-DVK_USE_PLATFORM_WIN32_KHR -DWIN32_LEAN_AND_MEAN) 3 set(DisplayServer Win32) 4 if (NOT MSVC_VERSION LESS 1900) 5 # Enable control flow guard 6 message(STATUS "Building demos with control flow guard") 7 add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/guard:cf>") 8 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /guard:cf") 9 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /guard:cf") 10 endif() 11 elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") 12 add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR) 13 elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") 14 if (NOT DEMOS_WSI_SELECTION) 15 set(DEMOS_WSI_SELECTION "XCB") 16 endif() 17 18 if (DEMOS_WSI_SELECTION STREQUAL "XCB") 19 if (NOT BUILD_WSI_XCB_SUPPORT) 20 message( FATAL_ERROR "Selected XCB for demos build but not building Xcb support" ) 21 endif() 22 include_directories(${XCB_INCLUDE_DIRS}) 23 link_libraries(${XCB_LIBRARIES}) 24 add_definitions(-DVK_USE_PLATFORM_XCB_KHR) 25 elseif(DEMOS_WSI_SELECTION STREQUAL "XLIB") 26 if (NOT BUILD_WSI_XLIB_SUPPORT) 27 message( FATAL_ERROR "Selected XLIB for demos build but not building Xlib support" ) 28 endif() 29 include_directories(${X11_INCLUDE_DIR}) 30 link_libraries(${X11_LIBRARIES}) 31 add_definitions(-DVK_USE_PLATFORM_XLIB_KHR) 32 elseif(DEMOS_WSI_SELECTION STREQUAL "WAYLAND") 33 if (NOT BUILD_WSI_WAYLAND_SUPPORT) 34 message( FATAL_ERROR "Selected Wayland for demos build but not building Wayland support" ) 35 endif() 36 include_directories(${WAYLAND_CLIENT_INCLUDE_DIR}) 37 link_libraries(${WAYLAND_CLIENT_LIBRARIES}) 38 add_definitions(-DVK_USE_PLATFORM_WAYLAND_KHR) 39 elseif(DEMOS_WSI_SELECTION STREQUAL "MIR") 40 if (NOT BUILD_WSI_MIR_SUPPORT) 41 message( FATAL_ERROR "Selected MIR for demos build but not building Mir support" ) 42 endif() 43 add_definitions(-DVK_USE_PLATFORM_MIR_KHR) 44 include_directories(${MIR_INCLUDE_DIR}) 45 # TODO - Add Mir support 46 elseif(DEMOS_WSI_SELECTION STREQUAL "DISPLAY") 47 add_definitions(-DVK_USE_PLATFORM_DISPLAY_KHR) 48 else() 49 message( FATAL_ERROR "Unrecognized value for DEMOS_WSI_SELECTION: ${DEMOS_WSI_SELECTION}" ) 50 endif() 51 52 include_directories ("${PROJECT_SOURCE_DIR}/icd/common") 53 link_libraries(${API_LOWERCASE} m) 54 else() 55 message(FATAL_ERROR "Unsupported Platform!") 56 endif() 57 58 file(GLOB TEXTURES 59 "${PROJECT_SOURCE_DIR}/demos/*.ppm" 60 ) 61 file(COPY ${TEXTURES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) 62 63 set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") 64 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 65 66 if(WIN32) 67 set (LIBRARIES "${API_LOWERCASE}-${MAJOR}") 68 elseif(UNIX) 69 set (LIBRARIES "${API_LOWERCASE}") 70 else() 71 endif() 72 73 if(WIN32) 74 # For Windows, since 32-bit and 64-bit items can co-exist, we build each in its own build directory. 75 # 32-bit target data goes in build32, and 64-bit target data goes into build. So, include/link the 76 # appropriate data at build time. 77 if (CMAKE_CL_64) 78 set (BUILDTGT_DIR build) 79 else () 80 set (BUILDTGT_DIR build32) 81 endif() 82 83 # Use static MSVCRT libraries 84 foreach(configuration in CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO 85 CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO) 86 if(${configuration} MATCHES "/MD") 87 string(REGEX REPLACE "/MD" "/MT" ${configuration} "${${configuration}}") 88 endif() 89 endforeach() 90 91 file(COPY cube.vcxproj.user DESTINATION ${CMAKE_BINARY_DIR}/demos) 92 file(COPY vulkaninfo.vcxproj.user DESTINATION ${CMAKE_BINARY_DIR}/demos) 93 endif() 94 95 add_custom_command( 96 COMMENT "Compiling cube demo vertex shader" 97 OUTPUT cube.vert.inc 98 COMMAND ${GLSLANG_VALIDATOR} -V -x -o ${CMAKE_CURRENT_BINARY_DIR}/cube.vert.inc ${PROJECT_SOURCE_DIR}/demos/cube.vert 99 MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/demos/cube.vert 100 DEPENDS ${PROJECT_SOURCE_DIR}/demos/cube.vert ${GLSLANG_VALIDATOR} 101 ) 102 add_custom_command( 103 COMMENT "Compiling cube demo fragment shader" 104 OUTPUT cube.frag.inc 105 COMMAND ${GLSLANG_VALIDATOR} -V -x -o ${CMAKE_CURRENT_BINARY_DIR}/cube.frag.inc ${PROJECT_SOURCE_DIR}/demos/cube.frag 106 MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/demos/cube.frag 107 DEPENDS ${PROJECT_SOURCE_DIR}/demos/cube.frag ${GLSLANG_VALIDATOR} 108 ) 109 110 include_directories(${CMAKE_CURRENT_BINARY_DIR}) 111 112 113 if(WIN32) 114 include_directories ( 115 "${PROJECT_SOURCE_DIR}/icd/common" 116 ) 117 118 set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES") 119 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES") 120 endif() 121 122 add_executable(${API_LOWERCASE}info vulkaninfo.c) 123 target_link_libraries(${API_LOWERCASE}info ${LIBRARIES}) 124 125 if(NOT WIN32) 126 if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL ${CMAKE_HOST_SYSTEM_PROCESSOR}) 127 add_executable(cube cube.c ${PROJECT_SOURCE_DIR}/demos/cube.vert ${PROJECT_SOURCE_DIR}/demos/cube.frag cube.vert.inc cube.frag.inc) 128 target_link_libraries(cube ${LIBRARIES}) 129 endif() 130 else() 131 if (CMAKE_CL_64) 132 set (LIB_DIR "Win64") 133 else() 134 set (LIB_DIR "Win32") 135 endif() 136 137 add_executable(cube WIN32 cube.c ${PROJECT_SOURCE_DIR}/demos/cube.vert ${PROJECT_SOURCE_DIR}/demos/cube.frag cube.vert.inc cube.frag.inc) 138 target_link_libraries(cube ${LIBRARIES}) 139 endif() 140 141 if(NOT WIN32) 142 if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL ${CMAKE_HOST_SYSTEM_PROCESSOR}) 143 add_executable(cubepp cube.cpp ${PROJECT_SOURCE_DIR}/demos/cube.vert ${PROJECT_SOURCE_DIR}/demos/cube.frag cube.vert.inc cube.frag.inc) 144 target_link_libraries(cubepp ${LIBRARIES}) 145 endif() 146 else() 147 if (CMAKE_CL_64) 148 set (LIB_DIR "Win64") 149 else() 150 set (LIB_DIR "Win32") 151 endif() 152 153 add_executable(cubepp WIN32 cube.cpp ${PROJECT_SOURCE_DIR}/demos/cube.vert ${PROJECT_SOURCE_DIR}/demos/cube.frag cube.vert.inc cube.frag.inc) 154 target_link_libraries(cubepp ${LIBRARIES}) 155 endif() 156 157 if ((${CMAKE_SYSTEM_PROCESSOR} STREQUAL ${CMAKE_HOST_SYSTEM_PROCESSOR})) 158 if ((DEMOS_WSI_SELECTION STREQUAL "XCB") OR (DEMOS_WSI_SELECTION STREQUAL "WAYLAND") OR WIN32 OR (CMAKE_SYSTEM_NAME STREQUAL "Android")) 159 add_subdirectory(smoke) 160 endif() 161 endif() 162 163 if(UNIX) 164 if(INSTALL_LVL_FILES) 165 install(TARGETS ${API_LOWERCASE}info DESTINATION ${CMAKE_INSTALL_BINDIR}) 166 endif() 167 endif() 168