• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1include_directories(
2	${CMAKE_CURRENT_SOURCE_DIR}
3	${CMAKE_CURRENT_BINARY_DIR}
4)
5
6if (WIN32)
7    add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/vulkan-${MAJOR}.def
8	    COMMAND ${PYTHON_CMD} ${PROJECT_SOURCE_DIR}/loader/vk-loader-generate.py ${DisplayServer} win-def-file vulkan-${MAJOR}.dll all > ${CMAKE_CURRENT_BINARY_DIR}/vulkan-${MAJOR}.def
9	    DEPENDS ${PROJECT_SOURCE_DIR}/loader/vk-loader-generate.py ${PROJECT_SOURCE_DIR}/vulkan.py)
10endif()
11
12# DEBUG enables runtime loader ICD verification
13set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG")
14set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG")
15
16set(NORMAL_LOADER_SRCS
17    loader.c
18    loader.h
19    vk_loader_platform.h
20    vk_loader_layer.h
21    trampoline.c
22    wsi.c
23    wsi.h
24    extensions.c
25    extensions.h
26    debug_report.c
27    debug_report.h
28    table_ops.h
29    gpa_helper.h
30    cJSON.c
31    cJSON.h
32    murmurhash.c
33    murmurhash.h
34)
35
36set (OPT_LOADER_SRCS
37    dev_ext_trampoline.c
38)
39
40set (LOADER_SRCS ${NORMAL_LOADER_SRCS} ${OPT_LOADER_SRCS})
41
42if (WIN32)
43    # Use static MSVCRT libraries
44    foreach(configuration in CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO
45                             CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO)
46        if(${configuration} MATCHES "/MD")
47            string(REGEX REPLACE "/MD" "/MT" ${configuration} "${${configuration}}")
48        endif()
49    endforeach()
50
51    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS")
52    # Build dev_ext_trampoline.c with -O2 to allow tail-call optimization.
53    # Build other C files with normal options
54    # setup two Cmake targets (loader-norm and loader-opt) for the different compilation flags
55    separate_arguments(LOCAL_C_FLAGS_DBG WINDOWS_COMMAND ${CMAKE_C_FLAGS_DEBUG})
56    set(CMAKE_C_FLAGS_DEBUG " ")
57    separate_arguments(LOCAL_C_FLAGS_REL WINDOWS_COMMAND ${CMAKE_C_FLAGS_RELEASE})
58
59    add_library(loader-norm OBJECT ${NORMAL_LOADER_SRCS} dirent_on_windows.c)
60    target_compile_options(loader-norm PUBLIC "$<$<CONFIG:DEBUG>:${LOCAL_C_FLAGS_DBG}>")
61    add_library(loader-opt OBJECT ${OPT_LOADER_SRCS})
62    target_compile_options(loader-opt PUBLIC "$<$<CONFIG:DEBUG>:${LOCAL_C_FLAGS_REL}>")
63    add_library(vulkan-${MAJOR} SHARED $<TARGET_OBJECTS:loader-opt> $<TARGET_OBJECTS:loader-norm> ${CMAKE_CURRENT_BINARY_DIR}/vulkan-${MAJOR}.def ${CMAKE_CURRENT_SOURCE_DIR}/loader.rc)
64    add_library(VKstatic.${MAJOR} STATIC $<TARGET_OBJECTS:loader-opt> $<TARGET_OBJECTS:loader-norm>)
65    set_target_properties(VKstatic.${MAJOR} PROPERTIES OUTPUT_NAME VKstatic.${MAJOR})
66    target_link_libraries(vulkan-${MAJOR} shlwapi)
67    target_link_libraries(VKstatic.${MAJOR} shlwapi)
68    if (CMAKE_GENERATOR MATCHES "^Visual Studio.*")
69        file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/vulkan-${MAJOR}.dll COPY_SRC_PATH)
70        file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/../demos/$<CONFIGURATION>/ COPY_DST_PATH)
71        file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/../tests/$<CONFIGURATION>/ COPY_DST_TEST_PATH)
72    else()
73        file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/vulkan-${MAJOR}.dll COPY_SRC_PATH)
74        file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/../demos/ COPY_DST_PATH)
75        file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/../tests/ COPY_DST_TEST_PATH)
76    endif()
77    add_custom_command(TARGET vulkan-${MAJOR} POST_BUILD
78      COMMAND xcopy /Y /I ${COPY_SRC_PATH} ${COPY_DST_PATH})
79    add_custom_command(TARGET vulkan-${MAJOR} POST_BUILD
80      COMMAND xcopy /Y /I ${COPY_SRC_PATH} ${COPY_DST_TEST_PATH})
81
82else()
83    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith")
84
85    add_library(vulkan SHARED ${LOADER_SRCS})
86    set_target_properties(vulkan PROPERTIES SOVERSION "1" VERSION "1.0.31")
87    target_link_libraries(vulkan -ldl -lpthread -lm)
88    install(TARGETS vulkan LIBRARY DESTINATION lib)
89endif()
90