• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1if(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()
11elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
12    add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR)
13elseif(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)
54else()
55    message(FATAL_ERROR "Unsupported Platform!")
56endif()
57
58file(GLOB TEXTURES
59  "${PROJECT_SOURCE_DIR}/demos/*.ppm"
60  )
61file(COPY ${TEXTURES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
62
63set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
64set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
65
66if(WIN32)
67  set (LIBRARIES "${API_LOWERCASE}-${MAJOR}")
68elseif(UNIX)
69  set (LIBRARIES "${API_LOWERCASE}")
70else()
71endif()
72
73if(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)
93endif()
94
95add_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)
102add_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
110include_directories(${CMAKE_CURRENT_BINARY_DIR})
111
112
113if(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")
120endif()
121
122add_executable(${API_LOWERCASE}info vulkaninfo.c)
123target_link_libraries(${API_LOWERCASE}info ${LIBRARIES})
124
125if(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()
130else()
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})
139endif()
140
141if(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()
146else()
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})
155endif()
156
157if ((${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()
161endif()
162
163if(UNIX)
164    if(INSTALL_LVL_FILES)
165        install(TARGETS ${API_LOWERCASE}info DESTINATION ${CMAKE_INSTALL_BINDIR})
166    endif()
167endif()
168