diff --git a/.clang-format b/.clang-format index d3a290edf..53052c5ec 100755 --- a/.clang-format +++ b/.clang-format @@ -1,12 +1,12 @@ --- Language: Cpp BasedOnStyle: Google -ColumnLimit: 100 +ColumnLimit: 120 DerivePointerAlignment: true PointerAlignment: Left # Only sort headers in each include block -SortIncludes: false +SortIncludes: true IncludeBlocks: Preserve # Ident #if/#else/#endif: @@ -21,6 +21,6 @@ IndentPPDirectives: AfterHash --- Language: Proto BasedOnStyle: Google -ColumnLimit: 100 +ColumnLimit: 120 --- diff --git a/.cmake-format.yaml b/.cmake-format.yaml index d44419ac2..324cbe395 100644 --- a/.cmake-format.yaml +++ b/.cmake-format.yaml @@ -1,7 +1,7 @@ # @see https://cmake-format.readthedocs.io/en/latest/configuration.html for more details format: - line_width: 100 + line_width: 120 tab_size: 2 use_tabchars: false line_ending: unix diff --git a/.gitignore b/.gitignore index cc3fbc8dd..edf24b24c 100755 --- a/.gitignore +++ b/.gitignore @@ -24,13 +24,6 @@ build/* build_* -# prebuilt directory -/3rd_party/*/prebuilt -/3rd_party/*/pkg -/3rd_party/libuv/repo-* -/3rd_party/c_cpp_utils/repo -/3rd_party/atframe_utils/repo - # project files /.idea /.vs @@ -41,3 +34,10 @@ build_* /include/libatbus_protocol.pb.h /include/libatbus_protocol.pb /src/libatbus_protocol.pb.cc + +/atframework/cmake-toolset +/atframework/atframe_utils + +# prebuilt directory +/third_party/install +/third_party/packages diff --git a/.gitmodules b/.gitmodules index e69de29bb..9c3b7182b 100755 --- a/.gitmodules +++ b/.gitmodules @@ -0,0 +1,8 @@ +[submodule "atframework/atframe_utils"] + path = atframework/atframe_utils + url = https://github.com/atframework/atframe_utils.git + branch = main +[submodule "atframework/cmake-toolset"] + path = atframework/cmake-toolset + url = https://github.com/atframework/cmake-toolset.git + branch = main diff --git a/.travis.yml b/.travis.yml deleted file mode 100755 index 79924ba4a..000000000 --- a/.travis.yml +++ /dev/null @@ -1,153 +0,0 @@ -language: cpp - -env: - global: - - LANG="zh_CN.UTF-8" - - LIBUV_PREFIX=$HOME/prebuilt/libuv-1.38.1 ; - - LIBUV_VERSION=1.38.1 - - CMAKE_PREFIX=$HOME/prebuilt/cmake ; - - CMAKE_LINUX_URL=https://github.com/Kitware/CMake/releases/download/v3.18.1/cmake-3.18.1-Linux-x86_64.sh ; -matrix: - include: - - os: osx - env: USE_CC=clang USE_CXX=clang++ CMAKE_BIN=cmake CTEST_BIN=ctest - - os: linux - dist: bionic - sudo: required - env: USE_CC=gcc USE_CXX=g++ CMAKE_BIN=$CMAKE_PREFIX/bin/cmake CTEST_BIN=$CMAKE_PREFIX/bin/ctest - - os: linux - dist: bionic - sudo: required - env: USE_CC=gcc-4.8 USE_CXX=g++-4.8 CMAKE_BIN=$CMAKE_PREFIX/bin/cmake CTEST_BIN=$CMAKE_PREFIX/bin/ctest - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - gcc-4.8 - - gcc-4.8-multilib - - g++-4.8 - - g++-4.8-multilib - - os: linux - dist: bionic - sudo: required - env: USE_CC=gcc-10 USE_CXX=g++-10 CMAKE_BIN=$CMAKE_PREFIX/bin/cmake CTEST_BIN=$CMAKE_PREFIX/bin/ctest - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - gcc-10 - - gcc-10-multilib - - g++-10 - - g++-10-multilib - #- os: linux - # dist: bionic - # sudo: required - # env: USE_CC=clang USE_CXX=clang++ CMAKE_BIN=$CMAKE_PREFIX/bin/cmake CTEST_BIN=$CMAKE_PREFIX/bin/ctest - # - os: linux - # dist: bionic - # sudo: required - # env: USE_CC=clang-3.8 USE_CXX=clang++-3.8 CMAKE_BIN=$CMAKE_PREFIX/bin/cmake CTEST_BIN=$CMAKE_PREFIX/bin/ctest - - os: linux - dist: bionic - sudo: required - env: COVERALLS_SERVICE_NAME=travis-ci GCOV_FLAGS='--coverage -fprofile-arcs -ftest-coverage' CMAKE_BIN=$CMAKE_PREFIX/bin/cmake CTEST_BIN=$CMAKE_PREFIX/bin/ctest - # COVERALLS_REPO_TOKEN is set in travis-ci - script: - - REPO_DIR=$PWD; - - if [ -e "$REPO_DIR/build" ]; then rm -rf "$REPO_DIR/build"; fi - - mkdir -p $REPO_DIR/build && cd $REPO_DIR/build ; - - $CMAKE_BIN .. "-DCMAKE_C_FLAGS=$GCOV_FLAGS" "-DCMAKE_CXX_FLAGS=$GCOV_FLAGS" "-DCMAKE_EXE_LINKER_FLAGS=$GCOV_FLAGS" -DCMAKE_BUILD_TYPE=Debug -DPROJECT_ENABLE_UNITTEST=ON -DPROJECT_ENABLE_SAMPLE=ON -DPROJECT_ENABLE_TOOLS=ON -DPROJECT_GIT_CLONE_REMOTE_ORIGIN_DISABLE_SSH=ON -DPROJECT_FIND_CONFIGURE_PACKAGE_PARALLEL_BUILD=OFF -DLIBUV_ROOT=$LIBUV_PREFIX ; - - $CMAKE_BIN --build . - after_success: - - $CTEST_BIN . -V - # run tools for coverage - - timeout 10s ./tools/benchmark_shm_channel_recv 12345679 1024 4194304 > recv.log 2>&1 & - - timeout 10s ./tools/benchmark_shm_channel_send 12345679 1024 4194304 > send.log 2>&1 - - ./tools/show_shm_channel 12345679 1 16 > /dev/null - - pip install --user cpp-coveralls - - coveralls -r .. --gcov-options '\-lp' -e docs -e 3rd_party -e sample -e test -e tools -e build/CMakeFiles -e include/libatbus_protocol.pb.h -e src/libatbus_protocol.pb.cc - -before_install: - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get -qq update; fi -# - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update; fi -# - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi -# - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y "deb http://llvm.org/apt/precise/ llvm-toolchain-precise-3.7 main"; fi -# - if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add - ; fi -# - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update -qq; fi -# - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update; fi - -install: - - if [ "$TRAVIS_OS_NAME" == "linux" ] ; then - - if [ ! -e "$CMAKE_BIN" ]; then - - mkdir -p "$CMAKE_PREFIX"; - - curl --insecure -L "$CMAKE_LINUX_URL" -o cmake-linux.sh ; - - bash cmake-linux.sh --skip-license --prefix=$CMAKE_PREFIX ; - - fi - - fi - - - if [ "$TRAVIS_OS_NAME" == "osx" ] ; then brew upgrade cmake; brew install libuv; fi - -before_script: - - REPO_DIR=$PWD; - - cd /tmp - - if [ ! -e "$LIBUV_PREFIX/include/uv.h" ] || [ ! -e "$LIBUV_PREFIX/lib/libuv.so" ] ; then - if [ "$TRAVIS_OS_NAME" == "linux" ] ; then - mkdir -p "$LIBUV_PREFIX"; - wget -c "http://dist.libuv.org/dist/v$LIBUV_VERSION/libuv-v$LIBUV_VERSION.tar.gz" -O libuv-v$LIBUV_VERSION.tar.gz; - tar -xvf libuv-v$LIBUV_VERSION.tar.gz; - cd libuv-v$LIBUV_VERSION ; - ./autogen.sh; - ./configure --prefix=$LIBUV_PREFIX --with-pic=yes --enable-shared=yes --enable-static=no; - make install; - cd -; - rm -rf libuv-v$LIBUV_VERSION libuv-v$LIBUV_VERSION ; - fi - fi - - cd "$REPO_DIR"; - -script: - - REPO_DIR=$PWD; - - mkdir -p $REPO_DIR/build && cd $REPO_DIR/build ; - - if [ "$TRAVIS_OS_NAME" == "linux" ] ; then - $CMAKE_BIN .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER=$USE_CC -DCMAKE_CXX_COMPILER=$USE_CXX -DPROJECT_ENABLE_UNITTEST=ON -DPROJECT_ENABLE_SAMPLE=ON -DPROJECT_ENABLE_TOOLS=ON -DATBUS_MACRO_ABORT_ON_PROTECTED_ERROR=ON -DPROJECT_GIT_CLONE_REMOTE_ORIGIN_DISABLE_SSH=ON -DPROJECT_FIND_CONFIGURE_PACKAGE_PARALLEL_BUILD=OFF -DLIBUV_ROOT=$LIBUV_PREFIX ; - else - $CMAKE_BIN .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER=$USE_CC -DCMAKE_CXX_COMPILER=$USE_CXX -DPROJECT_ENABLE_UNITTEST=ON -DPROJECT_ENABLE_SAMPLE=ON -DPROJECT_ENABLE_TOOLS=ON -DATBUS_MACRO_ABORT_ON_PROTECTED_ERROR=ON -DPROJECT_GIT_CLONE_REMOTE_ORIGIN_DISABLE_SSH=ON -DPROJECT_FIND_CONFIGURE_PACKAGE_PARALLEL_BUILD=OFF ; - fi - # - $CMAKE_BIN .. -DCMAKE_C_COMPILER=$USE_CC -DCMAKE_CXX_COMPILER=$USE_CXX -DPROJECT_ENABLE_UNITTEST=ON -DPROJECT_ENABLE_SAMPLE=ON -DPROJECT_ENABLE_TOOLS=ON -DLIBUV_ROOT=$LIBUV_PREFIX ; - - $CMAKE_BIN --build . - -after_success: - - $CTEST_BIN . -V - -cache: - apt: true - ccache: true - pip: true - directories: - - /home/travis/prebuilt - -branches: - only: - - master - -notifications: - email: - recipients: - - admin@owent.net - - owt5008137@live.com - on_success: change - on_failure: change - webhooks: - urls: - - https://webhooks.gitter.im/e/3c7b3960fa5b787ad061 - on_success: change # options: [always|never|change] default: always - on_failure: change # options: [always|never|change] default: always - on_start: never # options: [always|never|change] default: always diff --git a/3rd_party/3rd_party.macro.cmake b/3rd_party/3rd_party.macro.cmake deleted file mode 100755 index d76feb199..000000000 --- a/3rd_party/3rd_party.macro.cmake +++ /dev/null @@ -1,22 +0,0 @@ -# =========== 3rd_party =========== -if(NOT PROJECT_3RD_PARTY_PACKAGE_DIR) - set(PROJECT_3RD_PARTY_PACKAGE_DIR "${CMAKE_CURRENT_LIST_DIR}/packages") -endif() -if(NOT PROJECT_3RD_PARTY_INSTALL_DIR) - set(PROJECT_3RD_PARTY_INSTALL_DIR - "${CMAKE_CURRENT_LIST_DIR}/install/${PROJECT_PREBUILT_PLATFORM_NAME}") -endif() - -if(NOT EXISTS ${PROJECT_3RD_PARTY_PACKAGE_DIR}) - file(MAKE_DIRECTORY ${PROJECT_3RD_PARTY_PACKAGE_DIR}) -endif() - -if(NOT EXISTS ${PROJECT_3RD_PARTY_INSTALL_DIR}) - file(MAKE_DIRECTORY ${PROJECT_3RD_PARTY_INSTALL_DIR}) -endif() - -set(PROJECT_3RD_PARTY_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}) -include("${PROJECT_3RD_PARTY_ROOT_DIR}/fmtlib/fmtlib.cmake") -include("${PROJECT_3RD_PARTY_ROOT_DIR}/libuv/libuv.cmake") -include("${PROJECT_3RD_PARTY_ROOT_DIR}/protobuf/protobuf.cmake") -include("${PROJECT_3RD_PARTY_ROOT_DIR}/atframe_utils/libatframe_utils.cmake") diff --git a/3rd_party/FindFlatBuffers.cmake b/3rd_party/FindFlatBuffers.cmake deleted file mode 100755 index c93a20fff..000000000 --- a/3rd_party/FindFlatBuffers.cmake +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright 2014 Stefan.Eilemann@epfl.ch -# Copyright 2014 Google Inc. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Find the flatbuffers schema compiler -# -# Output Variables: * FLATBUFFERS_FLATC_EXECUTABLE the flatc compiler executable * FLATBUFFERS_FOUND -# -# Provides: * FLATBUFFERS_GENERATE_C_HEADERS(Name ) creates the C++ headers for the given -# flatbuffer schema files. Returns the header files in ${Name}_OUTPUTS - -find_program(FLATBUFFERS_FLATC_EXECUTABLE NAMES flatc) -find_path(FLATBUFFERS_INCLUDE_DIR NAMES flatbuffers/flatbuffers.h) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(flatbuffers DEFAULT_MSG FLATBUFFERS_FLATC_EXECUTABLE - FLATBUFFERS_INCLUDE_DIR) - -if(FLATBUFFERS_FOUND) - function(FLATBUFFERS_GENERATE_C_HEADERS Name) - set(FLATC_OUTPUTS) - foreach(FILE ${ARGN}) - get_filename_component(FLATC_OUTPUT ${FILE} NAME_WE) - set(FLATC_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FLATC_OUTPUT}_generated.h") - list(APPEND FLATC_OUTPUTS ${FLATC_OUTPUT}) - - add_custom_command( - OUTPUT ${FLATC_OUTPUT} - COMMAND ${FLATBUFFERS_FLATC_EXECUTABLE} ARGS -c -o "${CMAKE_CURRENT_BINARY_DIR}/" ${FILE} - COMMENT "Building C++ header for ${FILE}" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) - endforeach() - set(${Name}_OUTPUTS - ${FLATC_OUTPUTS} - PARENT_SCOPE) - endfunction() - - set(FLATBUFFERS_INCLUDE_DIRS ${FLATBUFFERS_INCLUDE_DIR}) - include_directories(${CMAKE_BINARY_DIR}) -else() - set(FLATBUFFERS_INCLUDE_DIR) -endif() diff --git a/3rd_party/atframe_utils/libatframe_utils.cmake b/3rd_party/atframe_utils/libatframe_utils.cmake deleted file mode 100755 index f80594b21..000000000 --- a/3rd_party/atframe_utils/libatframe_utils.cmake +++ /dev/null @@ -1,3 +0,0 @@ -if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.10") - include_guard(GLOBAL) -endif() diff --git a/3rd_party/atframe_utils/libatframe_utils.prepare.cmake b/3rd_party/atframe_utils/libatframe_utils.prepare.cmake deleted file mode 100755 index 6e16e52cc..000000000 --- a/3rd_party/atframe_utils/libatframe_utils.prepare.cmake +++ /dev/null @@ -1,46 +0,0 @@ -if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.10") - include_guard(GLOBAL) -endif() - -# =========== 3rdparty atframe_utils ================== -if(NOT 3RD_PARTY_ATFRAME_UTILS_BASE_DIR) - set(3RD_PARTY_ATFRAME_UTILS_BASE_DIR ${CMAKE_CURRENT_LIST_DIR}) -endif() - -if(ATFRAME_UTILS_ROOT) - set(3RD_PARTY_ATFRAME_UTILS_PKG_DIR ${ATFRAME_UTILS_ROOT}) -else() - set(3RD_PARTY_ATFRAME_UTILS_PKG_DIR "${3RD_PARTY_ATFRAME_UTILS_BASE_DIR}/repo") - set(ATFRAME_UTILS_ROOT ${3RD_PARTY_ATFRAME_UTILS_PKG_DIR}) - find_package(Git) - if(NOT EXISTS ${3RD_PARTY_ATFRAME_UTILS_PKG_DIR}) - execute_process( - COMMAND ${GIT_EXECUTABLE} config "remote.origin.url" - OUTPUT_VARIABLE PROJECT_GIT_REMOTE_ORIGIN_URL - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - OUTPUT_STRIP_TRAILING_WHITESPACE) - string(REGEX MATCH "^http(s?):" PROJECT_GIT_REMOTE_ORIGIN_USE_SSH - "${PROJECT_GIT_REMOTE_ORIGIN_URL}") - if(PROJECT_GIT_REMOTE_ORIGIN_USE_SSH AND NOT PROJECT_GIT_CLONE_REMOTE_ORIGIN_DISABLE_SSH) - execute_process( - COMMAND ${GIT_EXECUTABLE} clone --depth=100 -b master - "git@github.com:atframework/atframe_utils.git" ${3RD_PARTY_ATFRAME_UTILS_PKG_DIR} - WORKING_DIRECTORY ${3RD_PARTY_ATFRAME_UTILS_BASE_DIR}) - else() - execute_process( - COMMAND - ${GIT_EXECUTABLE} clone --depth=100 -b master - "https://github.com/atframework/atframe_utils.git" ${3RD_PARTY_ATFRAME_UTILS_PKG_DIR} - WORKING_DIRECTORY ${3RD_PARTY_ATFRAME_UTILS_BASE_DIR}) - endif() - elseif(PROJECT_RESET_DENPEND_REPOSITORIES) - execute_process( - COMMAND ${GIT_EXECUTABLE} fetch -f --depth=100 origin - COMMAND ${GIT_EXECUTABLE} reset --hard origin/master - WORKING_DIRECTORY ${3RD_PARTY_ATFRAME_UTILS_PKG_DIR}) - endif() -endif() - -set(3RD_PARTY_ATFRAME_UTILS_INC_DIR "${3RD_PARTY_ATFRAME_UTILS_PKG_DIR}/include") -set(3RD_PARTY_ATFRAME_UTILS_SRC_DIR "${3RD_PARTY_ATFRAME_UTILS_PKG_DIR}/src") -set(3RD_PARTY_ATFRAME_UTILS_LINK_NAME atframe_utils) diff --git a/3rd_party/flatbuffers/flatbuffers.cmake b/3rd_party/flatbuffers/flatbuffers.cmake deleted file mode 100644 index bb53bb926..000000000 --- a/3rd_party/flatbuffers/flatbuffers.cmake +++ /dev/null @@ -1,68 +0,0 @@ -# =========== 3rdparty flatbuffer ================== -if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.10") - include_guard(GLOBAL) -endif() - -# =========== 3rdparty flatbuffer ================== -macro(PROJECT_LIBATBUS_FLATBUFFERS_IMPORT) - if(TARGET flatbuffers::flatc AND TARGET flatbuffers::flatbuffers) - get_target_property(3RD_PARTY_FLATBUFFER_INC_DIR flatbuffers::flatbuffers - INTERFACE_INCLUDE_DIRECTORIES) - list(APPEND PROJECT_LIBATBUS_PUBLIC_INCLUDE_DIRS ${3RD_PARTY_FLATBUFFER_INC_DIR}) - - echowithcolor(COLOR GREEN "-- Dependency: Flatbuffer found.(${3RD_PARTY_FLATBUFFER_INC_DIR})") - endif() -endmacro() - -if(NOT TARGET flatbuffers::flatc OR NOT TARGET flatbuffers::flatbuffers) - if(VCPKG_TOOLCHAIN) - find_package(Flatbuffers QUIET) - project_libatbus_flatbuffers_import() - endif() - - if(NOT TARGET flatbuffers::flatc OR NOT TARGET flatbuffers::flatbuffers) - set(3RD_PARTY_FLATBUFFER_VERSION "v1.12.0") - if(NOT Flatbuffers_ROOT) - set(Flatbuffers_ROOT ${PROJECT_3RD_PARTY_INSTALL_DIR}) - endif() - - set(3RD_PARTY_FLATBUFFER_BUILD_OPTIONS - -DFLATBUFFERS_CODE_COVERAGE=OFF - -DFLATBUFFERS_BUILD_TESTS=OFF - -DFLATBUFFERS_INSTALL=ON - -DFLATBUFFERS_BUILD_FLATLIB=ON - -DFLATBUFFERS_BUILD_FLATC=ON - -DFLATBUFFERS_BUILD_FLATHASH=ON - -DFLATBUFFERS_BUILD_GRPCTEST=OFF - -DFLATBUFFERS_BUILD_SHAREDLIB=OFF) - findconfigurepackage( - PACKAGE - Flatbuffers - BUILD_WITH_CMAKE - CMAKE_INHIRT_BUILD_ENV - MSVC_CONFIGURE - ${CMAKE_BUILD_TYPE} - CMAKE_FLAGS - ${3RD_PARTY_FLATBUFFER_BUILD_OPTIONS} - WORKING_DIRECTORY - ${PROJECT_3RD_PARTY_PACKAGE_DIR} - BUILD_DIRECTORY - "${CMAKE_CURRENT_BINARY_DIR}/deps/flatbuffers-${3RD_PARTY_FLATBUFFER_VERSION}/build_jobs_${PROJECT_PREBUILT_PLATFORM_NAME}" - PREFIX_DIRECTORY - ${Flatbuffers_ROOT} - SRC_DIRECTORY_NAME - "flatbuffers-${3RD_PARTY_FLATBUFFER_VERSION}" - GIT_BRANCH - "${3RD_PARTY_FLATBUFFER_VERSION}" - GIT_URL - "https://github.com/google/flatbuffers.git") - - if(NOT TARGET flatbuffers::flatc OR NOT TARGET flatbuffers::flatbuffers) - echowithcolor(COLOR RED "-- Dependency: Flatbuffer is required but not found") - message(FATAL_ERROR "Flatbuffer not found") - endif() - project_libatbus_flatbuffers_import() - endif() -else() - project_libatbus_flatbuffers_import() -endif() diff --git a/3rd_party/fmtlib/fmtlib.cmake b/3rd_party/fmtlib/fmtlib.cmake deleted file mode 100644 index e72b864b1..000000000 --- a/3rd_party/fmtlib/fmtlib.cmake +++ /dev/null @@ -1,94 +0,0 @@ -if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.10") - include_guard(GLOBAL) -endif() - -macro(PROJECT_LIBATBUS_FMTLIB_IMPORT) - if(TARGET fmt::fmt-header-only) - message(STATUS "fmtlib using target: fmt::fmt-header-only") - set(3RD_PARTY_FMTLIB_LINK_NAME fmt::fmt-header-only) - list(APPEND PROJECT_LIBATBUS_PUBLIC_LINK_NAMES ${3RD_PARTY_FMTLIB_LINK_NAME}) - elseif(TARGET fmt::fmt) - message(STATUS "fmtlib using target: fmt::fmt") - set(3RD_PARTY_FMTLIB_LINK_NAME fmt::fmt) - list(APPEND PROJECT_LIBATBUS_PUBLIC_LINK_NAMES ${3RD_PARTY_FMTLIB_LINK_NAME}) - else() - message(STATUS "fmtlib support disabled") - endif() -endmacro() - -if(NOT TARGET fmt::fmt-header-only - AND NOT TARGET fmt::fmt - AND NOT 3RD_PARTY_TEST_STD_FORMAT) - if(VCPKG_TOOLCHAIN) - find_package(fmt QUIET) - project_libatbus_fmtlib_import() - endif() - - if(NOT TARGET fmt::fmt-header-only - AND NOT TARGET fmt::fmt - AND NOT 3RD_PARTY_TEST_STD_FORMAT) - include(CheckCXXSourceCompiles) - if(NOT DEFINED 3RD_PARTY_TEST_STD_FORMAT) - check_cxx_source_compiles( - "#include - #include - #include - int main() { - std::cout<< std::format(\"The answer is {}.\", 42)<< std::endl; - char buffer[64] = {0}; - const auto result = std::format_to_n(buffer, sizeof(buffer), \"{} {}: {}\", \"Hello\", \"World!\", 42); - std::cout << \"Buffer: \" << buffer << \",Untruncated output size = \" << result.size << std::endl; - return 0; - }" - 3RD_PARTY_TEST_STD_FORMAT) - endif() - - # =========== 3rdparty fmtlib ================== - if(NOT TARGET fmt::fmt-header-only - AND NOT TARGET fmt::fmt - AND NOT 3RD_PARTY_TEST_STD_FORMAT) - set(3RD_PARTY_FMTLIB_DEFAULT_VERSION "7.1.3") - set(FMT_ROOT ${PROJECT_3RD_PARTY_INSTALL_DIR}) - set(Fmt_ROOT ${PROJECT_3RD_PARTY_INSTALL_DIR}) - set(fmt_ROOT ${PROJECT_3RD_PARTY_INSTALL_DIR}) - - if(NOT EXISTS ${PROJECT_3RD_PARTY_PACKAGE_DIR}) - file(MAKE_DIRECTORY ${PROJECT_3RD_PARTY_PACKAGE_DIR}) - endif() - - findconfigurepackage( - PACKAGE - fmt - BUILD_WITH_CMAKE - CMAKE_INHIRT_BUILD_ENV - CMAKE_INHIRT_BUILD_ENV_DISABLE_C_FLAGS - CMAKE_INHIRT_BUILD_ENV_DISABLE_ASM_FLAGS - CMAKE_FLAGS - "-DCMAKE_POSITION_INDEPENDENT_CODE=YES" - "-DBUILD_SHARED_LIBS=OFF" - "-DFMT_DOC=OFF" - "-DFMT_INSTALL=ON" - "-DFMT_TEST=OFF" - "-DFMT_FUZZ=OFF" - "-DFMT_CUDA_TEST=OFF" - WORKING_DIRECTORY - "${PROJECT_3RD_PARTY_PACKAGE_DIR}" - BUILD_DIRECTORY - "${CMAKE_CURRENT_BINARY_DIR}/deps/fmt-${3RD_PARTY_FMTLIB_DEFAULT_VERSION}/build_jobs_${PROJECT_PREBUILT_PLATFORM_NAME}" - PREFIX_DIRECTORY - ${PROJECT_3RD_PARTY_INSTALL_DIR} - SRC_DIRECTORY_NAME - "fmt-${3RD_PARTY_FMTLIB_DEFAULT_VERSION}" - GIT_BRANCH - ${3RD_PARTY_FMTLIB_DEFAULT_VERSION} - GIT_URL - "https://github.com/fmtlib/fmt.git") - - if(fmt_FOUND) - project_libatbus_fmtlib_import() - endif() - endif() - endif() -else() - project_libatbus_fmtlib_import() -endif() diff --git a/3rd_party/libuv/build-script/CMakeLists.txt b/3rd_party/libuv/build-script/CMakeLists.txt deleted file mode 100644 index 6e75bb8a7..000000000 --- a/3rd_party/libuv/build-script/CMakeLists.txt +++ /dev/null @@ -1,379 +0,0 @@ -cmake_minimum_required(VERSION 3.4) -project(libuv LANGUAGES C) - -include(CMakePackageConfigHelpers) -include(CMakeDependentOption) -include(CheckCCompilerFlag) -include(GNUInstallDirs) - -set(CMAKE_C_VISIBILITY_PRESET hidden) -set(CMAKE_C_STANDARD_REQUIRED ON) -set(CMAKE_C_EXTENSIONS ON) -set(CMAKE_C_STANDARD 90) - -# Qemu Build -option(QEMU "build for qemu" OFF) -if(QEMU) - add_definitions(-D__QEMU__=1) -endif() - -option(ASAN "Enable AddressSanitizer (ASan)" OFF) -if(ASAN AND CMAKE_C_COMPILER_ID MATCHES "AppleClang|GNU|Clang") - add_definitions(-D__ASAN__=1) - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") - set(CMAKE_LINKER_FLAGS_DEBUG - "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") -endif() - -# Compiler check -string(CONCAT is-msvc $, - $ >) - -check_c_compiler_flag(/W4 UV_LINT_W4) -check_c_compiler_flag(/wd4100 UV_LINT_NO_UNUSED_PARAMETER_MSVC) -check_c_compiler_flag(/wd4127 UV_LINT_NO_CONDITIONAL_CONSTANT_MSVC) -check_c_compiler_flag(/wd4201 UV_LINT_NO_NONSTANDARD_MSVC) -check_c_compiler_flag(/wd4206 UV_LINT_NO_NONSTANDARD_EMPTY_TU_MSVC) -check_c_compiler_flag(/wd4210 UV_LINT_NO_NONSTANDARD_FILE_SCOPE_MSVC) -check_c_compiler_flag(/wd4232 UV_LINT_NO_NONSTANDARD_NONSTATIC_DLIMPORT_MSVC) -check_c_compiler_flag(/wd4456 UV_LINT_NO_HIDES_LOCAL) -check_c_compiler_flag(/wd4457 UV_LINT_NO_HIDES_PARAM) -check_c_compiler_flag(/wd4459 UV_LINT_NO_HIDES_GLOBAL) -check_c_compiler_flag(/wd4706 UV_LINT_NO_CONDITIONAL_ASSIGNMENT_MSVC) -check_c_compiler_flag(/wd4996 UV_LINT_NO_UNSAFE_MSVC) - -check_c_compiler_flag(-Wall UV_LINT_WALL) # DO NOT use this under MSVC - -# TODO: Place these into its own function -check_c_compiler_flag(-Wno-unused-parameter UV_LINT_NO_UNUSED_PARAMETER) -check_c_compiler_flag(-Wstrict-prototypes UV_LINT_STRICT_PROTOTYPES) -check_c_compiler_flag(-Wextra UV_LINT_EXTRA) - -check_c_compiler_flag(/utf-8 UV_LINT_UTF8_MSVC) - -set(lint-no-unused-parameter $<$:-Wno-unused-parameter>) -set(lint-strict-prototypes $<$:-Wstrict-prototypes>) -set(lint-extra $<$:-Wextra>) -set(lint-w4 $<$:/W4>) -set(lint-no-unused-parameter-msvc $<$:/wd4100>) -set(lint-no-conditional-constant-msvc $<$:/wd4127>) -set(lint-no-nonstandard-msvc $<$:/wd4201>) -set(lint-no-nonstandard-empty-tu-msvc $<$:/wd4206>) -set(lint-no-nonstandard-file-scope-msvc - $<$:/wd4210>) -set(lint-no-nonstandard-nonstatic-dlimport-msvc - $<$:/wd4232>) -set(lint-no-hides-local-msvc $<$:/wd4456>) -set(lint-no-hides-param-msvc $<$:/wd4457>) -set(lint-no-hides-global-msvc $<$:/wd4459>) -set(lint-no-conditional-assignment-msvc - $<$:/wd4706>) -set(lint-no-unsafe-msvc $<$:/wd4996>) -# Unfortunately, this one is complicated because MSVC and clang-cl support -Wall but using it is -# like calling -Weverything -string(CONCAT lint-default $< $,$>:-Wall >) -set(lint-utf8-msvc $<$:/utf-8>) - -list(APPEND uv_cflags ${lint-strict-prototypes} ${lint-extra} ${lint-default} ${lint-w4}) -list(APPEND uv_cflags ${lint-no-unused-parameter}) -list(APPEND uv_cflags ${lint-no-unused-parameter-msvc}) -list(APPEND uv_cflags ${lint-no-conditional-constant-msvc}) -list(APPEND uv_cflags ${lint-no-nonstandard-msvc}) -list(APPEND uv_cflags ${lint-no-nonstandard-empty-tu-msvc}) -list(APPEND uv_cflags ${lint-no-nonstandard-file-scope-msvc}) -list(APPEND uv_cflags ${lint-no-nonstandard-nonstatic-dlimport-msvc}) -list(APPEND uv_cflags ${lint-no-hides-local-msvc}) -list(APPEND uv_cflags ${lint-no-hides-param-msvc}) -list(APPEND uv_cflags ${lint-no-hides-global-msvc}) -list(APPEND uv_cflags ${lint-no-conditional-assignment-msvc}) -list(APPEND uv_cflags ${lint-no-unsafe-msvc}) -list(APPEND uv_cflags ${lint-utf8-msvc}) - -check_c_compiler_flag(-fno-strict-aliasing UV_F_STRICT_ALIASING) -list(APPEND uv_cflags $<$:-fno-strict-aliasing>) - -set(uv_sources - "${3RD_PARTY_LIBUV_REPO_DIR}/src/fs-poll.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/idna.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/inet.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/random.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/strscpy.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/threadpool.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/timer.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/uv-common.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/uv-data-getter-setters.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/version.c") - -if(WIN32) - list(APPEND uv_defines WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0602) - list( - APPEND - uv_libraries - advapi32 - iphlpapi - psapi - # shell32 - user32 - userenv - ws2_32) - list( - APPEND - uv_sources - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/async.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/core.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/detect-wakeup.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/dl.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/error.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/fs.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/fs-event.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/getaddrinfo.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/getnameinfo.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/handle.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/loop-watcher.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/pipe.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/thread.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/poll.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/process.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/process-stdio.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/signal.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/snprintf.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/stream.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/tcp.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/tty.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/udp.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/util.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/winapi.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/win/winsock.c") - list(APPEND uv_test_libraries ws2_32) -else() - list(APPEND uv_defines _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE) - if(NOT CMAKE_SYSTEM_NAME MATCHES "Android|OS390") - # TODO: This should be replaced with find_package(Threads) if possible Android has pthread as - # part of its c library, not as a separate libpthread.so. - list(APPEND uv_libraries pthread) - endif() - list( - APPEND - uv_sources - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/async.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/core.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/dl.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/fs.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/getaddrinfo.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/getnameinfo.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/loop-watcher.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/loop.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/pipe.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/poll.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/process.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/random-devurandom.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/signal.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/stream.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/tcp.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/thread.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/tty.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/udp.c") -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "AIX") - list( - APPEND - uv_defines - _ALL_SOURCE - _LINUX_SOURCE_COMPAT - _THREAD_SAFE - _XOPEN_SOURCE=500 - HAVE_SYS_AHAFS_EVPRODS_H) - list(APPEND uv_libraries perfstat) - list(APPEND uv_sources "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/aix.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/aix-common.c") -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "Android") - list(APPEND uv_libraries dl) - list( - APPEND - uv_sources - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/android-ifaddrs.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/linux-core.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/linux-inotify.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/linux-syscalls.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/procfs-exepath.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/pthread-fixes.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/random-getentropy.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/random-getrandom.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/random-sysctl-linux.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/sysinfo-loadavg.c") -endif() - -if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "Android|Linux|OS390") - list(APPEND uv_sources "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/proctitle.c") -endif() - -if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD") - list(APPEND uv_sources "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/freebsd.c") -endif() - -if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD|NetBSD|OpenBSD") - list(APPEND uv_sources - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/posix-hrtime.c src/unix/bsd-proctitle.c") -endif() - -if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD|NetBSD|OpenBSD") - list(APPEND uv_sources "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/bsd-ifaddrs.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/kqueue.c") -endif() - -if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") - list(APPEND uv_sources "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/random-getrandom.c") -endif() - -if(APPLE OR CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") - list(APPEND uv_sources "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/random-getentropy.c") -endif() - -if(APPLE) - list(APPEND uv_defines _DARWIN_UNLIMITED_SELECT=1 _DARWIN_USE_64_BIT_INODE=1) - list(APPEND uv_sources "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/darwin-proctitle.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/darwin.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/fsevents.c") -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - list(APPEND uv_defines _GNU_SOURCE _POSIX_C_SOURCE=200112) - list(APPEND uv_libraries dl rt) - list( - APPEND - uv_sources - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/linux-core.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/linux-inotify.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/linux-syscalls.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/procfs-exepath.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/random-getrandom.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/random-sysctl-linux.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/sysinfo-loadavg.c") -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "NetBSD") - list(APPEND uv_sources "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/netbsd.c") - list(APPEND uv_libraries kvm) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") - list(APPEND uv_sources "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/openbsd.c") -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "OS390") - list(APPEND uv_defines PATH_MAX=255) - list(APPEND uv_defines _AE_BIMODAL) - list(APPEND uv_defines _ALL_SOURCE) - list(APPEND uv_defines _ISOC99_SOURCE) - list(APPEND uv_defines _LARGE_TIME_API) - list(APPEND uv_defines _OPEN_MSGQ_EXT) - list(APPEND uv_defines _OPEN_SYS_FILE_EXT) - list(APPEND uv_defines _OPEN_SYS_IF_EXT) - list(APPEND uv_defines _OPEN_SYS_SOCK_EXT3) - list(APPEND uv_defines _OPEN_SYS_SOCK_IPV6) - list(APPEND uv_defines _UNIX03_SOURCE) - list(APPEND uv_defines _UNIX03_THREADS) - list(APPEND uv_defines _UNIX03_WITHDRAWN) - list(APPEND uv_defines _XOPEN_SOURCE_EXTENDED) - list(APPEND uv_sources "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/pthread-fixes.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/os390.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/os390-syscalls.c") - list(APPEND uv_cflags -Wc,DLL -Wc,exportall -Wc,xplink) - list(APPEND uv_libraries -Wl,xplink) - list(APPEND uv_test_libraries -Wl,xplink) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "OS400") - list(APPEND uv_defines _ALL_SOURCE _LINUX_SOURCE_COMPAT _THREAD_SAFE _XOPEN_SOURCE=500) - list( - APPEND - uv_sources - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/aix-common.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/ibmi.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/no-fsevents.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/posix-poll.c") -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "SunOS") - list(APPEND uv_defines __EXTENSIONS__ _XOPEN_SOURCE=500) - list(APPEND uv_libraries kstat nsl sendfile socket) - list(APPEND uv_sources "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/no-proctitle.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/sunos.c") -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "Haiku") - list(APPEND uv_defines _BSD_SOURCE) - list(APPEND uv_libraries bsd network) - list( - APPEND - uv_sources - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/haiku.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/bsd-ifaddrs.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/no-fsevents.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/no-proctitle.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/posix-hrtime.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/posix-poll.c") -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "QNX") - list( - APPEND - uv_sources - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/posix-hrtime.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/posix-poll.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/qnx.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/bsd-ifaddrs.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/no-proctitle.c" - "${3RD_PARTY_LIBUV_REPO_DIR}/src/unix/no-fsevents.c") - list(APPEND uv_libraries socket) -endif() - -add_library(libuv STATIC ${uv_sources}) -target_compile_definitions(libuv PRIVATE ${uv_defines}) -target_compile_options(libuv PRIVATE ${uv_cflags}) -target_include_directories( - libuv - PUBLIC "$" "$" - PRIVATE "$") -target_link_libraries(libuv INTERFACE ${uv_libraries}) - -# target_compile_definitions(libuv PUBLIC BUILDING_UV_SHARED=1) - -if(NOT UV_SKIP_HEADERS) - install( - DIRECTORY "${3RD_PARTY_LIBUV_REPO_DIR}/include" - DESTINATION . - PATTERN ".svn" EXCLUDE - PATTERN ".git" EXCLUDE) -endif() - -install( - TARGETS libuv - EXPORT "libuv-target" - RUNTIME DESTINATION bin - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib) - -export( - TARGETS libuv - FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/libuv-target.cmake" - NAMESPACE libuv:: - EXPORT_LINK_INTERFACE_LIBRARIES) - -install( - EXPORT "libuv-target" - NAMESPACE "libuv::" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake") - -message( - STATUS - "summary of build options: - Install prefix: ${CMAKE_INSTALL_PREFIX} - Target system: ${CMAKE_SYSTEM_NAME} - Compiler: - C compiler: ${CMAKE_C_COMPILER} - CFLAGS: ${CMAKE_C_FLAGS_${_build_type}} ${CMAKE_C_FLAGS} -") diff --git a/3rd_party/libuv/libuv.cmake b/3rd_party/libuv/libuv.cmake deleted file mode 100644 index 191ff7ff3..000000000 --- a/3rd_party/libuv/libuv.cmake +++ /dev/null @@ -1,94 +0,0 @@ -if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.10") - include_guard(GLOBAL) -endif() - -macro(PROJECT_LIBATBUS_LIBUV_IMPORT) - if(TARGET uv_a) - message(STATUS "libuv using target: uv_a") - set(3RD_PARTY_LIBUV_LINK_NAME uv_a) - list(APPEND PROJECT_LIBATBUS_PUBLIC_LINK_NAMES ${3RD_PARTY_LIBUV_LINK_NAME}) - elseif(TARGET uv) - message(STATUS "libuv using target: uv") - set(3RD_PARTY_LIBUV_LINK_NAME uv) - list(APPEND PROJECT_LIBATBUS_PUBLIC_LINK_NAMES ${3RD_PARTY_LIBUV_LINK_NAME}) - elseif(TARGET libuv) - message(STATUS "libuv using target: libuv") - set(3RD_PARTY_LIBUV_LINK_NAME libuv) - list(APPEND PROJECT_LIBATBUS_PUBLIC_LINK_NAMES ${3RD_PARTY_LIBUV_LINK_NAME}) - elseif(TARGET libuv::libuv) - message(STATUS "libuv using target: libuv::libuv") - set(3RD_PARTY_LIBUV_LINK_NAME libuv::libuv) - list(APPEND PROJECT_LIBATBUS_PUBLIC_LINK_NAMES ${3RD_PARTY_LIBUV_LINK_NAME}) - elseif(Libuv_FOUND OR LIBUV_FOUND) - message(STATUS "Libuv support enabled") - set(3RD_PARTY_LIBUV_INC_DIR ${Libuv_INCLUDE_DIRS}) - set(3RD_PARTY_LIBUV_LINK_NAME ${Libuv_LIBRARIES}) - - if(3RD_PARTY_LIBUV_INC_DIR) - list(APPEND PROJECT_LIBATBUS_PUBLIC_INCLUDE_DIRS ${3RD_PARTY_LIBUV_INC_DIR}) - endif() - list(APPEND PROJECT_LIBATBUS_PUBLIC_LINK_NAMES ${3RD_PARTY_LIBUV_LINK_NAME}) - if(WIN32) - list(APPEND PROJECT_LIBATBUS_PUBLIC_LINK_NAMES psapi iphlpapi userenv ws2_32) - endif() - else() - message(STATUS "Libuv support disabled") - endif() -endmacro() - -# =========== 3rdparty libuv ================== -if(NOT TARGET uv_a - AND NOT TARGET uv - AND NOT TARGET libuv - AND NOT Libuv_FOUND - AND NOT LIBUV_FOUND) - if(VCPKG_TOOLCHAIN) - find_package(Libuv) - project_libatbus_libuv_import() - endif() - - if(NOT TARGET uv_a - AND NOT TARGET uv - AND NOT TARGET libuv - AND NOT Libuv_FOUND - AND NOT LIBUV_FOUND) - set(3RD_PARTY_LIBUV_DEFAULT_VERSION "1.41.0") - - set(Libuv_ROOT ${PROJECT_3RD_PARTY_INSTALL_DIR}) - findconfigurepackage( - PACKAGE - Libuv - BUILD_WITH_CMAKE - CMAKE_INHIRT_BUILD_ENV - CMAKE_INHIRT_BUILD_ENV_DISABLE_CXX_FLAGS - CMAKE_FLAGS - "-DCMAKE_POSITION_INDEPENDENT_CODE=YES" - "-DBUILD_SHARED_LIBS=OFF" - "-DBUILD_TESTING=OFF" - WORKING_DIRECTORY - "${PROJECT_3RD_PARTY_PACKAGE_DIR}" - BUILD_DIRECTORY - "${CMAKE_CURRENT_BINARY_DIR}/deps/libuv-v${3RD_PARTY_LIBUV_DEFAULT_VERSION}/build_jobs_${PROJECT_PREBUILT_PLATFORM_NAME}" - PREFIX_DIRECTORY - "${PROJECT_3RD_PARTY_INSTALL_DIR}" - SRC_DIRECTORY_NAME - "libuv-v${3RD_PARTY_LIBUV_DEFAULT_VERSION}" - GIT_BRANCH - "v${3RD_PARTY_LIBUV_DEFAULT_VERSION}" - GIT_URL - "https://github.com/libuv/libuv.git") - - if(NOT Libuv_FOUND) - echowithcolor( - COLOR - RED - "-- Dependency: Libuv is required, we can not find prebuilt for libuv and can not find git to clone the sources" - ) - message(FATAL_ERROR "Libuv not found") - endif() - - project_libatbus_libuv_import() - endif() -else() - project_libatbus_libuv_import() -endif() diff --git a/3rd_party/protobuf/protobuf.cmake b/3rd_party/protobuf/protobuf.cmake deleted file mode 100644 index 696f9c03e..000000000 --- a/3rd_party/protobuf/protobuf.cmake +++ /dev/null @@ -1,324 +0,0 @@ -if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.10") - include_guard(GLOBAL) -endif() - -macro(PROJECT_LIBATBUS_PROTOBUF_IMPORT) - if(PROTOBUF_FOUND - AND PROTOBUF_PROTOC_EXECUTABLE - AND Protobuf_INCLUDE_DIRS - AND Protobuf_LIBRARY) - if(UNIX) - execute_process(COMMAND chmod +x "${PROTOBUF_PROTOC_EXECUTABLE}") - endif() - - if(TARGET protobuf::libprotobuf AND TARGET protobuf::libprotobuf-lite) - set(3RD_PARTY_PROTOBUF_LINK_NAME protobuf::libprotobuf) - set(3RD_PARTY_PROTOBUF_LITE_LINK_NAME protobuf::libprotobuf-lite) - echowithcolor(COLOR GREEN "-- Dependency: Protobuf libraries.(${Protobuf_LIBRARY_DEBUG})") - echowithcolor(COLOR GREEN - "-- Dependency: Protobuf lite libraries.(${Protobuf_LITE_LIBRARY_DEBUG})") - get_target_property(3RD_PARTY_PROTOBUF_INC_DIR protobuf::libprotobuf - INTERFACE_INCLUDE_DIRECTORIES) - elseif(${CMAKE_BUILD_TYPE} STREQUAL "Debug" AND Protobuf_LIBRARY_DEBUG) - set(3RD_PARTY_PROTOBUF_INC_DIR ${PROTOBUF_INCLUDE_DIRS}) - set(3RD_PARTY_PROTOBUF_LINK_NAME ${Protobuf_LIBRARY_DEBUG}) - set(3RD_PARTY_PROTOBUF_LITE_LINK_NAME ${Protobuf_LITE_LIBRARY_DEBUG}) - echowithcolor(COLOR GREEN "-- Dependency: Protobuf libraries.(${Protobuf_LIBRARY_DEBUG})") - echowithcolor(COLOR GREEN - "-- Dependency: Protobuf lite libraries.(${Protobuf_LITE_LIBRARY_DEBUG})") - else() - set(3RD_PARTY_PROTOBUF_INC_DIR ${PROTOBUF_INCLUDE_DIRS}) - if(Protobuf_LIBRARY_RELEASE) - set(3RD_PARTY_PROTOBUF_LINK_NAME ${Protobuf_LIBRARY_RELEASE}) - else() - set(3RD_PARTY_PROTOBUF_LINK_NAME ${Protobuf_LIBRARY}) - endif() - if(Protobuf_LITE_LIBRARY_RELEASE) - set(3RD_PARTY_PROTOBUF_LITE_LINK_NAME ${Protobuf_LITE_LIBRARY_RELEASE}) - else() - set(3RD_PARTY_PROTOBUF_LITE_LINK_NAME ${Protobuf_LIBRARY}) - endif() - echowithcolor(COLOR GREEN "-- Dependency: Protobuf libraries.(${Protobuf_LIBRARY})") - echowithcolor(COLOR GREEN "-- Dependency: Protobuf lite libraries.(${Protobuf_LITE_LIBRARY})") - endif() - - if(Protobuf_PROTOC_EXECUTABLE) - set(3RD_PARTY_PROTOBUF_BIN_PROTOC ${Protobuf_PROTOC_EXECUTABLE}) - else() - set(3RD_PARTY_PROTOBUF_BIN_PROTOC ${PROTOBUF_PROTOC_EXECUTABLE}) - endif() - - if(3RD_PARTY_PROTOBUF_INC_DIR) - list(APPEND PROJECT_LIBATBUS_PUBLIC_INCLUDE_DIRS ${3RD_PARTY_PROTOBUF_INC_DIR}) - endif() - - if(3RD_PARTY_PROTOBUF_LINK_NAME) - list(APPEND PROJECT_LIBATBUS_PUBLIC_LINK_NAMES ${3RD_PARTY_PROTOBUF_LINK_NAME}) - endif() - endif() -endmacro() - -# =========== 3rdparty protobuf ================== -if(NOT 3RD_PARTY_PROTOBUF_BIN_PROTOC OR (NOT 3RD_PARTY_PROTOBUF_LINK_NAME - AND NOT 3RD_PARTY_PROTOBUF_INC_DIR)) - include(GNUInstallDirs) - include(ProjectBuildTools) - - if(VCPKG_TOOLCHAIN) - find_package(Protobuf) - project_libatbus_protobuf_import() - endif() - - if(NOT PROTOBUF_FOUND - OR NOT PROTOBUF_PROTOC_EXECUTABLE - OR NOT Protobuf_INCLUDE_DIRS - OR NOT Protobuf_LIBRARY) - set(3RD_PARTY_PROTOBUF_VERSION "3.15.6") - - if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7.0") - set(3RD_PARTY_PROTOBUF_VERSION "3.5.1") - endif() - elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.3") - set(3RD_PARTY_PROTOBUF_VERSION "3.5.1") - endif() - elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang") - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0") - set(3RD_PARTY_PROTOBUF_VERSION "3.5.1") - endif() - elseif(MSVC) - if(MSVC_VERSION LESS 1900) - set(3RD_PARTY_PROTOBUF_VERSION "3.5.1") - endif() - endif() - - if(NOT PROJECT_PREBUILT_PLATFORM_NAME) - if(ANDROID_ABI) - string(TOLOWER "${CMAKE_SYSTEM_NAME}-${ANDROID_ABI}-${CMAKE_CXX_COMPILER_ID}" - PROJECT_PREBUILT_PLATFORM_NAME) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer") - elseif(CMAKE_OSX_ARCHITECTURES) - string(TOLOWER "${CMAKE_SYSTEM_NAME}-${CMAKE_OSX_ARCHITECTURES}-${CMAKE_CXX_COMPILER_ID}" - PROJECT_PREBUILT_PLATFORM_NAME) - else() - string(TOLOWER "${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_CXX_COMPILER_ID}" - PROJECT_PREBUILT_PLATFORM_NAME) - endif() - endif() - if(NOT PROJECT_PREBUILT_HOST_PLATFORM_NAME) - string( - TOLOWER "${CMAKE_HOST_SYSTEM_NAME}-${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_CXX_COMPILER_ID}" - PROJECT_PREBUILT_HOST_PLATFORM_NAME) - endif() - - set(3RD_PARTY_PROTOBUF_ROOT_DIR ${PROJECT_3RD_PARTY_INSTALL_DIR}) - set(3RD_PARTY_PROTOBUF_PKG_DIR ${PROJECT_3RD_PARTY_PACKAGE_DIR}) - - if(PROTOBUF_HOST_ROOT) - set(3RD_PARTY_PROTOBUF_HOST_ROOT_DIR ${PROTOBUF_HOST_ROOT}) - else() - set(3RD_PARTY_PROTOBUF_HOST_ROOT_DIR - "${PROJECT_3RD_PARTY_INSTALL_DIR}/../${PROJECT_PREBUILT_HOST_PLATFORM_NAME}") - endif() - - project_build_tools_append_cmake_options_for_lib(3RD_PARTY_PROTOBUF_FLAG_OPTIONS) - - set(3RD_PARTY_PROTOBUF_ROOT_DIR_BACKUP_CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH}) - set(3RD_PARTY_PROTOBUF_ROOT_DIR_BACKUP_CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH}) - set(3RD_PARTY_PROTOBUF_ROOT_DIR_NEED_RESTORE TRUE) - list(APPEND CMAKE_FIND_ROOT_PATH ${3RD_PARTY_PROTOBUF_ROOT_DIR}) - list(APPEND CMAKE_PREFIX_PATH ${3RD_PARTY_PROTOBUF_ROOT_DIR}) - - if(NOT PROJECT_PREBUILT_PLATFORM_NAME STREQUAL PROJECT_PREBUILT_HOST_PLATFORM_NAME) - list(APPEND CMAKE_PROGRAM_PATH "${3RD_PARTY_PROTOBUF_HOST_ROOT_DIR}/${CMAKE_INSTALL_BINDIR}") - endif() - set(Protobuf_ROOT ${3RD_PARTY_PROTOBUF_ROOT_DIR}) - if(CMAKE_VERSION VERSION_LESS "3.14" - AND EXISTS "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib64" - AND NOT EXISTS "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib") - if(CMAKE_HOST_WIN32) - execute_process( - COMMAND mklink /D "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib" - "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib64" - WORKING_DIRECTORY ${3RD_PARTY_PROTOBUF_ROOT_DIR}) - else() - execute_process( - COMMAND ln -s "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib64" "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib" - WORKING_DIRECTORY ${3RD_PARTY_PROTOBUF_ROOT_DIR}) - endif() - endif() - - set(Protobuf_USE_STATIC_LIBS ON) - unset(3RD_PARTY_PROTOBUF_FIND_LIB CACHE) - find_library( - 3RD_PARTY_PROTOBUF_FIND_LIB - NAMES protobuf libprotobuf protobufd libprotobufd - PATHS "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib" "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib64" - NO_DEFAULT_PATH) - if(NOT 3RD_PARTY_PROTOBUF_FIND_LIB) - if(NOT EXISTS "${3RD_PARTY_PROTOBUF_PKG_DIR}/protobuf-${3RD_PARTY_PROTOBUF_VERSION}") - if(NOT EXISTS - "${3RD_PARTY_PROTOBUF_PKG_DIR}/protobuf-all-${3RD_PARTY_PROTOBUF_VERSION}.tar.gz") - findconfigurepackagedownloadfile( - "https://github.com/google/protobuf/releases/download/v${3RD_PARTY_PROTOBUF_VERSION}/protobuf-all-${3RD_PARTY_PROTOBUF_VERSION}.tar.gz" - "${3RD_PARTY_PROTOBUF_PKG_DIR}/protobuf-all-${3RD_PARTY_PROTOBUF_VERSION}.tar.gz") - endif() - - findconfigurepackagetarxv( - "${3RD_PARTY_PROTOBUF_PKG_DIR}/protobuf-all-${3RD_PARTY_PROTOBUF_VERSION}.tar.gz" - ${3RD_PARTY_PROTOBUF_PKG_DIR}) - endif() - - if(NOT EXISTS "${3RD_PARTY_PROTOBUF_PKG_DIR}/protobuf-${3RD_PARTY_PROTOBUF_VERSION}") - echowithcolor(COLOR RED "-- Dependency: Build protobuf failed") - message(FATAL_ERROR "Dependency: Protobuf is required") - endif() - - unset(3RD_PARTY_PROTOBUF_BUILD_FLAGS) - unset(3RD_PARTY_PROTOBUF_HOST_BUILD_FLAGS) - list( - APPEND - 3RD_PARTY_PROTOBUF_BUILD_FLAGS - ${CMAKE_COMMAND} - "${3RD_PARTY_PROTOBUF_PKG_DIR}/protobuf-${3RD_PARTY_PROTOBUF_VERSION}/cmake" - ${3RD_PARTY_PROTOBUF_FLAG_OPTIONS} - "-Dprotobuf_BUILD_TESTS=OFF" - "-Dprotobuf_BUILD_EXAMPLES=OFF" - "-DBUILD_SHARED_LIBS=OFF" - "-Dprotobuf_BUILD_SHARED_LIBS=OFF" - "-Dprotobuf_MSVC_STATIC_RUNTIME=OFF" - ${3RD_PARTY_PROTOBUF_BUILD_SHARED_LIBS}) - list( - APPEND - 3RD_PARTY_PROTOBUF_HOST_BUILD_FLAGS - ${CMAKE_COMMAND} - "${3RD_PARTY_PROTOBUF_PKG_DIR}/protobuf-${3RD_PARTY_PROTOBUF_VERSION}/cmake" - "-Dprotobuf_BUILD_TESTS=OFF" - "-Dprotobuf_BUILD_EXAMPLES=OFF" - "-DBUILD_SHARED_LIBS=OFF" - "-Dprotobuf_BUILD_SHARED_LIBS=OFF" - "-Dprotobuf_MSVC_STATIC_RUNTIME=OFF") - - set(3RD_PARTY_PROTOBUF_BUILD_SCRIPT_DIR - "${CMAKE_CURRENT_BINARY_DIR}/deps/protobuf-${3RD_PARTY_PROTOBUF_VERSION}") - if(NOT EXISTS ${3RD_PARTY_PROTOBUF_BUILD_SCRIPT_DIR}) - file(MAKE_DIRECTORY ${3RD_PARTY_PROTOBUF_BUILD_SCRIPT_DIR}) - endif() - - if(PROJECT_FIND_CONFIGURE_PACKAGE_PARALLEL_BUILD) - set(3RD_PARTY_PROTOBUF_BUILD_MULTI_CORE ${FindConfigurePackageCMakeBuildMultiJobs}) - else() - unset(3RD_PARTY_PROTOBUF_BUILD_MULTI_CORE) - endif() - - string(REGEX REPLACE ";" "\" \"" 3RD_PARTY_PROTOBUF_BUILD_FLAGS_CMD - "${3RD_PARTY_PROTOBUF_BUILD_FLAGS}") - set(3RD_PARTY_PROTOBUF_BUILD_FLAGS_CMD "\"${3RD_PARTY_PROTOBUF_BUILD_FLAGS_CMD}\"") - string(REGEX REPLACE ";" "\" \"" 3RD_PARTY_PROTOBUF_HOST_BUILD_FLAGS_CMD - "${3RD_PARTY_PROTOBUF_HOST_BUILD_FLAGS}") - set(3RD_PARTY_PROTOBUF_HOST_BUILD_FLAGS_CMD "\"${3RD_PARTY_PROTOBUF_HOST_BUILD_FLAGS_CMD}\"") - - if(CMAKE_HOST_UNIX OR MSYS) - message(STATUS "@${3RD_PARTY_PROTOBUF_BUILD_SCRIPT_DIR} Run: run-build-release.sh") - configure_file( - "${CMAKE_CURRENT_LIST_DIR}/run-build-release.sh.in" - "${3RD_PARTY_PROTOBUF_BUILD_SCRIPT_DIR}/run-build-release.sh" @ONLY NEWLINE_STYLE LF) - - # build - execute_process(COMMAND bash "${3RD_PARTY_PROTOBUF_BUILD_SCRIPT_DIR}/run-build-release.sh" - WORKING_DIRECTORY ${3RD_PARTY_PROTOBUF_BUILD_SCRIPT_DIR}) - else() - configure_file( - "${CMAKE_CURRENT_LIST_DIR}/run-build-release.ps1.in" - "${3RD_PARTY_PROTOBUF_BUILD_SCRIPT_DIR}/run-build-release.ps1" @ONLY NEWLINE_STYLE CRLF) - configure_file( - "${CMAKE_CURRENT_LIST_DIR}/run-build-release.bat.in" - "${3RD_PARTY_PROTOBUF_BUILD_SCRIPT_DIR}/run-build-release.bat" @ONLY NEWLINE_STYLE CRLF) - - find_program(3RD_PARTY_PROTOBUF_POWERSHELL_BIN NAMES pwsh pwsh.exe) - if(NOT 3RD_PARTY_PROTOBUF_POWERSHELL_BIN) - find_program(3RD_PARTY_PROTOBUF_POWERSHELL_BIN NAMES powershell powershell.exe) - endif() - if(NOT 3RD_PARTY_PROTOBUF_POWERSHELL_BIN) - echowithcolor( - COLOR RED - "-- Dependency: powershell-core or powershell is required to configure protobuf") - message(FATAL_ERROR "powershell-core or powershell is required") - endif() - # build - message( - STATUS - "@${3RD_PARTY_PROTOBUF_BUILD_SCRIPT_DIR} Run: ${3RD_PARTY_PROTOBUF_POWERSHELL_BIN} -NoProfile -InputFormat None -ExecutionPolicy Bypass -NonInteractive -NoLogo -File run-build-release.ps1" - ) - execute_process( - COMMAND - ${3RD_PARTY_PROTOBUF_POWERSHELL_BIN} -NoProfile -InputFormat None -ExecutionPolicy - Bypass -NonInteractive -NoLogo -File - "${3RD_PARTY_PROTOBUF_BUILD_SCRIPT_DIR}/run-build-release.ps1" - WORKING_DIRECTORY ${3RD_PARTY_PROTOBUF_BUILD_SCRIPT_DIR}) - endif() - unset(3RD_PARTY_PROTOBUF_BUILD_MULTI_CORE) - unset(3RD_PARTY_PROTOBUF_FLAG_OPTIONS) - endif() - - find_package(Protobuf) - project_libatbus_protobuf_import() - endif() - - # try again, cached vars will cause find failed. - if(NOT PROTOBUF_FOUND - OR NOT PROTOBUF_PROTOC_EXECUTABLE - OR NOT Protobuf_INCLUDE_DIRS - OR NOT Protobuf_LIBRARY) - if(CMAKE_VERSION VERSION_LESS "3.14" - AND EXISTS "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib64" - AND NOT EXISTS "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib") - if(CMAKE_HOST_WIN32) - execute_process( - COMMAND mklink /D "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib" - "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib64" - WORKING_DIRECTORY ${3RD_PARTY_PROTOBUF_ROOT_DIR}) - else() - execute_process( - COMMAND ln -s "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib64" "${3RD_PARTY_PROTOBUF_ROOT_DIR}/lib" - WORKING_DIRECTORY ${3RD_PARTY_PROTOBUF_ROOT_DIR}) - endif() - endif() - echowithcolor(COLOR YELLOW "-- Dependency: Try to find protobuf libraries again") - unset(Protobuf_LIBRARY) - unset(Protobuf_PROTOC_LIBRARY) - unset(Protobuf_INCLUDE_DIR) - unset(Protobuf_PROTOC_EXECUTABLE) - unset(Protobuf_LIBRARY_DEBUG) - unset(Protobuf_PROTOC_LIBRARY_DEBUG) - unset(Protobuf_LITE_LIBRARY) - unset(Protobuf_LITE_LIBRARY_DEBUG) - unset(Protobuf_LIBRARIES) - unset(Protobuf_PROTOC_LIBRARIES) - unset(Protobuf_LITE_LIBRARIES) - unset(Protobuf::protoc) - find_package(Protobuf) - project_libatbus_protobuf_import() - endif() - - if(PROTOBUF_FOUND AND Protobuf_LIBRARY) - echowithcolor(COLOR GREEN "-- Dependency: Protobuf found.(${PROTOBUF_PROTOC_EXECUTABLE})") - echowithcolor(COLOR GREEN "-- Dependency: Protobuf include.(${Protobuf_INCLUDE_DIRS})") - else() - echowithcolor(COLOR RED "-- Dependency: Protobuf is required") - message(FATAL_ERROR "Protobuf not found") - endif() -else() - project_libatbus_protobuf_import() -endif() - -if(3RD_PARTY_PROTOBUF_ROOT_DIR_NEED_RESTORE) - set(CMAKE_FIND_ROOT_PATH ${3RD_PARTY_PROTOBUF_ROOT_DIR_BACKUP_CMAKE_FIND_ROOT_PATH}) - set(CMAKE_PREFIX_PATH ${3RD_PARTY_PROTOBUF_ROOT_DIR_BACKUP_CMAKE_PREFIX_PATH}) - - unset(3RD_PARTY_PROTOBUF_ROOT_DIR_BACKUP_CMAKE_FIND_ROOT_PATH) - unset(3RD_PARTY_PROTOBUF_ROOT_DIR_BACKUP_CMAKE_PREFIX_PATH) - unset(3RD_PARTY_PROTOBUF_ROOT_DIR_NEED_RESTORE) -endif() diff --git a/3rd_party/protobuf/run-build-release.bat.in b/3rd_party/protobuf/run-build-release.bat.in deleted file mode 100644 index 04a60be8d..000000000 --- a/3rd_party/protobuf/run-build-release.bat.in +++ /dev/null @@ -1,21 +0,0 @@ -chcp 65001 - -@echo off - -where pwsh - -if not ERRORLEVEL 0 ( - goto USE_POWERSHELL -) - -:USE_POWERSHELL_CORE - -cd %~dp0 - -pwsh -NoProfile -InputFormat None -ExecutionPolicy Bypass -NonInteractive -NoLogo -File run-build-release.ps1 - -exit %ERRORLEVEL% - -:USE_POWERSHELL - -@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -NonInteractive -NoLogo -File run-build-release.ps1 diff --git a/3rd_party/protobuf/run-build-release.ps1.in b/3rd_party/protobuf/run-build-release.ps1.in deleted file mode 100644 index 4c08b4455..000000000 --- a/3rd_party/protobuf/run-build-release.ps1.in +++ /dev/null @@ -1,124 +0,0 @@ -$PSDefaultParameterValues['*:Encoding'] = 'UTF-8' - -$OutputEncoding = [System.Text.UTF8Encoding]::new() - -$SCRIPT_DIR = Split-Path -Parent $MyInvocation.MyCommand.Definition - -# Set-Location $SCRIPT_DIR - -$3RD_PARTY_PROTOBUF_BUILD_DIR = "@CMAKE_CURRENT_BINARY_DIR@/deps/protobuf-@3RD_PARTY_PROTOBUF_VERSION@/build_jobs_dir_@PROJECT_PREBUILT_PLATFORM_NAME@" -$3RD_PARTY_PROTOBUF_HOST_BUILD_DIR = "@CMAKE_CURRENT_BINARY_DIR@/deps/protobuf-@3RD_PARTY_PROTOBUF_VERSION@/build_jobs_dir_@PROJECT_PREBUILT_HOST_PLATFORM_NAME@" - -# build host protoc first -if ( "@CMAKE_SYSTEM@" -ne "@CMAKE_HOST_SYSTEM@" ) { - $ENV:PATH = "$3RD_PARTY_PROTOBUF_HOST_BUILD_DIR" + [IO.Path]::PathSeparator + "$ENV:PATH" - - if (!(Test-Path "$3RD_PARTY_PROTOBUF_HOST_BUILD_DIR" )) { - New-Item -Path "$3RD_PARTY_PROTOBUF_HOST_BUILD_DIR" -ItemType "directory" -Force - } - - Set-Location "$3RD_PARTY_PROTOBUF_HOST_BUILD_DIR" - - if (!(Test-Path "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/bin/protoc" ) -and !(Test-Path "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/bin/protoc.exe" )) { - $ENV:BACKUP_CC = $ENV:CC - $ENV:BACKUP_CXX = $ENV:CXX - $ENV:BACKUP_SDKROOT = $ENV:SDKROOT - & @3RD_PARTY_PROTOBUF_HOST_BUILD_FLAGS_CMD@ "-DCMAKE_INSTALL_PREFIX=@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@" "-DCMAKE_POLICY_DEFAULT_CMP0091=NEW" - if (("@MSVC@".ToLower() -ne "true") -or ("@MSVC@".ToLower() -ne "yes") -or ("@MSVC@".ToLower() -eq "1")) { - & "@CMAKE_COMMAND@" --build . --target install --config Debug @3RD_PARTY_PROTOBUF_BUILD_MULTI_CORE@ - if ( $LastExitCode -ne 0 ) { - & "@CMAKE_COMMAND@" --build . --target install --config Debug - } - else { - exit $LastExitCode - } - } - & "@CMAKE_COMMAND@" --build . --target install --config Release @3RD_PARTY_PROTOBUF_BUILD_MULTI_CORE@ - if ( $LastExitCode -ne 0 ) { - & "@CMAKE_COMMAND@" --build . --target install --config Release - } - else { - exit $LastExitCode - } - $ENV:CC = $ENV:BACKUP_CC - $ENV:CXX = $ENV:BACKUP_CXX - $ENV:SDKROOT = $ENV:BACKUP_SDKROOT - } - -} -else { - $ENV:PATH = "$3RD_PARTY_PROTOBUF_BUILD_DIR" + [IO.Path]::PathSeparator + "$ENV:PATH" -} - -if (!(Test-Path "$3RD_PARTY_PROTOBUF_BUILD_DIR" )) { - New-Item -Path "$3RD_PARTY_PROTOBUF_BUILD_DIR" -ItemType "directory" -Force -} - -Set-Location "$3RD_PARTY_PROTOBUF_BUILD_DIR" - -if ("@CMAKE_SYSTEM@" -ne "@CMAKE_HOST_SYSTEM@" ) { - & @3RD_PARTY_PROTOBUF_BUILD_FLAGS_CMD@ "-DCMAKE_INSTALL_PREFIX=@3RD_PARTY_PROTOBUF_ROOT_DIR@" "-DCMAKE_POLICY_DEFAULT_CMP0091=NEW" -Dprotobuf_BUILD_CONFORMANCE=OFF -Dprotobuf_BUILD_PROTOC_BINARIES=OFF -} -else { - & @3RD_PARTY_PROTOBUF_BUILD_FLAGS_CMD@ "-DCMAKE_INSTALL_PREFIX=@3RD_PARTY_PROTOBUF_ROOT_DIR@" "-DCMAKE_POLICY_DEFAULT_CMP0091=NEW" -} - -if (("@MSVC@".ToLower() -eq "true") -or ("@MSVC@".ToLower() -eq "yes") -or ("@MSVC@".ToLower() -eq "1")) { - & "@CMAKE_COMMAND@" --build . --target install --config Debug @3RD_PARTY_PROTOBUF_BUILD_MULTI_CORE@ - if ( $LastExitCode -ne 0 ) { - & "@CMAKE_COMMAND@" --build . --target install --config Debug - } - if ( $LastExitCode -ne 0 ) { - exit $LastExitCode - } -} - -& "@CMAKE_COMMAND@" --build . --target install --config Release @3RD_PARTY_PROTOBUF_BUILD_MULTI_CORE@ - -if ( $LastExitCode -ne 0 ) { - & "@CMAKE_COMMAND@" --build . --target install --config Release -} -if ( $LastExitCode -ne 0 ) { - exit $LastExitCode -} - -if (( $LastExitCode -eq 0 ) -and (Test-Path "@3RD_PARTY_PROTOBUF_PKG_DIR@/protobuf-@3RD_PARTY_PROTOBUF_VERSION@/python/setup.py" )) { - if ($IsWindows) { - $ENV:PATH = "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/bin;${ENV:PATH}" - } - else { - $ENV:PATH = "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/bin:${ENV:PATH}" - } - - if (Test-Path "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/python") { - Remove-Item -Path "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/python" -Recurse -Force - } - Copy-Item -Path "@3RD_PARTY_PROTOBUF_PKG_DIR@/protobuf-@3RD_PARTY_PROTOBUF_VERSION@/python" -Destination "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@" -Force -Recurse - Copy-Item -Path "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/include" -Destination "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/src" -Force -Recurse - Set-Location "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/python" - - $PYTHON_BIN = ""; - if ( "x" -ne "x@PYTHON_EXECUTABLE@" ) { - & "@PYTHON_EXECUTABLE@" --version - if ( $LastExitCode -eq 0 ) { - $PYTHON_BIN = "@PYTHON_EXECUTABLE@" - } - } - - if ( "x" -eq "x$PYTHON_BIN" ) { - python3 --version - if ( $LastExitCode -eq 0 ) { - $PYTHON_BIN = "python3" - } - } - if ( "x" -eq "x$PYTHON_BIN" ) { - python --version - if ( $LastExitCode -eq 0 ) { - $PYTHON_BIN = "python" - } - } - if ( "x" -ne "x$PYTHON_BIN" ) { - & "$PYTHON_BIN" ./setup.py build_py - } - Remove-Item -Path "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/src" -Recurse -Force -} diff --git a/3rd_party/protobuf/run-build-release.sh.in b/3rd_party/protobuf/run-build-release.sh.in deleted file mode 100644 index 526d18fea..000000000 --- a/3rd_party/protobuf/run-build-release.sh.in +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/bash - -BUILD_3RD_PARTY_PROTOBUF_BUILD_DIR="@CMAKE_CURRENT_BINARY_DIR@/deps/protobuf-@3RD_PARTY_PROTOBUF_VERSION@/build_jobs_dir_@PROJECT_PREBUILT_PLATFORM_NAME@" ; -BUILD_3RD_PARTY_PROTOBUF_HOST_BUILD_DIR="@CMAKE_CURRENT_BINARY_DIR@/deps/protobuf-@3RD_PARTY_PROTOBUF_VERSION@/build_jobs_dir_@PROJECT_PREBUILT_HOST_PLATFORM_NAME@" ; - -# build host protoc first -if [[ "@CMAKE_SYSTEM@" != "@CMAKE_HOST_SYSTEM@" ]]; then - export PATH="$BUILD_3RD_PARTY_PROTOBUF_HOST_BUILD_DIR:$PATH" ; - - if [[ ! -e "$BUILD_3RD_PARTY_PROTOBUF_HOST_BUILD_DIR" ]]; then - mkdir -p "$BUILD_3RD_PARTY_PROTOBUF_HOST_BUILD_DIR" ; - fi - - cd "$BUILD_3RD_PARTY_PROTOBUF_HOST_BUILD_DIR" ; - - if [[ ! -e "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/bin/protoc" ]] && [[ ! -e "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/bin/protoc.exe" ]]; then - - env CC= CXX= SDKROOT= @3RD_PARTY_PROTOBUF_HOST_BUILD_FLAGS_CMD@ "-DCMAKE_INSTALL_PREFIX=@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@" "-DCMAKE_POLICY_DEFAULT_CMP0091=NEW" ; - - "@CMAKE_COMMAND@" --build . --target install --config Release "@3RD_PARTY_PROTOBUF_BUILD_MULTI_CORE@" || "@CMAKE_COMMAND@" --build . --target install --config Release ; - - fi - -else - export PATH="$BUILD_3RD_PARTY_PROTOBUF_BUILD_DIR:$PATH" ; -fi - -if [[ ! -e "$BUILD_3RD_PARTY_PROTOBUF_BUILD_DIR" ]]; then - mkdir -p "$BUILD_3RD_PARTY_PROTOBUF_BUILD_DIR" ; -fi - -cd "$BUILD_3RD_PARTY_PROTOBUF_BUILD_DIR" ; - -if [[ "@CMAKE_SYSTEM@" != "@CMAKE_HOST_SYSTEM@" ]]; then - - @3RD_PARTY_PROTOBUF_BUILD_FLAGS_CMD@ "-DCMAKE_INSTALL_PREFIX=@3RD_PARTY_PROTOBUF_ROOT_DIR@" "-DCMAKE_POLICY_DEFAULT_CMP0091=NEW" -Dprotobuf_BUILD_CONFORMANCE=OFF -Dprotobuf_BUILD_PROTOC_BINARIES=OFF ; - -else - - @3RD_PARTY_PROTOBUF_BUILD_FLAGS_CMD@ "-DCMAKE_INSTALL_PREFIX=@3RD_PARTY_PROTOBUF_ROOT_DIR@" "-DCMAKE_POLICY_DEFAULT_CMP0091=NEW" ; - -fi - -"@CMAKE_COMMAND@" --build . --target install --config Release "@3RD_PARTY_PROTOBUF_BUILD_MULTI_CORE@" || "@CMAKE_COMMAND@" --build . --target install --config Release ; - -if [[ $? -eq 0 ]] && [[ -e "@3RD_PARTY_PROTOBUF_PKG_DIR@/protobuf-@3RD_PARTY_PROTOBUF_VERSION@/python/setup.py" ]]; then - export PATH="@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/bin:$PATH" ; - if [[ -e "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/python" ]]; then - rm -rf "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/python"; - fi - cp -rf "@3RD_PARTY_PROTOBUF_PKG_DIR@/protobuf-@3RD_PARTY_PROTOBUF_VERSION@/python" "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/python"; - cp -rf "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/include" "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/src"; - cd "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/python"; - - PYTHON_BIN=""; - if [[ "x" != "x@PYTHON_EXECUTABLE@" ]]; then - "@PYTHON_EXECUTABLE@" --version > /dev/null 2>&1; - if [[ $? -eq 0 ]]; then - PYTHON_BIN="@PYTHON_EXECUTABLE@"; - fi - fi - if [[ "x" == "x$PYTHON_BIN" ]]; then - python3 --version > /dev/null 2>&1; - if [[ $? -eq 0 ]]; then - PYTHON_BIN="python3"; - fi - fi - if [[ "x" == "x$PYTHON_BIN" ]]; then - python --version > /dev/null 2>&1; - if [[ $? -eq 0 ]]; then - PYTHON_BIN="python"; - fi - fi - if [[ "x" != "x$PYTHON_BIN" ]]; then - "$PYTHON_BIN" ./setup.py build_py ; - fi - rm -rf "@3RD_PARTY_PROTOBUF_HOST_ROOT_DIR@/src"; -fi diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f9542a81..37e116421 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ CHANGELOG ============ +2.1.0 +------------ + +1. 重构构建系统 +2. 增加代码规范工具 +3. 重构CI配置 + 2.0.0 ------------ diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b773504b..2c1505314 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,37 +12,20 @@ project(libatbus C CXX) set(LIBATBUS_VERSION_MAJOR "2") set(LIBATBUS_VERSION_MINOR "1") set(LIBATBUS_VERSION_PATCH "0") -set(LIBATBUS_VERSION - "${LIBATBUS_VERSION_MAJOR}.${LIBATBUS_VERSION_MINOR}.${LIBATBUS_VERSION_PATCH}") +set(LIBATBUS_VERSION "${LIBATBUS_VERSION_MAJOR}.${LIBATBUS_VERSION_MINOR}.${LIBATBUS_VERSION_PATCH}") # 准备下载依赖组件 -include("${CMAKE_CURRENT_LIST_DIR}/3rd_party/atframe_utils/libatframe_utils.prepare.cmake") -# ################################################################################################## +# ###################################################################################################################### # CMake 模块 (递归包含模块, 带颜色输出模块, 平台检测模块) -set(PROJECT_CMAKE_MODULE_DIR "${3RD_PARTY_ATFRAME_UTILS_PKG_DIR}/project/cmake") -list(APPEND CMAKE_MODULE_PATH "${PROJECT_CMAKE_MODULE_DIR}/modules") - -include("${PROJECT_CMAKE_MODULE_DIR}/modules/IncludeDirectoryRecurse.cmake") -include("${PROJECT_CMAKE_MODULE_DIR}/modules/EchoWithColor.cmake") -include("${PROJECT_CMAKE_MODULE_DIR}/modules/FindConfigurePackage.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/project/cmake/ProjectBuildOption.cmake") -include("${PROJECT_CMAKE_MODULE_DIR}/FindPlatform.cmake") -include("${PROJECT_CMAKE_MODULE_DIR}/ProjectTools.cmake") - -# ################################################################################################## +# ###################################################################################################################### # 导入编译器和编译选项配置 -include("${PROJECT_CMAKE_MODULE_DIR}/CompilerOption.cmake") -include("${PROJECT_CMAKE_MODULE_DIR}/TargetOption.cmake") echowithcolor(COLOR GREEN "-- Build Type: ${CMAKE_BUILD_TYPE}") unset(PROJECT_LIBATBUS_PRIVATE_COMPILE_OPTIONS) -unset(PROJECT_LIBATBUS_PUBLIC_INCLUDE_DIRS) -unset(PROJECT_LIBATBUS_PUBLIC_LINK_NAMES) -unset(PROJECT_LIBATBUS_INTERFACE_LINK_NAMES) -# ################################################################################################## +# ###################################################################################################################### # 导入项目配置 导入所有 macro 定义 include("${CMAKE_CURRENT_LIST_DIR}/3rd_party/3rd_party.macro.cmake") include("${CMAKE_CURRENT_LIST_DIR}/include/include.macro.cmake") @@ -50,23 +33,9 @@ include("${CMAKE_CURRENT_LIST_DIR}/src/libatbus.macro.cmake") include("${CMAKE_CURRENT_LIST_DIR}/tools/tools.macro.cmake") # 导入工程项目 -if(TARGET ${3RD_PARTY_ATFRAME_UTILS_LINK_NAME}) - message( - STATUS - "${3RD_PARTY_ATFRAME_UTILS_LINK_NAME} already exist, use it for ${PROJECT_NAME} directly.") -else() - if(NOT EXISTS "${CMAKE_BINARY_DIR}/deps/${3RD_PARTY_ATFRAME_UTILS_LINK_NAME}") - file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/deps/${3RD_PARTY_ATFRAME_UTILS_LINK_NAME}") - endif() - add_subdirectory(${3RD_PARTY_ATFRAME_UTILS_PKG_DIR} - "${CMAKE_BINARY_DIR}/deps/${3RD_PARTY_ATFRAME_UTILS_LINK_NAME}") -endif() -if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.15") - list(PREPEND PROJECT_LIBATBUS_PUBLIC_LINK_NAMES ${3RD_PARTY_ATFRAME_UTILS_LINK_NAME}) -else() - set(PROJECT_LIBATBUS_PUBLIC_LINK_NAMES ${3RD_PARTY_ATFRAME_UTILS_LINK_NAME} - ${PROJECT_LIBATBUS_PUBLIC_LINK_NAMES}) -endif() +set(PROJECT_LIBATBUS_PUBLIC_LINK_NAMES + ${ATFRAMEWORK_ATFRAME_UTILS_LINK_NAME} ${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_PROTOBUF_LINK_NAME} + ${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBUV_LINK_NAME}) if(COMPILER_STRICT_EXTRA_CFLAGS) list(APPEND PROJECT_LIBATBUS_PRIVATE_COMPILE_OPTIONS ${COMPILER_STRICT_EXTRA_CFLAGS}) @@ -81,19 +50,6 @@ if(MSVC_VERSION LESS_EQUAL 1800) list(APPEND PROJECT_LIBATBUS_PRIVATE_COMPILE_OPTIONS "/wd4702") endif() -if(WIN32) - list( - APPEND - PROJECT_LIBATBUS_INTERFACE_LINK_NAMES - advapi32 - iphlpapi - psapi - shell32 - user32 - userenv - ws2_32) -endif() - add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/src") if(PROJECT_ENABLE_SAMPLE) @@ -101,7 +57,8 @@ if(PROJECT_ENABLE_SAMPLE) endif() if(PROJECT_ENABLE_UNITTEST) - include("${3RD_PARTY_ATFRAME_UTILS_PKG_DIR}/test/test.utils-macro.cmake") + atframework_atframe_utils_populate() + include("${ATFRAMEWORK_ATFRAME_UTILS_REPO_DIR}/test/test.utils-macro.cmake") add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/test") endif() @@ -113,26 +70,35 @@ endif() # Install configuration set(CMAKE_INSTALL_CMAKEDIR - "${CMAKE_INSTALL_LIBDIR}/cmake" + "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" CACHE STRING "Directory relative to CMAKE_INSTALL to install the cmake configuration files") include(CMakePackageConfigHelpers) set(INCLUDE_INSTALL_DIR include) -file(MAKE_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake") +file(MAKE_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}") configure_package_config_file( "${CMAKE_CURRENT_LIST_DIR}/libatbus-config.cmake.in" - "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/libatbus-config.cmake" + "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/libatbus-config.cmake" INSTALL_DESTINATION ${CMAKE_INSTALL_CMAKEDIR} PATH_VARS LIBATBUS_VERSION INCLUDE_INSTALL_DIR CMAKE_INSTALL_LIBDIR PROJECT_SOURCE_DIR NO_CHECK_REQUIRED_COMPONENTS_MACRO) write_basic_package_version_file( - "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/libatbus-config-version.cmake" + "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/libatbus-config-version.cmake" VERSION ${LIBATBUS_VERSION} COMPATIBILITY SameMajorVersion) -install(FILES "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/libatbus-config.cmake" - "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/libatbus-config-version.cmake" +install(FILES "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/libatbus-config.cmake" + "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/libatbus-config-version.cmake" DESTINATION ${CMAKE_INSTALL_CMAKEDIR}) + +export( + EXPORT ${PROJECT_LIBATBUS_EXPORT_NAME} + NAMESPACE atframework:: + FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_LIBATBUS_EXPORT_NAME}.cmake") +install( + EXPORT ${PROJECT_LIBATBUS_EXPORT_NAME} + NAMESPACE "atframework::" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") diff --git a/CPPLINT.cfg b/CPPLINT.cfg new file mode 100644 index 000000000..a13c0af6a --- /dev/null +++ b/CPPLINT.cfg @@ -0,0 +1,3 @@ +linelength=120 +filter=-build/c++11,-build/c++14,-runtime/references +exclude=3rd_party \ No newline at end of file diff --git a/LICENSE b/LICENSE index 344f0554b..3636ebf78 100755 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2021 OWenT +Copyright (c) 2021 atframework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/LICENSE-Apache.txt b/LICENSE-Apache.txt index b1898e2d0..954425016 100644 --- a/LICENSE-Apache.txt +++ b/LICENSE-Apache.txt @@ -187,7 +187,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2021 OWenT. + Copyright 2021 atframework. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index 2eb42aad6..3274affc6 100755 --- a/README.md +++ b/README.md @@ -1,88 +1,90 @@ -libatbus -======== +# libatbus 用于搭建高性能、全异步(a)、树形结构(t)的BUS消息系统的跨平台框架库 -> Build & Run Unit Test in | [Linux+OSX(clang+gcc)][linux-link] | [Windows+MinGW(vc+gcc)][windows-link] | -> -------------------------|-------------------------------------|---------------------------------------| -> Status | ![linux-badge] | ![windows-badge] | -> Compilers | linux-clang-10/11
linux-gcc-9
linux-gcc-10
~~macOS-clang-12.0~~
| MSVC 14(Visual Studio 2015)
MSVC 15(Visual Studio 2017)
MSVC 16(Visual Studio 2019)
Mingw32-gcc
Mingw64-gcc -> +[![ci-badge]][ci-link] [![codecov badge]][codecov status] [![lgtm-badge]][lgtm-link] -[![codecov badge]][codecov status] - -[linux-badge]: https://github.com/atframework/libatbus/actions/workflows/linux-macos.yml/badge.svg "Github action build status" -[linux-link]: https://github.com/atframework/libatbus/actions/workflows/linux-macos.yml "Github action build status" -[windows-badge]: https://ci.appveyor.com/api/projects/status/v2ufe4xuwbc6gjlf/branch/master?svg=true "AppVeyor build status" -[windows-link]: https://ci.appveyor.com/project/owt5008137/libatbus-k408k/branch/master "AppVeyor build status" -[codecov badge]: https://codecov.io/gh/atframework/libatbus/branch/master/graph/badge.svg +[ci-badge]: https://github.com/atframework/libatbus/actions/workflows/main.yml/badge.svg "Github action build status" +[ci-link]: https://github.com/atframework/libatbus/actions/workflows/main.yml "Github action build status" +[codecov badge]: https://codecov.io/gh/atframework/libatbus/branch/main/graph/badge.svg [codecov status]: https://codecov.io/gh/atframework/libatbus -依赖 ------- +## CI Job Matrix + +| Target System | Toolchain | Note +|---------------|-----------------------|-------------------------------- +| Linux | GCC | +| Linux | GCC-11 | +| Linux | Clang | With libc++ +| Linux | GCC | +| Linux | GCC 4.8 | +| MinGW64 | GCC | Static linking +| MinGW64 | GCC | Dynamic linking +| Windows | Visual Studio 2019 | Static linking +| Windows | Visual Studio 2019 | Dynamic linking +| Windows | Visual Studio 2017 | Legacy,Static linking +| macOS | AppleClang | With libc++ + +## 依赖 + 支持c++0x或c++11的编译器(为了代码尽量简洁,特别是少做无意义的平台兼容,依赖部分 C11和C++11的功能,所以不支持过低版本的编译器) -> + GCC: 4.4 及以上(建议gcc 4.8.1及以上) -> + Clang: 3.4 及以上 (建议 clang 3.8及以上) -> + VC: 12 及以上 + > + GCC: 4.8 及以上 + > + Clang: 3.8 及以上 + > + VC: 12 及以上 + [cmake](https://cmake.org/download/) 3.16.0 以上 -+ [protobuf](https://github.com/protocolbuffers/protobuf) -+ [libuv](http://libuv.org/)(用于网络通道) -+ [atframe_utils](https://github.com/atframework/atframe_utils)(基础公共代码) -设计初衷和要点 ------- +## 设计初衷和要点 1. **[扩展性]** 根据很多业务的需要,预留足够长的ID段(64位),用以给不同的ID段做不同类型的业务区分。 -> 现有很多框架都是32位(比如腾讯的tbus和云风的[skynet](https://github.com/cloudwu/skynet)),在服务类型比较多的时候必须小心设计服务ID,以免冲突。 -> -> 当然也有考虑到以后可能会扩展为带Hash的字符串,所以在编译选项上做了预留。但是目前还是uint64_t + > 现有很多框架都是32位(比如腾讯的tbus和云风的[skynet](https://github.com/cloudwu/skynet)),在服务类型比较多的时候必须小心设计服务ID,以免冲突。 + > + > 当然也有考虑到以后可能会扩展为带Hash的字符串,所以在编译选项上做了预留。但是目前还是uint64_t 2. **[高性能]** 同物理机之间可以直接使用共享内存通信,大幅提高消息分发的性能。跨物理机之间会使用tcp通信。并且这个通信方式的选择是完全自动并透明的(尽可能选择更快的方式发送消息),业务层完全不需要关心。 3. **[跨平台]** 拥有不同习惯的Developer可以使用自己熟悉的工具,提高开发速度 4. **[动态路由]** 父子节点间会至少保持一条连接,自动断线重连。同父的兄弟节点之间完全按需建立连接。并且这个过程都是自动完成的,不需要提前初始化。 -> 同样,新增节点和移除节点也不需要做什么特别的初始化操作。不会影响到已经在线上的服务。 + > 同样,新增节点和移除节点也不需要做什么特别的初始化操作。不会影响到已经在线上的服务。 5. **[低消耗]** 采用无锁队列,提高CPU性能。(共享)内存通道支持多端写入,一端读取,减少内存浪费。 -> 如果N个节点两两互联,每个节点可以只拥有一个(共享)内存通道。即总共只有N个通道,内存消耗为N*每个通道内存占用 -> -> 一些其他的系统(比如tbus和我们目前的服务器框架)如果N个节点两两互联,每两个节点之间都要创建(共享)内存通道。即总共只有N*N个通道,内存消耗为N*N*每个通道内存占用。非常浪费 + > 如果N个节点两两互联,每个节点可以只拥有一个(共享)内存通道。即总共只有N个通道,内存消耗为N*每个通道内存占用 + > + > 一些其他的系统(比如tbus和我们目前的服务器框架)如果N个节点两两互联,每两个节点之间都要创建(共享)内存通道。即总共只有N*N个通道,内存消耗为N*N*每个通道内存占用。非常浪费 6. **[简化设计]** 根据一些实际的项目情况,把父子节点间的关系限定为Bus ID的后N位有包含关系,类似路由器的路由表的策略。 -> 比如 0x12345678 可以控制的子节点有16位(0x12345678/16),那么0x12340000-0x1234FFFF都可以注册为它的子节点。 -> -> 如同IP协议中 192.168.1.1/24 路由表能管理 192.168.1.0-192.168.1.255 一样。当然这里的24指前24位,而前面提到的16指后16位。 -> -> 这么简化以后很多节点关系维护和通信都能简单很多并且能提高性能。 - -环境准备和构建流程 ------- + > 比如 0x12345678 可以控制的子节点有16位(0x12345678/16),那么0x12340000-0x1234FFFF都可以注册为它的子节点。 + > + > 如同IP协议中 192.168.1.1/24 路由表能管理 192.168.1.0-192.168.1.255 一样。当然这里的24指前24位,而前面提到的16指后16位。 + > + > 这么简化以后很多节点关系维护和通信都能简单很多并且能提高性能。 + +## 环境准备和构建流程 + 使用cmake标准构建方式,默认的编译目标为Debug版本,详见 [使用(编译)流程](docs/Build.md) **注意: 默认的编译选项是Debug模式,压测和正式环境请使用 cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo 源码目录 [其他选项] 编译(相当于gcc -O2 -g -ggdb -DNDEBUG -Wall -Werror或MSVC /O2)** **注意: Windows下私有共享内存不允许跨进程共享,公有共享内存必须有管理员权限。如果Windows下出现初始化共享内存错误请使用管理员权限运行。** -使用示例 ------- +## 使用示例 + 简要的使用示例见 [使用示例](docs/Usage.md) 更加详细的请参考单元测试和[tools](tools)目录内的代码 -Benchmark ------- +## Benchmark + 压力测试和对比见[docs/Benchmark.md](docs/Benchmark.md) -支持工具 ------- +## 支持工具 + Linux下 GCC编译安装脚本(支持离线编译安装): 1. [GCC](https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer) 2. [LLVM & Clang](https://github.com/owent-utils/bash-shell/tree/master/LLVM%26Clang%20Installer) -LICENSE ------- +## LICENSE + + libatbus 采用[MIT License](LICENSE) + Flatbuffers 采用[Apache License, Version 2.0](LICENSE-Apache.txt) + libuv 采用[Node's license协议](NODE_S_LICENSE)(类似MIT License) diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100755 index 90af5f3ab..000000000 --- a/appveyor.yml +++ /dev/null @@ -1,195 +0,0 @@ -# -# Appveyor configuration file for CI build of hiredis-happ on Windows (under Cygwin) -# -# For further details see http://www.appveyor.com -# - -# -# Custom environment variables -# -environment: - global: - PREBUILT_ROOT: C:/Users/appveyor/prebuilt - MSYS2_PREFIX: C:/msys64 - MSYS2_LOG_FILE: C:/Users/appveyor/output.log - matrix: - - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 - platform: x64 - CMAKE_GEN: Visual Studio 16 2019 - BUILD_SHARED_LIBS: "ON" - - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 - platform: x64 - CMAKE_GEN: Visual Studio 16 2019 - - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - platform: x64 - CMAKE_GEN: Visual Studio 15 2017 - - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - platform: x64 - CMAKE_GEN: Visual Studio 14 2015 - - os: MinGW - CMAKE_GEN: MinGW32 - - os: MinGW - CMAKE_GEN: MinGW64 - - os: MinGW - CMAKE_GEN: MinGW64 - BUILD_SHARED_LIBS: "ON" - -configuration: RelWithDebInfo - -# -# Cache Cygwin files to speed up build -# -cache: - - C:\Users\appveyor\prebuilt - -# -# Do a shallow clone of the repo to speed up build -# -clone_depth: 1 - -# -# Initialisation prior to pulling the Mono repository -# Attempt to ensure we don't try to convert line endings to Win32 CRLF as this will cause build to fail -# -init: - - pwsh: | - & git config --global core.autocrlf input - if ( "$Env:OS" -ieq "MinGW" ) { - if ( Test-Path "C:/msys64" ) { - $Env:MSYS2_PREFIX="C:/msys64" - $Env:PATH="$Env:MSYS2_PREFIX;$Env:PATH" - } elseif ( Test-Path "C:/tools/msys64" ) { - $Env:MSYS2_PREFIX="C:/tools/msys64" - $Env:PATH="$Env:MSYS2_PREFIX;$Env:PATH" - } else { - & cinst -y msys2 | Out-Host - if ( Test-Path "C:/msys64" ) { - $Env:MSYS2_PREFIX="C:/msys64" - $Env:PATH="$Env:MSYS2_PREFIX;$Env:PATH" - } elseif ( Test-Path "C:/tools/msys64" ) { - $Env:MSYS2_PREFIX="C:/tools/msys64" - $Env:PATH="$Env:MSYS2_PREFIX;$Env:PATH" - } - } - echo "" > "$Env:MSYS2_LOG_FILE" - Get-ChildItem "$Env:MSYS2_PREFIX" - echo "msys2_shell -lc 'pacman -Su --noconfirm --force > '$Env:MSYS2_LOG_FILE' 2>&1'" - msys2_shell -lc "pacman -Su --noconfirm --force > '$Env:MSYS2_LOG_FILE' 2>&1" | Out-Host - Get-Content "$Env:MSYS2_LOG_FILE" - } - -# -# Install needed build dependencies -# -install: - - pwsh: | - if ( "$Env:OS" -ieq "MinGW" ) { - if ( Test-Path "C:/msys64" ) { - $Env:MSYS2_PREFIX="C:/msys64" - $Env:PATH="$Env:MSYS2_PREFIX;$Env:PATH" - } elseif ( Test-Path "C:/tools/msys64" ) { - $Env:MSYS2_PREFIX="C:/tools/msys64" - $Env:PATH="$Env:MSYS2_PREFIX;$Env:PATH" - } - msys2_shell -lc 'for pkg_name in cmake m4 curl wget tar autoconf automake mingw-w64-x86_64-toolchain mingw-w64-x86_64-toolchain mingw-w64-i686-toolchain mingw-w64-x86_64-libtool mingw-w64-i686-libtool python; do pacman -S --noconfirm --force $pkg_name >> '$Env:MSYS2_LOG_FILE' 2>&1; done' | Out-Host - } - -# Build script -# -# NOTES: -# -# The stdin/stdout file descriptor appears not to be valid for the Appveyor -# build which causes failures as certain functions attempt to redirect -# default file handles. Ensure a dummy file descriptor is opened with 'exec'. -# -build_script: - - pwsh: | - if ( Test-Path "C:/msys64" ) { - $Env:MSYS2_PREFIX="C:/msys64" - $Env:PATH="$Env:MSYS2_PREFIX;$Env:PATH" - } elseif ( Test-Path "C:/tools/msys64" ) { - $Env:MSYS2_PREFIX="C:/tools/msys64" - $Env:PATH="$Env:MSYS2_PREFIX;$Env:PATH" - } - cd "$Env:APPVEYOR_BUILD_FOLDER" - New-Item -Path build -ItemType directory - cd build - Remove-Item -r * - if ( "$Env:OS" -ieq "MinGW" ) { - $CMAKE_CONFIGURE_EXT_ARGS = @("-DPROJECT_GIT_CLONE_REMOTE_ORIGIN_DISABLE_SSH=ON") - if ( Test-Path Env:BUILD_SHARED_LIBS ) { - $CMAKE_CONFIGURE_EXT_ARGS += "-DBUILD_SHARED_LIBS=ON" - } - if ( "$Env:CMAKE_GEN" -ieq "MinGW32" ) { - echo "msys2_shell -mingw32 -lc cd '$Env:APPVEYOR_BUILD_FOLDER/build'; mkdir build cmake .. -G 'MSYS Makefiles' -DPROJECT_ENABLE_UNITTEST=ON -DPROJECT_ENABLE_SAMPLE=ON -DPROJECT_ENABLE_TOOLS=ON -DATBUS_MACRO_ABORT_ON_PROTECTED_ERROR=ON $CMAKE_CONFIGURE_EXT_ARGS; make -j4" - msys2_shell -mingw32 -lc "cd '$Env:APPVEYOR_BUILD_FOLDER/build'; cmake .. -G 'MSYS Makefiles' -DPROJECT_ENABLE_UNITTEST=ON -DPROJECT_ENABLE_SAMPLE=ON -DPROJECT_ENABLE_TOOLS=ON -DATBUS_MACRO_ABORT_ON_PROTECTED_ERROR=ON $CMAKE_CONFIGURE_EXT_ARGS > '$Env:MSYS2_LOG_FILE' 2>&1; make -j4 >> '$Env:MSYS2_LOG_FILE' 2>&1" | Out-Host - Get-Content "$Env:MSYS2_LOG_FILE" - } else { - echo "msys2_shell -mingw64 -lc cd '$Env:APPVEYOR_BUILD_FOLDER/build'; cmake .. -G 'MSYS Makefiles' -DPROJECT_ENABLE_UNITTEST=ON -DPROJECT_ENABLE_SAMPLE=ON -DPROJECT_ENABLE_TOOLS=ON -DATBUS_MACRO_ABORT_ON_PROTECTED_ERROR=ON $CMAKE_CONFIGURE_EXT_ARGS; make -j4" - msys2_shell -mingw64 -lc "cd '$Env:APPVEYOR_BUILD_FOLDER/build'; cmake .. -G 'MSYS Makefiles' -DPROJECT_ENABLE_UNITTEST=ON -DPROJECT_ENABLE_SAMPLE=ON -DPROJECT_ENABLE_TOOLS=ON -DATBUS_MACRO_ABORT_ON_PROTECTED_ERROR=ON $CMAKE_CONFIGURE_EXT_ARGS> '$Env:MSYS2_LOG_FILE' 2>&1; make -j4 >> '$Env:MSYS2_LOG_FILE' 2>&1" | Out-Host - Get-Content "$Env:MSYS2_LOG_FILE" - } - } else { - $CMAKE_CONFIGURE_ARGS = @("..", "-G", $Env:CMAKE_GEN, "-DPROJECT_GIT_CLONE_REMOTE_ORIGIN_DISABLE_SSH=ON") - $CMAKE_CONFIGURE_ARGS += "-A", $Env:PLATFORM - if ( Test-Path Env:BUILD_SHARED_LIBS ) { - $CMAKE_CONFIGURE_ARGS += "-DBUILD_SHARED_LIBS=ON" - } - $CMAKE_CONFIGURE_ARGS += "-DPROJECT_ENABLE_UNITTEST=ON", "-DPROJECT_ENABLE_SAMPLE=ON", "-DPROJECT_ENABLE_TOOLS=ON", "-DATBUS_MACRO_ABORT_ON_PROTECTED_ERROR=ON", "-DCMAKE_BUILD_TYPE=$Env:CONFIGURATION" - echo "cmake $($CMAKE_CONFIGURE_ARGS -join ' ')" - & cmake $CMAKE_CONFIGURE_ARGS - if( Test-Path "deps/protobuf-*/run-build-release.ps1") { Get-Content "deps/protobuf-*/run-build-release.ps1" } - if( Test-Path "deps/protobuf-*/run-build-release.sh") { Get-Content "deps/protobuf-*/run-build-release.sh" } - echo "cmake --build . --config $Env:CONFIGURATION" - & cmake --build . --config $Env:CONFIGURATION - } -# -# Run unit test -# Can not get failed log in mingw, so just check if build success in mingw(custom test myself) -# -test_script: - - pwsh: | - if ( Test-Path "C:/msys64" ) { - $Env:MSYS2_PREFIX="C:/msys64" - $Env:PATH="$Env:MSYS2_PREFIX;$Env:PATH" - } elseif ( Test-Path "C:/tools/msys64" ) { - $Env:MSYS2_PREFIX="C:/tools/msys64" - $Env:PATH="$Env:MSYS2_PREFIX;$Env:PATH" - } - if ( "$Env:OS" -ieq "MinGW" ) { - if ( "$Env:CMAKE_GEN" -ieq "MinGW32" ) { - echo "msys2_shell -mingw32 -lc cd '$Env:APPVEYOR_BUILD_FOLDER/build'; ctest . -V" - msys2_shell -mingw32 -lc "cd '$Env:APPVEYOR_BUILD_FOLDER/build'; ctest . -V > '$Env:MSYS2_LOG_FILE' 2>&1" | Out-Host - Get-Content "$Env:MSYS2_LOG_FILE" - } else { - echo "msys2_shell -mingw64 -lc cd '$Env:APPVEYOR_BUILD_FOLDER/build'; ctest . -V" - msys2_shell -mingw64 -lc "cd '$Env:APPVEYOR_BUILD_FOLDER/build'; ctest . -V > '$Env:MSYS2_LOG_FILE' 2>&1" | Out-Host - Get-Content "$Env:MSYS2_LOG_FILE" - } - } else { - if (!( Test-Path Env:BUILD_SHARED_LIBS )) { - & ctest . -V -C $Env:CONFIGURATION - } - } - -# -# Only build the master branch -# -branches: - only: - - master - -# no need artifacts -notifications: - - provider: Email - to: - - admin@owent.net - - owt5008137@live.com - on_build_success: false - on_build_failure: false - on_build_status_changed: true - - provider: Webhook - url: https://webhooks.gitter.im/e/38667a3c50b8e322422a - on_build_success: false - on_build_failure: false - on_build_status_changed: true diff --git a/atframework/atframe_utils b/atframework/atframe_utils new file mode 160000 index 000000000..0f21003eb --- /dev/null +++ b/atframework/atframe_utils @@ -0,0 +1 @@ +Subproject commit 0f21003ebac88a5f18f388236e7e509080631799 diff --git a/atframework/cmake-toolset b/atframework/cmake-toolset new file mode 160000 index 000000000..3ab12f31f --- /dev/null +++ b/atframework/cmake-toolset @@ -0,0 +1 @@ +Subproject commit 3ab12f31f506812ab5e18bfbf7077d9f53bc8e0e diff --git a/docs/Build.md b/docs/Build.md index 9f7c7b21d..596d2f88c 100755 --- a/docs/Build.md +++ b/docs/Build.md @@ -157,7 +157,7 @@ cmake --build . --target install(或者make构建系统的make install) 仅会 ### 目录结构说明 -+ 3rd_party: 外部组件(不一定是依赖项) ++ third_party: 外部组件(不一定是依赖项) + docs: 文档目录 + include: 导出lib的包含文件(注意不导出的内部接口后文件会直接在src目录里) + project: 工程工具和配置文件集 diff --git a/libatbus-config.cmake.in b/libatbus-config.cmake.in index bbe2e9ff6..864f8d653 100644 --- a/libatbus-config.cmake.in +++ b/libatbus-config.cmake.in @@ -44,35 +44,34 @@ the above reference.) #]=======================================================================] -set(Libatbus_VERSION "@LIBATBUS_VERSION@") +set(${CMAKE_FIND_PACKAGE_NAME}_VERSION "@LIBATBUS_VERSION@") @PACKAGE_INIT@ -# ################################################################################################## +# ###################################################################################################################### # libatbus source dir -set(Libatbus_SOURCE_DIR "@PROJECT_SOURCE_DIR@") +set(${CMAKE_FIND_PACKAGE_NAME}_SOURCE_DIR "@PROJECT_SOURCE_DIR@") -set_and_check(Libatbus_INCLUDE_DIRS "@PACKAGE_INCLUDE_INSTALL_DIR@") -set_and_check(Libatbus_LIBRARY_DIRS "@PACKAGE_CMAKE_INSTALL_LIBDIR@") -set_and_check(Libatbus_PROTOCOL_DIRS "@PACKAGE_INCLUDE_INSTALL_DIR@") +set_and_check(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIRS "@PACKAGE_INCLUDE_INSTALL_DIR@") +set_and_check(${CMAKE_FIND_PACKAGE_NAME}_LIBRARY_DIRS "@PACKAGE_CMAKE_INSTALL_LIBDIR@") +set_and_check(${CMAKE_FIND_PACKAGE_NAME}_PROTOCOL_DIRS "@PACKAGE_INCLUDE_INSTALL_DIR@") include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_LIBATBUS_EXPORT_NAME@.cmake") if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/@PROJECT_LIBATBUS_EXPORT_NAME@.cmake") include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_LIBATBUS_EXPORT_NAME@.cmake") endif() # Normal search. -set(Libatbus_LIBRARIES atframework::atbus) +set(${CMAKE_FIND_PACKAGE_NAME}_LIBRARIES atframework::atbus) -# handle the QUIETLY and REQUIRED arguments and set LIBATBUS_FOUND to TRUE if all listed variables -# are TRUE +# handle the QUIETLY and REQUIRED arguments and set LIBATBUS_FOUND to TRUE if all listed variables are TRUE include("FindPackageHandleStandardArgs") find_package_handle_standard_args( - Libatbus - FOUND_VAR Libatbus_FOUND - REQUIRED_VARS Libatbus_INCLUDE_DIRS Libatbus_LIBRARIES) + ${CMAKE_FIND_PACKAGE_NAME} + FOUND_VAR ${CMAKE_FIND_PACKAGE_NAME}_FOUND + REQUIRED_VARS ${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIRS ${CMAKE_FIND_PACKAGE_NAME}_LIBRARIES) -if(Libatbus_FOUND) - set(LIBATBUS_FOUND ${Libatbus_FOUND}) +if(${CMAKE_FIND_PACKAGE_NAME}_FOUND) + set(LIBATBUS_FOUND ${${CMAKE_FIND_PACKAGE_NAME}_FOUND}) endif() -# check_required_components(Libatbus) +# check_required_components(${CMAKE_FIND_PACKAGE_NAME}) diff --git a/project/cmake/FetchDependeny.cmake b/project/cmake/FetchDependeny.cmake new file mode 100644 index 000000000..a9a87e0f9 --- /dev/null +++ b/project/cmake/FetchDependeny.cmake @@ -0,0 +1,61 @@ +include_guard(GLOBAL) + +find_package(Git REQUIRED) + +set(ATFRAMEWORK_CMAKE_TOOLSET_DIR + "${PROJECT_SOURCE_DIR}/atframework/cmake-toolset" + CACHE PATH "PATH to cmake-toolset") + +set(ATFRAMEWORK_ATFRAME_UTILS_REPO_DIR + "${PROJECT_SOURCE_DIR}/atframework/atframe_utils" + CACHE PATH "PATH to atframe_utils") + +if(NOT ATFRAMEWORK_CMAKE_TOOLSET_EXECUTE_PROCESS_OUTPUT_OPTIONS) + unset(ATFRAMEWORK_CMAKE_TOOLSET_EXECUTE_PROCESS_OUTPUT_OPTIONS) + if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.15") + list(APPEND ATFRAMEWORK_CMAKE_TOOLSET_EXECUTE_PROCESS_OUTPUT_OPTIONS COMMAND_ECHO STDOUT) + endif() + if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.18") + list(APPEND ATFRAMEWORK_CMAKE_TOOLSET_EXECUTE_PROCESS_OUTPUT_OPTIONS ECHO_OUTPUT_VARIABLE ECHO_ERROR_VARIABLE) + endif() +endif() + +if(NOT EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_DIR}/Import.cmake") + execute_process( + COMMAND ${GIT_EXECUTABLE} submodule update --depth 100 --recommend-shallow -f --init -- atframework/cmake-toolset + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" ${ATFRAMEWORK_CMAKE_TOOLSET_EXECUTE_PROCESS_OUTPUT_OPTIONS}) + set(ATFRAMEWORK_CMAKE_TOOLSET_DIR + "${PROJECT_SOURCE_DIR}/atframework/cmake-toolset" + CACHE PATH "PATH to cmake-toolset" FORCE) +endif() + +include("${ATFRAMEWORK_CMAKE_TOOLSET_DIR}/Import.cmake") + +macro(ATFRAMEWORK_ATFRAME_UTILS_POPULATE) + if(NOT EXISTS "${ATFRAMEWORK_ATFRAME_UTILS_REPO_DIR}/CMakeLists.txt") + execute_process( + COMMAND ${GIT_EXECUTABLE} submodule update --depth 100 --recommend-shallow -f --init -- atframework/atframe_utils + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" ${ATFRAMEWORK_CMAKE_TOOLSET_EXECUTE_PROCESS_OUTPUT_OPTIONS}) + set(ATFRAMEWORK_ATFRAME_UTILS_REPO_DIR + "${PROJECT_SOURCE_DIR}/atframework/atframe_utils" + CACHE PATH "PATH to atframe_utils" FORCE) + endif() +endmacro() + +if(TARGET atframe_utils) + set(ATFRAMEWORK_ATFRAME_UTILS_LINK_NAME atframe_utils) +elseif(TARGET atframework::atframe_utils) + set(ATFRAMEWORK_ATFRAME_UTILS_LINK_NAME atframework::atframe_utils) +else() + set(ATFRAMEWORK_ATFRAME_UTILS_LINK_NAME atframe_utils) + if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/_deps/${ATFRAMEWORK_ATFRAME_UTILS_LINK_NAME}") + file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/_deps/${ATFRAMEWORK_ATFRAME_UTILS_LINK_NAME}") + endif() + atframework_atframe_utils_populate() + add_subdirectory(${CMAKE_CURRENT_BINARY_DIR} + "${CMAKE_CURRENT_BINARY_DIR}/_deps/${ATFRAMEWORK_ATFRAME_UTILS_LINK_NAME}") +endif() + +# ThirdParty +include("${ATFRAMEWORK_CMAKE_TOOLSET_DIR}/ports/libuv/libuv.cmake") +include("${ATFRAMEWORK_CMAKE_TOOLSET_DIR}/ports/protobuf/protobuf.cmake") diff --git a/project/cmake/ProjectBuildOption.cmake b/project/cmake/ProjectBuildOption.cmake index 596e4360c..fba24165b 100755 --- a/project/cmake/ProjectBuildOption.cmake +++ b/project/cmake/ProjectBuildOption.cmake @@ -1,6 +1,10 @@ # 默认配置选项 ##################################################################### +include("${CMAKE_CURRENT_LIST_DIR}/FetchDependeny.cmake") +include(IncludeDirectoryRecurse) +include(EchoWithColor) + # atbus 选项 set(ATBUS_MACRO_BUSID_TYPE "uint64_t" @@ -15,17 +19,14 @@ set(ATBUS_MACRO_DATA_MAX_PROTECT_SIZE 16384 CACHE STRING "max protected node size for mem/shm channel") -# for now, other component in io_stream_connection cost 472 bytes, make_shared will also cost some -# memory. we hope one connection will cost no more than 4KB, so 100K connections will cost no more -# than 400MB memory so we use 3KB for small message buffer, and left about 500 Bytes in feture use. -# This can be 512 or smaller (but not smaller than 32), but in most server environment, memory is -# cheap and there are only few connections between server and server. +# for now, other component in io_stream_connection cost 472 bytes, make_shared will also cost some memory. we hope one +# connection will cost no more than 4KB, so 100K connections will cost no more than 400MB memory so we use 3KB for small +# message buffer, and left about 500 Bytes in feture use. This can be 512 or smaller (but not smaller than 32), but in +# most server environment, memory is cheap and there are only few connections between server and server. set(ATBUS_MACRO_DATA_SMALL_SIZE 3072 - CACHE - STRING - "small message buffer for io_stream channel(used to reduce memory copy when there are many small messages)" -) + CACHE STRING + "small message buffer for io_stream channel(used to reduce memory copy when there are many small messages)") set(ATBUS_MACRO_HUGETLB_SIZE 4194304 @@ -51,11 +52,9 @@ set(ATBUS_MACRO_IOS_SEND_BUFFER_LENGTH option(ATBUS_MACRO_ABORT_ON_PROTECTED_ERROR "abort when any inner error found." OFF) option(PROJECT_RESET_DENPEND_REPOSITORIES "Reset depended repositories if it's already exists." OFF) -option(PROJECT_GIT_CLONE_REMOTE_ORIGIN_DISABLE_SSH - "Do not try to use ssh url when clone dependency." OFF) -option( - PROJECT_FIND_CONFIGURE_PACKAGE_PARALLEL_BUILD - "Parallel building for FindConfigurePackage. It's usually useful for some CI with low memory." ON) +option(PROJECT_GIT_CLONE_REMOTE_ORIGIN_DISABLE_SSH "Do not try to use ssh url when clone dependency." OFF) +option(PROJECT_FIND_CONFIGURE_PACKAGE_PARALLEL_BUILD + "Parallel building for FindConfigurePackage. It's usually useful for some CI with low memory." ON) option(ATFRAMEWORK_USE_DYNAMIC_LIBRARY "Build and linking with dynamic libraries." OFF) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ff8388552..cc1e671c3 100755 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,6 @@ echowithcolor(COLOR GREEN "-- Configure ${CMAKE_CURRENT_LIST_DIR}") -file(RELATIVE_PATH PROJECT_ROOT_RELINC_DIR ${CMAKE_CURRENT_LIST_DIR} - ${PROJECT_LIBATBUS_ROOT_INC_DIR}) +file(RELATIVE_PATH PROJECT_ROOT_RELINC_DIR ${CMAKE_CURRENT_LIST_DIR} ${PROJECT_LIBATBUS_ROOT_INC_DIR}) set(PROJECT_LIB_SRC_LIST "${PROJECT_LIBATBUS_ROOT_INC_DIR}/detail/buffer.h" @@ -29,9 +28,8 @@ set(PROJECT_LIB_SRC_LIST set(PROJECT_LIB_PROTOCOL_SRC_LIST "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb.h" "${PROJECT_LIBATBUS_ROOT_SRC_DIR}/libatbus_protocol.pb.cc") -set_source_files_properties( - "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb.h" - "${PROJECT_LIBATBUS_ROOT_SRC_DIR}/libatbus_protocol.pb.cc" PROPERTIES GENERATED TRUE) +set_source_files_properties("${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb.h" + "${PROJECT_LIBATBUS_ROOT_SRC_DIR}/libatbus_protocol.pb.cc" PROPERTIES GENERATED TRUE) list(REMOVE_DUPLICATES PROJECT_LIB_SRC_LIST) source_group_by_dir(PROJECT_LIB_SRC_LIST) @@ -43,14 +41,12 @@ set_target_properties( CXX_VISIBILITY_PRESET "default" WINDOWS_EXPORT_ALL_SYMBOLS TRUE VERSION ${LIBATBUS_VERSION}) -target_link_libraries("${PROJECT_LIBATBUS_LIB_LINK}-protocol" - INTERFACE ${3RD_PARTY_PROTOBUF_LINK_NAME}) +target_link_libraries("${PROJECT_LIBATBUS_LIB_LINK}-protocol" INTERFACE ${3RD_PARTY_PROTOBUF_LINK_NAME}) target_include_directories( "${PROJECT_LIBATBUS_LIB_LINK}-protocol" PRIVATE "$" # INTERFACE "$" ) -target_compile_options("${PROJECT_LIBATBUS_LIB_LINK}-protocol" - PRIVATE ${PROJECT_LIBATBUS_PRIVATE_COMPILE_OPTIONS}) +target_compile_options("${PROJECT_LIBATBUS_LIB_LINK}-protocol" PRIVATE ${PROJECT_LIBATBUS_PRIVATE_COMPILE_OPTIONS}) if(PROJECT_BUILD_TOOLS_PATCH_PROTOBUF_SOURCES_OPTIONS) target_compile_options("${PROJECT_LIBATBUS_LIB_LINK}-protocol" PRIVATE ${PROJECT_BUILD_TOOLS_PATCH_PROTOBUF_SOURCES_OPTIONS}) @@ -60,8 +56,7 @@ add_dependencies("${PROJECT_LIBATBUS_LIB_LINK}-protocol" "atbus-generate-protoco if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.15") list(PREPEND PROJECT_LIBATBUS_PUBLIC_LINK_NAMES "${PROJECT_LIBATBUS_LIB_LINK}-protocol") else() - set(PROJECT_LIBATBUS_PUBLIC_LINK_NAMES "${PROJECT_LIBATBUS_LIB_LINK}-protocol" - ${PROJECT_LIBATBUS_PUBLIC_LINK_NAMES}) + set(PROJECT_LIBATBUS_PUBLIC_LINK_NAMES "${PROJECT_LIBATBUS_LIB_LINK}-protocol" ${PROJECT_LIBATBUS_PUBLIC_LINK_NAMES}) endif() if(BUILD_SHARED_LIBS OR ATFRAMEWORK_USE_DYNAMIC_LIBRARY) @@ -73,8 +68,7 @@ if(BUILD_SHARED_LIBS OR ATFRAMEWORK_USE_DYNAMIC_LIBRARY) VERSION ${LIBATBUS_VERSION} SOVERSION ${LIBATBUS_VERSION} INTERFACE_COMPILE_DEFINITIONS ATBUS_MACRO_API_DLL=1) - target_compile_definitions(${PROJECT_LIBATBUS_LIB_LINK} PRIVATE ATBUS_MACRO_API_NATIVE=1 - ATBUS_MACRO_API_DLL=1) + target_compile_definitions(${PROJECT_LIBATBUS_LIB_LINK} PRIVATE ATBUS_MACRO_API_NATIVE=1 ATBUS_MACRO_API_DLL=1) else() add_library(${PROJECT_LIBATBUS_LIB_LINK} STATIC ${PROJECT_LIB_SRC_LIST}) set_target_properties( @@ -93,29 +87,14 @@ target_include_directories( PRIVATE "$") target_compile_definitions(${PROJECT_LIBATBUS_LIB_LINK} PRIVATE ATBUS_MACRO_BUILD_API=1) -target_compile_options(${PROJECT_LIBATBUS_LIB_LINK} - PRIVATE ${PROJECT_LIBATBUS_PRIVATE_COMPILE_OPTIONS}) +target_compile_options(${PROJECT_LIBATBUS_LIB_LINK} PRIVATE ${PROJECT_LIBATBUS_PRIVATE_COMPILE_OPTIONS}) target_link_libraries(${PROJECT_LIBATBUS_LIB_LINK} PUBLIC ${PROJECT_LIBATBUS_PUBLIC_LINK_NAMES}) -if(PROJECT_LIBATBUS_INTERFACE_LINK_NAMES) - target_link_libraries(${PROJECT_LIBATBUS_LIB_LINK} - INTERFACE ${PROJECT_LIBATBUS_INTERFACE_LINK_NAMES}) - if(BUILD_SHARED_LIBS) - target_link_libraries(${PROJECT_LIBATBUS_LIB_LINK} - PRIVATE ${PROJECT_LIBATBUS_INTERFACE_LINK_NAMES}) - endif() -endif() - -if(PROJECT_LIBATBUS_PUBLIC_INCLUDE_DIRS) - target_include_directories("${PROJECT_LIBATBUS_LIB_LINK}-protocol" - PUBLIC "$") -endif() if(MSVC) set_property(TARGET ${PROJECT_LIBATBUS_LIB_LINK} PROPERTY FOLDER "atframework") set_property(TARGET "${PROJECT_LIBATBUS_LIB_LINK}-protocol" PROPERTY FOLDER "atframework") endif() -set(PROJECT_LIBATBUS_EXPORT_TARGETS ${PROJECT_LIBATBUS_LIB_LINK} - "${PROJECT_LIBATBUS_LIB_LINK}-protocol") +set(PROJECT_LIBATBUS_EXPORT_TARGETS ${PROJECT_LIBATBUS_LIB_LINK} "${PROJECT_LIBATBUS_LIB_LINK}-protocol") install( TARGETS ${PROJECT_LIBATBUS_EXPORT_TARGETS} @@ -131,14 +110,3 @@ install( REGEX ".+\\.h(pp)?$" PATTERN ".svn" EXCLUDE PATTERN ".git" EXCLUDE) - -export( - TARGETS ${PROJECT_LIBATBUS_EXPORT_TARGETS} - FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_LIBATBUS_EXPORT_NAME}.cmake" - NAMESPACE atframework:: - # EXPORT_LINK_INTERFACE_LIBRARIES -) -install( - EXPORT ${PROJECT_LIBATBUS_EXPORT_NAME} - NAMESPACE "atframework::" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake") diff --git a/src/libatbus.macro.cmake b/src/libatbus.macro.cmake index d2987657d..c4849990b 100755 --- a/src/libatbus.macro.cmake +++ b/src/libatbus.macro.cmake @@ -1,33 +1,30 @@ -# =========== libatbus/src =========== -set (PROJECT_LIBATBUS_ROOT_SRC_DIR ${CMAKE_CURRENT_LIST_DIR}) +# =========== libatbus/src =========== +set(PROJECT_LIBATBUS_ROOT_SRC_DIR ${CMAKE_CURRENT_LIST_DIR}) -set (PROJECT_LIBATBUS_LIB_LINK "atbus") -set (PROJECT_LIBATBUS_EXPORT_NAME libatbus-target) +set(PROJECT_LIBATBUS_LIB_LINK "atbus") +set(PROJECT_LIBATBUS_EXPORT_NAME ${PROJECT_NAME}-target) # include("${PROJECT_LIBATBUS_ROOT_SRC_DIR}/XXX.cmake") -add_custom_command ( - OUTPUT - "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb.h" - "${PROJECT_LIBATBUS_ROOT_SRC_DIR}/libatbus_protocol.pb.cc" - "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb" - COMMAND ${3RD_PARTY_PROTOBUF_BIN_PROTOC} - --proto_path ${PROJECT_LIBATBUS_ROOT_INC_DIR} - -o "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb" - "--cpp_out=${PROJECT_LIBATBUS_ROOT_INC_DIR}/" - "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.proto" - COMMAND ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb.cc" "${PROJECT_LIBATBUS_ROOT_SRC_DIR}/libatbus_protocol.pb.cc" - COMMAND ${CMAKE_COMMAND} -E remove -f "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb.cc" - DEPENDS "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.proto" - COMMENT "Generate ${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb.h, ${PROJECT_LIBATBUS_ROOT_SRC_DIR}/libatbus_protocol.pb.cc and ${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb" +add_custom_command( + OUTPUT "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb.h" + "${PROJECT_LIBATBUS_ROOT_SRC_DIR}/libatbus_protocol.pb.cc" + "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb" + COMMAND + ${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_PROTOBUF_BIN_PROTOC} --proto_path ${PROJECT_LIBATBUS_ROOT_INC_DIR} -o + "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb" "--cpp_out=${PROJECT_LIBATBUS_ROOT_INC_DIR}/" + "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.proto" + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb.cc" + "${PROJECT_LIBATBUS_ROOT_SRC_DIR}/libatbus_protocol.pb.cc" + COMMAND ${CMAKE_COMMAND} -E remove -f "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb.cc" + DEPENDS "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.proto" + COMMENT + "Generate ${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb.h, ${PROJECT_LIBATBUS_ROOT_SRC_DIR}/libatbus_protocol.pb.cc and ${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb" ) -add_custom_target("atbus-generate-protocol" SOURCES - "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb.h" - "${PROJECT_LIBATBUS_ROOT_SRC_DIR}/libatbus_protocol.pb.cc" -) - -if (MSVC) - set_property(TARGET "atbus-generate-protocol" PROPERTY FOLDER "atframework") -endif () +add_custom_target("atbus-generate-protocol" SOURCES "${PROJECT_LIBATBUS_ROOT_INC_DIR}/libatbus_protocol.pb.h" + "${PROJECT_LIBATBUS_ROOT_SRC_DIR}/libatbus_protocol.pb.cc") +if(MSVC) + set_property(TARGET "atbus-generate-protocol" PROPERTY FOLDER "atframework") +endif()