|
| 1 | +cmake_minimum_required(VERSION 3.0) |
| 2 | + |
| 3 | + |
| 4 | +# Find the source file that contains the version information |
| 5 | +find_file(VERSION_FILE include/tigerapi/version.h PATHS ${CMAKE_SOURCE_DIR}) |
| 6 | + |
| 7 | +message(version file " ${VERSION_FILE}") |
| 8 | +# Extract the version information from the source file |
| 9 | +file(READ ${VERSION_FILE} VERSION_FILE_CONTENTS) |
| 10 | +string(REGEX MATCH "([0-9]\\.[0-9]\\.[0-9])" |
| 11 | + PROJECT_VERSION "${VERSION_FILE_CONTENTS}") |
| 12 | +message(PROJECT_VERSION " ${PROJECT_VERSION}") |
| 13 | + |
| 14 | +project(tigerapi VERSION ${PROJECT_VERSION}) |
| 15 | + |
| 16 | + |
| 17 | +# Configure required libraries ... |
| 18 | +if(UNIX) # Darwing or Linux |
| 19 | + |
| 20 | + find_package(Boost REQUIRED COMPONENTS system thread log program_options chrono) |
| 21 | + find_package(Threads REQUIRED) |
| 22 | + find_package(absl REQUIRED) |
| 23 | + |
| 24 | + # cpprest |
| 25 | + find_path(CPPREST_INCLUDE_DIR NAMES cpprest/http_client.h cpprest/http_msg.h) |
| 26 | + find_library(CPPREST_LIBRARY NAMES cpprest) |
| 27 | + message(CPPREST_INCLUDE_DIR " ${CPPREST_INCLUDE_DIR}") |
| 28 | + message(CPPREST_LIBRARY " ${CPPREST_LIBRARY}") |
| 29 | + |
| 30 | + set(Protobuf_INCLUDE_DIR "/usr/local/opt/protobuf/include") |
| 31 | + set(Protobuf_LIBRARY "/usr/local/opt/protobuf/lib/libprotobuf.dylib") |
| 32 | + set(Protobuf_PROTOC_LIBRARY "/usr/local/opt/protobuf/lib/libprotoc.dylib") |
| 33 | + set(Protobuf_PROTOC_EXECUTABLE "/usr/local/opt/protobuf/bin/protoc") |
| 34 | + |
| 35 | + # 查找 Protobuf 包 |
| 36 | + find_package(Protobuf REQUIRED) |
| 37 | + message(STATUS "Protobuf version: ${Protobuf_VERSION}") |
| 38 | + message(STATUS "Protobuf include dir: ${Protobuf_INCLUDE_DIR}") |
| 39 | + message(STATUS "Protobuf libraries: ${Protobuf_LIBRARY}") |
| 40 | + |
| 41 | + if(APPLE) |
| 42 | + # file(GLOB OPENSSL_ROOT_DIR /usr/local/Cellar/openssl*/*) |
| 43 | + file(GLOB OPENSSL_ROOT_DIR /usr/local/opt/openssl/* /opt/homebrew/Cellar/openssl@3/*) |
| 44 | + # Prefer the latest (make the latest one first) |
| 45 | + list(REVERSE OPENSSL_ROOT_DIR) |
| 46 | + |
| 47 | + find_package(OpenSSL REQUIRED) |
| 48 | + message(OPENSSL_ROOT_DIR " ${OPENSSL_ROOT_DIR}") |
| 49 | + message(OPENSSL_LIBRARIES " ${OPENSSL_LIBRARIES}") |
| 50 | + |
| 51 | +# set(OPENSSL_VERSION "1.1.1q") |
| 52 | + |
| 53 | + set(ZLIB_LIBRARY /opt/homebrew/Cellar/zlib/1.2.13/lib/libz.dylib ) |
| 54 | + message(ZLIB_LIBRARY " ${ZLIB_LIBRARY}") |
| 55 | + |
| 56 | + else() |
| 57 | + find_package(OpenSSL 1.0.1 REQUIRED) |
| 58 | + set(OPENSSL_VERSION "1.0.1") |
| 59 | + endif() |
| 60 | + |
| 61 | +elseif(WIN32) |
| 62 | + message(FATAL_ERROR "-- please compile via Visual Studio ") |
| 63 | +else() |
| 64 | + message(FATAL_ERROR "-- Unsupported platform sorry! :( ") |
| 65 | +endif() |
| 66 | + |
| 67 | +# Configure compiler options ... |
| 68 | +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") |
| 69 | + |
| 70 | + message("-- configuring clang options") |
| 71 | +# set(CMAKE_CXX_FLAGS "-arch x86_64 -std=c++11 -stdlib=libc++ -DBOOST_LOG_DYN_LINK -Wno-deprecated-declarations") |
| 72 | + set(CMAKE_CXX_FLAGS "-arch arm64 -std=c++14 -stdlib=libc++ -DBOOST_LOG_DYN_LINK -Wno-deprecated-declarations") |
| 73 | + |
| 74 | +elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU") |
| 75 | + |
| 76 | + message("-- configuring gcc options") |
| 77 | + |
| 78 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -DBOOST_LOG_DYN_LINK") |
| 79 | + |
| 80 | +endif() |
| 81 | + |
| 82 | +# Project construction ... |
| 83 | +# src files ... |
| 84 | +file(GLOB MY_SOURCE_FILES "include/cpprest/*.h" "include/cpprest/details/*.h" "include/openapi_pb/pb_source/*.*" |
| 85 | +"include/tigerapi/push_socket/*.h" "include/tigerapi/*.h" "src/*.cpp" "src/push_socket/*.cpp") |
| 86 | +add_library(${PROJECT_NAME} cpprest/ ${MY_SOURCE_FILES}) |
| 87 | +message(MY_SOURCE_FILES " ${MY_SOURCE_FILES}") |
| 88 | +# 确保生成动态库 |
| 89 | +set_target_properties(${PROJECT_NAME} PROPERTIES |
| 90 | + SOVERSION ${PROJECT_VERSION} |
| 91 | + VERSION ${PROJECT_VERSION} |
| 92 | +) |
| 93 | + |
| 94 | +# headers search paths ... |
| 95 | +#set(HEADER_SEARCH_PATHS ${CPPREST_INCLUDE_DIR} ${Boost_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR}) |
| 96 | +set(HEADER_SEARCH_PATHS ${Boost_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR} ${PROTOBUF_INCLUDE_DIR}) |
| 97 | + |
| 98 | + |
| 99 | +set(OPENSSL_LIBS "${OPENSSL_LIBRARIES}") |
| 100 | +set(LIBRARIES_SEARCH_PATHS ${OPENSSL_LIBS} ${Boost_LIBRARIES} ${CPPREST_LIBRARY} ${ZIP_LIBRARY} ${Protobuf_LIBRARY} ${Protobuf_PROTOC_LIBRARY}) |
| 101 | + |
| 102 | + |
| 103 | +message(BOOST_LIBS " ${Boost_LIBRARIES}") |
| 104 | +message(OPENSSL_LIBS " ${OPENSSL_LIBRARIES}") |
| 105 | +#message(CPPRESTSDK_LIBRARY " ${CPPRESTSDK_LIBRARY}") |
| 106 | +message(ZLIB_LIBRARY " ${ZLIB_LIBRARY}") |
| 107 | +message(LIBRARIES_SEARCH_PATHS " ${LIBRARIES_SEARCH_PATHS}") |
| 108 | + |
| 109 | +include_directories(${HEADER_SEARCH_PATHS}) |
| 110 | +if (APPLE) |
| 111 | + target_link_libraries(${PROJECT_NAME} PRIVATE |
| 112 | + "-framework CoreFoundation" |
| 113 | + "-framework Security" |
| 114 | + ${LIBRARIES_SEARCH_PATHS} |
| 115 | + absl::base |
| 116 | + absl::utility |
| 117 | + ) |
| 118 | + set_target_properties(${PROJECT_NAME} PROPERTIES |
| 119 | + LINK_FLAGS "-W1, -F/Library/Frameworks" |
| 120 | + ) |
| 121 | +else() |
| 122 | + target_link_libraries(${PROJECT_NAME} PRIVATE |
| 123 | + ${LIBRARIES_SEARCH_PATHS} |
| 124 | + OpenSSL::SSL |
| 125 | + OpenSSL::Crypto |
| 126 | + ) |
| 127 | +endif() |
| 128 | + |
| 129 | + |
| 130 | + |
| 131 | + |
| 132 | +install(DIRECTORY include/ |
| 133 | + DESTINATION "include" |
| 134 | + FILES_MATCHING |
| 135 | + PATTERN "*.h" |
| 136 | + # PATTERN "*.cc" |
| 137 | + ) |
| 138 | + |
| 139 | +install(TARGETS ${PROJECT_NAME} |
| 140 | + EXPORT ${PROJECT_NAME}Targets |
| 141 | + LIBRARY DESTINATION lib |
| 142 | + ARCHIVE DESTINATION lib |
| 143 | + RUNTIME DESTINATION bin |
| 144 | + INCLUDES DESTINATION include |
| 145 | + ) |
| 146 | +install(EXPORT ${PROJECT_NAME}Targets |
| 147 | + FILE ${PROJECT_NAME}Targets.cmake |
| 148 | + NAMESPACE ${PROJECT_NAME}:: |
| 149 | + DESTINATION lib/cmake/${PROJECT_NAME} |
| 150 | + ) |
0 commit comments