244 lines
6.4 KiB
CMake
244 lines
6.4 KiB
CMake
function (IsZWCAD out)
|
|
if (DEFINED CACHE{ZWCAD})
|
|
set(${out} TRUE PARENT_SCOPE)
|
|
else()
|
|
set(${out} FALSE PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|
|
|
|
function(apply_arx_definitions TARGET_NAME)
|
|
if(MSVC)
|
|
target_compile_definitions(${TARGET_NAME} PRIVATE
|
|
_ALLOW_RTCc_IN_STL
|
|
_WIN32_IE=0x0600
|
|
WIN
|
|
WIN32
|
|
_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1
|
|
_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1
|
|
_AFXDLL
|
|
UNICODE
|
|
_UNICODE
|
|
)
|
|
endif()
|
|
endfunction()
|
|
|
|
|
|
function(apply_arx_optimization TARGET_NAME)
|
|
if(MSVC)
|
|
target_compile_options(${TARGET_NAME} PRIVATE
|
|
$<$<CONFIG:Debug>:/Od>
|
|
$<$<CONFIG:Debug>:/Zi>
|
|
$<$<CONFIG:Debug>:/Ob0>
|
|
)
|
|
|
|
target_compile_options(${TARGET_NAME} PRIVATE
|
|
$<$<CONFIG:Release>:/O2>
|
|
$<$<CONFIG:Release>:/Ob2>
|
|
$<$<CONFIG:Release>:/Oi>
|
|
$<$<CONFIG:Release>:/Ot>
|
|
$<$<CONFIG:Release>:/Oy>
|
|
$<$<CONFIG:Release>:/GT>
|
|
)
|
|
|
|
target_compile_definitions(${TARGET_NAME} PRIVATE
|
|
$<$<CONFIG:Release>:_NDEBUG=1>
|
|
$<$<CONFIG:Release>:NDEBUG=1>
|
|
)
|
|
|
|
if (DEFINED(WholeProgramOptimization))
|
|
target_compile_options(${TARGET_NAME} PRIVATE
|
|
$<$<CONFIG:Release>:/GL>
|
|
)
|
|
target_link_options(${TARGET_NAME} PRIVATE
|
|
$<$<CONFIG:Release>:/LTCG>
|
|
)
|
|
endif()
|
|
|
|
endif()
|
|
endfunction()
|
|
|
|
function (simple_link_cad_sdk
|
|
TARGET_NAME)
|
|
|
|
IsZWCAD(isZW)
|
|
|
|
if (isZW)
|
|
target_link_libraries(${TARGET_NAME} PRIVATE ThirdParty::ZRX)
|
|
else()
|
|
target_link_libraries(${TARGET_NAME} PRIVATE ThirdParty::ARX)
|
|
endif()
|
|
|
|
apply_arx_optimization(${TARGET_NAME})
|
|
apply_arx_definitions(${TARGET_NAME})
|
|
|
|
endfunction()
|
|
|
|
function (get_sdk_version out)
|
|
IsZWCAD(isZW)
|
|
set(VER ${CAD_SDK_VERSION})
|
|
if (isZW)
|
|
string(REGEX MATCH "..$" VER "${CAD_SDK_VERSION}")
|
|
endif()
|
|
set(${out} ${VER} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function (add_def_file_name
|
|
_SOURCES
|
|
_BASE_NAME)
|
|
|
|
set (tmp "${${_SOURCES}}")
|
|
|
|
IsZWCAD(isZW)
|
|
|
|
if (isZW)
|
|
list(APPEND tmp "${_BASE_NAME}_zrx.def")
|
|
else()
|
|
list(APPEND tmp "${_BASE_NAME}.def")
|
|
endif()
|
|
|
|
set(${_SOURCES} "${tmp}" PARENT_SCOPE)
|
|
|
|
endfunction()
|
|
|
|
function(get_encryption_modes
|
|
_modes)
|
|
|
|
set (tmp "${${_modes}}")
|
|
|
|
list(APPEND tmp "BAL_REMOTE" "TRIAL_YEAR")
|
|
|
|
set(${_modes} "${tmp}" PARENT_SCOPE)
|
|
|
|
endfunction()
|
|
|
|
function(set_encryption_definitions_and_output_path
|
|
TARGET_NAME
|
|
MODE)
|
|
|
|
if (MODE STREQUAL "TRIAL_YEAR")
|
|
target_compile_definitions(${TARGET_NAME} PRIVATE
|
|
BAL_REMOTE
|
|
$<$<CONFIG:Release>:TRIAL_YEAR=${TRIAL_YEAR}>
|
|
$<$<CONFIG:Debug>:WF2023>
|
|
$<$<CONFIG:Release>:${PRODUCT}>
|
|
)
|
|
else()
|
|
target_compile_definitions(${TARGET_NAME} PRIVATE
|
|
$<$<CONFIG:Debug>:WF2023>
|
|
$<$<CONFIG:Debug>:BAL_REMOTE>
|
|
$<$<CONFIG:Release>:${PRODUCT}>
|
|
$<$<CONFIG:Release>:${MODE}>
|
|
)
|
|
endif()
|
|
|
|
|
|
set_target_properties(${TARGET_NAME} PROPERTIES
|
|
RUNTIME_OUTPUT_DIRECTORY_DEBUG
|
|
"${GLOBAL_BIN_DIR}/Debug-x64-${GENERATE_DIR_TAG}/WF2023-BAL_REMOTE")
|
|
|
|
set_target_properties(${TARGET_NAME} PROPERTIES
|
|
RUNTIME_OUTPUT_DIRECTORY_RELEASE
|
|
"${GLOBAL_BIN_DIR}/Release-x64-${GENERATE_DIR_TAG}/${PRODUCT}-${MODE}")
|
|
|
|
set_target_properties(${TARGET_NAME} PROPERTIES
|
|
ARCHIVE_OUTPUT_DIRECTORY_DEBUG
|
|
"${GLOBAL_LIB_DIR}/Debug-x64-${GENERATE_DIR_TAG}/WF2023-BAL_REMOTE"
|
|
)
|
|
set_target_properties(${TARGET_NAME} PROPERTIES
|
|
ARCHIVE_OUTPUT_DIRECTORY_RELEASE
|
|
"${GLOBAL_LIB_DIR}/Release-x64-${GENERATE_DIR_TAG}/${PRODUCT}-${MODE}"
|
|
)
|
|
|
|
target_link_libraries(${TARGET_NAME} PRIVATE ThirdParty::BitAnswer)
|
|
endfunction()
|
|
|
|
function(target_link_objectarx
|
|
TARGET_NAME
|
|
_EXTENSION
|
|
)
|
|
|
|
if (ARGC LESS 2)
|
|
message(FATAL_ERROR "target_link_objectarx() 函数至少需要两个参数: TARGET_NAME 和 _EXTENSION")
|
|
endif()
|
|
|
|
target_link_libraries(${TARGET_NAME} PRIVATE ShsGlobalIncludes)
|
|
target_include_directories(${TARGET_NAME} PRIVATE "${DEP_INC_ROOT}")
|
|
|
|
simple_link_cad_sdk(${TARGET_NAME})
|
|
|
|
target_link_libraries(${TARGET_NAME} PRIVATE "rpcrt4.lib")
|
|
target_compile_definitions(${TARGET_NAME} PRIVATE
|
|
CMAKE
|
|
ARX=${SDK_VERSION}
|
|
${_EXTENSION}
|
|
)
|
|
endfunction()
|
|
|
|
function(target_set_name_and_suffix
|
|
target_name
|
|
new_name
|
|
new_suffix)
|
|
if(NOT TARGET ${target_name})
|
|
message(FATAL_ERROR "[ObjectARX-CMake] Target '${target_name}' 不存在!")
|
|
endif()
|
|
|
|
if(NOT "${new_name}" STREQUAL "")
|
|
set_target_properties(${target_name} PROPERTIES OUTPUT_NAME "${new_name}")
|
|
endif()
|
|
|
|
if(NOT "${new_suffix}" STREQUAL "")
|
|
get_target_property(target_type ${target_name} TYPE)
|
|
|
|
if ("${new_suffix}" STREQUAL ".arx" AND IS_ZWCAD)
|
|
set(new_suffix ".zrx")
|
|
endif()
|
|
|
|
set_target_properties(${target_name} PROPERTIES SUFFIX "${new_suffix}")
|
|
|
|
if(target_type MATCHES "^(SHARED_LIBRARY|MODULE_LIBRARY|EXECUTABLE)$")
|
|
set_target_properties(${target_name} PROPERTIES
|
|
IMPORT_SUFFIX ".lib"
|
|
IMPORT_PREFIX ""
|
|
)
|
|
endif()
|
|
|
|
endif()
|
|
endfunction()
|
|
|
|
function(set_debug_post_build
|
|
target_name
|
|
arx_name
|
|
ext
|
|
)
|
|
set(CONFIG_JSON "sh_output_path.json")
|
|
if (IS_ZWCAD)
|
|
set(CONFIG_JSON "zw_output_path.json")
|
|
endif()
|
|
|
|
add_custom_command(
|
|
TARGET ${target_name}
|
|
POST_BUILD
|
|
COMMAND "$<$<CONFIG:Debug>:${CMAKE_SOURCE_DIR}/copyarx.exe>"
|
|
"$<$<CONFIG:Debug>:CMAKE>"
|
|
"$<$<CONFIG:Debug>:$<TARGET_FILE:${target_name}>>"
|
|
"$<$<CONFIG:Debug>:${GENERATE_DIR_TAG}>"
|
|
"$<$<CONFIG:Debug>:${CMAKE_SOURCE_DIR}/${CONFIG_JSON}>"
|
|
COMMENT "正在调用 copyarx.exe 部署 ARX 模块..."
|
|
VERBATIM
|
|
)
|
|
endfunction()
|
|
|
|
function(add_custom_module_2 dir_path target_name folder_path)
|
|
add_subdirectory(${dir_path})
|
|
|
|
set_target_properties(${target_name} PROPERTIES
|
|
FOLDER "${folder_path}"
|
|
)
|
|
endfunction()
|
|
|
|
function(add_custom_module dir_path folder_path)
|
|
get_filename_component(target_name "${dir_path}" NAME)
|
|
add_custom_module_2(${dir_path} ${target_name} ${folder_path})
|
|
endfunction()
|
|
|