2019-02-10 05:59:51 +08:00
|
|
|
define_property(TARGET PROPERTY SOURCE_FILES
|
|
|
|
BRIEF_DOCS "Source files a flow target is built off"
|
|
|
|
FULL_DOCS "When compiling a flow target, this property contains a list of the non-generated source files. \
|
|
|
|
This property is set by the add_flow_target function")
|
|
|
|
|
|
|
|
define_property(TARGET PROPERTY COVERAGE_FILTERS
|
|
|
|
BRIEF_DOCS "List of filters for the coverage tool"
|
|
|
|
FULL_DOCS "Holds a list of regular expressions. All filenames matching any regular \
|
|
|
|
expression in this list will be ignored when the coverage.target.xml file is \
|
|
|
|
generated. This property is set through the add_flow_target function.")
|
|
|
|
|
2022-07-20 04:15:51 +08:00
|
|
|
if(WIN32)
|
|
|
|
set(compilation_unit_macro_default OFF)
|
|
|
|
else()
|
|
|
|
set(compilation_unit_macro_default ON)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
set(PASS_COMPILATION_UNIT "${compilation_unit_macro_default}" CACHE BOOL
|
|
|
|
"Pass path to compilation unit as macro to each compilation unit (useful for code probes)")
|
2019-03-21 11:27:10 +08:00
|
|
|
|
2019-02-10 05:59:51 +08:00
|
|
|
function(generate_coverage_xml)
|
|
|
|
if(NOT (${ARGC} EQUAL "1"))
|
2019-02-10 06:33:36 +08:00
|
|
|
message(FATAL_ERROR "generate_coverage_xml expects one argument")
|
2019-02-10 05:59:51 +08:00
|
|
|
endif()
|
|
|
|
set(target_name ${ARGV0})
|
|
|
|
get_target_property(sources ${target_name} SOURCE_FILES)
|
|
|
|
get_target_property(filters ${target_name} COVERAGE_FILTER_OUT)
|
|
|
|
foreach(src IN LISTS sources)
|
|
|
|
set(include TRUE)
|
|
|
|
foreach(f IN LISTS filters)
|
|
|
|
if("${f}" MATCHES "${src}")
|
|
|
|
set(include FALSE)
|
|
|
|
endif()
|
|
|
|
endforeach()
|
|
|
|
if(include)
|
|
|
|
list(APPEND in_files ${src})
|
|
|
|
endif()
|
|
|
|
endforeach()
|
|
|
|
set(target_file ${CMAKE_CURRENT_SOURCE_DIR}/coverage_target_${target_name})
|
|
|
|
# we can't get the targets output dir through a generator expression as this would
|
|
|
|
# create a cyclic dependency.
|
|
|
|
# Instead we follow the following rules:
|
|
|
|
# - For executable we place the coverage file into the directory EXECUTABLE_OUTPUT_PATH
|
|
|
|
# - For static libraries we place it into the directory LIBRARY_OUTPUT_PATH
|
|
|
|
# - For dynamic libraries we place it into LIBRARY_OUTPUT_PATH on Linux and MACOS
|
|
|
|
# and to EXECUTABLE_OUTPUT_PATH on Windows
|
|
|
|
get_target_property(type ${target_name} TYPE)
|
|
|
|
# STATIC_LIBRARY, MODULE_LIBRARY, SHARED_LIBRARY, OBJECT_LIBRARY, INTERFACE_LIBRARY, EXECUTABLE
|
|
|
|
if(type STREQUAL "STATIC_LIBRARY")
|
|
|
|
set(target_file ${LIBRARY_OUTPUT_PATH}/coverage.${target_name}.xml)
|
|
|
|
elseif(type STREQUAL "SHARED_LIBRARY")
|
|
|
|
if(WIN32)
|
|
|
|
set(target_file ${EXECUTABLE_OUTPUT_PATH}/coverage.${target_name}.xml)
|
|
|
|
else()
|
|
|
|
set(target_file ${LIBRARY_OUTPUT_PATH}/coverage.${target_name}.xml)
|
|
|
|
endif()
|
|
|
|
elseif(type STREQUAL "EXECUTABLE")
|
|
|
|
set(target_file ${EXECUTABLE_OUTPUT_PATH}/coverage.${target_name}.xml)
|
|
|
|
endif()
|
|
|
|
if(WIN32)
|
|
|
|
add_custom_command(
|
|
|
|
OUTPUT ${target_file}
|
|
|
|
COMMAND $<TARGET_FILE:coveragetool> ${target_file} ${in_files}
|
|
|
|
DEPENDS ${in_files}
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
|
COMMENT "Generate coverage xml")
|
|
|
|
else()
|
|
|
|
add_custom_command(
|
|
|
|
OUTPUT ${target_file}
|
|
|
|
COMMAND ${MONO_EXECUTABLE} ${coveragetool_exe} ${target_file} ${in_files}
|
|
|
|
DEPENDS ${in_files}
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
|
COMMENT "Generate coverage xml")
|
|
|
|
endif()
|
2022-06-28 07:05:55 +08:00
|
|
|
add_custom_target(coverage_${target_name} ALL DEPENDS ${target_file})
|
2019-02-10 05:59:51 +08:00
|
|
|
add_dependencies(coverage_${target_name} coveragetool)
|
|
|
|
endfunction()
|
|
|
|
|
2019-03-06 08:06:46 +08:00
|
|
|
# This function asserts that `versions.h` does not exist in the source
|
|
|
|
# directory. It does this in the prebuild phase of the target.
|
|
|
|
# This is an ugly hack that should make sure that cmake isn't used with
|
|
|
|
# a source directory in which FDB was previously built with `make`.
|
|
|
|
function(assert_no_version_h target)
|
|
|
|
|
|
|
|
message(STATUS "Check versions.h on ${target}")
|
|
|
|
set(target_name "${target}_versions_h_check")
|
2019-05-05 03:58:40 +08:00
|
|
|
|
|
|
|
if (DEFINED ENV{VERBOSE})
|
|
|
|
add_custom_target("${target_name}"
|
|
|
|
COMMAND "${CMAKE_COMMAND}" -DFILE="${CMAKE_SOURCE_DIR}/versions.h"
|
2019-07-17 06:53:00 +08:00
|
|
|
-P "${CMAKE_SOURCE_DIR}/cmake/AssertFileDoesntExist.cmake"
|
2019-05-05 03:58:40 +08:00
|
|
|
COMMAND echo
|
|
|
|
"${CMAKE_COMMAND}" -P "${CMAKE_SOURCE_DIR}/cmake/AssertFileDoesntExist.cmake"
|
2019-07-17 06:53:00 +08:00
|
|
|
-DFILE="${CMAKE_SOURCE_DIR}/versions.h"
|
2019-05-05 03:58:40 +08:00
|
|
|
COMMENT "Check old build system wasn't used in source dir")
|
|
|
|
else()
|
|
|
|
add_custom_target("${target_name}"
|
|
|
|
COMMAND "${CMAKE_COMMAND}" -DFILE="${CMAKE_SOURCE_DIR}/versions.h"
|
2019-07-17 06:53:00 +08:00
|
|
|
-P "${CMAKE_SOURCE_DIR}/cmake/AssertFileDoesntExist.cmake"
|
2019-05-05 03:58:40 +08:00
|
|
|
COMMENT "Check old build system wasn't used in source dir")
|
|
|
|
endif()
|
|
|
|
|
2019-03-06 08:06:46 +08:00
|
|
|
add_dependencies(${target} ${target_name})
|
|
|
|
endfunction()
|
|
|
|
|
2019-03-21 11:27:10 +08:00
|
|
|
add_custom_target(strip_targets)
|
|
|
|
add_dependencies(packages strip_targets)
|
|
|
|
|
|
|
|
function(strip_debug_symbols target)
|
|
|
|
if (WIN32)
|
|
|
|
return()
|
|
|
|
endif()
|
|
|
|
get_target_property(target_type ${target} TYPE)
|
|
|
|
if(target_type STREQUAL "EXECUTABLE")
|
|
|
|
set(path ${CMAKE_BINARY_DIR}/packages/bin)
|
|
|
|
set(is_exec ON)
|
|
|
|
else()
|
|
|
|
set(path ${CMAKE_BINARY_DIR}/packages/lib)
|
|
|
|
endif()
|
|
|
|
file(MAKE_DIRECTORY "${path}")
|
|
|
|
set(strip_command strip)
|
|
|
|
set(out_name ${target})
|
|
|
|
if(APPLE)
|
|
|
|
if(NOT is_exec)
|
|
|
|
set(out_name "lib${target}.dylib")
|
|
|
|
list(APPEND strip_command -S -x)
|
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
if(is_exec)
|
|
|
|
list(APPEND strip_command --strip-debug --strip-unneeded)
|
|
|
|
else()
|
|
|
|
set(out_name "lib${target}.so")
|
|
|
|
list(APPEND strip_command --strip-all)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
set(out_file "${path}/${out_name}")
|
|
|
|
list(APPEND strip_command -o "${out_file}")
|
|
|
|
add_custom_command(OUTPUT "${out_file}"
|
|
|
|
COMMAND ${strip_command} $<TARGET_FILE:${target}>
|
2020-03-27 04:45:22 +08:00
|
|
|
DEPENDS ${target}
|
2019-03-21 11:27:10 +08:00
|
|
|
COMMENT "Stripping symbols from ${target}")
|
2020-01-17 06:40:29 +08:00
|
|
|
add_custom_target(strip_only_${target} DEPENDS ${out_file})
|
2019-03-21 11:27:10 +08:00
|
|
|
if(is_exec AND NOT APPLE)
|
2020-01-17 06:40:29 +08:00
|
|
|
add_custom_command(OUTPUT "${out_file}.debug"
|
2020-04-11 09:16:52 +08:00
|
|
|
DEPENDS strip_only_${target}
|
2020-01-17 06:40:29 +08:00
|
|
|
COMMAND objcopy --verbose --only-keep-debug $<TARGET_FILE:${target}> "${out_file}.debug"
|
|
|
|
COMMAND objcopy --verbose --add-gnu-debuglink="${out_file}.debug" "${out_file}"
|
|
|
|
COMMENT "Copy debug symbols to ${out_name}.debug")
|
2020-03-27 04:45:22 +08:00
|
|
|
add_custom_target(strip_${target} DEPENDS "${out_file}.debug")
|
2020-01-17 06:40:29 +08:00
|
|
|
else()
|
|
|
|
add_custom_target(strip_${target})
|
2020-03-27 07:01:58 +08:00
|
|
|
add_dependencies(strip_${target} strip_only_${target})
|
2019-03-21 11:27:10 +08:00
|
|
|
endif()
|
|
|
|
add_dependencies(strip_targets strip_${target})
|
|
|
|
endfunction()
|
|
|
|
|
2022-06-24 10:52:13 +08:00
|
|
|
# This will copy the header from a flow target into ${CMAKE_BINARY_DIR}/include/target-name
|
|
|
|
# We're doing this to enforce proper dependencies. In the past we simply added the source
|
|
|
|
# and binary dir to the include list, which means that for example a compilation unit in
|
|
|
|
# flow could include a header file that lives in fdbserver. This is a somewhat hacky solution
|
|
|
|
# but due to our directory structure it seems to be the least invasive one.
|
2022-06-24 04:37:35 +08:00
|
|
|
function(copy_headers)
|
|
|
|
set(options)
|
|
|
|
set(oneValueArgs NAME OUT_DIR INC_DIR)
|
|
|
|
set(multiValueArgs SRCS)
|
|
|
|
cmake_parse_arguments(CP "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
|
|
|
|
get_filename_component(dir_name ${CMAKE_CURRENT_SOURCE_DIR} NAME)
|
|
|
|
set(include_dir "${CMAKE_CURRENT_BINARY_DIR}/include")
|
|
|
|
set(incl_dir "${include_dir}/${dir_name}")
|
|
|
|
make_directory("${incl_dir}")
|
|
|
|
foreach(f IN LISTS CP_SRCS)
|
|
|
|
is_prefix(bd "${CMAKE_CURRENT_BINARY_DIR}" "${f}")
|
|
|
|
is_prefix(sd "${CMAKE_CURRENT_SOURCE_DIR}" "${f}")
|
|
|
|
if (bd OR sd)
|
|
|
|
continue()
|
|
|
|
endif()
|
|
|
|
is_header(hdr "${f}")
|
|
|
|
if(NOT hdr)
|
|
|
|
continue()
|
|
|
|
endif()
|
|
|
|
get_filename_component(fname ${f} NAME)
|
|
|
|
get_filename_component(dname ${f} DIRECTORY)
|
|
|
|
if (dname)
|
|
|
|
make_directory(${incl_dir}/${dname})
|
|
|
|
endif()
|
|
|
|
set(fpath "${incl_dir}/${dname}/${fname}")
|
|
|
|
add_custom_command(OUTPUT "${fpath}"
|
|
|
|
DEPENDS "${f}"
|
|
|
|
COMMAND "${CMAKE_COMMAND}" -E copy "${f}" "${fpath}"
|
|
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
|
|
list(APPEND out_files "${fpath}")
|
|
|
|
endforeach()
|
|
|
|
add_custom_target("${CP_NAME}_incl" DEPENDS ${out_files})
|
|
|
|
set("${CP_OUT_DIR}" "${incl_dir}" PARENT_SCOPE)
|
|
|
|
set("${CP_INC_DIR}" ${include_dir} PARENT_SCOPE)
|
|
|
|
endfunction()
|
|
|
|
|
2019-02-09 08:51:13 +08:00
|
|
|
function(add_flow_target)
|
|
|
|
set(options EXECUTABLE STATIC_LIBRARY
|
Add test executables to catch missing symbols
Currently, we have code in different folders like `flow/` and `fdbrpc/`
that should remain isolated. For example, `flow/` files should not
include functionality from any other modules. `fdbrpc/` files should
only be able to include functionality from itself and from `flow/`.
However, when creating a shared library, the linker doesn't complain
about undefined symbols -- this only happens when creating an
executable. Thus, for example, it is possible to forward declare an
`fdbclient` function in an `fdbrpc` file and then use it, and nothing
will break (when it should, because this is illegal).
This change adds dummy executables for a few modules (`flow`, `fdbrpc`,
`fdbclient`) that will cause a linker error if there are included
symbols which the linker can't resolve.
2022-06-25 08:08:58 +08:00
|
|
|
DYNAMIC_LIBRARY LINK_TEST)
|
2019-02-09 08:51:13 +08:00
|
|
|
set(oneValueArgs NAME)
|
2019-08-10 04:43:02 +08:00
|
|
|
set(multiValueArgs SRCS COVERAGE_FILTER_OUT DISABLE_ACTOR_DIAGNOSTICS ADDL_SRCS)
|
2019-02-09 08:51:13 +08:00
|
|
|
cmake_parse_arguments(AFT "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
|
|
|
|
if(NOT AFT_NAME)
|
2019-02-10 06:33:36 +08:00
|
|
|
message(FATAL_ERROR "add_flow_target requires option NAME")
|
2019-02-09 08:51:13 +08:00
|
|
|
endif()
|
|
|
|
if(NOT AFT_SRCS)
|
2019-02-10 06:33:36 +08:00
|
|
|
message(FATAL_ERROR "No sources provided")
|
2019-02-09 08:51:13 +08:00
|
|
|
endif()
|
2022-06-24 04:37:35 +08:00
|
|
|
#foreach(src IN LISTS AFT_SRCS)
|
|
|
|
# is_header(h "${src}")
|
|
|
|
# if(NOT h)
|
|
|
|
# list(SRCS "${CMAKE_CURRENT_SOURCE_DIR}/${src}")
|
|
|
|
# endif()
|
|
|
|
#endforeach()
|
2019-02-10 06:33:36 +08:00
|
|
|
if(OPEN_FOR_IDE)
|
2019-08-10 22:57:00 +08:00
|
|
|
# Intentionally omit ${AFT_DISABLE_ACTOR_DIAGNOSTICS} since we don't want diagnostics
|
|
|
|
set(sources ${AFT_SRCS} ${AFT_ADDL_SRCS})
|
2019-02-18 09:54:54 +08:00
|
|
|
add_library(${AFT_NAME} OBJECT ${sources})
|
2019-02-10 06:33:36 +08:00
|
|
|
else()
|
2022-06-28 07:05:55 +08:00
|
|
|
create_build_dirs(${AFT_SRCS} ${AFT_DISABLE_ACTOR_DIAGNOSTICS})
|
2019-08-10 04:43:02 +08:00
|
|
|
foreach(src IN LISTS AFT_SRCS AFT_DISABLE_ACTOR_DIAGNOSTICS)
|
2022-06-24 04:37:35 +08:00
|
|
|
is_header(hdr ${src})
|
|
|
|
set(in_filename "${src}")
|
2019-05-22 08:56:14 +08:00
|
|
|
if(${src} MATCHES ".*\\.actor\\.(h|cpp)")
|
2022-06-24 04:37:35 +08:00
|
|
|
set(is_actor_file YES)
|
2019-05-22 08:56:14 +08:00
|
|
|
if(${src} MATCHES ".*\\.h")
|
2022-06-24 04:37:35 +08:00
|
|
|
string(REPLACE ".actor.h" ".actor.g.h" out_filename ${in_filename})
|
|
|
|
else()
|
|
|
|
string(REPLACE ".actor.cpp" ".actor.g.cpp" out_filename ${in_filename})
|
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
set(is_actor_file NO)
|
|
|
|
set(out_filename "${src}")
|
|
|
|
endif()
|
|
|
|
|
2022-06-28 07:05:55 +08:00
|
|
|
set(in_file "${CMAKE_CURRENT_SOURCE_DIR}/${in_filename}")
|
|
|
|
if(is_actor_file)
|
|
|
|
set(out_file "${CMAKE_CURRENT_BINARY_DIR}/${out_filename}")
|
2022-06-24 04:37:35 +08:00
|
|
|
else()
|
2022-06-28 07:05:55 +08:00
|
|
|
set(out_file "${in_file}")
|
2022-06-24 04:37:35 +08:00
|
|
|
endif()
|
|
|
|
|
|
|
|
list(APPEND sources ${out_file})
|
|
|
|
set(actor_compiler_flags "")
|
|
|
|
if(is_actor_file)
|
|
|
|
list(APPEND actors ${in_file})
|
|
|
|
list(APPEND actor_compiler_flags "--generate-probes")
|
2019-08-10 04:43:02 +08:00
|
|
|
foreach(s IN LISTS AFT_DISABLE_ACTOR_DIAGNOSTICS)
|
2019-05-22 08:56:14 +08:00
|
|
|
if("${s}" STREQUAL "${src}")
|
2019-08-10 04:43:02 +08:00
|
|
|
list(APPEND actor_compiler_flags "--disable-diagnostics")
|
2019-05-22 08:56:14 +08:00
|
|
|
break()
|
|
|
|
endif()
|
|
|
|
endforeach()
|
2022-06-24 04:37:35 +08:00
|
|
|
|
|
|
|
list(APPEND generated_files ${out_file})
|
2019-05-22 08:56:14 +08:00
|
|
|
if(WIN32)
|
2022-06-24 04:37:35 +08:00
|
|
|
add_custom_command(OUTPUT "${out_file}"
|
|
|
|
COMMAND $<TARGET_FILE:actorcompiler> "${in_file}" "${out_file}" ${actor_compiler_flags}
|
|
|
|
DEPENDS "${in_file}" ${actor_exe}
|
2019-05-22 08:56:14 +08:00
|
|
|
COMMENT "Compile actor: ${src}")
|
|
|
|
else()
|
2022-06-24 04:37:35 +08:00
|
|
|
add_custom_command(OUTPUT "${out_file}"
|
|
|
|
COMMAND ${MONO_EXECUTABLE} ${actor_exe} "${in_file}" "${out_file}" ${actor_compiler_flags} > /dev/null
|
|
|
|
DEPENDS "${in_file}" ${actor_exe}
|
2019-05-22 08:56:14 +08:00
|
|
|
COMMENT "Compile actor: ${src}")
|
2019-02-09 08:51:13 +08:00
|
|
|
endif()
|
2019-02-18 09:54:54 +08:00
|
|
|
endif()
|
|
|
|
endforeach()
|
2022-07-20 04:15:51 +08:00
|
|
|
if(PASS_COMPILATION_UNIT)
|
|
|
|
foreach(s IN LISTS sources)
|
|
|
|
set_source_files_properties("${s}" PROPERTIES COMPILE_DEFINITIONS "COMPILATION_UNIT=${s}")
|
|
|
|
endforeach()
|
|
|
|
endif()
|
2019-02-18 09:54:54 +08:00
|
|
|
if(AFT_EXECUTABLE)
|
2019-03-21 11:27:10 +08:00
|
|
|
set(strip_target ON)
|
2019-02-18 09:54:54 +08:00
|
|
|
set(target_type exec)
|
2019-04-18 03:10:51 +08:00
|
|
|
add_executable(${AFT_NAME} ${sources} ${AFT_ADDL_SRCS})
|
2019-01-03 05:32:26 +08:00
|
|
|
endif()
|
2019-02-18 09:54:54 +08:00
|
|
|
if(AFT_STATIC_LIBRARY)
|
|
|
|
if(target_type)
|
|
|
|
message(FATAL_ERROR "add_flow_target can only be of one type")
|
|
|
|
endif()
|
2019-04-18 03:10:51 +08:00
|
|
|
add_library(${AFT_NAME} STATIC ${sources} ${AFT_ADDL_SRCS})
|
2019-02-09 08:51:13 +08:00
|
|
|
endif()
|
2019-02-18 09:54:54 +08:00
|
|
|
if(AFT_DYNAMIC_LIBRARY)
|
|
|
|
if(target_type)
|
|
|
|
message(FATAL_ERROR "add_flow_target can only be of one type")
|
|
|
|
endif()
|
2019-03-21 11:27:10 +08:00
|
|
|
set(strip_target ON)
|
2019-04-18 03:10:51 +08:00
|
|
|
add_library(${AFT_NAME} DYNAMIC ${sources} ${AFT_ADDL_SRCS})
|
2019-02-09 08:51:13 +08:00
|
|
|
endif()
|
Add test executables to catch missing symbols
Currently, we have code in different folders like `flow/` and `fdbrpc/`
that should remain isolated. For example, `flow/` files should not
include functionality from any other modules. `fdbrpc/` files should
only be able to include functionality from itself and from `flow/`.
However, when creating a shared library, the linker doesn't complain
about undefined symbols -- this only happens when creating an
executable. Thus, for example, it is possible to forward declare an
`fdbclient` function in an `fdbrpc` file and then use it, and nothing
will break (when it should, because this is illegal).
This change adds dummy executables for a few modules (`flow`, `fdbrpc`,
`fdbclient`) that will cause a linker error if there are included
symbols which the linker can't resolve.
2022-06-25 08:08:58 +08:00
|
|
|
if(AFT_LINK_TEST)
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/linktest)
|
|
|
|
set(strip_target ON)
|
|
|
|
set(target_type exec)
|
|
|
|
add_executable(${AFT_NAME} ${sources} ${AFT_ADDL_SRCS})
|
|
|
|
endif()
|
2019-02-09 08:51:13 +08:00
|
|
|
|
2019-05-23 08:21:07 +08:00
|
|
|
foreach(src IN LISTS sources AFT_ADDL_SRCS)
|
2019-05-29 01:28:18 +08:00
|
|
|
get_filename_component(dname ${CMAKE_CURRENT_SOURCE_DIR} NAME)
|
2019-05-23 08:21:07 +08:00
|
|
|
string(REGEX REPLACE "\\..*" "" fname ${src})
|
2019-05-23 09:07:38 +08:00
|
|
|
string(REPLACE / _ fname ${fname})
|
2020-02-10 00:34:14 +08:00
|
|
|
#set_source_files_properties(${src} PROPERTIES COMPILE_DEFINITIONS FNAME=${dname}_${fname})
|
2019-05-23 08:21:07 +08:00
|
|
|
endforeach()
|
|
|
|
|
2019-02-10 06:33:36 +08:00
|
|
|
set_property(TARGET ${AFT_NAME} PROPERTY SOURCE_FILES ${AFT_SRCS})
|
|
|
|
set_property(TARGET ${AFT_NAME} PROPERTY COVERAGE_FILTERS ${AFT_SRCS})
|
2019-02-10 05:59:51 +08:00
|
|
|
|
2019-02-10 06:33:36 +08:00
|
|
|
add_custom_target(${AFT_NAME}_actors DEPENDS ${generated_files})
|
|
|
|
add_dependencies(${AFT_NAME} ${AFT_NAME}_actors)
|
2020-02-10 00:34:14 +08:00
|
|
|
if(NOT WIN32)
|
|
|
|
assert_no_version_h(${AFT_NAME}_actors)
|
|
|
|
endif()
|
2019-02-10 06:33:36 +08:00
|
|
|
generate_coverage_xml(${AFT_NAME})
|
2019-03-21 11:27:10 +08:00
|
|
|
if(strip_target)
|
|
|
|
strip_debug_symbols(${AFT_NAME})
|
|
|
|
endif()
|
2019-02-10 06:33:36 +08:00
|
|
|
endif()
|
2019-02-09 08:51:13 +08:00
|
|
|
endfunction()
|