forked from KhronosGroup/KTX-Software
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmkvk.cmake
148 lines (131 loc) · 5.1 KB
/
mkvk.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# Copyright 2015-2020 The Khronos Group Inc.
# SPDX-License-Identifier: Apache-2.0
# Code generation scripts that require a Vulkan SDK installation
#set(skip_mkvk_message "-> skipping mkvk target (this is harmless; only needed when re-generating of vulkan headers and dfdutils is required)")
if (NOT IOS)
# Not needed as local custom vulkan_core.h is used. Keeping
# in case we go back to the standard one.
# # find_package doesn't find the Vulkan SDK when building for IOS.
# # I haven't investigated why.
# find_package(Vulkan)
# if(NOT Vulkan_FOUND)
# message(STATUS "Vulkan SDK not found ${skip_mkvk_message}")
# return()
# endif()
else()
# Skip mkvk. We don't need to run it when building for iOS.
return()
endif()
if(CMAKE_HOST_WIN32 AND NOT CYGWIN_INSTALL_PATH)
# Git for Windows comes with Perl
# Trick FindPerl into considering default Git location
set(CYGWIN_INSTALL_PATH "C:\\Program Files\\Git\\usr")
endif()
find_package(Perl)
if(NOT PERL_FOUND)
message(STATUS "Perl not found ${skip_mkvk_message}")
return()
endif()
list(APPEND mkvkformatfiles_input
"lib/dfdutils/vulkan/vulkan_core.h"
"lib/mkvkformatfiles")
list(APPEND mkvkformatfiles_output
"${PROJECT_SOURCE_DIR}/lib/vkformat_enum.h"
"${PROJECT_SOURCE_DIR}/lib/vkformat_check.c"
"${PROJECT_SOURCE_DIR}/lib/vkformat_str.c")
# What a shame! We have to duplicate most of the build commands because
# if(CMAKE_HOST_WIN32) can't appear inside add_custom_command.
if(CMAKE_HOST_WIN32)
add_custom_command(OUTPUT ${mkvkformatfiles_output}
COMMAND ${CMAKE_COMMAND} -E make_directory lib
COMMAND "${BASH_EXECUTABLE}" -c "Vulkan_INCLUDE_DIR=\"${Vulkan_INCLUDE_DIR}\" lib/mkvkformatfiles lib"
COMMAND "${BASH_EXECUTABLE}" -c "unix2dos ${PROJECT_SOURCE_DIR}/lib/vkformat_enum.h"
COMMAND "${BASH_EXECUTABLE}" -c "unix2dos ${PROJECT_SOURCE_DIR}/lib/vkformat_check.c"
COMMAND "${BASH_EXECUTABLE}" -c "unix2dos ${PROJECT_SOURCE_DIR}/lib/vkformat_str.c"
DEPENDS ${mkvkformatfiles_input}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Generating VkFormat-related source files"
VERBATIM
)
else()
add_custom_command(OUTPUT ${mkvkformatfiles_output}
COMMAND ${CMAKE_COMMAND} -E make_directory lib
COMMAND Vulkan_INCLUDE_DIR=\"${Vulkan_INCLUDE_DIR}\" lib/mkvkformatfiles lib
DEPENDS ${mkvkformatfiles_input}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Generating VkFormat-related source files"
VERBATIM
)
endif()
add_custom_target(mkvkformatfiles
DEPENDS ${mkvkformatfiles_output}
SOURCES ${mkvkformatfiles_input}
)
list(APPEND makevkswitch_input
"lib/vkformat_enum.h"
"lib/dfdutils/makevk2dfd.pl")
set(makevkswitch_output
"${PROJECT_SOURCE_DIR}/lib/dfdutils/vk2dfd.inl")
if(CMAKE_HOST_WIN32)
add_custom_command(
OUTPUT ${makevkswitch_output}
COMMAND ${CMAKE_COMMAND} -E make_directory lib/dfdutils
COMMAND "${PERL_EXECUTABLE}" lib/dfdutils/makevk2dfd.pl lib/vkformat_enum.h lib/dfdutils/vk2dfd.inl
COMMAND "${BASH_EXECUTABLE}" -c "unix2dos ${PROJECT_SOURCE_DIR}/lib/dfdutils/vk2dfd.inl"
DEPENDS ${makevkswitch_input}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Generating VkFormat/DFD switch body"
VERBATIM
)
else()
add_custom_command(
OUTPUT ${makevkswitch_output}
COMMAND ${CMAKE_COMMAND} -E make_directory lib/dfdutils
COMMAND "${PERL_EXECUTABLE}" lib/dfdutils/makevk2dfd.pl lib/vkformat_enum.h lib/dfdutils/vk2dfd.inl
DEPENDS ${makevkswitch_input}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Generating VkFormat/DFD switch body"
VERBATIM
)
endif()
add_custom_target(makevk2dfd
DEPENDS ${makevkswitch_output}
SOURCES ${makevkswitch_input}
)
list(APPEND makedfd2vk_input
"lib/vkformat_enum.h"
"lib/dfdutils/makedfd2vk.pl")
list(APPEND makedfd2vk_output
"${PROJECT_SOURCE_DIR}/lib/dfdutils/dfd2vk.inl")
if(CMAKE_HOST_WIN32)
add_custom_command(
OUTPUT ${makedfd2vk_output}
COMMAND ${CMAKE_COMMAND} -E make_directory lib/dfdutils
COMMAND "${PERL_EXECUTABLE}" lib/dfdutils/makedfd2vk.pl lib/vkformat_enum.h lib/dfdutils/dfd2vk.inl
COMMAND "${BASH_EXECUTABLE}" -c "unix2dos ${PROJECT_SOURCE_DIR}/lib/dfdutils/dfd2vk.inl"
DEPENDS ${makedfd2vk_input}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Generating DFD/VkFormat switch body"
VERBATIM
)
else()
add_custom_command(
OUTPUT ${makedfd2vk_output}
COMMAND ${CMAKE_COMMAND} -E make_directory lib/dfdutils
COMMAND "${PERL_EXECUTABLE}" lib/dfdutils/makedfd2vk.pl lib/vkformat_enum.h lib/dfdutils/dfd2vk.inl
DEPENDS ${makedfd2vk_input}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Generating DFD/VkFormat switch body"
VERBATIM
)
endif()
add_custom_target(makedfd2vk
DEPENDS ${makedfd2vk_output}
SOURCES ${makedfd2vk_input}
)
add_custom_target(mkvk SOURCES ${CMAKE_CURRENT_LIST_FILE})
add_dependencies(mkvk
mkvkformatfiles
makevk2dfd
makedfd2vk
)