diff --git a/CMakeLists.txt b/CMakeLists.txt index 70a163ced54613785d18ed360850d139eea380f4..3b59e682d386963def83ef1081dfb63e6a747500 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,69 +1,74 @@ -cmake_minimum_required(VERSION 3.14) -project(oblogmsg) +cmake_minimum_required(VERSION 3.20.0) +project(oblogmsg VERSION 3.2.1) -option(TEST "build tests" OFF) -option(BENCHMARK "build benchmarks" OFF) -option(USE_CXX11_ABI "Build with C++11 ABI" OFF) +include(GNUInstallDirs) -set(CMAKE_VERBOSE_MAKEFILE OFF) -set(CMAKE_INSTALL_PREFIX /home/ds) +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel ..." FORCE) +endif() -if (NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "RelWithDebInfo") -endif () +add_compile_definitions($<$:_GLIBCXX_USE_CXX11_ABI=0>) -if (NOT USE_CXX11_ABI) - add_compile_definitions($<$:_GLIBCXX_USE_CXX11_ABI=0>) -endif () +add_subdirectory(src) -add_library(oblogmsg_base INTERFACE) -set(INNER_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include) -set_property(GLOBAL PROPERTY OBLOGMSG_INCLUDE_DIRS ${INNER_INCLUDE_DIRS}) -target_include_directories(oblogmsg_base INTERFACE ${INNER_INCLUDE_DIRS}) -target_compile_features(oblogmsg_base INTERFACE cxx_std_11) +# Check if oblogmsg is being used directly or via add_subdirectory +set(OBLOGMSG_MASTER_PROJECT OFF) +if(PROJECT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + set(OBLOGMSG_MASTER_PROJECT ON) +endif() -add_subdirectory(src) +if(OBLOGMSG_MASTER_PROJECT) + message(STATUS "git submodule update --init third_party/googletest") + execute_process(COMMAND git submodule update --init third_party/googletest + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + COMMAND_ERROR_IS_FATAL ANY) + set(BUILD_GMOCK OFF CACHE INTERNAL "Builds the googlemock subproject") + set(INSTALL_GTEST OFF CACHE INTERNAL "Enable installation of googletest. (Projects embedding googletest may want to turn this OFF.)") + add_subdirectory(third_party/googletest) + add_subdirectory(unittest) + + add_subdirectory(benchmark) +endif() -if (TEST) - execute_process( - COMMAND git submodule init - COMMAND git submodule update - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - ) - add_subdirectory(third_party/googletest) - add_subdirectory(unittest) - enable_testing() -endif () +# If oblogmsg is used via add_subdirectory, by default we don't install it. +option(INSTALL_OBLOGMSG "Whether or not install oblogmsg" ${OBLOGMSG_MASTER_PROJECT}) -if (BENCHMARK) - add_subdirectory(benchmark) -endif () +if(INSTALL_OBLOGMSG) + ################# INSTALL ########################################################################## + install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} + ) -install(TARGETS oblogmsg oblogmsg_static - LIBRARY DESTINATION lib64 - ARCHIVE DESTINATION lib64 -) + install(TARGETS oblogmsg_shared oblogmsg_static + EXPORT oblogmsg + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} + ) -install( - DIRECTORY include/ DESTINATION include/logmessage -) + install(EXPORT oblogmsg + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/oblogmsg + FILE oblogmsgConfig.cmake + NAMESPACE oceanbase:: + ) -set(CPACK_GENERATOR "RPM") -set(CPACK_PACKAGE_NAME "oblogmsg") -set(CPACK_COMPONENTS_IGNORE_GROUPS 1) -set(CPACK_RPM_COMPONENT_INSTALL ON) -set(CPACK_RPM_RELOCATION_PATHS /usr /home/ds) -set(CPACK_PACKAGING_INSTALL_PREFIX /home/ds) -set(CPACK_PACKAGE_VERSION 3.2) -set(CPACK_RPM_PACKAGE_GROUP "Applications/Databases") -set(CPACK_RPM_PACKAGE_LICENSE "Mulan PubL v2.") -set(CPACK_RPM_DEFAULT_USER "admin") -set(CPACK_RPM_DEFAULT_GROUP "admin") -set(CPACK_RPM_SPEC_MORE_DEFINE - "%global _missing_build_ids_terminate_build 0 + ################# PACKAGE ########################################################################## + set(CPACK_GENERATOR "RPM") + set(CPACK_PACKAGE_NAME ${PROJECT_NAME}) + set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) + set(CPACK_COMPONENTS_IGNORE_GROUPS 1) + set(CPACK_RPM_COMPONENT_INSTALL ON) + set(CPACK_RPM_RELOCATION_PATHS /usr /home/admin/oceanbase) + set(CPACK_PACKAGING_INSTALL_PREFIX /home/admin/oceanbase) + set(CPACK_RPM_PACKAGE_GROUP "Applications/Databases") + set(CPACK_RPM_PACKAGE_LICENSE "Mulan PubL v2.") + set(CPACK_RPM_DEFAULT_USER "admin") + set(CPACK_RPM_DEFAULT_GROUP "admin") + set(CPACK_RPM_SPEC_MORE_DEFINE + "%global _missing_build_ids_terminate_build 0 %global _find_debuginfo_opts -g %define __debug_install_post %{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} %{_builddir}/%{?buildsubdir};%{nil} %define debug_package %{nil}") -include(CPack) -add_custom_target(rpm COMMAND +make package) + include(CPack) +endif() diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index 1bad3aef71d32cfc9495a0881baf825abf4627a7..c4569ee6c28a72f2e0f36b1b35fcebf7f91a403a 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -1,7 +1,4 @@ -set(SRC_LIST - lmTest.cpp - itoa.cpp -) -add_executable(lmTest ${SRC_LIST}) -target_link_libraries(lmTest PUBLIC oblogmsg) -target_compile_options(lmTest PRIVATE -DLMB) +add_executable(lmTest itoa.cpp lmTest.cpp) +target_compile_definitions(lmTest PRIVATE LMB) +target_include_directories(lmTest PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) +target_link_libraries(lmTest PRIVATE oblogmsg_shared) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a17457bb73f3669afca4158c505ab162532c03b1..f99223e5ec6f383b33fe6f2f3b2437083039a082 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,17 +1,27 @@ -INCLUDE_DIRECTORIES( - ../include +set(SRC_LIST LogMsgBuf.cpp + LogMsgFactory.cpp + LogRecord.cpp + MetaInfo.cpp + MsgType.cpp + MsgVarArea.cpp ) -set(SRC_LIST - MsgType.cpp - LogMsgBuf.cpp - MsgVarArea.cpp - LogRecord.cpp - MetaInfo.cpp - LogMsgFactory.cpp -) -add_library(oblogmsg SHARED ${SRC_LIST}) +add_library(oblogmsg_shared SHARED ${SRC_LIST}) add_library(oblogmsg_static STATIC ${SRC_LIST}) -target_link_libraries(oblogmsg PUBLIC oblogmsg_base) -target_link_libraries(oblogmsg_static PUBLIC oblogmsg_base) -set_target_properties(oblogmsg_static PROPERTIES OUTPUT_NAME "oblogmsg") + +foreach(T IN ITEMS oblogmsg_shared oblogmsg_static) + target_compile_features(${T} PUBLIC cxx_std_11) + set_target_properties(${T} PROPERTIES OUTPUT_NAME oblogmsg + CXX_STANDARD 11 + CXX_EXTENSIONS OFF + POSITION_INDEPENDENT_CODE ON) + target_include_directories(${T} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} + PUBLIC $) +endforeach() + +# ensure that the build results can be run on systems with lower libstdc++ version than the build system +target_link_libraries(oblogmsg_shared PRIVATE -static-libstdc++) + +# with namespace oceanbase +add_library(oceanbase::oblogmsg_shared ALIAS oblogmsg_shared) +add_library(oceanbase::oblogmsg_static ALIAS oblogmsg_static) diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index f3b0394f2ffe9edcdd601cf47a5ae2951c853043..46202b38c7abec56d35705d59335a739dbcb0c88 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -1,15 +1,21 @@ -enable_testing() add_executable(lr_unittest lrTest.cpp) +target_link_libraries(lr_unittest PRIVATE oblogmsg_shared gtest) + add_executable(varArea_unittest varAreaTest.cpp) +target_include_directories(varArea_unittest PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src) +target_link_libraries(varArea_unittest PRIVATE oblogmsg_shared gtest) + add_executable(md_unittest mdTest.cpp) +target_link_libraries(md_unittest PRIVATE oblogmsg_shared gtest) + add_executable(fa_unittest faTest.cpp) +target_link_libraries(fa_unittest PRIVATE oblogmsg_shared gtest) + add_executable(memoryleak_unittest memoryleakTest.cpp) -target_link_libraries(lr_unittest PUBLIC oblogmsg gtest) -target_link_libraries(varArea_unittest PUBLIC oblogmsg gtest) -target_include_directories(varArea_unittest PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../src) -target_link_libraries(md_unittest PUBLIC oblogmsg gtest) -target_link_libraries(fa_unittest PUBLIC oblogmsg gtest) -target_link_libraries(memoryleak_unittest PUBLIC oblogmsg gtest) +target_link_libraries(memoryleak_unittest PRIVATE oblogmsg_shared gtest) + +enable_testing() + add_test(lr_unittest lr_unittest) add_test(md_unittest md_unittest) add_test(fa_unittest fa_unittest)