1
1
include (SwiftAddCustomCommandTarget )
2
2
include (SwiftSetIfArchBitness )
3
3
4
+ # Create a target to process single gyb source with the 'gyb' tool.
5
+ #
6
+ # handle_gyb_source_single(
7
+ # dependency_out_var_name
8
+ # SOURCE src_gyb
9
+ # OUTPUT output
10
+ # [FLAGS [flags ...]])
11
+ # [DEPENDS [depends ...]]
12
+ # [COMMENT comment])
13
+ #
14
+ # dependency_out_var_name
15
+ # The name of a variable, to be set in the parent scope to be the target
16
+ # target that invoke gyb.
17
+ #
18
+ # src_gyb
19
+ # .gyb suffixed source file
20
+ #
21
+ # output
22
+ # Output filename to be generated
23
+ #
24
+ # flags ...
25
+ # gyb flags in addition to ${SWIFT_GYB_FLAGS}.
26
+ #
27
+ # depends ...
28
+ # gyb flags in addition to 'src_gyb' and sources of gyb itself.
29
+ #
30
+ # comment
31
+ # Additional comment.
32
+ function (handle_gyb_source_single dependency_out_var_name )
33
+ set (options )
34
+ set (single_value_args SOURCE OUTPUT COMMENT )
35
+ set (multi_value_args FLAGS DEPENDS )
36
+ cmake_parse_arguments (
37
+ GYB_SINGLE # prefix
38
+ "${options} " "${single_value_args} " "${multi_value_args} " ${ARGN} )
39
+
40
+ set (gyb_flags
41
+ "--test" # Run gyb's self-tests whenever we use it. They're cheap
42
+ # enough and it keeps us honest.
43
+ ${SWIFT_GYB_FLAGS}
44
+ ${GYB_SINGLE_FLAGS} )
45
+
46
+ set (gyb_tool "${SWIFT_SOURCE_DIR} /utils/gyb" )
47
+ set (gyb_tool_source "${gyb_tool} " "${gyb_tool} .py" )
48
+
49
+ get_filename_component (dir "${GYB_SINGLE_OUTPUT} " DIRECTORY )
50
+ get_filename_component (basename "${GYB_SINGLE_OUTPUT} " NAME )
51
+ add_custom_command_target (
52
+ dependency_target
53
+ COMMAND
54
+ "${CMAKE_COMMAND} " -E make_directory "${dir} "
55
+ COMMAND
56
+ "${gyb_tool} " "${gyb_flags} "
57
+ -o "${GYB_SINGLE_OUTPUT} .tmp" "${GYB_SINGLE_SOURCE} "
58
+ COMMAND
59
+ "${CMAKE_COMMAND} " -E copy_if_different
60
+ "${GYB_SINGLE_OUTPUT} .tmp" "${GYB_SINGLE_OUTPUT} "
61
+ COMMAND
62
+ "${CMAKE_COMMAND} " -E remove "${GYB_SINGLE_OUTPUT} .tmp"
63
+ OUTPUT "${GYB_SINGLE_OUTPUT} "
64
+ DEPENDS "${gyb_tool_source} " "${GYB_SINGLE_DEPENDS} " "${GYB_SINGLE_SOURCE} "
65
+ COMMENT "Generating ${basename} from ${GYB_SINGLE_SOURCE} ${GYB_SINGLE_COMMENT} "
66
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR} "
67
+ SOURCES "${GYB_SINGLE_SOURCE} "
68
+ IDEMPOTENT )
69
+ set ("${dependency_out_var_name} " "${dependency_target} " PARENT_SCOPE )
70
+ endfunction ()
71
+
4
72
# Create a target to process .gyb files with the 'gyb' tool.
5
73
#
6
74
# handle_gyb_sources(
@@ -32,16 +100,8 @@ function(handle_gyb_sources dependency_out_var_name sources_var_name arch)
32
100
set (extra_gyb_flags "-DCMAKE_SIZEOF_VOID_P=${ptr_size} " )
33
101
endif ()
34
102
35
- set (gyb_flags
36
- "--test" # Run gyb's self-tests whenever we use it. They're cheap
37
- # enough and it keeps us honest.
38
- ${SWIFT_GYB_FLAGS}
39
- ${extra_gyb_flags} )
40
-
41
103
set (dependency_targets )
42
104
set (de_gybbed_sources )
43
- set (gyb_tool "${SWIFT_SOURCE_DIR} /utils/gyb" )
44
- set (gyb_tool_source "${gyb_tool} " "${gyb_tool} .py" )
45
105
set (gyb_extra_sources
46
106
"${SWIFT_SOURCE_DIR} /utils/GYBUnicodeDataUtils.py"
47
107
"${SWIFT_SOURCE_DIR} /utils/SwiftIntTypes.py"
@@ -59,27 +119,15 @@ function(handle_gyb_sources dependency_out_var_name sources_var_name arch)
59
119
endif ()
60
120
set (output_file_name "${dir} /${src_sans_gyb} " )
61
121
list (APPEND de_gybbed_sources "${output_file_name} " )
62
- string (MD5 output_file_name_hash "${output_file_name} " )
63
- add_custom_command_target (
64
- dependency_target
65
- COMMAND
66
- "${CMAKE_COMMAND} " -E make_directory "${dir} "
67
- COMMAND
68
- "${gyb_tool} " "${gyb_flags} " -o "${output_file_name} .tmp" "${src} "
69
- COMMAND
70
- "${CMAKE_COMMAND} " -E copy_if_different "${output_file_name} .tmp" "${output_file_name} "
71
- COMMAND
72
- "${CMAKE_COMMAND} " -E remove "${output_file_name} .tmp"
122
+ handle_gyb_source_single (dependency_target
123
+ SOURCE "${src} "
73
124
OUTPUT "${output_file_name} "
74
- DEPENDS "${gyb_tool_source} " "${src} " "${gyb_extra_sources} "
75
- COMMENT "Generating ${src_sans_gyb} from ${src} with ptr size = ${ptr_size} "
76
- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR} "
77
- SOURCES "${src} "
78
- IDEMPOTENT )
125
+ FLAGS ${extra_gyb_flags}
126
+ DEPENDS "${gyb_extra_sources} "
127
+ COMMENT "with ptr size = ${ptr_size} " )
79
128
list (APPEND dependency_targets "${dependency_target} " )
80
129
endif ()
81
130
endforeach ()
82
131
set ("${dependency_out_var_name} " "${dependency_targets} " PARENT_SCOPE )
83
132
set ("${sources_var_name} " "${de_gybbed_sources} " PARENT_SCOPE )
84
133
endfunction ()
85
-
0 commit comments