Some checks failed
sm-rpc / build (Release, host.gcc) (push) Failing after 11m15s
sm-rpc / build (Release, arm-linux-gnueabihf) (push) Failing after 11m28s
sm-rpc / build (Release, aarch64-linux-gnu) (push) Failing after 11m50s
sm-rpc / build (Debug, mipsel-linux-gnu) (push) Failing after 12m3s
sm-rpc / build (Debug, host.gcc) (push) Failing after 12m13s
sm-rpc / build (Debug, arm-linux-gnueabihf) (push) Failing after 12m30s
sm-rpc / build (Debug, aarch64-linux-gnu) (push) Failing after 12m42s
sm-rpc / build (Release, mipsel-linux-gnu) (push) Failing after 14m53s
175 lines
4.7 KiB
CMake
175 lines
4.7 KiB
CMake
function(comm_link TARGET_NAME)
|
|
if(COMM_LINK_ATOMIC)
|
|
target_link_libraries(${TARGET_NAME} PUBLIC atomic)
|
|
endif()
|
|
if(COMM_LINK_PTHREAD)
|
|
target_link_libraries(${TARGET_NAME} PUBLIC pthread)
|
|
endif()
|
|
if(COMM_LINK_MICROPROFILE)
|
|
target_link_libraries(${TARGET_NAME} PUBLIC microprofile)
|
|
endif()
|
|
endfunction()
|
|
|
|
# cc_library(name STATIC SRCS a.c b.c DEPS PUBLIC pub_lib PRIVATE pri_lib)
|
|
function(cc_library TARGET_NAME)
|
|
set(options
|
|
STATIC
|
|
static
|
|
SHARED
|
|
shared
|
|
INTERFACE
|
|
interface)
|
|
set(oneValueArgs "")
|
|
set(multiValueArgs
|
|
SRCS
|
|
DEPS
|
|
INCS)
|
|
# 解析参数三种参数 前缀为cc_library_XXX
|
|
cmake_parse_arguments(
|
|
cc_library
|
|
"${options}"
|
|
"${oneValueArgs}"
|
|
"${multiValueArgs}"
|
|
${ARGN})
|
|
if(WIN32)
|
|
# add prefix `lib`, suffix `.lib` -> libxxx.lib in windows
|
|
set(${TARGET_NAME}_LIB_NAME
|
|
"${CMAKE_STATIC_LIBRARY_PREFIX}${TARGET_NAME}${CMAKE_STATIC_LIBRARY_PREFIX}"
|
|
CACHE STRING "output library name for target ${TARGET_NAME}")
|
|
endif()
|
|
|
|
if(cc_library_SRCS)
|
|
if(cc_library_SHARED OR cc_library_shared)
|
|
add_library(${TARGET_NAME} SHARED ${cc_library_SRCS})
|
|
elseif(cc_library_INTERFACE OR cc_library_interface)
|
|
# add_library(${TARGET_NAME} SHARED ${cc_library_SRCS})
|
|
else()
|
|
add_library(${TARGET_NAME} STATIC ${cc_library_SRCS})
|
|
endif()
|
|
|
|
if(cc_library_INCS)
|
|
target_include_directories(${TARGET_NAME} ${cc_library_DEPS})
|
|
endif()
|
|
|
|
if(cc_library_DEPS)
|
|
target_link_libraries(${TARGET_NAME} ${cc_library_DEPS})
|
|
endif()
|
|
comm_link(${TARGET_NAME})
|
|
|
|
endif()
|
|
endfunction()
|
|
|
|
# cc_library(mylib
|
|
# STATIC
|
|
# SRCS a.c b.c
|
|
# DEPS PUBLIC pub_lib
|
|
# PRIVATE pri_lib
|
|
# )
|
|
function(cc_executable TARGET_NAME)
|
|
set(oneValueArgs "")
|
|
set(multiValueArgs
|
|
SRCS
|
|
DEPS
|
|
INCS)
|
|
cmake_parse_arguments(
|
|
cc_executable
|
|
"${options}"
|
|
"${oneValueArgs}"
|
|
"${multiValueArgs}"
|
|
${ARGN})
|
|
|
|
if(cc_executable_SRCS)
|
|
list(
|
|
LENGTH
|
|
cc_executable_SRCS
|
|
len_src)
|
|
if("${len_src}"
|
|
GREATER_EQUAL
|
|
1)
|
|
add_executable(${TARGET_NAME} ${cc_executable_SRCS})
|
|
else()
|
|
add_executable(${TARGET_NAME} "")
|
|
endif()
|
|
endif()
|
|
|
|
if(cc_executable_INCS)
|
|
target_include_directories(${TARGET_NAME} ${cc_executable_INCS})
|
|
endif()
|
|
|
|
if(cc_executable_DEPS)
|
|
target_link_libraries(${TARGET_NAME} ${cc_executable_DEPS})
|
|
endif()
|
|
|
|
comm_link(${TARGET_NAME})
|
|
endfunction()
|
|
|
|
function(cc_test TARGET_NAME)
|
|
CPMAddPackage(
|
|
NAME gtest
|
|
URI https://github.com/google/googletest/archive/refs/tags/release-1.12.0.zip
|
|
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest
|
|
OPTIONS "INSTALL_GTEST OFF"
|
|
FORCE)
|
|
|
|
set(options NO_MAIN)
|
|
set(oneValueArgs "")
|
|
set(multiValueArgs
|
|
SRCS
|
|
DEPS
|
|
INCS
|
|
ARGS)
|
|
cmake_parse_arguments(
|
|
cc_test
|
|
"${options}"
|
|
"${oneValueArgs}"
|
|
"${multiValueArgs}"
|
|
${ARGN})
|
|
# message("TARGET ${TARGET_NAME}")
|
|
cc_executable(
|
|
${TARGET_NAME}
|
|
SRCS ${cc_test_SRCS}
|
|
DEPS ${cc_test_DEPS}
|
|
INCS ${cc_test_INCS})
|
|
target_link_libraries(${TARGET_NAME} ${cc_test_DEPS} PRIVATE GTest::gtest)
|
|
if(NOT cc_test_NO_MAIN)
|
|
target_link_libraries(${TARGET_NAME} PRIVATE GTest::gtest_main)
|
|
endif()
|
|
add_test(NAME ${TARGET_NAME} COMMAND ${TARGET_NAME})
|
|
endfunction()
|
|
|
|
function(cc_benchmark TARGET_NAME)
|
|
CPMAddPackage(
|
|
NAME benchmark
|
|
URI https://github.com/google/benchmark/archive/refs/tags/v1.8.4.tar.gz
|
|
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/benchmark
|
|
OPTIONS "BENCHMARK_ENABLE_INSTALL OFF"
|
|
"BENCHMARK_ENABLE_GTEST_TESTS OFF"
|
|
FORCE)
|
|
|
|
set(options NO_MAIN)
|
|
set(oneValueArgs "")
|
|
set(multiValueArgs
|
|
SRCS
|
|
DEPS
|
|
INCS
|
|
ARGS)
|
|
cmake_parse_arguments(
|
|
cc_benchmark
|
|
"${options}"
|
|
"${oneValueArgs}"
|
|
"${multiValueArgs}"
|
|
${ARGN})
|
|
# message("TARGET ${TARGET_NAME}")
|
|
cc_executable(
|
|
${TARGET_NAME}
|
|
SRCS ${cc_benchmark_SRCS}
|
|
DEPS ${cc_benchmark_DEPS}
|
|
INCS ${cc_benchmark_INCS})
|
|
target_link_libraries(${TARGET_NAME} ${cc_benchmark_DEPS}
|
|
PRIVATE benchmark::benchmark)
|
|
if(NOT cc_benchmark_NO_MAIN)
|
|
target_link_libraries(${TARGET_NAME} PRIVATE benchmark::benchmark_main)
|
|
|
|
endif()
|
|
endfunction()
|