From 87d09f78e6584037b6e879705e6b6a65ecabd3a8 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 28 Oct 2016 12:18:13 -0700 Subject: [PATCH] make adjustments based on PR review from @themarex --- CMakeLists.txt | 62 +++++++++++++--------------------- scripts/update_dependencies.sh | 6 ++++ 2 files changed, 30 insertions(+), 38 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 36b6fc1c1..f116ab528 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,17 @@ Please create a directory and run cmake from there, passing the path to this sou This process created the file `CMakeCache.txt' and the directory `CMakeFiles'. Please delete them.") endif() +option(ENABLE_MASON "Use mason for dependencies" OFF) +option(ENABLE_CCACHE "Speed up incremental rebuilds via ccache" ON) +option(BUILD_TOOLS "Build OSRM tools" OFF) +option(BUILD_COMPONENTS "Build osrm-components" OFF) +option(ENABLE_ASSERTIONS "Use assertions in release mode" OFF) +option(ENABLE_COVERAGE "Build with coverage instrumentalisation" OFF) +option(ENABLE_SANITIZER "Use memory sanitizer for Debug build" OFF) +option(ENABLE_LTO "Use LTO if available" ON) +option(ENABLE_FUZZING "Fuzz testing using LLVM's libFuzzer" OFF) +option(ENABLE_GOLD_LINKER "Use GNU gold linker if available" ON) + if(ENABLE_MASON) # versions in use @@ -21,15 +32,7 @@ if(ENABLE_MASON) set(MASON_CCACHE_VERSION "3.3.1") message(STATUS "Enabling mason") - if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.mason/mason.cmake") - execute_process( - COMMAND git clone -b v0.1.0 --depth 1 https://github.com/mapbox/mason.git ${CMAKE_CURRENT_SOURCE_DIR}/.mason ERROR_QUIET - ) - endif() - execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/.mason/mason --version ERROR_QUIET OUTPUT_VARIABLE MASON_RELEASE_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) - message(STATUS "Using mason ${MASON_RELEASE_VERSION}") - - include(${CMAKE_CURRENT_SOURCE_DIR}/.mason/mason.cmake) + include(${CMAKE_CURRENT_SOURCE_DIR}/third_party/mason/mason.cmake) if(NOT CMAKE_CXX_COMPILER) mason_use(clang++ VERSION ${MASON_CLANG_VERSION}) message(STATUS "Setting compiler to clang++ ${MASON_CLANG_VERSION} (via mason) ${MASON_PACKAGE_clang++_PREFIX}/bin/clang++") @@ -77,17 +80,6 @@ if(WIN32 AND MSVC_VERSION LESS 1900) message(FATAL_ERROR "Building with Microsoft compiler needs Latest Visual Studio 2015 (Community or better)") endif() -option(ENABLE_MASON "Use mason for dependencies" OFF) -option(ENABLE_CCACHE "Speed up incremental rebuilds via ccache" ON) -option(BUILD_TOOLS "Build OSRM tools" OFF) -option(BUILD_COMPONENTS "Build osrm-components" OFF) -option(ENABLE_ASSERTIONS "Use assertions in release mode" OFF) -option(ENABLE_COVERAGE "Build with coverage instrumentalisation" OFF) -option(ENABLE_SANITIZER "Use memory sanitizer for Debug build" OFF) -option(ENABLE_LTO "Use LTO if available" ON) -option(ENABLE_FUZZING "Fuzz testing using LLVM's libFuzzer" OFF) -option(ENABLE_GOLD_LINKER "Use GNU gold linker if available" ON) - include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/include/) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include/) include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/) @@ -225,6 +217,11 @@ if(CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES MinRelSize OR CM endif() endif() +if (ENABLE_MASON AND (LTO_WORKS OR ENABLE_GOLD_LINKER)) + message(WARNING "ENABLE_MASON and ENABLE_LTO/ENABLE_GOLD_LINKER may not work on all linux systems currently") + message(WARNING "For more details see: https://github.com/Project-OSRM/osrm-backend/issues/3202") +endif() + set(MAYBE_COVERAGE_LIBRARIES "") if (ENABLE_COVERAGE) if (NOT CMAKE_BUILD_TYPE MATCHES "Debug") @@ -366,13 +363,6 @@ if(ENABLE_MASON) add_dependency_includes(${MASON_PACKAGE_bzip2_INCLUDE_DIRS}) set(BZIP2_LIBRARIES ${MASON_PACKAGE_bzip2_STATIC_LIBS}) - # todo - system packages do not provide a remote tarball - # but the mason-cmake integration expects one - #mason_use(zlib VERSION system) - #add_dependency_includes(${MASON_PACKAGE_zlib_INCLUDE_DIRS}) - #set(ZLIB_LIBRARY ${MASON_PACKAGE_zlib_LDFLAGS}) - set(ZLIB_LIBRARY "-lz") - mason_use(tbb VERSION ${MASON_TBB_VERSION}) add_dependency_includes(${MASON_PACKAGE_tbb_INCLUDE_DIRS}) set(TBB_LIBRARIES ${MASON_PACKAGE_tbb_LDFLAGS}) @@ -393,8 +383,6 @@ if(ENABLE_MASON) install(FILES ${TBBGlob} DESTINATION lib) endforeach() - include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/include) - if(BUILD_COMPONENTS) message(FATAL_ERROR "BUILD_COMPONENTS is not supported with ENABLE_MASON") endif() @@ -411,14 +399,8 @@ if(ENABLE_MASON) set(ENV{CCACHE_CPP2} "true") endif() - else() - list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/cmake") - set(OSMIUM_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/include") - find_package(Osmium REQUIRED COMPONENTS io) - include_directories(SYSTEM ${OSMIUM_INCLUDE_DIR}) - find_package(Boost 1.49.0 REQUIRED COMPONENTS ${BOOST_COMPONENTS}) add_dependency_includes(${Boost_INCLUDE_DIRS}) @@ -441,9 +423,6 @@ else() find_package(BZip2 REQUIRED) add_dependency_includes(${BZIP2_INCLUDE_DIR}) - find_package(ZLIB REQUIRED) - add_dependency_includes(${ZLIB_INCLUDE_DIRS}) - if(BUILD_COMPONENTS) find_package(GDAL) endif() @@ -472,6 +451,13 @@ else() endif() +# even with mason builds we want to link to system zlib +# to ensure that osrm binaries play well with other binaries like nodejs +find_package(ZLIB REQUIRED) +add_dependency_includes(${ZLIB_INCLUDE_DIRS}) + +include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/include) + if(NOT WIN32 AND NOT Boost_USE_STATIC_LIBS) add_dependency_defines(-DBOOST_TEST_DYN_LINK) endif() diff --git a/scripts/update_dependencies.sh b/scripts/update_dependencies.sh index b0d417ac6..97bf37700 100755 --- a/scripts/update_dependencies.sh +++ b/scripts/update_dependencies.sh @@ -15,11 +15,16 @@ OSMIUM_TAG=v2.9.0 VARIANT_REPO=https://github.com/mapbox/variant.git VARIANT_TAG=v1.1.0 +MASON_REPO=https://github.com/mapbox/mason.git +MASON_TAG=v0.1.0 + VARIANT_LATEST=$(curl https://api.github.com/repos/mapbox/variant/releases/latest | jq ".tag_name") OSMIUM_LATEST=$(curl https://api.github.com/repos/osmcode/libosmium/releases/latest | jq ".tag_name") +MASON_LATEST=$(curl https://api.github.com/repos/mapbox/mason/releases/latest | jq ".tag_name") echo "Latest osmium release is $OSMIUM_LATEST, pulling in \"$OSMIUM_TAG\"" echo "Latest variant release is $VARIANT_LATEST, pulling in \"$VARIANT_TAG\"" +echo "Latest mason release is $MASON_LATEST, pulling in \"$MASON_TAG\"" read -p "Looks good? (Y/n) " ok @@ -27,4 +32,5 @@ if [[ $ok =~ [yY] ]] then git subtree pull -P third_party/libosmium/ $OSMIUM_REPO $OSMIUM_TAG --squash git subtree pull -P third_party/variant/ $VARIANT_REPO $VARIANT_TAG --squash + git subtree pull -P third_party/mason/ $MASON_REPO $MASON_TAG --squash fi