|
| 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 | + |
| 23 | + # cpprest |
| 24 | + find_path(CPPREST_INCLUDE_DIR NAMES cpprest/http_client.h cpprest/http_msg.h) |
| 25 | + find_library(CPPREST_LIBRARY NAMES cpprest) |
| 26 | + message(CPPREST_INCLUDE_DIR " ${CPPREST_INCLUDE_DIR}") |
| 27 | + message(CPPREST_LIBRARY " ${CPPREST_LIBRARY}") |
| 28 | + |
| 29 | + if(APPLE) |
| 30 | + # Prefer a homebrew version of OpenSSL over the one in /usr/lib |
| 31 | + # file(GLOB OPENSSL_ROOT_DIR /usr/local/Cellar/openssl*/*) |
| 32 | + file(GLOB OPENSSL_ROOT_DIR /usr/local/opt/openssl/*) |
| 33 | + # Prefer the latest (make the latest one first) |
| 34 | + list(REVERSE OPENSSL_ROOT_DIR) |
| 35 | + |
| 36 | + find_package(OpenSSL 1.1 REQUIRED) |
| 37 | + set(OPENSSL_VERSION "1.1.1q") |
| 38 | + |
| 39 | + |
| 40 | + else() |
| 41 | + find_package(OpenSSL 1.0.1 REQUIRED) |
| 42 | + set(OPENSSL_VERSION "1.0.1") |
| 43 | + endif() |
| 44 | + |
| 45 | +elseif(WIN32) |
| 46 | + message(FATAL_ERROR "-- please compile via Visual Studio ") |
| 47 | +else() |
| 48 | + message(FATAL_ERROR "-- Unsupported platform sorry! :( ") |
| 49 | +endif() |
| 50 | + |
| 51 | +# Configure compiler options ... |
| 52 | +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") |
| 53 | + |
| 54 | + message("-- configuring clang options") |
| 55 | + set(CMAKE_CXX_FLAGS "-arch x86_64 -std=c++11 -stdlib=libc++ -DBOOST_LOG_DYN_LINK -Wno-deprecated-declarations") |
| 56 | + |
| 57 | +elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU") |
| 58 | + |
| 59 | + message("-- configuring gcc options") |
| 60 | + |
| 61 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -DBOOST_LOG_DYN_LINK") |
| 62 | + |
| 63 | +endif() |
| 64 | + |
| 65 | +# Project construction ... |
| 66 | +# src files ... |
| 67 | +add_library(${PROJECT_NAME} |
| 68 | + src/tiger_client.cpp include/tigerapi/tiger_client.h include/tigerapi/constants.h |
| 69 | + include/tigerapi/utils.h src/utils.cpp include/tigerapi/service_types.h include/tigerapi/quote_client.h |
| 70 | + src/quote_client.cpp src/trade_client.cpp include/tigerapi/model.h src/order_util.cpp |
| 71 | + include/tigerapi/order_util.h src/contract_util.cpp include/tigerapi/contract_util.h |
| 72 | + include/tigerapi/client_config.h include/tigerapi/sign_util.h |
| 73 | + include/tigerapi/easylogging++.h src/easylogging++.cc) |
| 74 | + |
| 75 | +# headers search paths ... |
| 76 | +#set(HEADER_SEARCH_PATHS ${CPPREST_INCLUDE_DIR} ${Boost_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR}) |
| 77 | +set(HEADER_SEARCH_PATHS ${Boost_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR}) |
| 78 | + |
| 79 | +# library search paths ... |
| 80 | +if(APPLE) |
| 81 | + set(OPENSSL_LIBS "${OPENSSL_LIBRARIES}") |
| 82 | + set(ZIP_LIBRARY "/usr/local/Cellar/zlib/1.2.12/lib/libz.dylib") |
| 83 | + |
| 84 | + set(LIBRARIES_SEARCH_PATHS ${OPENSSL_LIBS} ${Boost_LIBRARIES} ${CPPREST_LIBRARY} ${ZIP_LIBRARY}) |
| 85 | +else() |
| 86 | + set(OPENSSL_LIBS "${OPENSSL_LIBRARIES}") |
| 87 | + set(LIBRARIES_SEARCH_PATHS ${CPPREST_LIBRARY} ${OPENSSL_LIBS} ${Boost_LIBRARIES} ${ZIP_LIBRARY}) |
| 88 | +endif() |
| 89 | + |
| 90 | +message(BOOST_LIBS " ${Boost_LIBRARIES}") |
| 91 | +message(OPENSSL_LIBS " ${OPENSSL_LIBRARIES}") |
| 92 | +#message(CPPRESTSDK_LIBRARY " ${CPPRESTSDK_LIBRARY}") |
| 93 | +message(ZLIB_LIBRARY " ${ZLIB_LIBRARY}") |
| 94 | +message(LIBRARIES_SEARCH_PATHS " ${LIBRARIES_SEARCH_PATHS}") |
| 95 | + |
| 96 | +include_directories(${HEADER_SEARCH_PATHS}) |
| 97 | +if (APPLE) |
| 98 | + target_link_libraries(${PROJECT_NAME} "-framework CoreFoundation") |
| 99 | + target_link_libraries(${PROJECT_NAME} "-framework Security") |
| 100 | + target_link_libraries(${PROJECT_NAME} ${LIBRARIES_SEARCH_PATHS}) |
| 101 | + set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "-W1, -F/Library/Frameworks ") |
| 102 | +else() |
| 103 | + target_link_libraries(${PROJECT_NAME} ${LIBRARIES_SEARCH_PATHS}) |
| 104 | + target_link_libraries(${PROJECT_NAME} OpenSSL::SSL OpenSSL::Crypto) |
| 105 | + |
| 106 | +endif() |
| 107 | + |
| 108 | + |
| 109 | + |
| 110 | + |
| 111 | +install(DIRECTORY include/ |
| 112 | + DESTINATION "include" |
| 113 | + FILES_MATCHING PATTERN "*.h" |
| 114 | + ) |
| 115 | + |
| 116 | +install(TARGETS ${PROJECT_NAME} |
| 117 | + EXPORT ${PROJECT_NAME}Targets |
| 118 | + LIBRARY DESTINATION lib |
| 119 | + ARCHIVE DESTINATION lib |
| 120 | + RUNTIME DESTINATION bin |
| 121 | + INCLUDES DESTINATION include |
| 122 | + ) |
| 123 | +install(EXPORT ${PROJECT_NAME}Targets |
| 124 | + FILE ${PROJECT_NAME}Targets.cmake |
| 125 | + NAMESPACE ${PROJECT_NAME}:: |
| 126 | + DESTINATION lib/cmake/${PROJECT_NAME} |
| 127 | + ) |
0 commit comments