From 5204326a53bad7716dc86e6bc75289939158d76a Mon Sep 17 00:00:00 2001 From: moneroexamples Date: Mon, 18 Mar 2019 07:01:12 +0800 Subject: [PATCH] modernized cmake --- CMakeLists.txt | 109 ++++------------------------------------- cmake/FindMonero.cmake | 57 ++++++++++++++++----- src/CMakeLists.txt | 34 ++++++++++++- tests/CMakeLists.txt | 18 +------ 4 files changed, 88 insertions(+), 130 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 902428c..2bea90f 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,119 +1,29 @@ -cmake_minimum_required(VERSION 3.2) +cmake_minimum_required(VERSION 3.8) -set(PROJECT_NAME - xmregcore) +set(PROJECT_NAME xmregcore) project(${PROJECT_NAME}) set(CMAKE_CXX_STANDARD 14) set(CXX_STANDARD_REQUIRED ON) -if (NOT MONERO_DIR) - set(MONERO_DIR ~/monero) -endif() - -option(BUILD_XMREGCORE_TESTS "Build tests for the project" ON) - -message(STATUS MONERO_DIR ": ${MONERO_DIR}") - -set(MONERO_SOURCE_DIR ${MONERO_DIR} - CACHE PATH "Path to the root directory for Monero") +list(APPEND CMAKE_MODULE_PATH + "${CMAKE_CURRENT_LIST_DIR}/cmake") -# set location of monero build tree -set(MONERO_BUILD_DIR ${MONERO_SOURCE_DIR}/build/release/ - CACHE PATH "Path to the build directory for Monero") - -set(MY_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}/cmake" - CACHE PATH "The path to the cmake directory of the current project") - -list(APPEND CMAKE_MODULE_PATH "${MY_CMAKE_DIR}") - -set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "${MONERO_BUILD_DIR}" - CACHE PATH "Add Monero directory for library searching") +option(BUILD_XMREGCORE_TESTS + "Build tests for the project" ON) include(MyUtils) -include(CodeCoverage) -APPEND_COVERAGE_COMPILER_FLAGS() -set(COVERAGE_EXCLUDES - '${CMAKE_SOURCE_DIR}/ext/*' - '${MONERO_SOURCE_DIR}/*' - '${CMAKE_SOURCE_DIR}/tests/*') - - find_package(Monero) -# find boost -find_package(Boost COMPONENTS - system - filesystem - thread - date_time - chrono - regex - serialization - program_options - REQUIRED) - - -# add src/ subfolder -add_subdirectory(src/) - - -set(SOURCE_FILES - main.cpp) - add_executable(${PROJECT_NAME} - ${SOURCE_FILES}) - - -# include boost headers -target_include_directories(${PROJECT_NAME} - PRIVATE ${Boost_INCLUDE_DIRS}) - -target_include_directories(${PROJECT_NAME} - PRIVATE ${MONERO_SOURCE_DIR}/build) - -# include monero headers -target_include_monero_directories(${PROJECT_NAME}) - -set(LIBRARIES - myxrmcore - ${Monero_LIBRARIES} - ${Boost_LIBRARIES} - sodium - pthread - unbound - curl - ssl - crypto) - -if(APPLE) - set(LIBRARIES ${LIBRARIES} "-framework IOKit -framework Foundation") -else() - set(LIBRARIES ${LIBRARIES} atomic) -endif() - -if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND NOT WIN32) - set(LIBRARIES ${LIBRARIES} unwind) -endif() - - -if (WIN32) - set(LIBRARIES ${LIBRARIES} - wsock32 - ntdll - ws2_32 - Iphlpapi) -else() - set(LIBRARIES ${LIBRARIES} dl) -endif() + main.cpp) -find_package(HIDAPI) -set(LIBRARIES ${LIBRARIES} ${HIDAPI_LIBRARIES}) +add_subdirectory(src/) target_link_libraries(${PROJECT_NAME} - PRIVATE ${LIBRARIES}) + PRIVATE myxrmcore) if (BUILD_XMREGCORE_TESTS) enable_testing() @@ -121,3 +31,4 @@ if (BUILD_XMREGCORE_TESTS) add_subdirectory(tests) endif() + diff --git a/cmake/FindMonero.cmake b/cmake/FindMonero.cmake index bb62d75..4c481a2 100755 --- a/cmake/FindMonero.cmake +++ b/cmake/FindMonero.cmake @@ -33,6 +33,25 @@ # blockchain_db;ringct;wallet;cncrypto;easylogging;version;checkpoints; # ringct_basic) + +if (NOT MONERO_DIR) + set(MONERO_DIR ~/monero) +endif() + +message(STATUS MONERO_DIR ": ${MONERO_DIR}") + +set(MONERO_SOURCE_DIR ${MONERO_DIR} + CACHE PATH "Path to the root directory for Monero") + +# set location of monero build tree +set(MONERO_BUILD_DIR ${MONERO_SOURCE_DIR}/build/release/ + CACHE PATH "Path to the build directory for Monero") + + +set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "${MONERO_BUILD_DIR}" + CACHE PATH "Add Monero directory for library searching") + + set(LIBS cryptonote_core blockchain_db cryptonote_protocol @@ -79,10 +98,10 @@ foreach (l ${LIBS}) message(STATUS FindMonero " Xmr_${L}_LIBRARIES ${Xmr_${L}_LIBRARY}") - add_library(${l} STATIC IMPORTED GLOBAL) + add_library(${l} STATIC IMPORTED) set_property(TARGET ${l} PROPERTY IMPORTED_LOCATION ${Xmr_${L}_LIBRARIES}) - set(Monero_LIBRARIES ${Monero_LIBRARIES} ${l} CACHE INTERNAL "Monero LIBRARIES") + set(Monero_LIBRARIES ${Monero_LIBRARIES} ${l} CACHE INTERNAL "Monero LIBRARIES") endforeach() @@ -91,15 +110,29 @@ message("FOUND Monero_LIBRARIES: ${Monero_LIBRARIES}") message(STATUS ${MONERO_SOURCE_DIR}/build) -macro(target_include_monero_directories target_name) +#macro(target_include_monero_directories target_name) + + #target_include_directories(${target_name} + #PRIVATE + #${MONERO_SOURCE_DIR}/src + #${MONERO_SOURCE_DIR}/external + #${MONERO_SOURCE_DIR}/build + #${MONERO_SOURCE_DIR}/external/easylogging++ + #${MONERO_SOURCE_DIR}/contrib/epee/include + #${MONERO_SOURCE_DIR}/external/db_drivers/liblmdb) + +#endmacro(target_include_monero_directories) + + +add_library(Monero::Monero INTERFACE IMPORTED GLOBAL) - target_include_directories(${target_name} - PRIVATE - ${MONERO_SOURCE_DIR}/src - ${MONERO_SOURCE_DIR}/external - ${MONERO_SOURCE_DIR}/build - ${MONERO_SOURCE_DIR}/external/easylogging++ - ${MONERO_SOURCE_DIR}/contrib/epee/include - ${MONERO_SOURCE_DIR}/external/db_drivers/liblmdb) +target_include_directories(Monero::Monero INTERFACE + ${MONERO_SOURCE_DIR}/src + ${MONERO_SOURCE_DIR}/external + ${MONERO_SOURCE_DIR}/build + ${MONERO_SOURCE_DIR}/external/easylogging++ + ${MONERO_SOURCE_DIR}/contrib/epee/include + ${MONERO_SOURCE_DIR}/external/db_drivers/liblmdb) -endmacro(target_include_monero_directories) +target_link_libraries(Monero::Monero INTERFACE + ${Monero_LIBRARIES}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index db87664..d89a37a 100755 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -12,6 +12,34 @@ set(SOURCE_FILES Account.h Account.cpp) +# find boost +find_package(Boost COMPONENTS + system + filesystem + thread + date_time + chrono + regex + serialization + program_options + REQUIRED) + +find_package(HIDAPI) + +set(LIBRARIES + Monero::Monero + ${Boost_LIBRARIES} + ${HIDAPI_LIBRARIES} + sodium + pthread + unbound + curl + ssl + crypto + dl + atomic + unwind) + # make static library called libmyxrm # that we are going to link to # in the root CMakeLists.txt file @@ -19,5 +47,7 @@ add_library(myxrmcore STATIC ${SOURCE_FILES}) -# include monero headers -target_include_monero_directories(myxrmcore) +target_link_libraries(myxrmcore + PUBLIC ${LIBRARIES}) + + diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9609e48..8b84c21 100755 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -5,10 +5,9 @@ macro(add_test_target _TEST_NAME) ${_TEST_NAME}_tests.cpp JsonTx.cpp) - target_include_monero_directories(${_TEST_NAME}_tests) - target_link_libraries(${_TEST_NAME}_tests PRIVATE + myxrmcore gtest gtest_main gmock gmock_main ${LIBRARIES}) @@ -17,24 +16,9 @@ macro(add_test_target _TEST_NAME) endmacro() -macro(add_cov_target _TEST_NAME) - - SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML( - NAME ${_TEST_NAME}_cov - EXECUTABLE ${_TEST_NAME}_tests - DEPENDENCIES ${_TEST_NAME}_tests) - -endmacro() - resource_dir("res") - add_test_target(universalidentifier) add_test_target(account) add_test_target(tools) -add_cov_target(universalidentifier) -add_cov_target(account) -add_cov_target(tools) - -