Home | History | Annotate | Download | only in demos
      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