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