1- # Copyright (c) Facebook , Inc. and its affiliates.
1+ # Copyright (c) Meta Platforms , Inc. and affiliates.
22#
33# Licensed under the Apache License, Version 2.0 (the "License");
44# you may not use this file except in compliance with the License.
@@ -117,7 +117,7 @@ endmacro()
117117# #include_prefix
118118# )
119119# add_library(somelib ...)
120- # target_link_libraries(somelibe ${file_name}-${language} ...)
120+ # target_link_libraries(somelib ${file_name}-${language} ...)
121121#
122122
123123macro (thrift_library
@@ -167,15 +167,21 @@ endmacro()
167167#
168168# thrift_generate
169169# This is used to codegen thrift files using the thrift compiler
170+ # Supports library names that differ from the file name (to handle two libraries
171+ # with the same filename on disk (in different folders))
170172# Params:
171- # @file_name - The name of tge thrift file
173+ # @file_name - Input file name. Will be used for naming the CMake
174+ # target if TARGET_NAME_BASE is not specified.
172175# @services - A list of services that are declared in the thrift file
173176# @language - The generator to use (cpp, cpp2 or py3)
174177# @options - Extra options to pass to the generator
175178# @output_path - The directory where the thrift file lives
179+ # @include_prefix - Prefix to use for thrift includes in generated sources
180+ # @TARGET_NAME_BASE (optional) - name used for target instead of real filename
181+ # @THRIFT_INCLUDE_DIRECTORIES (optional) path to thrift include directories
176182#
177183# Output:
178- # file-language-target - A custom target to add a dependenct
184+ # file-language-target - A custom target to add a dependency
179185# ${file-language-HEADERS} - The generated Header Files.
180186# ${file-language-SOURCES} - The generated Source Files.
181187#
@@ -186,7 +192,6 @@ endmacro()
186192# bypass_source_check(${file_language-SOURCES})
187193# This will prevent cmake from complaining about missing source files
188194#
189-
190195macro (thrift_generate
191196 file_name
192197 services
@@ -198,43 +203,59 @@ macro(thrift_generate
198203)
199204 cmake_parse_arguments (THRIFT_GENERATE # Prefix
200205 "" # Options
201- "" # One Value args
206+ "TARGET_NAME_BASE " # One Value args
202207 "THRIFT_INCLUDE_DIRECTORIES" # Multi-value args
203208 "${ARGN} " )
204209
210+ set (source_file_name ${file_name} )
211+ set (target_file_name ${file_name} )
205212 set (thrift_include_directories)
206213 foreach (dir ${THRIFT_GENERATE_THRIFT_INCLUDE_DIRECTORIES} )
207214 list (APPEND thrift_include_directories "-I" "${dir} " )
208215 endforeach ()
216+ if (DEFINED THRIFT_GENERATE_TARGET_NAME_BASE
217+ AND NOT THRIFT_GENERATE_TARGET_NAME_BASE STREQUAL "" )
218+ set (target_file_name ${THRIFT_GENERATE_TARGET_NAME_BASE} )
219+ endif ()
209220
210- set ("${file_name} -${language} -HEADERS"
211- ${output_path} /gen-${language} /${file_name} _constants.h
212- ${output_path} /gen-${language} /${file_name} _data.h
213- ${output_path} /gen-${language} /${file_name} _metadata.h
214- ${output_path} /gen-${language} /${file_name} _types.h
215- ${output_path} /gen-${language} /${file_name} _types.tcc
221+ set ("${target_file_name} -${language} -HEADERS"
222+ ${output_path} /gen-${language} /${source_file_name} _constants.h
223+ ${output_path} /gen-${language} /${source_file_name} _data.h
224+ ${output_path} /gen-${language} /${source_file_name} _metadata.h
225+ ${output_path} /gen-${language} /${source_file_name} _types.h
226+ ${output_path} /gen-${language} /${source_file_name} _types.tcch
227+ ${output_path} /gen-${language} /${source_file_name} _types_custom_protocol.h
216228 )
217- set ("${file_name} -${language} -SOURCES"
218- ${output_path} /gen-${language} /${file_name} _constants.cpp
219- ${output_path} /gen-${language} /${file_name} _data.cpp
220- ${output_path} /gen-${language} /${file_name} _types.cpp
229+ set ("${target_file_name} -${language} -SOURCES"
230+ ${output_path} /gen-${language} /${source_file_name} _constants.cpp
231+ ${output_path} /gen-${language} /${source_file_name} _data.cpp
232+ ${output_path} /gen-${language} /${source_file_name} _types.cpp
233+ ${output_path} /gen-${language} /${source_file_name} _types_binary.cpp
234+ ${output_path} /gen-${language} /${source_file_name} _types_compact.cpp
235+ ${output_path} /gen-${language} /${source_file_name} _types_serialization.cpp
221236 )
237+ if ("${options} " MATCHES "layouts" )
238+ set ("${target_file_name} -${language} -SOURCES"
239+ ${${target_file_name} -${language} -SOURCES }
240+ ${output_path} /gen-${language} /${source_file_name} _layouts.cpp
241+ )
242+ endif ()
222243 if (NOT "${options} " MATCHES "no_metadata" )
223- set ("${file_name } -${language} -SOURCES"
224- ${${file_name } -${language} -SOURCES }
225- ${output_path} /gen-${language} /${file_name } _metadata.cpp
244+ set ("${target_file_name } -${language} -SOURCES"
245+ ${${target_file_name } -${language} -SOURCES }
246+ ${output_path} /gen-${language} /${source_file_name } _metadata.cpp
226247 )
227248 endif ()
228249 foreach (service ${services} )
229- set ("${file_name } -${language} -HEADERS"
230- ${${file_name } -${language} -HEADERS}
250+ set ("${target_file_name } -${language} -HEADERS"
251+ ${${source_file_name } -${language} -HEADERS}
231252 ${output_path} /gen-${language} /${service} .h
232253 ${output_path} /gen-${language} /${service} .tcc
233254 ${output_path} /gen-${language} /${service} AsyncClient.h
234255 ${output_path} /gen-${language} /${service} _custom_protocol.h
235256 )
236- set ("${file_name } -${language} -SOURCES"
237- ${${file_name } -${language} -SOURCES }
257+ set ("${target_file_name } -${language} -SOURCES"
258+ ${${source_file_name } -${language} -SOURCES }
238259 ${output_path} /gen-${language} /${service} .cpp
239260 ${output_path} /gen-${language} /${service} AsyncClient.cpp
240261 )
@@ -252,26 +273,27 @@ macro(thrift_generate
252273 set (gen_language "mstch_cpp2" )
253274 elseif ("${language} " STREQUAL "py3" )
254275 set (gen_language "mstch_py3" )
255- file (WRITE "${output_path} /gen-${language} /${file_name } /__init__.py" )
276+ file (WRITE "${output_path} /gen-${language} /${source_file_name } /__init__.py" )
256277 endif ()
278+ message (STATUS "Thrift command:" )
279+ message (STATUS "${THRIFT1} -v --gen \" ${gen_language} :${options}${include_prefix_text} \" -o ${output_path} ${thrift_include_directories} \" ${file_path} /${source_file_name} .thrift\" " )
257280 add_custom_command (
258- OUTPUT ${${file_name} -${language} -HEADERS}
259- ${${file_name} -${language} -SOURCES }
260- COMMAND mkdir -p ${output_path}
281+ OUTPUT ${${target_file_name} -${language} -HEADERS}
282+ ${${target_file_name} -${language} -SOURCES }
261283 COMMAND ${THRIFT1}
262284 --gen "${gen_language} :${options}${include_prefix_text} "
263285 -o ${output_path}
264286 ${thrift_include_directories}
265- "${file_path} /${file_name } .thrift"
287+ "${file_path} /${source_file_name } .thrift"
266288 DEPENDS
267289 ${THRIFT1}
268- "${file_path} /${file_name } .thrift"
269- COMMENT "Generating ${file_name } files. Output: ${output_path} "
290+ "${file_path} /${source_file_name } .thrift"
291+ COMMENT "Generating ${target_file_name } files. Output: ${output_path} . Command: ${THRIFT1} -v --gen \" ${gen_language} : ${options}${include_prefix_text} \" -o ${output_path} ${thrift_include_directories} \" ${file_path} / ${source_file_name} .thrift \" "
270292 )
271293 add_custom_target (
272- ${file_name } -${language} -target ALL
294+ ${target_file_name } -${language} -target ALL
273295 DEPENDS ${${language} -${language} -HEADERS}
274- ${${file_name } -${language} -SOURCES }
296+ ${${target_file_name } -${language} -SOURCES }
275297 )
276298 install (
277299 DIRECTORY gen-${language}
0 commit comments