forked from OpenDDS/OpenDDS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtao_idl_sources.cmake
201 lines (163 loc) · 6.4 KB
/
tao_idl_sources.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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# Distributed under the OpenDDS License. See accompanying LICENSE
# file or http://www.opendds.org/license.html for details.
macro(_tao_append_lib_dir_to_path dst)
if (MSVC)
set(${dst} "PATH=")
if (DEFINED ENV{PATH})
set(${dst} "${${dst}}$ENV{PATH};")
endif()
else()
set(${dst} "LD_LIBRARY_PATH=")
if (DEFINED ENV{LD_LIBRARY_PATH})
set(${dst} "${${dst}}$ENV{LD_LIBRARY_PATH}:")
endif()
endif()
set(${dst} "${${dst}}${TAO_LIB_DIR}")
endmacro()
set(TAO_VERSIONING_IDL_FLAGS
-Wb,versioning_begin=TAO_BEGIN_VERSIONED_NAMESPACE_DECL
-Wb,versioning_end=TAO_END_VERSIONED_NAMESPACE_DECL
)
if (CORBA_E_MICRO)
list(APPEND TAO_CORBA_IDL_FLAGS -DCORBA_E_MICRO -Gce)
endif()
if (CORBA_E_COMPACT)
list(APPEND TAO_CORBA_IDL_FLAGS -DCORBA_E_COMPACT -Gce)
endif()
if (MINIMUM_CORBA)
list(APPEND TAO_CORBA_IDL_FLAGS -DTAO_HAS_MINIMUM_POA -Gmc)
endif()
if (TAO_NO_IIOP)
list(APPEND TAO_CORBA_IDL_FLAGS -DTAO_LACKS_IIOP)
endif()
if (GEN_OSTREAM)
list(APPEND TAO_CORBA_IDL_FLAGS -Gos)
endif()
if (NOT TAO_HAS_OPTIMIZE_COLLOCATED_INVOCATIONS)
list(APPEND TAO_CORBA_IDL_FLAGS -Sp -Sd)
endif()
function(tao_idl_command name)
set(multiValueArgs IDL_FLAGS IDL_FILES WORKING_DIRECTORY)
cmake_parse_arguments(_arg "" "" "${multiValueArgs}" ${ARGN})
set(_arg_IDL_FLAGS ${_arg_IDL_FLAGS})
if (NOT _arg_IDL_FILES)
message(FATAL_ERROR "using tao_idl_command(${name}) without specifying IDL_FILES")
endif()
if (NOT _arg_WORKING_DIRECTORY)
set(_working_binary_dir ${CMAKE_CURRENT_BINARY_DIR})
set(_working_source_dir ${CMAKE_CURRENT_SOURCE_DIR})
elseif (NOT IS_ABSOLUTE "${_arg_WORKING_DIRECTORY}")
set(_working_binary_dir ${CMAKE_CURRENT_BINARY_DIR}/${_arg_WORKING_DIRECTORY})
set(_working_source_dir ${CMAKE_CURRENT_SOURCE_DIR}/${_arg_WORKING_DIRECTORY})
else()
set(_working_binary_dir ${_arg_WORKING_DIRECTORY})
set(_working_source_dir ${CMAKE_CURRENT_SOURCE_DIR})
endif()
## convert all include paths to be relative to binary tree instead of to source tree
file(RELATIVE_PATH _rel_path_to_source_tree ${_working_binary_dir} ${_working_source_dir})
foreach(flag ${_arg_IDL_FLAGS})
if ("${flag}" MATCHES "^-I(\\.\\..*)")
list(APPEND _converted_flags -I${_rel_path_to_source_tree}/${CMAKE_MATCH_1})
else()
list(APPEND _converted_flags ${flag})
# if the flag is like "-Wb,stub_export_file=filename" then set the varilabe
# "idl_cmd_arg-wb-stub_export_file" to filename
string(REGEX MATCH "^-Wb,([^=]+)=(.+)" m "${flag}")
if (m)
set(idl_cmd_arg-wb-${CMAKE_MATCH_1} ${CMAKE_MATCH_2})
endif()
endif()
endforeach()
set(optionArgs -Sch -Sci -Scc -Ssh -SS -GA -GT -GX -Gxhst -Gxhsk)
cmake_parse_arguments(_idl_cmd_arg "${optionArgs}" "-o;-oS;-oA" "" ${_arg_IDL_FLAGS})
if ("${_idl_cmd_arg_-o}" STREQUAL "")
set(_output_dir "${_working_binary_dir}")
else()
set(_output_dir "${_working_binary_dir}/${_idl_cmd_arg_-o}")
endif()
if ("${_idl_cmd_arg_-oS}" STREQUAL "")
set(_skel_output_dir ${_output_dir})
else()
set(_skel_output_dir "${_working_binary_dir}/${_idl_cmd_arg_-oS}")
endif()
if ("${_idl_cmd_arg_-oA}" STREQUAL "")
set(_anyop_output_dir ${_output_dir})
else()
set(_anyop_output_dir "${_working_binary_dir}/${_idl_cmd_arg_-oA}")
endif()
foreach(idl_file ${_arg_IDL_FILES})
get_filename_component(idl_file_base ${idl_file} NAME_WE)
set(_STUB_HEADER_FILES)
set(_SKEL_HEADER_FILES)
if (NOT _idl_cmd_arg_-Sch)
set(_STUB_HEADER_FILES "${_output_dir}/${idl_file_base}C.h")
endif()
if (NOT _idl_cmd_arg_-Sci)
list(APPEND _STUB_HEADER_FILES "${_output_dir}/${idl_file_base}C.inl")
endif()
if (NOT _idl_cmd_arg_-Scc)
set(_STUB_CPP_FILES "${_output_dir}/${idl_file_base}C.cpp")
endif()
if (NOT _idl_cmd_arg_-Ssh)
set(_SKEL_HEADER_FILES "${_skel_output_dir}/${idl_file_base}S.h")
endif()
if (NOT _idl_cmd_arg_-SS)
set(_SKEL_CPP_FILES "${_skel_output_dir}/${idl_file_base}S.cpp")
endif()
if (_idl_cmd_arg_-GA)
set(_ANYOP_HEADER_FILES "${_anyop_output_dir}/${idl_file_base}A.h")
set(_ANYOP_CPP_FILES "${_anyop_output_dir}/${idl_file_base}A.cpp")
elseif (_idl_cmd_arg_-GX)
set(_ANYOP_HEADER_FILES "${_anyop_output_dir}/${idl_file_base}A.h")
endif()
if (_idl_cmd_arg_-GT)
list(APPEND ${idl_file_base}_SKEL_HEADER_FILES
"${_skel_output_dir}/${idl_file_base}S_T.h"
"${_skel_output_dir}/${idl_file_base}S_T.cpp")
endif()
if (_idl_cmd_arg_-Gxhst)
list(APPEND _STUB_HEADER_FILES ${CMAKE_CURRENT_BINARY_DIR}/${idl_cmd_arg-wb-stub_export_file})
endif()
if (_idl_cmd_arg_-Gxhsk)
list(APPEND _SKEL_HEADER_FILES ${CMAKE_CURRENT_BINARY_DIR}/${idl_cmd_arg-wb-skel_export_file})
endif()
get_filename_component(idl_file_path "${idl_file}" ABSOLUTE)
set(GPERF_LOCATION $<TARGET_FILE:ace_gperf>)
if(CMAKE_CONFIGURATION_TYPES)
get_target_property(is_gperf_imported ace_gperf IMPORTED)
if (is_gperf_imported)
set(GPERF_LOCATION $<TARGET_PROPERTY:ace_gperf,LOCATION>)
endif(is_gperf_imported)
endif(CMAKE_CONFIGURATION_TYPES)
if (BUILD_SHARED_LIB AND TARGET TAO_IDL_BE)
set(tao_idl_shared_libs TAO_IDL_BE TAO_IDL_FE)
endif()
set(_OUTPUT_FILES
${_STUB_HEADER_FILES}
${_SKEL_HEADER_FILES}
${_ANYOP_HEADER_FILES}
${_STUB_CPP_FILES}
${_SKEL_CPP_FILES}
${_ANYOP_CPP_FILES})
_tao_append_lib_dir_to_path(_tao_extra_lib_dirs)
add_custom_command(
OUTPUT ${_OUTPUT_FILES}
DEPENDS tao_idl ${tao_idl_shared_libs} ace_gperf
MAIN_DEPENDENCY ${idl_file_path}
COMMAND ${CMAKE_COMMAND} -E env "DDS_ROOT=${DDS_ROOT}" "TAO_ROOT=${TAO_INCLUDE_DIR}"
"${_tao_extra_lib_dirs}"
$<TARGET_FILE:tao_idl> -g ${GPERF_LOCATION} ${TAO_CORBA_IDL_FLAGS} -Sg -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h --idl-version 4 --unknown-annotations ignore -I${TAO_INCLUDE_DIR} -I${_working_source_dir} ${_converted_flags} ${idl_file_path}
WORKING_DIRECTORY ${_arg_WORKING_DIRECTORY}
)
set_property(SOURCE ${idl_file_path} APPEND PROPERTY
OPENDDS_CPP_FILES
${_STUB_CPP_FILES}
${_SKEL_CPP_FILES}
${_ANYOP_CPP_FILES})
set_property(SOURCE ${idl_file_path} APPEND PROPERTY
OPENDDS_HEADER_FILES
${_STUB_HEADER_FILES}
${_SKEL_HEADER_FILES}
${_ANYOP_HEADER_FILES})
endforeach()
endfunction()