diff --git a/cmake/CmakeFlameResolver.cmake b/cmake/CmakeFlameResolver.cmake index e11c7c4..82e7397 100644 --- a/cmake/CmakeFlameResolver.cmake +++ b/cmake/CmakeFlameResolver.cmake @@ -3,10 +3,11 @@ cmake_minimum_required(VERSION 3.14) include(Macros) include(Options) -include(Platform) +include(Properties) include(Variables) include(Functions) -include(Properties) +include(Compilers) +include(Platform) # Public API: @@ -33,6 +34,8 @@ endfunction(flame_header_library) # MAKE_SHARED - # NOT_MAKE_POSITION_DEPENDENT_OBJECTS - # NOT_MAKE_POSITION_INDEPENDENT_OBJECTS - +# EXPORT_ALL - +# USE_RESOLVER_DEFINES - # Values: # NAME - # OBJECT_ALIAS_NAME - @@ -43,7 +46,10 @@ endfunction(flame_header_library) # SHARED_INSTALL_PATH - # Lists: # INCLUDE_PATHS - +# DEFINES - # SOURCE_LIST - +# SOURCE_LIST_STATIC - +# SOURCE_LIST_SHARED - # COMMPILE_FLAGS - # LINK_FLAGS - # DEPENDENCY_HEADER_TARGETS - @@ -56,8 +62,9 @@ function(flame_compile_library) endfunction(flame_compile_library) # Options: -# DEBUG - -# HELP - +# DEBUG - +# HELP - +# USE_RESOLVER_DEFINES - # Values: # NAME - # ALIAS_NAME - @@ -65,6 +72,7 @@ endfunction(flame_compile_library) # Lists: # INCLUDE_PATHS - # SOURCE_LIST - +# DEFINES - # COMPILE_FLAGS - # LINK_FLAGS - # DEPENDENCY_HEADER_TARGETS - diff --git a/cmake/Compilers.cmake b/cmake/Compilers.cmake new file mode 100644 index 0000000..d1baeaa --- /dev/null +++ b/cmake/Compilers.cmake @@ -0,0 +1,73 @@ +if((NOT CMAKE_CXX_COMPILER) AND (NOT CMAKE_C_COMPILER)) + message(FATAL_ERROR "Only for C and/or C++") +endif() + +include(Compilers/Gcc) +include(Compilers/Clang) +include(Compilers/Msvc) + +if(NOT CMAKE_RESOLVER_COMPILER_CURRENT_ID) + message(FATAL_ERROR "Compiler is not supported") +endif() + +set(FLAME_DEFINE_COMPILER_CURRENT + CMAKE_RESOLVER_COMPILER_CURRENT=${CMAKE_RESOLVER_COMPILER_CURRENT_ID}) + +set(FLAME_FLAGS + ${FLAME_CXX_FLAG_NO_RTTI} + ${FLAME_CXX_FLAG_RTTI} + ${FLAME_CXX_FLAG_NO_EXCEPTIONS} + ${FLAME_CXX_FLAG_EXCEPTIONS} +) +foreach(flag ${FLAME_FLAGS}) + string(REPLACE "${flag}" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") +endforeach() + +function(flame_shared_set_export_symbols TARGET_NAME) + if(CMAKE_RESOLVER_COMPILER_CURRENT_ID EQUAL CMAKE_RESOLVER_COMPILER_GCC_ID) + flame_shared_set_export_symbols_gcc(${TARGET_NAME}) + elseif(CMAKE_RESOLVER_COMPILER_CURRENT_ID EQUAL CMAKE_RESOLVER_COMPILER_CLANG_ID) + flame_shared_set_export_symbols_clang(${TARGET_NAME}) + elseif(CMAKE_RESOLVER_COMPILER_CURRENT_ID EQUAL CMAKE_RESOLVER_COMPILER_MSVC_ID) + flame_shared_set_export_symbols_msvc(${TARGET_NAME}) + endif() +endfunction() + +function(flame_get_platform_defines OUT_LIST) + set(FLAME_PLATFORM_FLAGS + ${FLAME_DEFINE_COMPILER_CURRENT} + ${FLAME_DEFINE_COMPILER_GCC} + ${FLAME_DEFINE_COMPILER_CLANG} + ${FLAME_DEFINE_COMPILER_MSVC} + ${FLAME_DEFINE_EXPORT} + ) + set(${OUT_LIST} ${FLAME_PLATFORM_FLAGS} PARENT_SCOPE) +endfunction() + +function(flame_get_rtti_defines RTTI_ON OUT_LIST) + if(RTTI_ON) + set(DEFINE_RTTI + CMAKE_RESOLVER_RTTI_ENABLED=1 + CMAKE_RESOLVER_RTTI_DISABLED=0) + else() + set(DEFINE_RTTI + CMAKE_RESOLVER_RTTI_ENABLED=0 + CMAKE_RESOLVER_RTTI_DISABLED=1) + endif() + + set(${OUT_LIST} ${DEFINE_RTTI} PARENT_SCOPE) +endfunction() + +function(flame_get_exception_defines EXCEPTIONS_ON OUT_LIST) + if(EXCEPTIONS_ON) + set(DEFINE_EXCEPTIONS + CMAKE_RESOLVER_EXCEPTIONS_ENABLED=1 + CMAKE_RESOLVER_EXCEPTIONS_DISABLED=0) + else() + set(DEFINE_EXCEPTIONS + CMAKE_RESOLVER_EXCEPTIONS_ENABLED=0 + CMAKE_RESOLVER_EXCEPTIONS_DISABLED=1) + endif() + + set(${OUT_LIST} ${DEFINE_EXCEPTIONS} PARENT_SCOPE) +endfunction() diff --git a/cmake/Compilers/Clang.cmake b/cmake/Compilers/Clang.cmake new file mode 100644 index 0000000..842f2c7 --- /dev/null +++ b/cmake/Compilers/Clang.cmake @@ -0,0 +1,28 @@ +generate_random_id(CMAKE_RESOLVER_COMPILER_CLANG_ID) + +set(FLAME_DEFINE_COMPILER_CLANG + CMAKE_RESOLVER_COMPILER_CLANG=${CMAKE_RESOLVER_COMPILER_CLANG_ID}) + +if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")) + message(STATUS "Detect clang") + + set(FLAME_DEFINE_EXPORT "CMAKE_RESOLVER_EXPORT=__attribute__((visibility(default)))") + + set(CMAKE_RESOLVER_COMPILER_CURRENT_ID ${CMAKE_RESOLVER_COMPILER_CLANG_ID}) + + set(FLAME_FLAG_ALL_EXPORT "-fvisibility=default") + set(FLAME_FLAG_NO_EXPORT "-fvisibility=hidden") + + if(CMAKE_CXX_COMPILER) + set(FLAME_CXX_FLAG_NO_RTTI "-fno-rtti") + set(FLAME_CXX_FLAG_RTTI "-frtti") + + set(FLAME_CXX_FLAG_NO_EXCEPTIONS "-fno-cxx-exceptions") + set(FLAME_CXX_FLAG_EXCEPTIONS "-fcxx-exceptions") + endif() +endif() + +function(flame_shared_set_export_symbols_clang TARGET_NAME) + flame_shared_set_export_symbols_gcc(${TARGET_NAME}) +endfunction() diff --git a/cmake/Compilers/Gcc.cmake b/cmake/Compilers/Gcc.cmake new file mode 100644 index 0000000..f8b1941 --- /dev/null +++ b/cmake/Compilers/Gcc.cmake @@ -0,0 +1,28 @@ +generate_random_id(CMAKE_RESOLVER_COMPILER_GCC_ID) + +set(FLAME_DEFINE_COMPILER_GCC + CMAKE_RESOLVER_COMPILER_GCC=${CMAKE_RESOLVER_COMPILER_GCC_ID}) + +if(("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")) + message(STATUS "Detect GCC") + + set(FLAME_DEFINE_EXPORT "CMAKE_RESOLVER_EXPORT=__attribute__((visibility(\"default\")))") + + set(CMAKE_RESOLVER_COMPILER_CURRENT_ID ${CMAKE_RESOLVER_COMPILER_GCC_ID}) + + set(FLAME_FLAG_ALL_EXPORT "-fvisibility=default") + set(FLAME_FLAG_NO_EXPORT "-fvisibility=hidden") + + if(CMAKE_CXX_COMPILER) + set(FLAME_CXX_FLAG_NO_RTTI "-fno-rtti") + set(FLAME_CXX_FLAG_RTTI "") + + set(FLAME_CXX_FLAG_NO_EXCEPTIONS "-fno-exceptions") + set(FLAME_CXX_FLAG_EXCEPTIONS "-fexceptions") + endif() +endif() + +function(flame_shared_set_export_symbols_gcc TARGET_NAME) + target_compile_options(${TARGET_NAME} PRIVATE ${FLAME_FLAG_ALL_EXPORT}) +endfunction() diff --git a/cmake/Compilers/Msvc.cmake b/cmake/Compilers/Msvc.cmake new file mode 100644 index 0000000..00efa79 --- /dev/null +++ b/cmake/Compilers/Msvc.cmake @@ -0,0 +1,30 @@ +generate_random_id(CMAKE_RESOLVER_COMPILER_MSVC_ID) + +set(FLAME_DEFINE_COMPILER_MSVC + CMAKE_RESOLVER_COMPILER_MSVC=${CMAKE_RESOLVER_COMPILER_MSVC_ID}) + +if(("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC") + OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")) + message(STATUS "Detect CL.EXE") + + set(FLAME_DEFINE_EXPORT "CMAKE_RESOLVER_EXPORT=__declspec(dllexport)") + + set(CMAKE_RESOLVER_COMPILER_CURRENT_ID ${CMAKE_RESOLVER_COMPILER_MSVC_ID}) + + set(FLAME_FLAG_BIG_OBJECT "/bigobj") + + if(CMAKE_CXX_COMPILER) + set(FLAME_CXX_FLAG_NO_RTTI "/GR") + set(FLAME_CXX_FLAG_RTTI "/GR-") + + set(FLAME_CXX_FLAG_NO_EXCEPTIONS "/EHsc-") + set(FLAME_CXX_FLAG_EXCEPTIONS "/EHsc") + endif() +endif() + +function(flame_shared_set_export_symbols_msvc TARGET_NAME) + target_compile_options(${TARGET_NAME} PRIVATE ${FLAME_FLAG_BIG_OBJECT}) + set_target_properties(${TARGET_NAME} + PROPERTIES + WINDOWS_EXPORT_ALL_SYMBOLS ON) +endfunction() diff --git a/cmake/Functions/CommonFunctions.cmake b/cmake/Functions/CommonFunctions.cmake index 57b5d80..17f0851 100644 --- a/cmake/Functions/CommonFunctions.cmake +++ b/cmake/Functions/CommonFunctions.cmake @@ -1,7 +1,7 @@ # # # -function(get_real_target CURRENT_TARGET_NAME REAL_TARGET_NAME) +function(flame_get_real_target CURRENT_TARGET_NAME REAL_TARGET_NAME) if(TARGET ${CURRENT_TARGET_NAME}) get_target_property(aliased ${CURRENT_TARGET_NAME} ALIASED_TARGET) if(aliased) @@ -12,4 +12,38 @@ function(get_real_target CURRENT_TARGET_NAME REAL_TARGET_NAME) else() message_fatal("-- '${CURRENT_TARGET_NAME}' is not a target") endif() -endfunction(get_real_target) +endfunction(flame_get_real_target) + +# +# +# +function(internal_flame_find_lib NAME) + check_internal_use() + find_library(LIBRARY_${CMAKE_FIND_LIBRARY_SUFFIXES} ${NAME}) + if (NOT LIBRARY_${CMAKE_FIND_LIBRARY_SUFFIXES}) + message("NAME ('${CMAKE_FIND_LIBRARY_SUFFIXES}') not found") + endif() + set(LIBRARY_${CMAKE_FIND_LIBRARY_SUFFIXES} + "${LIBRARY_${CMAKE_FIND_LIBRARY_SUFFIXES}}" + PARENT_SCOPE) +endfunction() + +# +# +# +function(flame_find_static_lib NAME LOCATION) + enable_internal_use() + set(CMAKE_FIND_LIBRARY_SUFFIXES "${FLAME_STATIC_LIBRARY_SUFFIX}") + internal_flame_find_lib(${NAME}) + set(${LOCATION} ${LIBRARY_${CMAKE_FIND_LIBRARY_SUFFIXES}} PARENT_SCOPE) +endfunction() + +# +# +# +function(flame_find_shared_lib NAME LOCATION) + enable_internal_use() + set(CMAKE_FIND_LIBRARY_SUFFIXES "${FLAME_SHARED_LIBRARY_SUFFIX}") + internal_flame_find_lib(${NAME}) + set(${LOCATION} ${LIBRARY_${CMAKE_FIND_LIBRARY_SUFFIXES}} PARENT_SCOPE) +endfunction() diff --git a/cmake/Functions/CompileBinaryFunctions.cmake b/cmake/Functions/CompileBinaryFunctions.cmake index 8e8057e..aee8cb1 100644 --- a/cmake/Functions/CompileBinaryFunctions.cmake +++ b/cmake/Functions/CompileBinaryFunctions.cmake @@ -4,10 +4,11 @@ function(internal_compile_binary) check_internal_use() - set(OPTIONS "DEBUG") + set(OPTIONS "DEBUG" "TEST" "RTTI" "NO_RTTI" "EXCEPTIONS" "NO_EXCEPTIONS" + "USE_RESOLVER_DEFINES") set(VALUES "NAME" "ALIAS_NAME" "INSTALL_PATH") - set(LISTS "INCLUDE_PATHS" "SOURCE_LIST" "COMPILE_FLAGS" "LINK_FLAGS" - "DEPENDENCY_TARGET_LIST") + set(LISTS "DEFINES" "INCLUDE_PATHS" "SOURCE_LIST" "COMPILE_FLAGS" "LINK_FLAGS" + "DEPENDENCY_TARGET_LIST" "TEST_ARGUMENTS") cmake_parse_arguments("BINARY" "${OPTIONS}" "${VALUES}" "${LISTS}" "${ARGN}") internal_compile_binary_start_function() @@ -36,12 +37,36 @@ macro(internal_compile_binary_print_parse_result) print_debug_function_oneline("BINARY_NAME = ") print_debug_value_newline(${BINARY_NAME}) + print_debug_function_oneline("BINARY_TEST = ") + print_debug_value_newline(${BINARY_TEST}) + + print_debug_function_oneline("BINARY_TEST_ARGUMENTS = ") + print_debug_value_newline(${BINARY_TEST_ARGUMENTS}) + + print_debug_function_oneline("BINARY_NO_RTTI = ") + print_debug_value_newline("${BINARY_NO_RTTI}") + + print_debug_function_oneline("BINARY_RTTI = ") + print_debug_value_newline("${BINARY_RTTI}") + + print_debug_function_oneline("BINARY_NO_EXCEPTIONS = ") + print_debug_value_newline("${BINARY_NO_EXCEPTIONS}") + + print_debug_function_oneline("BINARY_EXCEPTIONS = ") + print_debug_value_newline("${BINARY_EXCEPTIONS}") + print_debug_function_oneline("BINARY_ALIAS_NAME = ") print_debug_value_newline(${BINARY_ALIAS_NAME}) print_debug_function_oneline("BINARY_INSTALL_PATH = ") print_debug_value_newline(${BINARY_INSTALL_PATH}) + print_debug_function_oneline("BINARY_USE_RESOLVER_DEFINES = ") + print_debug_value_newline(${BINARY_USE_RESOLVER_DEFINES}) + + print_debug_function_oneline("BINARY_DEFINES = ") + print_debug_value_newline(${BINARY_DEFINES}) + print_debug_function_oneline("BINARY_INCLUDE_PATHS = ") print_debug_value_newline(${BINARY_INCLUDE_PATHS}) @@ -65,9 +90,17 @@ macro(internal_compile_binary_print_parse_result) endmacro(internal_compile_binary_print_parse_result) macro(internal_compile_binary_process_parameters) + internal_print_warning_not_support("${BINARY_LINK_FLAGS}" LINK_FLAGS) + internal_print_warning_not_support("${BINARY_INSTALL_PATH}" INSTALL_PATH) + + # BINARY_NAME + if(NOT BINARY_NAME) message_fatal("Need 'NAME'.") endif() + + # BINARY_SOURCE_LIST + if(BINARY_SOURCE_LIST) list(APPEND SOURCE_LIST ${BINARY_SOURCE_LIST}) endif() @@ -75,9 +108,77 @@ macro(internal_compile_binary_process_parameters) message_fatal("Need 'SOURCE_LIST'.") endif() - internal_print_warning_not_support("${BINARY_COMPILE_FLAGS}" COMPILE_FLAGS) - internal_print_warning_not_support("${BINARY_LINK_FLAGS}" LINK_FLAGS) - internal_print_warning_not_support("${BINARY_INSTALL_PATH}" INSTALL_PATH) + # BINARY_RTTI & BINARY_NO_RTTI + + if(BINARY_RTTI AND BINARY_NO_RTTI) + set(MESSAGE_STRING "options 'RTTI' and 'NO_RTTI' cannot be used simultaneously") + message_fatal("${FUNCTION_NAME}.${BINARY_NAME}: ${MESSAGE_STRING}") + endif() + + if((NOT BINARY_RTTI) AND (NOT BINARY_NO_RTTI)) + if(FLAME_CXX_NO_RTTI) + set(MESSAGE_OPTION "NO_RTTI") + set(BINARY_RTTI OFF) + list(APPEND BINARY_COMPILE_FLAGS "${FLAME_CXX_FLAG_NO_RTTI}") + else() + set(MESSAGE_OPTION "RTTI") + set(BINARY_RTTI ON) + list(APPEND BINARY_COMPILE_FLAGS "${FLAME_CXX_FLAG_RTTI}") + endif() + set(MESSAGE_STRING "not set 'RTTI' or 'NO_RTTI'. Used '${MESSAGE_OPTION}'") + message_status("${FUNCTION_NAME}.${BINARY_NAME}: ${MESSAGE_STRING}") + unset(MESSAGE_STRING) + unset(MESSAGE_OPTION) + elseif(BINARY_RTTI) + list(APPEND BINARY_COMPILE_FLAGS "${FLAME_CXX_FLAG_RTTI}") + elseif(BINARY_NO_RTTI) + list(APPEND BINARY_COMPILE_FLAGS "${FLAME_CXX_FLAG_NO_RTTI}") + endif() + + # BINARY_EXCEPTIONS & BINARY_NO_EXCEPTIONS + + if(BINARY_EXCEPTIONS AND BINARY_NO_EXCEPTIONS) + set(MESSAGE_STRING "options 'EXCEPTIONS' and 'NO_EXCEPTIONS' cannot be used simultaneously") + message_fatal("${FUNCTION_NAME}.${BINARY_NAME}: ${MESSAGE_STRING}") + endif() + + if((NOT BINARY_EXCEPTIONS) AND (NOT BINARY_NO_EXCEPTIONS)) + if(FLAME_CXX_NO_EXCEPTIONS) + set(MESSAGE_OPTION "NO_EXCEPTIONS") + set(BINARY_EXCEPTIONS OFF) + list(APPEND BINARY_COMPILE_FLAGS "${FLAME_CXX_FLAG_NO_EXCEPTIONS}") + else() + set(MESSAGE_OPTION "EXCEPTIONS") + set(BINARY_EXCEPTIONS ON) + list(APPEND BINARY_COMPILE_FLAGS "${FLAME_CXX_FLAG_EXCEPTIONS}") + endif() + + set(MESSAGE_STRING "not set 'EXCEPTIONS' or 'NO_EXCEPTIONS'. Used '${MESSAGE_OPTION}'") + message_status("${FUNCTION_NAME}.${BINARY_NAME}: ${MESSAGE_STRING}") + + unset(MESSAGE_STRING) + unset(MESSAGE_OPTION) + elseif(BINARY_EXCEPTIONS) + list(APPEND BINARY_COMPILE_FLAGS "${FLAME_CXX_FLAG_EXCEPTIONS}") + elseif(BINARY_NO_EXCEPTIONS) + list(APPEND BINARY_COMPILE_FLAGS "${FLAME_CXX_FLAG_NO_EXCEPTIONS}") + endif() + + if(BINARY_USE_RESOLVER_DEFINES) + flame_get_platform_defines(PLATFORM_DEFINES) + list(APPEND BINARY_DEFINES ${PLATFORM_DEFINES}) + + if(CMAKE_CXX_COMPILER) + flame_get_rtti_defines(${BINARY_RTTI} DEFINE_RTTI) + flame_get_exception_defines(${BINARY_EXCEPTIONS} DEFINE_EXCEPTIONS) + list(APPEND BINARY_DEFINES ${DEFINE_RTTI} ${DEFINE_EXCEPTIONS}) + + unset(DEFINE_RTTI) + unset(DEFINE_EXCEPTIONS) + endif() + + unset(PLATFORM_DEFINES) + endif() endmacro(internal_compile_binary_process_parameters) macro(internal_compile_binary_add) @@ -92,6 +193,9 @@ macro(internal_compile_binary_add) "${FLAME_NAME_SEPARATOR}" "${FLAME_CUSTOM_TARGET_SUFFIX}") + if (BINARY_TEST) + set(BINARY_TEST TEST) + endif() internal_add_binary_target_properties( PROPERTY_CONTAINER_NAME "${TARGET_CUSTOM_PROPERTIES}" REAL_TARGET "${TARGET_NAME}" @@ -99,10 +203,15 @@ macro(internal_compile_binary_add) #INSTALL_PATH "${BINARY_INSTALL_PATH}" ADDING_FILES "${SOURCE_LIST}" - #COMPILE_FLAGS "${BINARY_COMPILE_FLAGS}" + COMPILE_FLAGS "${BINARY_COMPILE_FLAGS}" DEPENDENCY_LIBRARIES "${BINARY_DEPENDENCY_TARGET_LIST}" #LINK_FLAGS "${BINARY_LINK_FLAGS}" INCLUDE_PATHS "${BINARY_INCLUDE_PATHS}" + DEFINES "${BINARY_DEFINES}" + + ${BINARY_TEST} + TEST_ARGUMENTS "${BINARY_TEST_ARGUMENTS}" + ${BINARY_DEBUG} ) diff --git a/cmake/Functions/CompileLibraryFunctions.cmake b/cmake/Functions/CompileLibraryFunctions.cmake index d5ce01f..2099430 100644 --- a/cmake/Functions/CompileLibraryFunctions.cmake +++ b/cmake/Functions/CompileLibraryFunctions.cmake @@ -8,13 +8,14 @@ function(internal_compile_library) set(OPTIONS "DEBUG" "MAKE_STATIC" "MAKE_SHARED" "NOT_MAKE_POSITION_DEPENDENT_OBJECTS" "NOT_MAKE_POSITION_INDEPENDENT_OBJECTS" - "RTTI" "NO_RTTI" "EXCEPTIONS" "NO_EXCEPTIONS") + "RTTI" "NO_RTTI" "EXCEPTIONS" "NO_EXCEPTIONS" + "EXPORT_ALL" "USE_RESOLVER_DEFINES") set(VALUES "NAME" "OBJECT_ALIAS_NAME" "INDEPENDENT_OBJECT_ALIAS_NAME" "STATIC_ALIAS_NAME" "SHARED_ALIAS_NAME" "STATIC_INSTALL_PATH" "SHARED_INSTALL_PATH") - set(LISTS "INCLUDE_PATHS" "SOURCE_LIST" "COMPILE_FLAGS" "LINK_FLAGS" - "DEPENDENCY_HEADER_TARGETS" "DEPENDENCY_TARGETS_FOR_STATIC" - "DEPENDENCY_TARGETS_FOR_SHARED") + set(LISTS "DEFINES" "INCLUDE_PATHS" "SOURCE_LIST" "SOURCE_LIST_STATIC" + "SOURCE_LIST_SHARED" "COMPILE_FLAGS" "LINK_FLAGS" "DEPENDENCY_HEADER_TARGETS" + "DEPENDENCY_TARGETS_FOR_STATIC" "DEPENDENCY_TARGETS_FOR_SHARED") cmake_parse_arguments("COMPILE" "${OPTIONS}" "${VALUES}" "${LISTS}" "${ARGN}") internal_compile_library_start_function() @@ -84,6 +85,12 @@ macro(internal_compile_library_print_parse_result) print_debug_function_oneline("COMPILE_EXCEPTIONS = ") print_debug_value_newline("${COMPILE_EXCEPTIONS}") + print_debug_function_oneline("COMPILE_EXPORT_ALL = ") + print_debug_value_newline("${COMPILE_EXCEPTIONS}") + + print_debug_function_oneline("COMPILE_USE_RESOLVER_DEFINES = ") + print_debug_value_newline("${COMPILE_USE_RESOLVER_DEFINES}") + # values print_debug_function_oneline("COMPILE_NAME = ") @@ -109,6 +116,9 @@ macro(internal_compile_library_print_parse_result) # lists + print_debug_function_oneline("COMPILE_DEFINES = ") + print_debug_value_newline("${COMPILE_DEFINES}") + print_debug_function_oneline("COMPILE_INCLUDE_PATHS = ") print_debug_value_newline("${COMPILE_INCLUDE_PATHS}") @@ -154,9 +164,11 @@ macro(internal_compile_library_process_parameters) elseif((NOT COMPILE_RTTI) AND (NOT COMPILE_NO_RTTI)) if(FLAME_CXX_NO_RTTI) set(MESSAGE_OPTION "NO_RTTI") + set(COMPILE_RTTI OFF) list(APPEND COMPILE_COMPILE_FLAGS "${FLAME_CXX_FLAG_NO_RTTI}") else() set(MESSAGE_OPTION "RTTI") + set(COMPILE_RTTI ON) list(APPEND COMPILE_COMPILE_FLAGS "${FLAME_CXX_FLAG_RTTI}") endif() message_status( @@ -176,9 +188,11 @@ macro(internal_compile_library_process_parameters) elseif((NOT COMPILE_EXCEPTIONS) AND (NOT COMPILE_NO_EXCEPTIONS)) if(FLAME_CXX_NO_EXCEPTIONS) set(MESSAGE_OPTION "NO_EXCEPTIONS") + set(COMPILE_EXCEPTIONS OFF) list(APPEND COMPILE_COMPILE_FLAGS "${FLAME_CXX_FLAG_NO_EXCEPTIONS}") else() set(MESSAGE_OPTION "EXCEPTIONS") + set(COMPILE_EXCEPTIONS ON) list(APPEND COMPILE_COMPILE_FLAGS "${FLAME_CXX_FLAG_EXCEPTIONS}") endif() message_status( @@ -191,6 +205,22 @@ macro(internal_compile_library_process_parameters) list(APPEND COMPILE_COMPILE_FLAGS "${FLAME_CXX_FLAG_NO_EXCEPTIONS}") endif() + if(COMPILE_USE_RESOLVER_DEFINES) + flame_get_platform_defines(PLATFORM_DEFINES) + list(APPEND COMPILE_DEFINES ${PLATFORM_DEFINES}) + + if(CMAKE_CXX_COMPILER) + flame_get_rtti_defines(${COMPILE_RTTI} DEFINE_RTTI) + flame_get_exception_defines(${COMPILE_EXCEPTIONS} DEFINE_EXCEPTIONS) + list(APPEND COMPILE_DEFINES ${DEFINE_RTTI} ${DEFINE_EXCEPTIONS}) + + unset(DEFINE_RTTI) + unset(DEFINE_EXCEPTIONS) + endif() + + unset(PLATFORM_DEFINES) + endif() + message_status("internal_compile_library.${COMPILE_NAME}: COMPILE_COMPILE_FLAGS = ${COMPILE_COMPILE_FLAGS}") internal_print_warning_not_support("${COMPILE_NOT_MAKE_POSITION_DEPENDENT_OBJECTS}" @@ -248,6 +278,7 @@ macro(internal_compile_independent_object_library) REAL_TARGET "${TARGET_NAME}" ADDING_FILES "${SOURCE_LIST}" INCLUDE_PATHS "${COMPILE_INCLUDE_PATHS}" + DEFINES "${COMPILE_DEFINES}" DEPENDENCY_HEADERS "${COMPILE_DEPENDENCY_HEADER_TARGETS}" COMPILE_FLAGS "${COMPILE_COMPILE_FLAGS}" POSITION_INDEPENDENT @@ -286,6 +317,7 @@ macro(internal_compile_dependent_object_library) REAL_TARGET "${TARGET_NAME}" ADDING_FILES "${SOURCE_LIST}" INCLUDE_PATHS "${COMPILE_INCLUDE_PATHS}" + DEFINES "${COMPILE_DEFINES}" DEPENDENCY_HEADERS "${COMPILE_DEPENDENCY_HEADER_TARGETS}" COMPILE_FLAGS "${COMPILE_COMPILE_FLAGS}" OBJECT_ALIASES "${COMPILE_OBJECT_ALIAS_NAME}" @@ -371,6 +403,10 @@ macro(internal_compile_shared_library) "${FLAME_NAME_SEPARATOR}" "${FLAME_OBJECT_INDEPENDENT_MODULE_SUFFIX}") + if(COMPILE_EXPORT_ALL) + set(COMPILE_EXPORT_ALL EXPORT_ALL) + endif() + #set(DEBUG DEBUG) internal_add_shared_target_properties( PROPERTY_CONTAINER_NAME "${TARGET_CUSTOM_PROPERTIES}" @@ -383,6 +419,8 @@ macro(internal_compile_shared_library) #LINK_FLAGS "${}" OUTPUT_NAME "${COMPILE_NAME}" LIBRARY_ALIASES "${COMPILE_SHARED_ALIAS_NAME}" + ${COMPILE_EXPORT_ALL} + ${COMPILE_DEBUG} ) diff --git a/cmake/Functions/ResolveFunctions.cmake b/cmake/Functions/ResolveFunctions.cmake index b2d9f29..629b412 100644 --- a/cmake/Functions/ResolveFunctions.cmake +++ b/cmake/Functions/ResolveFunctions.cmake @@ -76,24 +76,37 @@ function(internal_resolve_object_libraries) get_target_property(INCLUDE_PATHS ${target.property} FLAME_INCLUDE_PATHS) if(INCLUDE_PATHS) - target_include_directories(${REAL_TARGET} PUBLIC ${INCLUDE_PATHS}) + target_include_directories(${REAL_TARGET} PRIVATE ${INCLUDE_PATHS}) + endif() + + get_target_property(DEFINES ${target.property} FLAME_DEFINES) + if(DEFINES) + target_compile_definitions(${REAL_TARGET} PRIVATE ${DEFINES}) endif() - get_target_property(POSITION_INDEPENDENT ${target.property} FLAME_POSITION_INDEPENDENT) + get_target_property(POSITION_INDEPENDENT ${target.property} + FLAME_POSITION_INDEPENDENT) if(POSITION_INDEPENDENT) set_property(TARGET ${REAL_TARGET} PROPERTY POSITION_INDEPENDENT_CODE ${POSITION_INDEPENDENT}) + + get_target_property(EXPORT_ALL_SYMBOLS ${target.property} + FLAME_EXPORT_ALL_SYMBOLS) + if(EXPORT_ALL_SYMBOLS) + flame_shared_set_export_symbols("${REAL_TARGET}") + endif() endif() - get_target_property(HEADER_DEPENDENCIES ${target.property} FLAME_DEPENDENCY_HEADERS) + get_target_property(HEADER_DEPENDENCIES ${target.property} + FLAME_DEPENDENCY_HEADERS) if(HEADER_DEPENDENCIES) - target_link_libraries(${REAL_TARGET} PUBLIC ${dependency}) + target_link_libraries(${REAL_TARGET} PRIVATE ${dependency}) endif() get_target_property(COMPILE_FLAGS ${target.property} FLAME_COMPILE_FLAGS) if(COMPILE_FLAGS) foreach(flag ${COMPILE_FLAGS}) - target_compile_options(${REAL_TARGET} PUBLIC ${flag}) + target_compile_options(${REAL_TARGET} PRIVATE ${flag}) endforeach() endif() @@ -136,7 +149,7 @@ function(internal_resolve_static_libraries) get_target_property(HEADER_TARGETS ${target.property} FLAME_DEPENDENCY_HEADERS) if(HEADER_TARGETS) - target_link_libraries(${REAL_TARGET} PUBLIC ${HEADER_TARGETS}) + target_link_libraries(${REAL_TARGET} PRIVATE ${HEADER_TARGETS}) endif() # Not supported now @@ -203,7 +216,7 @@ function(internal_resolve_shared_libraries) get_target_property(HEADER_TARGETS ${target.property} FLAME_DEPENDENCY_HEADERS) if(HEADER_TARGETS) - target_link_libraries(${REAL_TARGET} PUBLIC ${HEADER_TARGETS}) + target_link_libraries(${REAL_TARGET} PRIVATE ${HEADER_TARGETS}) endif() # Not supported now @@ -218,6 +231,17 @@ function(internal_resolve_shared_libraries) OUTPUT_NAME "${OUTPUT_NAME}") endif() + get_target_property(EXPORT_ALL_SYMBOLS ${target.property} + FLAME_EXPORT_ALL) + if(EXPORT_ALL_SYMBOLS) + flame_shared_set_export_symbols("${REAL_TARGET}") + endif() + + if(FLAME_IMPLIB_LIBRARY_SUFFIX) + set_target_properties(${REAL_TARGET} PROPERTIES + IMPORT_SUFFIX "${FLAME_IMPLIB_LIBRARY_SUFFIX}") + endif() + print_newline("done") endforeach() @@ -268,6 +292,11 @@ function(internal_resolve_binaries) target_include_directories(${REAL_TARGET} PUBLIC ${INCLUDE_PATHS}) endif() + get_target_property(DEFINES ${target.property} FLAME_DEFINES) + if(DEFINES) + target_compile_definitions(${REAL_TARGET} PRIVATE ${DEFINES}) + endif() + get_target_property(DEPENDENCY_LIBRARIES ${target.property} FLAME_DEPENDENCY_LIBRARIES) if(DEPENDENCY_LIBRARIES) target_link_libraries(${REAL_TARGET} PUBLIC ${DEPENDENCY_LIBRARIES}) @@ -275,11 +304,15 @@ function(internal_resolve_binaries) get_target_property(DEPENDENCY_HEADERS ${target.property} FLAME_DEPENDENCY_HEADERS) if(DEPENDENCY_HEADERS) - target_link_libraries(${REAL_TARGET} PUBLIC ${DEPENDENCY_HEADERS}) + target_link_libraries(${REAL_TARGET} PRIVATE ${DEPENDENCY_HEADERS}) endif() - # Not supported now - #get_target_property(COMPILE_FLAGS ${target.property} FLAME_COMPILE_FLAGS) + get_target_property(COMPILE_FLAGS ${target.property} FLAME_COMPILE_FLAGS) + if(COMPILE_FLAGS) + foreach(flag ${COMPILE_FLAGS}) + target_compile_options(${REAL_TARGET} PRIVATE ${flag}) + endforeach() + endif() # Not supported now #get_target_property(LINK_FLAGS ${target.property} FLAME_LINK_FLAGS) @@ -300,6 +333,15 @@ function(internal_resolve_binaries) endforeach() endif() + get_target_property(IS_TEST ${target.property} FLAME_TEST) + if(IS_TEST) + get_target_property(TEST_ARGUMENTS ${target.property} FLAME_TEST_ARGUMENTS) + add_test( + NAME "${REAL_TARGET}" + COMMAND ${OUTPUT_NAME} ${TEST_ARGUMENTS} + ) + endif() + print_newline("done") endforeach() diff --git a/cmake/Macros.cmake b/cmake/Macros.cmake index dab972a..8377ea2 100644 --- a/cmake/Macros.cmake +++ b/cmake/Macros.cmake @@ -50,3 +50,12 @@ macro(check_internal_use) message_fatal("${FLAME_SIMPLE_PREFIX} It's internal function. You can not use it") endif() endmacro(check_internal_use) + +# +# +# +macro(generate_random_id OUT_VAR) + string(RANDOM LENGTH 8 ALPHABET 0123456789ABCDEF TMP) + set(${OUT_VAR} 0x${TMP}) + unset(TMP) +endmacro() diff --git a/cmake/Options/CodeGenerationOptions.cmake b/cmake/Options/CodeGenerationOptions.cmake index b07ffbe..64cf520 100644 --- a/cmake/Options/CodeGenerationOptions.cmake +++ b/cmake/Options/CodeGenerationOptions.cmake @@ -17,3 +17,8 @@ option(FLAME_MAKE_STANDALONE "Make all modules as standalone. Not support" OFF ) + +option(FLAME_EXPORT_ALL_SYMBOLS + "Export all symbols from shared libraries" + ON +) diff --git a/cmake/Options/FlagOptions.cmake b/cmake/Options/FlagOptions.cmake index 7936bfb..3eb21d8 100644 --- a/cmake/Options/FlagOptions.cmake +++ b/cmake/Options/FlagOptions.cmake @@ -1,11 +1,16 @@ # flags option(FLAME_CXX_NO_RTTI - "Turn off Run-time Type Identification (RTTI). Not support" + "Turn off Run-time Type Identification (RTTI)" OFF ) option(FLAME_CXX_NO_EXCEPTIONS - "Turn off exception support. Not support" + "Turn off exception support" + OFF +) + +option(FLAME_PLATFORM_DEFINES + "Turn on platform defines" OFF ) diff --git a/cmake/Platform.cmake b/cmake/Platform.cmake index 4fe4eb7..316eb35 100644 --- a/cmake/Platform.cmake +++ b/cmake/Platform.cmake @@ -5,28 +5,6 @@ if(FLAME_THREADING) endif() endif() -if(CMAKE_CXX_COMPILER) - if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(FLAME_CXX_FLAG_NO_RTTI "-fno-rtti") - set(FLAME_CXX_FLAG_RTTI "-frtti") - - set(FLAME_CXX_FLAG_NO_EXCEPTIONS "-fno-cxx-exceptions") - set(FLAME_CXX_FLAG_EXCEPTIONS "-fcxx-exceptions") - elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - set(FLAME_CXX_FLAG_NO_RTTI "-fno-rtti") - set(FLAME_CXX_FLAG_RTTI "") - - set(FLAME_CXX_FLAG_NO_EXCEPTIONS "-fno-exceptions") - set(FLAME_CXX_FLAG_EXCEPTIONS "-fexceptions") - elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") - set(FLAME_CXX_FLAG_NO_RTTI "/GR") - set(FLAME_CXX_FLAG_RTTI "/GR-") - - set(FLAME_CXX_FLAG_NO_EXCEPTIONS "/EHs-") - set(FLAME_CXX_FLAG_EXCEPTIONS "/EHs") - endif() -endif() - if(UNIX) include(Platform/Unix) endif(UNIX) diff --git a/cmake/Platform/Windows.cmake b/cmake/Platform/Windows.cmake index e5c2109..f8ceece 100644 --- a/cmake/Platform/Windows.cmake +++ b/cmake/Platform/Windows.cmake @@ -2,3 +2,5 @@ set(FLAME_PLATFORM Windows) set(FLAME_STATIC_LIBRARY_SUFFIX ".lib") set(FLAME_SHARED_LIBRARY_SUFFIX ".dll") +set(FLAME_IMPLIB_LIBRARY_SUFFIX + "${FLAME_SHARED_LIBRARY_SUFFIX}${FLAME_STATIC_LIBRARY_SUFFIX}") diff --git a/cmake/Properties/TargetProperties.cmake b/cmake/Properties/TargetProperties.cmake index d892ebd..e3a6a7c 100644 --- a/cmake/Properties/TargetProperties.cmake +++ b/cmake/Properties/TargetProperties.cmake @@ -9,6 +9,7 @@ # Lists: # ADDING_FILES - Sources and headers # INCLUDE_PATHS - +# DEFINES - # DEPENDENCY_HEADERS - # LIBRARY_ALIASES - function(internal_add_header_target_properties) @@ -37,6 +38,9 @@ function(internal_add_header_target_properties) print_debug_function_oneline("FLAME_INCLUDE_PATHS = ") print_debug_value_newline(${FLAME_INCLUDE_PATHS}) + print_debug_function_oneline("FLAME_DEFINES = ") + print_debug_value_newline(${FLAME_DEFINES}) + print_debug_function_oneline("FLAME_DEPENDENCY_HEADERS = ") print_debug_value_newline(${FLAME_DEPENDENCY_HEADERS}) @@ -57,6 +61,7 @@ function(internal_add_header_target_properties) PROPERTIES FLAME_REAL_TARGET "${FLAME_REAL_TARGET}" FLAME_ADDING_FILES "${FLAME_ADDING_FILES}" + FLAME_DEFINES "${FLAME_DEFINES}" FLAME_DEPENDENCY_HEADERS "${FLAME_DEPENDENCY_HEADERS}" FLAME_LIBRARY_ALIASES "${FLAME_LIBRARY_ALIASES}" FLAME_INSTALL_PATH "${FLAME_INSTALL_PATH}" @@ -74,6 +79,7 @@ endfunction(internal_add_header_target_properties) # Lists: # ADDING_FILES - # INCLUDE_PATHS - +# DEFINES - # DEPENDENCY_HEADERS - # COMPILE_FLAGS - # OBJECT_ALIASES - @@ -82,8 +88,8 @@ function(internal_add_object_target_properties) set(OPTIONS "DEBUG" "POSITION_INDEPENDENT") set(VALUES "PROPERTY_CONTAINER_NAME" "REAL_TARGET") - set(LISTS "ADDING_FILES" "INCLUDE_PATHS" "DEPENDENCY_HEADERS" "COMPILE_FLAGS" - "OBJECT_ALIASES") + set(LISTS "ADDING_FILES" "INCLUDE_PATHS" "DEFINES" "DEPENDENCY_HEADERS" "COMPILE_FLAGS" + "COMPILE_DIFINITIONS" "OBJECT_ALIASES") cmake_parse_arguments("FLAME" "${OPTIONS}" "${VALUES}" "${LISTS}" "${ARGN}") @@ -104,6 +110,9 @@ function(internal_add_object_target_properties) print_debug_function_oneline("FLAME_INCLUDE_PATHS = ") print_debug_value_newline(${FLAME_INCLUDE_PATHS}) + print_debug_function_oneline("FLAME_DEFINES = ") + print_debug_value_newline(${FLAME_DEFINES}) + print_debug_function_oneline("FLAME_DEPENDENCY_HEADERS = ") print_debug_value_newline(${FLAME_DEPENDENCY_HEADERS}) @@ -128,6 +137,7 @@ function(internal_add_object_target_properties) FLAME_REAL_TARGET "${FLAME_REAL_TARGET}" FLAME_ADDING_FILES "${FLAME_ADDING_FILES}" FLAME_INCLUDE_PATHS "${FLAME_INCLUDE_PATHS}" + FLAME_DEFINES "${FLAME_DEFINES}" FLAME_DEPENDENCY_HEADERS "${FLAME_DEPENDENCY_HEADERS}" FLAME_COMPILE_FLAGS "${FLAME_COMPILE_FLAGS}" FLAME_POSITION_INDEPENDENT "${FLAME_POSITION_INDEPENDENT}" @@ -216,12 +226,12 @@ function(internal_add_static_target_properties) FLAME_INSTALL_PATH "${FLAME_INSTALL_PATH}" ) - end_debug_function() endfunction(internal_add_static_target_properties) # Options: -# DEBUG - +# DEBUG - +# EXPORT_ALL - # Values: # PROPERTY_CONTAINER_NAME - # REAL_TARGET - @@ -238,7 +248,7 @@ endfunction(internal_add_static_target_properties) function(internal_add_shared_target_properties) check_internal_use() - set(OPTIONS "DEBUG") + set(OPTIONS "DEBUG" "EXPORT_ALL") set(VALUES "PROPERTY_CONTAINER_NAME" "REAL_TARGET" "OUTPUT_NAME" "INSTALL_PATH") set(LISTS "ADDING_SOURCES" "ADDING_OBJECTS" "DEPENDENCY_HEADERS" "DEPENDENCY_LIBRARIES" "COMPILE_FLAGS" "LINK_FLAGS" "LIBRARY_ALIASES") @@ -271,6 +281,9 @@ function(internal_add_shared_target_properties) print_debug_function_oneline("FLAME_COMPILE_FLAGS = ") print_debug_value_newline(${FLAME_COMPILE_FLAGS}) + print_debug_function_oneline("FLAME_EXPORT_ALL = ") + print_debug_value_newline(${FLAME_EXPORT_ALL}) + print_debug_function_oneline("FLAME_LINK_FLAGS = ") print_debug_value_newline(${FLAME_LINK_FLAGS}) @@ -290,6 +303,11 @@ function(internal_add_shared_target_properties) set_property(GLOBAL APPEND PROPERTY FLAME_SHARED_TARGETS ${FLAME_PROPERTY_CONTAINER_NAME} ) + if(FLAME_EXPORT_ALL) + set(FLAME_EXPORT_ALL ON) + else() + set(FLAME_EXPORT_ALL OFF) + endif() set_target_properties(${FLAME_PROPERTY_CONTAINER_NAME} PROPERTIES FLAME_REAL_TARGET "${FLAME_REAL_TARGET}" @@ -298,6 +316,7 @@ function(internal_add_shared_target_properties) FLAME_DEPENDENCY_HEADERS "${FLAME_DEPENDENCY_HEADERS}" FLAME_DEPENDENCY_LIBRARIES "${FLAME_DEPENDENCY_LIBRARIES}" FLAME_COMPILE_FLAGS "${FLAME_COMPILE_FLAGS}" + FLAME_EXPORT_ALL "${FLAME_EXPORT_ALL}" FLAME_OUTPUT_NAME "${FLAME_OUTPUT_NAME}" FLAME_LIBRARY_ALIASES "${FLAME_LIBRARY_ALIASES}" FLAME_INSTALL_PATH "${FLAME_INSTALL_PATH}" @@ -308,6 +327,7 @@ endfunction(internal_add_shared_target_properties) # Options: # DEBUG - +# TEST - # Values: # PROPERTY_CONTAINER_NAME - # REAL_TARGET - @@ -316,17 +336,19 @@ endfunction(internal_add_shared_target_properties) # Lists: # ADDING_FILES - # INCLUDE_PATHS - +# DEFINES - # DEPENDENCY_HEADERS - # DEPENDENCY_LIBRARIES - # COMPILE_FLAGS - # LINK_FLAGS - +# TEST_ARGUMENTS - function(internal_add_binary_target_properties) enable_internal_use() - set(OPTIONS "DEBUG") + set(OPTIONS "DEBUG" "TEST") set(VALUES "PROPERTY_CONTAINER_NAME" "REAL_TARGET" "OUTPUT_NAME" "INSTALL_PATH") - set(LISTS "ADDING_FILES" "INCLUDE_PATHS" "DEPENDENCY_HEADERS" - "DEPENDENCY_LIBRARIES" "COMPILE_FLAGS" "LINK_FLAGS") + set(LISTS "ADDING_FILES" "DEFINES" "INCLUDE_PATHS" "DEPENDENCY_HEADERS" + "DEPENDENCY_LIBRARIES" "COMPILE_FLAGS" "LINK_FLAGS" "TEST_ARGUMENTS") cmake_parse_arguments("FLAME" "${OPTIONS}" "${VALUES}" "${LISTS}" "${ARGN}") @@ -341,9 +363,15 @@ function(internal_add_binary_target_properties) print_debug_function_oneline("FLAME_REAL_TARGET = ") print_debug_value_newline(${FLAME_REAL_TARGET}) - print_debug_function_oneline("FLAME_ADDING_FILES = ") + print_debug_function_oneline("FLAME_ADDING_FILES = ") print_debug_value_newline(${FLAME_ADDING_FILES}) + print_debug_function_oneline("FLAME_INCLUDE_PATHS = ") + print_debug_value_newline(${FLAME_INCLUDE_PATHS}) + + print_debug_function_oneline("FLAME_DEFINES = ") + print_debug_value_newline(${FLAME_DEFINES}) + print_debug_function_oneline("FLAME_DEPENDENCY_HEADERS = ") print_debug_value_newline(${FLAME_DEPENDENCY_HEADERS}) @@ -362,6 +390,12 @@ function(internal_add_binary_target_properties) print_debug_function_oneline("FLAME_INSTALL_PATH = ") print_debug_value_newline(${FLAME_INSTALL_PATH}) + print_debug_function_oneline("FLAME_TEST = ") + print_debug_value_newline(${FLAME_TEST}) + + print_debug_function_oneline("FLAME_TEST_ARGUMENTS = ") + print_debug_value_newline(${FLAME_TEST_ARGUMENTS}) + print_debug_function_newline("-------- PARSE RESULT --------") endif() @@ -369,17 +403,25 @@ function(internal_add_binary_target_properties) set_property(GLOBAL APPEND PROPERTY FLAME_BINARY_TARGETS ${FLAME_PROPERTY_CONTAINER_NAME} ) + if(FLAME_TEST) + set(TEST TRUE) + else() + set(TEST FALSE) + endif() set_target_properties(${FLAME_PROPERTY_CONTAINER_NAME} PROPERTIES FLAME_REAL_TARGET "${FLAME_REAL_TARGET}" FLAME_ADDING_FILES "${FLAME_ADDING_FILES}" FLAME_INCLUDE_PATHS "${FLAME_INCLUDE_PATHS}" + FLAME_DEFINES "${FLAME_DEFINES}" FLAME_DEPENDENCY_HEADERS "${FLAME_DEPENDENCY_HEADERS}" FLAME_DEPENDENCY_LIBRARIES "${FLAME_DEPENDENCY_LIBRARIES}" FLAME_COMPILE_FLAGS "${FLAME_COMPILE_FLAGS}" FLAME_LINK_FLAGS "${FLAME_LINK_FLAGS}" FLAME_OUTPUT_NAME "${FLAME_OUTPUT_NAME}" FLAME_INSTALL_PATH "${FLAME_INSTALL_PATH}" + FLAME_TEST "${TEST}" + FLAME_TEST_ARGUMENTS "${FLAME_TEST_ARGUMENTS}" ) end_debug_function() @@ -399,7 +441,7 @@ function(internal_target_add_property NAME TARGET_TYPE PROPERTY_NAME PROPERTY_VA OR ("${TARGET_TYPE}" STREQUAL "SHARED") OR ("${TARGET_TYPE}" STREQUAL "BINARY") )) - message_fatal("-- Invalid 'TARGET_TYPE'") + message_fatal("Invalid 'TARGET_TYPE' (TARGET_TYPE != {HEADER, OBJECT, STATIC, SHARED, BINARY})") endif() endfunction(internal_target_add_property)