|
@@ -1,13 +1,36 @@
|
|
|
+function(qtprotobuf_link_archive TARGET GENERATED_TARGET)
|
|
|
+ set_target_properties(${qtprotobuf_generate_TARGET} PROPERTIES LINKER_LANGUAGE CXX)
|
|
|
+ set_target_properties(${TARGET} PROPERTIES LINK_DIRECTORIES "$<TARGET_FILE_DIR:${GENERATED_TARGET}>")
|
|
|
+ get_target_property(EXISTING_FLAGS ${TARGET} LINK_FLAGS)
|
|
|
+ if(WIN32)
|
|
|
+ if("${EXISTING_FLAGS}" STREQUAL "EXISTING_FLAGS-NOTFOUND")
|
|
|
+ set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "/WHOLEARCHIVE:${GENERATED_TARGET}")
|
|
|
+ else()
|
|
|
+ set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "${EXISTING_FLAGS} /WHOLEARCHIVE:${GENERATED_TARGET}")
|
|
|
+ endif()
|
|
|
+ else()
|
|
|
+ target_link_libraries(${TARGET} PRIVATE
|
|
|
+ -Wl,--whole-archive $<TARGET_FILE:${GENERATED_TARGET}> -Wl,--no-whole-archive)
|
|
|
+ endif()
|
|
|
+ target_include_directories(${TARGET} PRIVATE $<TARGET_PROPERTY:${GENERATED_TARGET},INCLUDE_DIRECTORIES>)
|
|
|
+ add_dependencies(${TARGET} ${GENERATED_TARGET})
|
|
|
+endfunction()
|
|
|
+
|
|
|
function(qtprotobuf_generate)
|
|
|
set(options)
|
|
|
- set(oneValueArgs OUT_DIR TARGET MULTI QML GENERATED_HEADERS_VAR)
|
|
|
+ set(oneValueArgs OUT_DIR TARGET GENERATED_TARGET MULTI QML GENERATED_HEADERS_VAR)
|
|
|
set(multiValueArgs GENERATED_HEADERS EXCLUDE_HEADERS PROTO_FILES PROTO_INCLUDES)
|
|
|
cmake_parse_arguments(qtprotobuf_generate "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
|
|
|
|
|
- set(QtProtobuf_GENERATED ${qtprotobuf_generate_TARGET}_qtprotobuf_gen PARENT_SCOPE)
|
|
|
- set(QtProtobuf_GENERATED ${qtprotobuf_generate_TARGET}_qtprotobuf_gen)
|
|
|
+ if(DEFINED qtprotobuf_generate_GENERATED_TARGET)
|
|
|
+ set(GENERATED_TARGET_NAME ${qtprotobuf_generate_GENERATED_TARGET})
|
|
|
+ elseif(DEFINED qtprotobuf_generate_TARGET)
|
|
|
+ set(GENERATED_TARGET_NAME ${qtprotobuf_generate_TARGET}_qtprotobuf_gen)
|
|
|
+ else()
|
|
|
+ message(FATAL_ERROR "Either TARGET or GENERATED_TARGET must be specified")
|
|
|
+ endif()
|
|
|
|
|
|
- set(GEN_TARGET ${qtprotobuf_generate_TARGET}_qtprotobuf_generate)
|
|
|
+ set(GEN_TARGET ${GENERATED_TARGET_NAME}_generate)
|
|
|
set(GENERATED_HEADERS ${qtprotobuf_generate_GENERATED_HEADERS})
|
|
|
|
|
|
if(NOT DEFINED QTPROTOBUF_EXECUTABLE)
|
|
@@ -23,7 +46,7 @@ function(qtprotobuf_generate)
|
|
|
|
|
|
set(GENERATION_OPTIONS ${GENERATION_TYPE})
|
|
|
if("${qtprotobuf_generate_QML}" STREQUAL "TRUE")
|
|
|
- message(STATUS "Enabled QML generation for ${qtprotobuf_generate_TARGET}")
|
|
|
+ message(STATUS "Enabled QML generation for ${GENERATED_TARGET_NAME}")
|
|
|
set(GENERATION_OPTIONS "${GENERATION_OPTIONS}:QML")
|
|
|
endif()
|
|
|
|
|
@@ -88,7 +111,7 @@ function(qtprotobuf_generate)
|
|
|
${qtprotobuf_generate_PROTO_FILES}
|
|
|
WORKING_DIRECTORY ${OUT_DIR}
|
|
|
DEPENDS ${qtprotobuf_generate_PROTO_FILES} ${QTPROTOBUF_EXECUTABLE}
|
|
|
- COMMENT "Generating QtProtobuf ${qtprotobuf_generate_TARGET} sources..."
|
|
|
+ COMMENT "Generating QtProtobuf ${GENERATED_TARGET_NAME} sources..."
|
|
|
)
|
|
|
|
|
|
add_custom_target(${GEN_TARGET} DEPENDS ${QTPROTOBUF_GENERATED_SOURCES} ${QTPROTOBUF_GENERATED_HEADERS} ${qtprotobuf_generate_PROTO_FILES})
|
|
@@ -98,33 +121,16 @@ function(qtprotobuf_generate)
|
|
|
qt5_wrap_cpp(MOC_SOURCES ${QTPROTOBUF_GENERATED_HEADERS})
|
|
|
list(APPEND GENERATED_SOURCES ${MOC_SOURCES})
|
|
|
set_source_files_properties(${QTPROTOBUF_GENERATED_SOURCES} PROPERTIES GENERATED TRUE)
|
|
|
- add_library(${QtProtobuf_GENERATED} ${QTPROTOBUF_GENERATED_SOURCES} ${MOC_SOURCES})
|
|
|
- add_dependencies(${QtProtobuf_GENERATED} ${GEN_TARGET})
|
|
|
- target_include_directories(${QtProtobuf_GENERATED} PUBLIC ${OUT_DIR} PRIVATE ${Qt5Core_INCLUDE_DIRS}
|
|
|
+ add_library(${GENERATED_TARGET_NAME} ${QTPROTOBUF_GENERATED_SOURCES} ${MOC_SOURCES})
|
|
|
+ add_dependencies(${GENERATED_TARGET_NAME} ${GEN_TARGET})
|
|
|
+ target_include_directories(${GENERATED_TARGET_NAME} PUBLIC ${OUT_DIR} PRIVATE ${Qt5Core_INCLUDE_DIRS}
|
|
|
$<TARGET_PROPERTY:${QTPROTOBUF_COMMON_NAMESPACE}::QtProtobuf,INTERFACE_INCLUDE_DIRECTORIES>
|
|
|
$<TARGET_PROPERTY:${QTPROTOBUF_COMMON_NAMESPACE}::QtGrpc,INTERFACE_INCLUDE_DIRECTORIES> ${OUT_DIR})
|
|
|
if(NOT WIN32)
|
|
|
- target_include_directories(${QtProtobuf_GENERATED} PRIVATE
|
|
|
+ target_include_directories(${GENERATED_TARGET_NAME} PRIVATE
|
|
|
$<TARGET_PROPERTY:${QTPROTOBUF_COMMON_NAMESPACE}::QtProtobufWellKnownTypes,INTERFACE_INCLUDE_DIRECTORIES>)
|
|
|
endif()
|
|
|
-endfunction()
|
|
|
-
|
|
|
-function(qtprotobuf_link_archive TARGET GENERATED_TARGET)
|
|
|
- set_target_properties(${TARGET} PROPERTIES LINK_DIRECTORIES "$<TARGET_FILE_DIR:${GENERATED_TARGET}>")
|
|
|
- get_target_property(EXISTING_FLAGS ${TARGET} LINK_FLAGS)
|
|
|
- if(WIN32)
|
|
|
- if("${EXISTING_FLAGS}" STREQUAL "EXISTING_FLAGS-NOTFOUND")
|
|
|
- set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "/WHOLEARCHIVE:${GENERATED_TARGET}")
|
|
|
- else()
|
|
|
- set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "${EXISTING_FLAGS} /WHOLEARCHIVE:${GENERATED_TARGET}")
|
|
|
- endif()
|
|
|
- else()
|
|
|
- if("${EXISTING_FLAGS}" STREQUAL "EXISTING_FLAGS-NOTFOUND")
|
|
|
- set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "-Wl,--whole-archive -l${GENERATED_TARGET} -Wl,--no-whole-archive")
|
|
|
- else()
|
|
|
- set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "${EXISTING_FLAGS} -Wl,--whole-archive -l${GENERATED_TARGET} -Wl,--no-whole-archive")
|
|
|
- endif()
|
|
|
+ if(DEFINED qtprotobuf_generate_TARGET)
|
|
|
+ qtprotobuf_link_archive(${qtprotobuf_generate_TARGET} ${GENERATED_TARGET_NAME})
|
|
|
endif()
|
|
|
- target_include_directories(${TARGET} PRIVATE $<TARGET_PROPERTY:${GENERATED_TARGET},INCLUDE_DIRECTORIES>)
|
|
|
- add_dependencies(${TARGET} ${GENERATED_TARGET})
|
|
|
endfunction()
|