blob: 793dccc890b44f67574fc85f5c61b9476bd172a1 [file] [log] [blame]
Jon Ashburnd38bfb12014-10-14 19:15:22 -06001include_directories(
2 ${CMAKE_CURRENT_SOURCE_DIR}
Chia-I Wuf46b81a2015-01-04 11:12:47 +08003 ${CMAKE_CURRENT_BINARY_DIR}
Jon Ashburnd38bfb12014-10-14 19:15:22 -06004)
Chia-I Wu0c105342014-08-03 09:31:26 +08005
David Pinedo0c083652015-07-09 12:44:38 -06006if (WIN32)
David Pinedo4bb0d302015-09-08 11:07:46 -06007 add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/vulkan-${MAJOR}.def
Mun, Gwan-gyeong4f364962016-02-22 20:27:31 +09008 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
David Pinedo0c083652015-07-09 12:44:38 -06009 DEPENDS ${PROJECT_SOURCE_DIR}/loader/vk-loader-generate.py ${PROJECT_SOURCE_DIR}/vulkan.py)
David Pinedo0c083652015-07-09 12:44:38 -060010endif()
Tony Barbour1d825c72015-06-18 16:29:32 -060011
Courtney Goeltzenleuchter64ca9232015-02-10 18:40:14 -070012# 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")
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -060015
Jon Ashburn761de4b2016-03-11 10:58:56 -070016set(NORMAL_LOADER_SRCS
Jon Ashburn2077e382015-06-29 11:25:34 -060017 loader.c
18 loader.h
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060019 vk_loader_platform.h
Mark Lobodzinskib87f9022016-05-24 16:04:56 -060020 vk_loader_layer.h
Jon Ashburn2077e382015-06-29 11:25:34 -060021 trampoline.c
Ian Elliott954fa342015-10-30 15:28:23 -060022 wsi.c
23 wsi.h
Mark Lobodzinski317574e2016-08-29 14:21:14 -060024 extensions.c
25 extensions.h
Jon Ashburn2077e382015-06-29 11:25:34 -060026 debug_report.c
27 debug_report.h
28 table_ops.h
29 gpa_helper.h
30 cJSON.c
31 cJSON.h
Jon Ashburnfc1031e2015-11-17 15:31:02 -070032 murmurhash.c
33 murmurhash.h
Jon Ashburn2077e382015-06-29 11:25:34 -060034)
Ian Elliott19628802015-02-04 12:06:46 -070035
Jon Ashburn761de4b2016-03-11 10:58:56 -070036set (OPT_LOADER_SRCS
37 dev_ext_trampoline.c
38)
39
40set (LOADER_SRCS ${NORMAL_LOADER_SRCS} ${OPT_LOADER_SRCS})
Ian Elliottd3ef02f2015-07-06 14:36:13 -060041
Jon Ashburn2077e382015-06-29 11:25:34 -060042if (WIN32)
Dustin Gravesabe8b472016-05-31 16:32:29 -060043 # 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
Jon Ashburnce816b62016-01-12 11:33:33 -070051 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS")
Jon Ashburn761de4b2016-03-11 10:58:56 -070052 # 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})
Jon Ashburn2077e382015-06-29 11:25:34 -060058
Jon Ashburn761de4b2016-03-11 10:58:56 -070059 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}>")
David Pinedo657bd742016-05-05 13:52:37 -060063 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)
Jon Ashburn761de4b2016-03-11 10:58:56 -070064 add_library(VKstatic.${MAJOR} STATIC $<TARGET_OBJECTS:loader-opt> $<TARGET_OBJECTS:loader-norm>)
David Pinedo0c083652015-07-09 12:44:38 -060065 set_target_properties(VKstatic.${MAJOR} PROPERTIES OUTPUT_NAME VKstatic.${MAJOR})
David Pinedo4bb0d302015-09-08 11:07:46 -060066 target_link_libraries(vulkan-${MAJOR} shlwapi)
Nekotekina92443502016-07-08 15:49:13 +030067 target_link_libraries(VKstatic.${MAJOR} shlwapi)
Mark Muellerb33052d2016-04-18 11:04:36 -060068 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()
Jon Ashburnfd679d82016-03-25 15:57:50 -060077 add_custom_command(TARGET vulkan-${MAJOR} POST_BUILD
Jon Ashburnf8b3c892016-03-28 14:43:53 -060078 COMMAND xcopy /Y /I ${COPY_SRC_PATH} ${COPY_DST_PATH})
Jon Ashburnfd679d82016-03-25 15:57:50 -060079 add_custom_command(TARGET vulkan-${MAJOR} POST_BUILD
Jon Ashburnf8b3c892016-03-28 14:43:53 -060080 COMMAND xcopy /Y /I ${COPY_SRC_PATH} ${COPY_DST_TEST_PATH})
Jon Ashburnfd679d82016-03-25 15:57:50 -060081
Jon Ashburnbb7e35b2016-02-12 16:39:20 -070082else()
Jon Ashburnce816b62016-01-12 11:33:33 -070083 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith")
Ian Elliott19628802015-02-04 12:06:46 -070084
Jeremy Hayes22641442016-02-08 12:14:51 -070085 add_library(vulkan SHARED ${LOADER_SRCS})
Mark Lobodzinski03d9caa2016-10-17 16:50:51 -060086 set_target_properties(vulkan PROPERTIES SOVERSION "1" VERSION "1.0.31")
Jeremy Hayes22641442016-02-08 12:14:51 -070087 target_link_libraries(vulkan -ldl -lpthread -lm)
Karl Schultze089d7d2016-09-30 13:32:16 -060088 install(TARGETS vulkan LIBRARY DESTINATION lib)
Ian Elliott2d4ab1e2015-01-13 17:52:38 -070089endif()