2021-07-17 11:20:45 -04:00
cmake_minimum_required ( VERSION 3.2 )
2014-07-14 10:21:16 -04:00
2022-07-30 19:56:17 -04:00
set ( CMAKE_CXX_STANDARD 17 )
set ( CMAKE_CXX_STANDARD_REQUIRED TRUE )
2022-09-20 15:43:13 -04:00
2015-02-25 12:25:03 -05:00
if ( CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR AND NOT MSVC_IDE )
2014-07-14 10:21:16 -04:00
message ( FATAL_ERROR " In-source builds are not allowed.
P l e a s e c r e a t e a d i r e c t o r y a n d r u n c m a k e f r o m t h e r e , p a s s i n g t h e p a t h t o t h i s s o u r c e d i r e c t o r y a s t h e l a s t a r g u m e n t .
T h i s p r o c e s s c r e a t e d t h e f i l e ` C M a k e C a c h e . t x t ' a n d t h e d i r e c t o r y ` C M a k e F i l e s ' . P l e a s e d e l e t e t h e m . " )
endif ( )
2016-11-27 09:45:55 -05:00
# detect if this is included as subproject and if so expose
# some variables to its parent scope
get_directory_property ( BUILD_AS_SUBPROJECT PARENT_DIRECTORY )
if ( BUILD_AS_SUBPROJECT )
message ( STATUS "Building libosrm as subproject." )
endif ( )
2017-07-19 06:07:06 -04:00
# set OSRM_BUILD_DIR location (might be used in various scripts)
if ( NOT WIN32 AND NOT DEFINED ENV{OSRM_BUILD_DIR} )
set ( ENV{OSRM_BUILD_DIR} ${ CMAKE_CURRENT_BINARY_DIR } )
endif ( )
2022-08-01 16:21:20 -04:00
option ( ENABLE_CONAN "Use conan for dependencies" OFF )
2016-10-28 15:18:13 -04:00
option ( ENABLE_CCACHE "Speed up incremental rebuilds via ccache" ON )
option ( BUILD_TOOLS "Build OSRM tools" OFF )
2017-01-09 15:58:02 -05:00
option ( BUILD_PACKAGE "Build OSRM package" OFF )
2021-10-08 12:06:55 -04:00
option ( BUILD_ROUTED "Build osrm-routed HTTP server" ON )
2016-10-28 15:18:13 -04:00
option ( ENABLE_ASSERTIONS "Use assertions in release mode" OFF )
2020-07-29 02:00:47 -04:00
option ( ENABLE_DEBUG_LOGGING "Use debug logging in release mode" OFF )
2016-10-28 15:18:13 -04:00
option ( ENABLE_COVERAGE "Build with coverage instrumentalisation" OFF )
option ( ENABLE_SANITIZER "Use memory sanitizer for Debug build" OFF )
2017-01-05 06:04:46 -05:00
option ( ENABLE_LTO "Use LTO if available" OFF )
2016-10-28 15:18:13 -04:00
option ( ENABLE_FUZZING "Fuzz testing using LLVM's libFuzzer" OFF )
option ( ENABLE_GOLD_LINKER "Use GNU gold linker if available" ON )
2017-03-01 12:27:57 -05:00
option ( ENABLE_NODE_BINDINGS "Build NodeJs bindings" OFF )
2022-06-27 19:14:28 -04:00
option ( ENABLE_CLANG_TIDY "Enables clang-tidy checks" OFF )
if ( ENABLE_CLANG_TIDY )
find_program ( CLANG_TIDY_COMMAND NAMES clang-tidy )
if ( NOT CLANG_TIDY_COMMAND )
message ( FATAL_ERROR "ENABLE_CLANG_TIDY is ON but clang-tidy is not found!" )
else ( )
message ( STATUS "Found clang-tidy at ${CLANG_TIDY_COMMAND}" )
set ( CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND};--warnings-as-errors=*" )
endif ( )
endif ( )
2017-02-10 10:53:34 -05:00
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" )
2016-11-27 09:45:55 -05:00
# be compatible with version handling before cmake 3.x
if ( POLICY CMP0048 )
cmake_policy ( SET CMP0048 OLD )
endif ( )
2020-06-16 04:55:17 -04:00
if ( POLICY CMP0057 )
cmake_policy ( SET CMP0057 NEW )
endif ( )
if ( POLICY CMP0074 )
cmake_policy ( SET CMP0074 NEW )
endif ( )
2015-03-30 07:26:06 -04:00
project ( OSRM C CXX )
2018-02-24 01:27:32 -05:00
2022-09-17 08:00:53 -04:00
# add @loader_path/$ORIGIN to rpath to make binaries relocatable
if ( APPLE )
set ( CMAKE_BUILD_RPATH "@loader_path" )
else ( )
set ( CMAKE_BUILD_RPATH "\$ORIGIN" )
# https://stackoverflow.com/questions/6324131/rpath-origin-not-having-desired-effect
set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,origin" )
endif ( )
2018-02-24 01:27:32 -05:00
include ( JSONParser )
file ( READ "package.json" packagejsonraw )
sbeParseJson ( packagejson packagejsonraw )
if ( packagejson.version MATCHES "^([0-9]+)\.([0-9]+)\.([0-9]+)" )
set ( OSRM_VERSION_MAJOR ${ CMAKE_MATCH_1 } )
set ( OSRM_VERSION_MINOR ${ CMAKE_MATCH_2 } )
set ( OSRM_VERSION_PATCH ${ CMAKE_MATCH_3 } )
set ( OSRM_VERSION "${OSRM_VERSION_MAJOR}.${OSRM_VERSION_MINOR}.${OSRM_VERSION_PATCH}" )
else ( )
message ( FATAL_ERROR "Version from package.json cannot be parsed, expected semver compatible X.Y.Z, but found ${packagejson.version}" )
endif ( )
2015-09-11 05:37:02 -04:00
2018-02-13 17:57:17 -05:00
if ( MSVC )
add_definitions ( "-DOSRM_PROJECT_DIR=\" ${ CMAKE_CURRENT_SOURCE_DIR } \"")
else ( )
add_definitions ( -DOSRM_PROJECT_DIR= "${CMAKE_CURRENT_SOURCE_DIR}" )
endif ( )
2016-12-06 15:30:46 -05:00
2016-05-27 11:53:51 -04:00
# these two functions build up custom variables:
2016-11-27 09:45:55 -05:00
# DEPENDENCIES_INCLUDE_DIRS and OSRM_DEFINES
2016-05-27 11:53:51 -04:00
# These variables we want to pass to
# include_directories and add_definitions for both
# this build and for sharing externally via pkg-config
2017-03-06 03:42:42 -05:00
function ( add_dependency_includes )
if ( ${ ARGC } GREATER 0 )
list ( APPEND DEPENDENCIES_INCLUDE_DIRS "${ARGV}" )
set ( DEPENDENCIES_INCLUDE_DIRS "${DEPENDENCIES_INCLUDE_DIRS}" PARENT_SCOPE )
endif ( )
2016-05-27 11:53:51 -04:00
endfunction ( add_dependency_includes )
function ( add_dependency_defines defines )
list ( APPEND OSRM_DEFINES "${defines}" )
set ( OSRM_DEFINES "${OSRM_DEFINES}" PARENT_SCOPE )
endfunction ( add_dependency_defines )
2013-11-13 11:08:27 -05:00
set ( CMAKE_EXPORT_COMPILE_COMMANDS ON )
2014-04-01 11:54:41 -04:00
include ( CheckCXXCompilerFlag )
2013-05-12 18:49:14 -04:00
include ( FindPackageHandleStandardArgs )
2016-12-30 19:27:21 -05:00
include ( GNUInstallDirs )
2013-07-03 07:32:31 -04:00
2013-12-16 05:21:30 -05:00
set ( bitness 32 )
if ( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set ( bitness 64 )
message ( STATUS "Building on a 64 bit system" )
else ( )
2016-06-05 17:42:21 -04:00
message ( STATUS "Building on a 32 bit system" )
2013-12-16 05:21:30 -05:00
endif ( )
2016-05-02 09:32:25 -04:00
if ( WIN32 AND MSVC_VERSION LESS 1900 )
message ( FATAL_ERROR "Building with Microsoft compiler needs Latest Visual Studio 2015 (Community or better)" )
2014-05-23 13:15:51 -04:00
endif ( )
2018-02-09 04:57:16 -05:00
# Strictly require GCC>=5.0 and Clang>=3.4 - GCC 4.8 is already too old for C++14.
2017-08-09 18:02:14 -04:00
if ( CMAKE_CXX_COMPILER_ID MATCHES "GNU" )
2018-02-09 04:57:16 -05:00
if ( CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0 )
message ( FATAL_ERROR "GCC>=5.0 required. In case you are on Ubuntu upgrade via ppa:ubuntu-toolchain-r/test" )
2016-12-14 05:00:27 -05:00
endif ( )
2017-08-09 18:02:14 -04:00
elseif ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
2016-12-14 05:00:27 -05:00
if ( CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4 )
message ( FATAL_ERROR "Clang>=3.4 required. In case you are on Ubuntu upgrade via http://apt.llvm.org" )
endif ( )
endif ( )
2016-01-03 11:03:20 -05:00
include_directories ( BEFORE ${ CMAKE_CURRENT_BINARY_DIR } /include/ )
include_directories ( BEFORE ${ CMAKE_CURRENT_SOURCE_DIR } /include/ )
2022-07-30 19:56:17 -04:00
include_directories ( SYSTEM ${ CMAKE_CURRENT_SOURCE_DIR } /third_party/sol2-3.3.0/include )
2016-12-01 19:59:29 -05:00
include_directories ( SYSTEM ${ CMAKE_CURRENT_SOURCE_DIR } /third_party/variant/include )
2013-12-17 11:59:44 -05:00
2016-10-21 13:58:06 -04:00
set ( BOOST_COMPONENTS date_time chrono filesystem iostreams program_options regex system thread unit_test_framework )
2013-07-17 08:47:22 -04:00
2013-12-17 15:42:00 -05:00
configure_file (
2016-01-02 10:11:49 -05:00
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / i n c l u d e / u t i l / v e r s i o n . h p p . i n
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / i n c l u d e / u t i l / v e r s i o n . h p p
2013-12-17 15:42:00 -05:00
)
2016-04-26 07:27:40 -04:00
file ( GLOB UtilGlob src/util/*.cpp src/util/*/*.cpp )
2016-03-01 16:30:31 -05:00
file ( GLOB ExtractorGlob src/extractor/*.cpp src/extractor/*/*.cpp )
2018-01-08 13:12:06 -05:00
file ( GLOB GuidanceGlob src/guidance/*.cpp src/extractor/intersection/*.cpp )
2018-02-01 10:47:43 -05:00
file ( GLOB PartitionerGlob src/partitioner/*.cpp )
2017-03-06 09:50:04 -05:00
file ( GLOB CustomizerGlob src/customize/*.cpp )
2016-01-02 10:11:49 -05:00
file ( GLOB ContractorGlob src/contractor/*.cpp )
2017-03-07 18:30:49 -05:00
file ( GLOB UpdaterGlob src/updater/*.cpp )
2016-01-07 13:19:55 -05:00
file ( GLOB StorageGlob src/storage/*.cpp )
2016-01-02 10:11:49 -05:00
file ( GLOB ServerGlob src/server/*.cpp src/server/**/*.cpp )
file ( GLOB EngineGlob src/engine/*.cpp src/engine/**/*.cpp )
2017-05-27 00:16:20 -04:00
file ( GLOB ErrorcodesGlob src/osrm/errorcodes.cpp )
2013-06-26 19:48:22 -04:00
2016-01-02 10:11:49 -05:00
add_library ( UTIL OBJECT ${ UtilGlob } )
add_library ( EXTRACTOR OBJECT ${ ExtractorGlob } )
2018-01-05 07:05:53 -05:00
add_library ( GUIDANCE OBJECT ${ GuidanceGlob } )
2017-01-23 05:50:03 -05:00
add_library ( PARTITIONER OBJECT ${ PartitionerGlob } )
2017-03-06 09:50:04 -05:00
add_library ( CUSTOMIZER OBJECT ${ CustomizerGlob } )
2016-01-02 10:11:49 -05:00
add_library ( CONTRACTOR OBJECT ${ ContractorGlob } )
2017-03-07 18:30:49 -05:00
add_library ( UPDATER OBJECT ${ UpdaterGlob } )
2016-01-07 13:19:55 -05:00
add_library ( STORAGE OBJECT ${ StorageGlob } )
2016-01-02 10:11:49 -05:00
add_library ( ENGINE OBJECT ${ EngineGlob } )
2021-10-08 12:06:55 -04:00
if ( BUILD_ROUTED )
add_library ( SERVER OBJECT ${ ServerGlob } )
add_executable ( osrm-routed src/tools/routed.cpp $< TARGET_OBJECTS:SERVER > $< TARGET_OBJECTS:UTIL > )
endif ( )
2015-01-13 09:52:24 -05:00
2016-01-02 10:11:49 -05:00
set_target_properties ( UTIL PROPERTIES LINKER_LANGUAGE CXX )
2015-03-31 04:45:35 -04:00
2016-01-07 13:19:55 -05:00
add_executable ( osrm-extract src/tools/extract.cpp )
2017-01-23 05:50:03 -05:00
add_executable ( osrm-partition src/tools/partition.cpp )
2017-03-06 09:50:04 -05:00
add_executable ( osrm-customize src/tools/customize.cpp )
2016-02-14 13:35:37 -05:00
add_executable ( osrm-contract src/tools/contract.cpp )
2018-03-14 05:51:41 -04:00
add_executable ( osrm-datastore src/tools/store.cpp $< TARGET_OBJECTS:MICROTAR > $< TARGET_OBJECTS:UTIL > )
2018-04-19 07:06:36 -04:00
add_library ( osrm src/osrm/osrm.cpp $< TARGET_OBJECTS:ENGINE > $< TARGET_OBJECTS:STORAGE > $< TARGET_OBJECTS:MICROTAR > $< TARGET_OBJECTS:UTIL > )
2017-03-08 05:27:38 -05:00
add_library ( osrm_contract src/osrm/contractor.cpp $< TARGET_OBJECTS:CONTRACTOR > $< TARGET_OBJECTS:UTIL > )
2018-03-16 12:39:18 -04:00
add_library ( osrm_extract src/osrm/extractor.cpp $< TARGET_OBJECTS:EXTRACTOR > $< TARGET_OBJECTS:MICROTAR > $< TARGET_OBJECTS:UTIL > )
2018-01-05 08:33:53 -05:00
add_library ( osrm_guidance $< TARGET_OBJECTS:GUIDANCE > $< TARGET_OBJECTS:UTIL > )
2018-03-15 09:55:06 -04:00
add_library ( osrm_partition src/osrm/partitioner.cpp $< TARGET_OBJECTS:PARTITIONER > $< TARGET_OBJECTS:MICROTAR > $< TARGET_OBJECTS:UTIL > )
add_library ( osrm_customize src/osrm/customizer.cpp $< TARGET_OBJECTS:CUSTOMIZER > $< TARGET_OBJECTS:MICROTAR > $< TARGET_OBJECTS:UTIL > )
add_library ( osrm_update $< TARGET_OBJECTS:UPDATER > $< TARGET_OBJECTS:MICROTAR > $< TARGET_OBJECTS:UTIL > )
2018-03-14 05:51:41 -04:00
add_library ( osrm_store $< TARGET_OBJECTS:STORAGE > $< TARGET_OBJECTS:MICROTAR > $< TARGET_OBJECTS:UTIL > )
2013-11-14 12:29:56 -05:00
2016-07-01 10:05:26 -04:00
if ( ENABLE_GOLD_LINKER )
execute_process ( COMMAND ${ CMAKE_C_COMPILER } -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION )
if ( "${LD_VERSION}" MATCHES "GNU gold" )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags" )
2022-09-17 08:00:53 -04:00
set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags" )
2016-11-29 18:15:05 -05:00
set ( OSRM_LDFLAGS "${OSRM_LDFLAGS} -fuse-ld=gold -Wl,--disable-new-dtags" )
2016-07-01 10:05:26 -04:00
message ( STATUS "Using GNU gold as linker." )
2016-08-22 18:03:14 -04:00
# Issue 2785: check gold binutils version and don't use gc-sections for versions prior 2.25
string ( REGEX REPLACE ".*\\(GNU Binutils[^\\)0-9]+([0-9]+\\.[0-9]+)[^\\)]*\\).*" "\\1" GOLD_BINUTILS_VERSION "${LD_VERSION}" )
2016-10-03 09:41:23 -04:00
if ( "${GOLD_BINUTILS_VERSION}" VERSION_LESS "2.26" )
message ( STATUS "Disabling gc-sections on gold binutils < 2.26, see: https://sourceware.org/bugzilla/show_bug.cgi?id=17639" )
2016-08-22 18:03:14 -04:00
set ( LD_AVOID_GC_SECTIONS TRUE )
endif ( )
2016-07-01 10:05:26 -04:00
else ( )
message ( WARNING "GNU gold linker isn't available." )
set ( ENABLE_GOLD_LINKER OFF )
endif ( )
2016-06-28 10:38:46 -04:00
endif ( )
2016-10-10 13:10:38 -04:00
# Explicitly set the build type to Release if no other type is specified
# on the command line. Without this, cmake defaults to an unoptimized,
# non-debug build, which almost nobody wants.
if ( NOT CMAKE_BUILD_TYPE )
message ( STATUS "No build type specified, defaulting to Release" )
set ( CMAKE_BUILD_TYPE Release )
endif ( )
if ( CMAKE_BUILD_TYPE MATCHES Debug )
message ( STATUS "Configuring OSRM in debug mode" )
elseif ( CMAKE_BUILD_TYPE MATCHES Release )
2014-05-16 09:00:31 -04:00
message ( STATUS "Configuring OSRM in release mode" )
2016-10-10 13:10:38 -04:00
elseif ( CMAKE_BUILD_TYPE MATCHES RelWithDebInfo )
message ( STATUS "Configuring OSRM in release mode with debug flags" )
elseif ( CMAKE_BUILD_TYPE MATCHES MinRelSize )
message ( STATUS "Configuring OSRM in release mode with minimized size" )
else ( )
message ( STATUS "Unrecognized build type - will use cmake defaults" )
endif ( )
# Additional logic for the different build types
if ( CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo )
message ( STATUS "Configuring debug mode flags" )
set ( ENABLE_ASSERTIONS ON )
2020-07-29 02:00:47 -04:00
set ( ENABLE_DEBUG_LOGGING ON )
2016-10-10 13:10:38 -04:00
endif ( )
2017-10-12 03:47:59 -04:00
if ( NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
set ( CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -fno-inline -fno-omit-frame-pointer" )
set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-inline -fno-omit-frame-pointer" )
endif ( )
if ( CMAKE_CXX_COMPILER_ID MATCHES "GNU" )
set ( CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -ggdb" )
set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og -ggdb" )
endif ( )
2016-10-10 13:10:38 -04:00
if ( CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES MinRelSize OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo )
message ( STATUS "Configuring release mode optimizations" )
2014-05-16 09:00:31 -04:00
# Check if LTO is available
2016-12-01 12:57:34 -05:00
check_cxx_compiler_flag ( "-Wl,-flto" LTO_AVAILABLE )
2016-11-29 18:15:05 -05:00
2016-06-22 13:03:00 -04:00
if ( ENABLE_LTO AND LTO_AVAILABLE )
2015-09-04 14:59:53 -04:00
set ( OLD_CXX_FLAGS ${ CMAKE_CXX_FLAGS } )
# GCC in addition allows parallelizing LTO
2017-08-09 18:02:14 -04:00
if ( CMAKE_CXX_COMPILER_ID MATCHES "GNU" )
2015-09-04 14:59:53 -04:00
include ( ProcessorCount )
ProcessorCount ( NPROC )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto=${NPROC}" )
else ( )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto" )
endif ( )
2015-01-29 10:23:04 -05:00
set ( CHECK_LTO_SRC "int main(){return 0;}" )
2015-02-16 08:18:04 -05:00
check_cxx_source_compiles ( "${CHECK_LTO_SRC}" LTO_WORKS )
2015-01-29 10:23:04 -05:00
if ( LTO_WORKS )
2015-09-04 14:59:53 -04:00
message ( STATUS "LTO working" )
2016-11-29 18:15:05 -05:00
set ( OSRM_CXXFLAGS "${OSRM_CXXFLAGS} -flto" )
2016-12-01 12:57:34 -05:00
set ( OSRM_LDFLAGS "${OSRM_LDFLAGS} -flto" )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto" )
set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -flto" )
set ( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -flto" )
2015-01-29 10:23:04 -05:00
else ( )
message ( STATUS "LTO broken" )
set ( CMAKE_CXX_FLAGS "${OLD_CXX_FLAGS}" )
2016-12-01 12:57:34 -05:00
set ( ENABLE_LTO Off )
2015-01-29 10:23:04 -05:00
endif ( )
2014-05-16 09:00:31 -04:00
2014-12-23 05:46:25 -05:00
# Since gcc 4.9 the LTO format is non-standart ('slim'), so we need to use the build-in tools
2018-02-09 04:57:16 -05:00
if ( CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND NOT MINGW )
2016-12-01 12:57:34 -05:00
find_program ( GCC_AR gcc-ar )
find_program ( GCC_RANLIB gcc-ranlib )
if ( "${GCC_AR}" STREQUAL "GCC_AR-NOTFOUND" OR "${GCC_RANLIB}" STREQUAL "GCC_RANLIB-NOTFOUND" )
2016-12-14 05:56:22 -05:00
message ( WARNING "GCC specific binutils not found. In case of linker issues export env vars: AR=gcc-ar, NM=gcc-nm, RANLIB=gcc-ranlib" )
2016-12-01 12:57:34 -05:00
else ( )
message ( STATUS "Using GCC specific binutils for LTO:" )
message ( STATUS " ${GCC_AR}" )
message ( STATUS " ${GCC_RANLIB}" )
set ( CMAKE_AR ${ GCC_AR } )
set ( CMAKE_RANLIB ${ GCC_RANLIB } )
endif ( )
endif ( )
# Same for clang LTO requires their own toolchain
2017-08-09 18:02:14 -04:00
if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
2016-12-01 12:57:34 -05:00
find_program ( LLVM_AR llvm-ar )
find_program ( LLVM_RANLIB llvm-ranlib )
if ( "${LLVM_AR}" STREQUAL "LLVM_AR-NOTFOUND" OR "${LLVM_RANLIB}" STREQUAL "LLVM_RANLIB-NOTFOUND" )
message ( WARNING "LLVM specific binutils not found." )
else ( )
message ( STATUS "Using LLVM specific binutils for LTO:" )
message ( STATUS " ${LLVM_AR}" )
message ( STATUS " ${LLVM_RANLIB}" )
set ( CMAKE_AR ${ LLVM_AR } )
set ( CMAKE_RANLIB ${ LLVM_RANLIB } )
endif ( )
2014-05-16 09:00:31 -04:00
endif ( )
2015-02-16 08:18:04 -05:00
endif ( )
2013-12-17 15:42:00 -05:00
endif ( )
2013-04-22 16:23:53 -04:00
2022-08-01 16:21:20 -04:00
# TODO: this was added for Mason, we are not sure if it is true after migration to Conan
if ( UNIX AND NOT APPLE AND ENABLE_CONAN AND ( LTO_WORKS OR ENABLE_GOLD_LINKER ) )
message ( WARNING "ENABLE_CONAN and ENABLE_LTO/ENABLE_GOLD_LINKER may not work on all linux systems currently" )
2016-10-28 15:18:13 -04:00
endif ( )
2016-04-07 18:49:53 -04:00
set ( MAYBE_COVERAGE_LIBRARIES "" )
2016-10-10 12:04:43 -04:00
if ( ENABLE_COVERAGE )
2016-04-12 09:43:29 -04:00
if ( NOT CMAKE_BUILD_TYPE MATCHES "Debug" )
2016-10-10 12:04:43 -04:00
message ( ERROR "ENABLE_COVERAGE=ON only make sense with a Debug build" )
2016-04-07 18:49:53 -04:00
endif ( )
2017-10-12 03:47:59 -04:00
message ( STATUS "Enabling coverage" )
2016-10-24 20:09:03 -04:00
set ( MAYBE_COVERAGE_LIBRARIES "-lgcov" )
2017-10-12 03:47:59 -04:00
set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -ftest-coverage -fprofile-arcs" )
2016-04-07 18:49:53 -04:00
endif ( )
2017-10-12 03:47:59 -04:00
2022-08-01 17:40:26 -04:00
2016-10-10 12:04:43 -04:00
if ( ENABLE_SANITIZER )
2022-08-01 17:40:26 -04:00
set ( SANITIZER_FLAGS "-g -fsanitize=address -fsanitize-address-use-after-scope -fsanitize=undefined -fno-omit-frame-pointer" )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZER_FLAGS}" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_FLAGS}" )
set ( OSRM_CXXFLAGS "${OSRM_CXXFLAGS} ${SANITIZER_FLAGS}" )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${SANITIZER_FLAGS}" )
set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${SANITIZER_FLAGS}" )
2016-04-12 09:43:29 -04:00
endif ( )
2016-04-07 18:49:53 -04:00
2013-10-28 09:51:20 -04:00
# Configuring compilers
2022-09-30 05:42:36 -04:00
include ( cmake/warnings.cmake )
2017-08-09 18:02:14 -04:00
if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
2022-09-30 05:42:36 -04:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fPIC -fcolor-diagnostics -ftemplate-depth=1024" )
2017-08-09 18:02:14 -04:00
elseif ( CMAKE_CXX_COMPILER_ID MATCHES "GNU" )
2015-01-04 17:13:15 -05:00
set ( COLOR_FLAG "-fdiagnostics-color=auto" )
2015-02-16 08:18:04 -05:00
check_cxx_compiler_flag ( "-fdiagnostics-color=auto" HAS_COLOR_FLAG )
2015-01-04 17:13:15 -05:00
if ( NOT HAS_COLOR_FLAG )
set ( COLOR_FLAG "" )
endif ( )
2013-12-17 15:42:00 -05:00
# using GCC
2022-09-30 05:42:36 -04:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 ${COLOR_FLAG} -fPIC -ftemplate-depth=1024" )
2018-02-08 08:44:39 -05:00
2015-02-16 08:18:04 -05:00
if ( WIN32 ) # using mingw
2016-05-27 11:53:51 -04:00
add_dependency_defines ( -DWIN32 )
2015-02-16 08:18:04 -05:00
set ( OPTIONAL_SOCKET_LIBS ws2_32 wsock32 )
2014-06-11 09:53:37 -04:00
endif ( )
2017-02-06 11:53:23 -05:00
# -fpermissive is required for parallel_do Intel TBB internal issue with GCC < 5
# https://github.com/Project-OSRM/osrm-backend/pull/3603#issuecomment-277688589
if ( CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0 )
message ( STATUS "Adding -fpermissive for GCC version < 5 bug (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51048). See #3603." )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive" )
endif ( )
2017-08-09 18:02:14 -04:00
elseif ( CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
2013-12-17 15:42:00 -05:00
# using Intel C++
2014-05-22 11:00:05 -04:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-intel -wd10237 -Wall -ipo -fPIC" )
2017-08-09 18:02:14 -04:00
elseif ( CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
2013-12-17 15:42:00 -05:00
# using Visual Studio C++
2017-03-07 13:28:53 -05:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj" ) # avoid compiler error C1128 from scripting_environment_lua.cpp
2017-08-08 04:32:38 -04:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /DWIN32_LEAN_AND_MEAN" ) # avoid compiler error C2011 from dual #include of winsock.h and winsock2.h
2016-05-27 11:53:51 -04:00
add_dependency_defines ( -DBOOST_LIB_DIAGNOSTIC )
add_dependency_defines ( -D_CRT_SECURE_NO_WARNINGS )
add_dependency_defines ( -DNOMINMAX ) # avoid min and max macros that can break compilation
add_dependency_defines ( -D_USE_MATH_DEFINES ) #needed for M_PI with cmath.h
add_dependency_defines ( -D_WIN32_WINNT=0x0501 )
add_dependency_defines ( -DXML_STATIC )
2014-08-28 06:47:57 -04:00
find_library ( ws2_32_LIBRARY_PATH ws2_32 )
target_link_libraries ( osrm-extract wsock32 ws2_32 )
2013-04-22 16:23:53 -04:00
endif ( )
2015-09-04 18:12:13 -04:00
# Configuring linker
execute_process ( COMMAND ${ CMAKE_CXX_COMPILER } "-Wl,--version" ERROR_QUIET OUTPUT_VARIABLE LINKER_VERSION )
# For ld.gold and ld.bfs (the GNU linkers) we optimize hard
if ( "${LINKER_VERSION}" MATCHES "GNU gold" OR "${LINKER_VERSION}" MATCHES "GNU ld" )
message ( STATUS "Setting linker optimizations" )
2017-08-09 18:02:14 -04:00
if ( NOT ( CMAKE_CXX_COMPILER_ID MATCHES "MSVC" OR "${LD_AVOID_GC_SECTIONS}" ) )
2015-09-04 18:12:13 -04:00
# Tell compiler to put every function in separate section, linker can then match sections and functions
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections" )
# Tell linker to do dead code and data eminination during link time discarding sections
set ( LINKER_FLAGS "${LINKER_FLAGS} -Wl,--gc-sections" )
endif ( )
# Default linker optimization flags
set ( LINKER_FLAGS "${LINKER_FLAGS} -Wl,-O1 -Wl,--hash-style=gnu -Wl,--sort-common" )
2016-11-29 18:15:05 -05:00
2015-09-04 18:12:13 -04:00
else ( )
message ( STATUS "Using unknown linker, not setting linker optimizations" )
endif ( )
2016-11-29 18:15:05 -05:00
set ( OSRM_LDFLAGS "${OSRM_LDFLAGS} ${LINKER_FLAGS}" )
2015-09-04 18:12:13 -04:00
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}" )
set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINKER_FLAGS}" )
set ( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}" )
2016-08-23 07:01:07 -04:00
# Activate C++1y
2017-08-09 18:02:14 -04:00
if ( NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
2022-07-30 19:56:17 -04:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17" )
set ( OSRM_CXXFLAGS "${OSRM_CXXFLAGS} -std=c++17" )
2014-05-23 13:15:51 -04:00
endif ( )
2014-05-02 04:08:07 -04:00
2013-10-28 09:51:20 -04:00
# Configuring other platform dependencies
2013-04-22 16:23:53 -04:00
if ( APPLE )
2016-10-27 18:29:27 -04:00
execute_process ( COMMAND xcrun --sdk macosx --show-sdk-path OUTPUT_VARIABLE CMAKE_OSX_SYSROOT OUTPUT_STRIP_TRAILING_WHITESPACE )
2014-03-13 08:28:58 -04:00
exec_program ( uname ARGS -v OUTPUT_VARIABLE DARWIN_VERSION )
string ( REGEX MATCH "[0-9]+" DARWIN_VERSION ${ DARWIN_VERSION } )
if ( OSXLIBSTD )
message ( STATUS "linking against ${OSXLIBSTD}" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=${OSXLIBSTD}" )
elseif ( DARWIN_VERSION GREATER 12 )
message ( STATUS "linking against libc++" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++" )
endif ( )
2013-04-22 16:23:53 -04:00
endif ( )
2013-10-28 09:51:20 -04:00
if ( UNIX AND NOT APPLE )
2016-10-24 20:09:03 -04:00
set ( MAYBE_RT_LIBRARY -lrt )
2013-12-17 15:42:00 -05:00
endif ( )
2013-10-28 09:51:20 -04:00
2016-10-20 20:03:55 -04:00
find_package ( Threads REQUIRED )
2018-04-19 07:06:36 -04:00
# Third-party libraries
set ( RAPIDJSON_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/rapidjson/include" )
include_directories ( SYSTEM ${ RAPIDJSON_INCLUDE_DIR } )
set ( MICROTAR_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/microtar/src" )
include_directories ( SYSTEM ${ MICROTAR_INCLUDE_DIR } )
2018-04-19 19:27:11 -04:00
set ( MBXGEOM_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/geometry.hpp-0.9.2/include" )
include_directories ( SYSTEM ${ MBXGEOM_INCLUDE_DIR } )
2022-08-19 17:31:40 -04:00
set ( CHEAPRULER_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/cheap-ruler-cpp-2778eb8/include" )
2018-04-19 19:27:11 -04:00
include_directories ( SYSTEM ${ CHEAPRULER_INCLUDE_DIR } )
2018-04-19 07:06:36 -04:00
add_library ( MICROTAR OBJECT "${CMAKE_CURRENT_SOURCE_DIR}/third_party/microtar/src/microtar.c" )
set_property ( TARGET MICROTAR PROPERTY POSITION_INDEPENDENT_CODE ON )
2022-09-30 05:42:36 -04:00
target_no_warning ( MICROTAR unused-variable )
target_no_warning ( MICROTAR format )
2018-04-19 07:06:36 -04:00
set ( PROTOZERO_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/protozero/include" )
include_directories ( SYSTEM ${ PROTOZERO_INCLUDE_DIR } )
set ( VTZERO_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vtzero/include" )
include_directories ( SYSTEM ${ VTZERO_INCLUDE_DIR } )
2022-07-03 18:59:54 -04:00
set ( FLATBUFFERS_BUILD_TESTS OFF CACHE BOOL "Disable the build of Flatbuffers tests and samples." )
2019-08-02 03:46:23 -04:00
set ( FLATBUFFERS_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/flatbuffers" )
2019-08-05 06:46:13 -04:00
set ( FLATBUFFERS_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/flatbuffers/include" )
2022-06-27 19:14:28 -04:00
include_directories ( SYSTEM ${ FLATBUFFERS_INCLUDE_DIR } )
2019-08-02 03:46:23 -04:00
add_subdirectory ( ${ FLATBUFFERS_SRC_DIR }
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / f l a t b u f f e r s - b u i l d
E X C L U D E _ F R O M _ A L L )
2018-04-19 07:06:36 -04:00
2022-09-30 08:28:52 -04:00
set ( FMT_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/fmt-9.1.0/include" )
add_compile_definitions ( FMT_HEADER_ONLY )
include_directories ( SYSTEM ${ FMT_INCLUDE_DIR } )
2022-08-19 13:49:09 -04:00
# see https://stackoverflow.com/questions/70898030/boost-link-error-using-conan-find-package
if ( MSVC )
add_definitions ( -DBOOST_ALL_NO_LIB )
endif ( )
2022-08-01 16:21:20 -04:00
if ( ENABLE_CONAN )
message ( STATUS "Installing dependencies via Conan" )
# Conan will generate Find*.cmake files to build directory, so we use them with the highest priority
list ( INSERT CMAKE_MODULE_PATH 0 ${ CMAKE_BINARY_DIR } )
list ( INSERT CMAKE_PREFIX_PATH 0 ${ CMAKE_BINARY_DIR } )
include ( ${ CMAKE_CURRENT_LIST_DIR } /cmake/conan.cmake )
2022-08-31 03:59:53 -04:00
set ( CONAN_BOOST_VERSION "1.79.0#96e4902111a2e343a8ba0aa95391bb58" )
set ( CONAN_BZIP2_VERSION "1.0.8#d1b2d5816f25865acf978501dff1f897" )
set ( CONAN_EXPAT_VERSION "2.2.10#916908d4a570ad839edd25322c3268cd" )
set ( CONAN_LUA_VERSION "5.4.4#3ec62efc37cd0a5d80b9e5cb35277360" )
set ( CONAN_TBB_VERSION "2021.3.0#507ec17cbd51a84167e143b20d170eea" )
2022-08-01 16:21:20 -04:00
set ( CONAN_SYSTEM_INCLUDES ON )
2022-08-24 12:13:49 -04:00
2022-08-19 13:49:09 -04:00
# TODO:
# if we link TBB dynamically osrm-extract.exe finishes on the first access to any TBB symbol
# with exit code = -1073741515, which means that program cannot load required DLL.
if ( MSVC )
set ( TBB_SHARED False )
else ( )
set ( TBB_SHARED True )
endif ( )
2022-08-24 12:13:49 -04:00
set ( CONAN_ARGS
2022-08-01 16:21:20 -04:00
R E Q U I R E S
2022-08-31 03:59:53 -04:00
" b o o s t / $ { C O N A N _ B O O S T _ V E R S I O N } "
" b z i p 2 / $ { C O N A N _ B Z I P 2 _ V E R S I O N } "
" e x p a t / $ { C O N A N _ E X P A T _ V E R S I O N } "
" l u a / $ { C O N A N _ L U A _ V E R S I O N } "
" o n e t b b / $ { C O N A N _ T B B _ V E R S I O N } "
2022-08-01 16:21:20 -04:00
B A S I C _ S E T U P
2022-10-04 12:08:41 -04:00
G E N E R A T O R S c m a k e _ f i n d _ p a c k a g e j s o n # json generator generates a conanbuildinfo.json in the build folder so (non-CMake) projects can easily parse OSRM's dependencies
2022-08-01 16:21:20 -04:00
K E E P _ R P A T H S
N O _ O U T P U T _ D I R S
2022-08-19 06:32:55 -04:00
O P T I O N S b o o s t : f i l e s y s t e m _ v e r s i o n = 3 # https://stackoverflow.com/questions/73392648/error-with-boost-filesystem-version-in-cmake
2022-08-24 12:13:49 -04:00
o n e t b b : s h a r e d = $ { T B B _ S H A R E D }
2022-09-17 08:00:53 -04:00
b o o s t : w i t h o u t _ s t a c k t r a c e = T r u e # Apple Silicon cross-compilation fails without it
2022-08-24 12:13:49 -04:00
B U I L D m i s s i n g
2022-08-01 16:21:20 -04:00
)
2022-08-24 12:13:49 -04:00
# explicitly say Conan to use x86 dependencies if build for x86 platforms (https://github.com/conan-io/cmake-conan/issues/141)
if ( NOT CMAKE_SIZEOF_VOID_P EQUAL 8 )
conan_cmake_run ( "${CONAN_ARGS};ARCH;x86" )
2022-09-17 08:00:53 -04:00
# cross-compilation for Apple Silicon
elseif ( CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" AND CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64" )
conan_cmake_run ( "${CONAN_ARGS};ARCH;armv8" )
2022-08-24 12:13:49 -04:00
else ( )
conan_cmake_run ( "${CONAN_ARGS}" )
endif ( )
2016-10-20 20:03:55 -04:00
2022-08-01 16:21:20 -04:00
add_dependency_includes ( ${ CONAN_INCLUDE_DIRS_BOOST } )
add_dependency_includes ( ${ CONAN_INCLUDE_DIRS_BZIP2 } )
add_dependency_includes ( ${ CONAN_INCLUDE_DIRS_EXPAT } )
add_dependency_includes ( ${ CONAN_INCLUDE_DIRS_LUA } )
add_dependency_includes ( ${ CONAN_INCLUDE_DIRS_TBB } )
2016-11-26 18:16:39 -05:00
2022-08-01 16:21:20 -04:00
set ( Boost_USE_STATIC_LIBS ON )
2022-08-31 03:59:53 -04:00
find_package ( Boost REQUIRED COMPONENTS ${ BOOST_COMPONENTS } )
2022-08-01 16:21:20 -04:00
set ( Boost_DATE_TIME_LIBRARY "${Boost_date_time_LIB_TARGETS}" )
set ( Boost_CHRONO_LIBRARY "${Boost_chrono_LIB_TARGETS}" )
set ( Boost_PROGRAM_OPTIONS_LIBRARY "${Boost_program_options_LIB_TARGETS}" )
set ( Boost_FILESYSTEM_LIBRARY "${Boost_filesystem_LIB_TARGETS}" )
set ( Boost_IOSTREAMS_LIBRARY "${Boost_iostreams_LIB_TARGETS}" )
set ( Boost_THREAD_LIBRARY "${Boost_thread_LIB_TARGETS}" )
set ( Boost_SYSTEM_LIBRARY "${Boost_system_LIB_TARGETS}" )
set ( Boost_ZLIB_LIBRARY "${Boost_zlib_LIB_TARGETS}" )
set ( Boost_REGEX_LIBRARY "${Boost_regex_LIB_TARGETS}" )
set ( Boost_UNIT_TEST_FRAMEWORK_LIBRARY "${Boost_unit_test_framework_LIB_TARGETS}" )
2022-08-24 12:13:49 -04:00
2022-08-15 16:21:01 -04:00
find_package ( BZip2 REQUIRED )
find_package ( EXPAT REQUIRED )
find_package ( lua REQUIRED )
2022-08-01 16:21:20 -04:00
set ( LUA_LIBRARIES ${ lua_LIBRARIES } )
2022-08-15 16:21:01 -04:00
find_package ( TBB REQUIRED )
2016-10-20 20:03:55 -04:00
2016-11-08 18:29:49 -05:00
# note: we avoid calling find_package(Osmium ...) here to ensure that the
2022-08-01 16:21:20 -04:00
# expat and bzip2 are used from conan rather than the system
2016-11-08 18:29:49 -05:00
include_directories ( SYSTEM ${ CMAKE_CURRENT_SOURCE_DIR } /third_party/libosmium/include )
2016-10-20 20:03:55 -04:00
else ( )
2021-10-08 12:06:55 -04:00
if ( BUILD_ROUTED )
# osrm-routed requires newer boost:asio
find_package ( Boost 1.70 REQUIRED COMPONENTS ${ BOOST_COMPONENTS } )
else ( )
find_package ( Boost 1.60 REQUIRED COMPONENTS ${ BOOST_COMPONENTS } )
endif ( )
2016-10-20 20:03:55 -04:00
add_dependency_includes ( ${ Boost_INCLUDE_DIRS } )
find_package ( TBB REQUIRED )
add_dependency_includes ( ${ TBB_INCLUDE_DIR } )
2022-08-24 12:13:49 -04:00
set ( TBB_LIBRARIES TBB::tbb )
2016-10-20 20:03:55 -04:00
find_package ( EXPAT REQUIRED )
add_dependency_includes ( ${ EXPAT_INCLUDE_DIRS } )
find_package ( BZip2 REQUIRED )
add_dependency_includes ( ${ BZIP2_INCLUDE_DIR } )
2017-09-25 05:18:21 -04:00
find_package ( Lua 5.2 REQUIRED )
if ( LUA_FOUND )
message ( STATUS "Using Lua ${LUA_VERSION_STRING}" )
endif ( )
2016-12-06 09:13:11 -05:00
add_dependency_includes ( ${ LUA_INCLUDE_DIR } )
2016-10-20 20:03:55 -04:00
# add a target to generate API documentation with Doxygen
find_package ( Doxygen )
if ( DOXYGEN_FOUND )
configure_file ( ${ CMAKE_CURRENT_SOURCE_DIR } /Doxyfile.in ${ CMAKE_CURRENT_BINARY_DIR } /Doxyfile @ONLY )
add_custom_target ( doc
$ { D O X Y G E N _ E X E C U T A B L E } $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / D o x y f i l e
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R }
C O M M E N T " G e n e r a t i n g A P I d o c u m e n t a t i o n w i t h D o x y g e n " V E R B A T I M
)
endif ( )
2016-11-08 18:29:49 -05:00
# note libosmium depends on expat and bzip2
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/cmake" )
2017-03-08 03:54:59 -05:00
if ( NOT OSMIUM_INCLUDE_DIR )
set ( OSMIUM_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/include" )
endif ( )
2016-11-08 18:29:49 -05:00
find_package ( Osmium REQUIRED COMPONENTS io )
include_directories ( SYSTEM ${ OSMIUM_INCLUDE_DIR } )
2018-03-14 05:51:41 -04:00
endif ( )
2016-11-08 18:29:49 -05:00
2016-12-01 12:37:04 -05:00
# prefix compilation with ccache by default if available and on clang or gcc
2017-08-09 18:02:14 -04:00
if ( ENABLE_CCACHE AND ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU" ) )
2016-12-01 12:37:04 -05:00
find_program ( CCACHE_FOUND ccache )
if ( CCACHE_FOUND )
message ( STATUS "Using ccache to speed up incremental builds" )
set_property ( GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache )
set_property ( GLOBAL PROPERTY RULE_LAUNCH_LINK ccache )
set ( ENV{CCACHE_CPP2} "true" )
endif ( )
endif ( )
2022-08-01 16:21:20 -04:00
# even with conan builds we want to link to system zlib
2016-10-28 15:18:13 -04:00
# to ensure that osrm binaries play well with other binaries like nodejs
find_package ( ZLIB REQUIRED )
add_dependency_includes ( ${ ZLIB_INCLUDE_DIRS } )
2016-10-20 20:03:55 -04:00
add_dependency_defines ( -DBOOST_SPIRIT_USE_PHOENIX_V3 )
add_dependency_defines ( -DBOOST_RESULT_OF_USE_DECLTYPE )
add_dependency_defines ( -DBOOST_FILESYSTEM_NO_DEPRECATED )
2013-04-22 16:23:53 -04:00
2016-05-27 11:53:51 -04:00
add_definitions ( ${ OSRM_DEFINES } )
2016-11-27 09:45:55 -05:00
include_directories ( SYSTEM ${ DEPENDENCIES_INCLUDE_DIRS } )
2016-05-27 11:53:51 -04:00
2016-10-20 12:59:37 -04:00
set ( BOOST_BASE_LIBRARIES
$ { B o o s t _ D A T E _ T I M E _ L I B R A R Y }
2016-10-21 13:58:06 -04:00
$ { B o o s t _ C H R O N O _ L I B R A R Y }
2016-10-20 12:59:37 -04:00
$ { B o o s t _ F I L E S Y S T E M _ L I B R A R Y }
$ { B o o s t _ I O S T R E A M S _ L I B R A R Y }
$ { B o o s t _ T H R E A D _ L I B R A R Y }
$ { B o o s t _ S Y S T E M _ L I B R A R Y } )
set ( BOOST_ENGINE_LIBRARIES
2016-10-21 13:58:06 -04:00
$ { B o o s t _ Z L I B _ L I B R A R Y }
$ { B o o s t _ R E G E X _ L I B R A R Y }
$ { B O O S T _ B A S E _ L I B R A R I E S } )
2016-10-20 12:59:37 -04:00
2016-01-07 13:19:55 -05:00
# Binaries
2017-05-29 06:57:33 -04:00
target_link_libraries ( osrm-datastore osrm_store ${ Boost_PROGRAM_OPTIONS_LIBRARY } )
2016-11-08 20:09:18 -05:00
target_link_libraries ( osrm-extract osrm_extract ${ Boost_PROGRAM_OPTIONS_LIBRARY } )
2017-01-23 05:50:03 -05:00
target_link_libraries ( osrm-partition osrm_partition ${ Boost_PROGRAM_OPTIONS_LIBRARY } )
2017-03-06 09:50:04 -05:00
target_link_libraries ( osrm-customize osrm_customize ${ Boost_PROGRAM_OPTIONS_LIBRARY } )
2016-11-08 20:09:18 -05:00
target_link_libraries ( osrm-contract osrm_contract ${ Boost_PROGRAM_OPTIONS_LIBRARY } )
2021-10-08 12:06:55 -04:00
if ( BUILD_ROUTED )
target_link_libraries ( osrm-routed osrm ${ Boost_PROGRAM_OPTIONS_LIBRARY } ${ OPTIONAL_SOCKET_LIBS } ${ ZLIB_LIBRARY } )
endif ( )
2016-01-07 13:19:55 -05:00
set ( EXTRACTOR_LIBRARIES
$ { B Z I P 2 _ L I B R A R I E S }
2016-10-20 12:59:37 -04:00
$ { B o o s t _ R E G E X _ L I B R A R Y }
$ { B O O S T _ B A S E _ L I B R A R I E S }
2016-01-07 13:19:55 -05:00
$ { C M A K E _ T H R E A D _ L I B S _ I N I T }
$ { E X P A T _ L I B R A R I E S }
2022-08-01 16:21:20 -04:00
$ { L U A _ L I B R A R I E S }
2016-01-07 13:19:55 -05:00
$ { O S M I U M _ L I B R A R I E S }
$ { T B B _ L I B R A R I E S }
2016-04-07 18:49:53 -04:00
$ { Z L I B _ L I B R A R Y }
$ { M A Y B E _ C O V E R A G E _ L I B R A R I E S } )
2018-01-05 08:33:53 -05:00
set ( GUIDANCE_LIBRARIES
$ { B O O S T _ B A S E _ L I B R A R I E S }
$ { C M A K E _ T H R E A D _ L I B S _ I N I T }
2022-08-01 16:21:20 -04:00
$ { L U A _ L I B R A R I E S }
2018-01-05 08:33:53 -05:00
$ { T B B _ L I B R A R I E S }
$ { M A Y B E _ C O V E R A G E _ L I B R A R I E S } )
2017-01-23 05:50:03 -05:00
set ( PARTITIONER_LIBRARIES
$ { B O O S T _ E N G I N E _ L I B R A R I E S }
$ { C M A K E _ T H R E A D _ L I B S _ I N I T }
$ { T B B _ L I B R A R I E S }
$ { M A Y B E _ R T _ L I B R A R Y }
$ { M A Y B E _ C O V E R A G E _ L I B R A R I E S }
$ { Z L I B _ L I B R A R Y } )
2017-03-07 18:30:49 -05:00
set ( CUSTOMIZER_LIBRARIES
2017-03-06 09:50:04 -05:00
$ { B O O S T _ E N G I N E _ L I B R A R I E S }
$ { C M A K E _ T H R E A D _ L I B S _ I N I T }
$ { T B B _ L I B R A R I E S }
$ { M A Y B E _ R T _ L I B R A R Y }
$ { M A Y B E _ C O V E R A G E _ L I B R A R I E S } )
2017-03-07 18:30:49 -05:00
set ( UPDATER_LIBRARIES
$ { B O O S T _ B A S E _ L I B R A R I E S }
$ { C M A K E _ T H R E A D _ L I B S _ I N I T }
$ { T B B _ L I B R A R I E S }
$ { M A Y B E _ R T _ L I B R A R Y }
2017-05-11 06:13:52 -04:00
$ { M A Y B E _ C O V E R A G E _ L I B R A R I E S }
$ { Z L I B _ L I B R A R Y } )
2016-01-07 13:19:55 -05:00
set ( CONTRACTOR_LIBRARIES
2016-10-20 12:59:37 -04:00
$ { B O O S T _ B A S E _ L I B R A R I E S }
2016-01-07 13:19:55 -05:00
$ { C M A K E _ T H R E A D _ L I B S _ I N I T }
2022-08-01 16:21:20 -04:00
$ { L U A _ L I B R A R I E S }
2016-01-07 13:19:55 -05:00
$ { T B B _ L I B R A R I E S }
2016-04-07 18:49:53 -04:00
$ { M A Y B E _ R T _ L I B R A R Y }
$ { M A Y B E _ C O V E R A G E _ L I B R A R I E S } )
2016-01-07 13:19:55 -05:00
set ( ENGINE_LIBRARIES
2016-05-27 11:53:51 -04:00
$ { B O O S T _ E N G I N E _ L I B R A R I E S }
2016-01-07 13:19:55 -05:00
$ { C M A K E _ T H R E A D _ L I B S _ I N I T }
$ { T B B _ L I B R A R I E S }
2016-04-07 18:49:53 -04:00
$ { M A Y B E _ R T _ L I B R A R Y }
2016-05-25 09:32:27 -04:00
$ { M A Y B E _ C O V E R A G E _ L I B R A R I E S }
$ { Z L I B _ L I B R A R Y } )
2016-01-07 13:19:55 -05:00
set ( STORAGE_LIBRARIES
2016-10-20 12:59:37 -04:00
$ { B O O S T _ B A S E _ L I B R A R I E S }
2016-01-07 13:19:55 -05:00
$ { C M A K E _ T H R E A D _ L I B S _ I N I T }
$ { T B B _ L I B R A R I E S }
2016-04-07 18:49:53 -04:00
$ { M A Y B E _ R T _ L I B R A R Y }
$ { M A Y B E _ C O V E R A G E _ L I B R A R I E S } )
2016-01-07 13:19:55 -05:00
set ( UTIL_LIBRARIES
2016-10-20 12:59:37 -04:00
$ { B O O S T _ B A S E _ L I B R A R I E S }
2016-01-07 13:19:55 -05:00
$ { C M A K E _ T H R E A D _ L I B S _ I N I T }
2016-04-07 18:49:53 -04:00
$ { T B B _ L I B R A R I E S }
2018-02-01 10:00:15 -05:00
$ { M A Y B E _ C O V E R A G E _ L I B R A R I E S }
$ { Z L I B _ L I B R A R Y } )
2017-05-11 06:13:52 -04:00
2016-01-07 13:19:55 -05:00
# Libraries
target_link_libraries ( osrm ${ ENGINE_LIBRARIES } )
2017-03-07 18:30:49 -05:00
target_link_libraries ( osrm_update ${ UPDATER_LIBRARIES } )
2017-07-24 20:05:15 -04:00
target_link_libraries ( osrm_contract ${ CONTRACTOR_LIBRARIES } osrm_update osrm_store )
2018-01-05 08:33:53 -05:00
target_link_libraries ( osrm_extract osrm_guidance ${ EXTRACTOR_LIBRARIES } )
2017-01-23 05:50:03 -05:00
target_link_libraries ( osrm_partition ${ PARTITIONER_LIBRARIES } )
2017-07-24 20:05:15 -04:00
target_link_libraries ( osrm_customize ${ CUSTOMIZER_LIBRARIES } osrm_update osrm_store )
2016-01-07 13:19:55 -05:00
target_link_libraries ( osrm_store ${ STORAGE_LIBRARIES } )
2017-01-23 04:55:49 -05:00
# BUILD_COMPONENTS
2018-03-19 20:47:34 -04:00
add_executable ( osrm-components src/tools/components.cpp $< TARGET_OBJECTS:MICROTAR > $< TARGET_OBJECTS:UTIL > )
2017-05-11 06:13:52 -04:00
target_link_libraries ( osrm-components ${ TBB_LIBRARIES } ${ BOOST_BASE_LIBRARIES } ${ UTIL_LIBRARIES } )
2017-01-23 04:55:49 -05:00
install ( TARGETS osrm-components DESTINATION bin )
2016-03-30 16:50:32 -04:00
if ( BUILD_TOOLS )
message ( STATUS "Activating OSRM internal tools" )
2016-01-02 10:11:49 -05:00
add_executable ( osrm-io-benchmark src/tools/io-benchmark.cpp $< TARGET_OBJECTS:UTIL > )
2021-08-28 18:27:18 -04:00
target_link_libraries ( osrm-io-benchmark ${ BOOST_BASE_LIBRARIES } ${ TBB_LIBRARIES } )
2014-07-11 09:25:26 -04:00
install ( TARGETS osrm-io-benchmark DESTINATION bin )
2013-12-17 15:42:00 -05:00
endif ( )
2013-12-13 17:26:57 -05:00
2016-01-20 06:41:33 -05:00
if ( ENABLE_ASSERTIONS )
message ( STATUS "Enabling assertions" )
add_definitions ( -DBOOST_ENABLE_ASSERT_HANDLER )
endif ( )
2020-07-29 02:00:47 -04:00
if ( ENABLE_DEBUG_LOGGING )
message ( STATUS "Enabling debug logging" )
add_definitions ( -DENABLE_DEBUG_LOGGING )
endif ( )
2014-03-22 11:44:51 -04:00
# Add RPATH info to executables so that when they are run after being installed
# (i.e., from /usr/local/bin/) the linker can find library dependencies. For
# more info see http://www.cmake.org/Wiki/CMake_RPATH_handling
set_property ( TARGET osrm-extract PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE )
2017-01-23 05:50:03 -05:00
set_property ( TARGET osrm-partition PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE )
2016-02-14 13:35:37 -05:00
set_property ( TARGET osrm-contract PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE )
2014-03-22 11:44:51 -04:00
set_property ( TARGET osrm-datastore PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE )
2021-10-08 12:06:55 -04:00
if ( BUILD_ROUTED )
set_property ( TARGET osrm-routed PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE )
endif ( )
2014-03-22 11:44:51 -04:00
2016-12-01 19:59:29 -05:00
file ( GLOB VariantGlob third_party/variant/include/mapbox/*.hpp )
2019-08-14 07:50:02 -04:00
file ( GLOB FlatbuffersGlob third_party/flatbuffers/include/flatbuffers/*.h )
2016-01-07 13:19:55 -05:00
file ( GLOB LibraryGlob include/osrm/*.hpp )
2016-03-10 14:52:27 -05:00
file ( GLOB ParametersGlob include/engine/api/*_parameters.hpp )
2019-08-13 05:03:10 -04:00
set ( ApiHeader include/engine/api/base_result.hpp )
2017-05-22 10:07:12 -04:00
set ( EngineHeader include/engine/status.hpp include/engine/engine_config.hpp include/engine/hint.hpp include/engine/bearing.hpp include/engine/approach.hpp include/engine/phantom_node.hpp )
2017-08-30 05:06:27 -04:00
set ( UtilHeader include/util/coordinate.hpp include/util/json_container.hpp include/util/typedefs.hpp include/util/alias.hpp include/util/exception.hpp include/util/bearing.hpp )
2017-04-29 07:34:33 -04:00
set ( ExtractorHeader include/extractor/extractor.hpp include/storage/io_config.hpp include/extractor/extractor_config.hpp include/extractor/travel_mode.hpp )
2018-02-01 10:47:43 -05:00
set ( PartitionerHeader include/partitioner/partitioner.hpp include/partitioner/partitioner_config.hpp )
2016-01-07 13:19:55 -05:00
set ( ContractorHeader include/contractor/contractor.hpp include/contractor/contractor_config.hpp )
2017-04-19 02:59:45 -04:00
set ( StorageHeader include/storage/storage.hpp include/storage/io_config.hpp include/storage/storage_config.hpp )
2016-01-07 13:19:55 -05:00
install ( FILES ${ EngineHeader } DESTINATION include/osrm/engine )
install ( FILES ${ UtilHeader } DESTINATION include/osrm/util )
2016-03-23 14:19:00 -04:00
install ( FILES ${ StorageHeader } DESTINATION include/osrm/storage )
2016-01-07 13:19:55 -05:00
install ( FILES ${ ExtractorHeader } DESTINATION include/osrm/extractor )
2018-02-01 10:47:43 -05:00
install ( FILES ${ PartitionerHeader } DESTINATION include/osrm/partitioner )
2016-01-07 13:19:55 -05:00
install ( FILES ${ ContractorHeader } DESTINATION include/osrm/contractor )
install ( FILES ${ LibraryGlob } DESTINATION include/osrm )
2016-02-18 16:42:49 -05:00
install ( FILES ${ ParametersGlob } DESTINATION include/osrm/engine/api )
2019-08-13 05:03:10 -04:00
install ( FILES ${ ApiHeader } DESTINATION include/osrm/engine/api )
2016-12-01 19:59:29 -05:00
install ( FILES ${ VariantGlob } DESTINATION include/mapbox )
2019-08-14 07:50:02 -04:00
install ( FILES ${ FlatbuffersGlob } DESTINATION include/flatbuffers )
2013-12-17 11:59:44 -05:00
install ( TARGETS osrm-extract DESTINATION bin )
2017-02-10 09:01:55 -05:00
install ( TARGETS osrm-partition DESTINATION bin )
2017-07-12 17:46:48 -04:00
install ( TARGETS osrm-customize DESTINATION bin )
2016-02-14 13:35:37 -05:00
install ( TARGETS osrm-contract DESTINATION bin )
2013-12-17 11:59:44 -05:00
install ( TARGETS osrm-datastore DESTINATION bin )
2021-10-08 12:06:55 -04:00
if ( BUILD_ROUTED )
install ( TARGETS osrm-routed DESTINATION bin )
endif ( )
2016-01-07 13:19:55 -05:00
install ( TARGETS osrm DESTINATION lib )
install ( TARGETS osrm_extract DESTINATION lib )
2017-02-10 09:01:55 -05:00
install ( TARGETS osrm_partition DESTINATION lib )
2017-07-12 17:46:48 -04:00
install ( TARGETS osrm_customize DESTINATION lib )
2017-03-07 18:30:49 -05:00
install ( TARGETS osrm_update DESTINATION lib )
2016-01-07 13:19:55 -05:00
install ( TARGETS osrm_contract DESTINATION lib )
install ( TARGETS osrm_store DESTINATION lib )
2019-11-15 05:19:04 -05:00
install ( TARGETS osrm_guidance DESTINATION lib )
2016-01-07 13:19:55 -05:00
2017-02-07 11:55:20 -05:00
# Install profiles and support library to /usr/local/share/osrm/profiles by default
set ( DefaultProfilesDir profiles )
install ( DIRECTORY ${ DefaultProfilesDir } DESTINATION share/osrm )
2016-11-27 09:45:55 -05:00
# Setup exporting variables for pkgconfig and subproject
#
2013-12-20 14:00:30 -05:00
2016-12-30 19:27:21 -05:00
if ( BUILD_PACKAGE )
include ( CPackConfig )
2014-08-11 10:16:13 -04:00
include ( CPack )
endif ( )
2015-09-09 20:18:47 -04:00
2016-05-27 11:53:51 -04:00
function ( JOIN VALUES GLUE OUTPUT )
string ( REPLACE ";" "${GLUE}" _TMP_STR "${VALUES}" )
set ( ${ OUTPUT } "${_TMP_STR}" PARENT_SCOPE )
endfunction ( )
2016-11-27 09:45:55 -05:00
JOIN ( "${OSRM_DEFINES}" " " TMP_OSRM_DEFINES )
set ( LibOSRM_CXXFLAGS "${OSRM_CXXFLAGS} ${TMP_OSRM_DEFINES}" )
2016-11-29 18:15:05 -05:00
set ( LibOSRM_LDFLAGS "${OSRM_LDFLAGS}" )
2016-11-27 09:45:55 -05:00
if ( BUILD_AS_SUBPROJECT )
set ( LibOSRM_CXXFLAGS "${LibOSRM_CXXFLAGS}" PARENT_SCOPE )
set ( LibOSRM_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include" PARENT_SCOPE )
set ( LibOSRM_LIBRARY_DIR "${CMAKE_CURRENT_BINARY_DIR}" PARENT_SCOPE )
set ( LibOSRM_LIBRARIES "osrm" PARENT_SCOPE )
set ( LibOSRM_DEPENDENT_LIBRARIES "${ENGINE_LIBRARIES}" PARENT_SCOPE )
set ( LibOSRM_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include"
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / i n c l u d e / o s r m "
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / t h i r d _ p a r t y "
" $ { D E P E N D E N C I E S _ I N C L U D E _ D I R S } " P A R E N T _ S C O P E )
set ( LibOSRM_LIBRARY_DIRS "${LibOSRM_LIBRARY_DIR}" PARENT_SCOPE )
endif ( )
# pkgconfig defines
set ( PKGCONFIG_OSRM_CXXFLAGS "${LibOSRM_CXXFLAGS}" )
2016-11-29 18:15:05 -05:00
set ( PKGCONFIG_OSRM_LDFLAGS "${LibOSRM_LDFLAGS}" )
2016-11-27 09:45:55 -05:00
set ( PKGCONFIG_LIBRARY_DIR "${CMAKE_INSTALL_PREFIX}/lib" )
set ( PKGCONFIG_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include" )
list ( APPEND DEPENDENCIES_INCLUDE_DIRS "${PKGCONFIG_INCLUDE_DIR}" )
list ( APPEND DEPENDENCIES_INCLUDE_DIRS "${PKGCONFIG_INCLUDE_DIR}/osrm" )
JOIN ( "-I${DEPENDENCIES_INCLUDE_DIRS}" " -I" PKGCONFIG_OSRM_INCLUDE_FLAGS )
2016-05-27 11:53:51 -04:00
2021-07-17 11:20:45 -04:00
# Boost uses imported targets, we need to use a generator expression to extract
# the link libraries to be written to the pkg-config file.
2022-08-24 12:13:49 -04:00
# Conan & TBB define dependencies as CMake targets too, that's why we do the same for them.
2021-07-17 11:20:45 -04:00
foreach ( engine_lib ${ ENGINE_LIBRARIES } )
2022-08-24 12:13:49 -04:00
if ( "${engine_lib}" MATCHES "^Boost.*" OR "${engine_lib}" MATCHES "^CONAN_LIB.*" OR "${engine_lib}" MATCHES "^TBB.*" )
2021-07-17 11:20:45 -04:00
list ( APPEND PKGCONFIG_DEPENDENT_LIBRARIES "$<TARGET_LINKER_FILE:${engine_lib}>" )
else ( )
list ( APPEND PKGCONFIG_DEPENDENT_LIBRARIES "${engine_lib}" )
endif ( )
endforeach ( engine_lib )
JOIN ( "${PKGCONFIG_DEPENDENT_LIBRARIES}" " " PKGCONFIG_OSRM_DEPENDENT_LIBRARIES )
configure_file ( ${ CMAKE_CURRENT_SOURCE_DIR } /cmake/pkgconfig.in pkgconfig.configured @ONLY )
file ( GENERATE
O U T P U T
$ { P R O J E C T _ B I N A R Y _ D I R } / l i b o s r m . p c
I N P U T
$ { P R O J E C T _ B I N A R Y _ D I R } / p k g c o n f i g . c o n f i g u r e d )
2017-11-01 10:15:00 -04:00
install ( FILES ${ PROJECT_BINARY_DIR } /libosrm.pc DESTINATION ${ PKGCONFIG_LIBRARY_DIR } /pkgconfig )
2016-05-27 11:53:51 -04:00
2016-03-10 05:53:44 -05:00
# uninstall target
configure_file (
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e / c m a k e _ u n i n s t a l l . c m a k e . i n "
" $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e / c m a k e _ u n i n s t a l l . c m a k e "
I M M E D I A T E @ O N L Y )
add_custom_target ( uninstall
C O M M A N D $ { C M A K E _ C O M M A N D } - P $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e / c m a k e _ u n i n s t a l l . c m a k e )
2016-04-06 06:44:46 -04:00
# Modular build system: each directory registered here provides its own CMakeLists.txt
add_subdirectory ( unit_tests )
2016-04-06 08:29:46 -04:00
add_subdirectory ( src/benchmarks )
2016-04-12 05:58:43 -04:00
2017-03-01 12:27:57 -05:00
if ( ENABLE_NODE_BINDINGS )
add_subdirectory ( src/nodejs )
endif ( )
2016-04-12 05:58:43 -04:00
if ( ENABLE_FUZZING )
2016-04-13 03:43:03 -04:00
# Requires libosrm being built with sanitizers; make configurable and default to ubsan
set ( FUZZ_SANITIZER "undefined" CACHE STRING "Sanitizer to be used for Fuzz testing" )
set_property ( CACHE FUZZ_SANITIZER PROPERTY STRINGS "undefined" "integer" "address" "memory" "thread" "leak" )
2016-04-12 05:58:43 -04:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-coverage=edge,indirect-calls,8bit-counters -fsanitize=address" )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address" )
2016-11-29 18:15:05 -05:00
set ( OSRM_LDFLAGS "${OSRM_LDFLAGS} -fsanitize=address" )
2016-04-13 03:43:03 -04:00
message ( STATUS "Using -fsanitize=${FUZZ_SANITIZER} for Fuzz testing" )
2016-04-12 05:58:43 -04:00
add_subdirectory ( fuzz )
endif ( )
2016-12-06 10:14:25 -05:00
2022-09-20 15:43:13 -04:00
# add headers sanity check target that includes all headers independently
set ( check_headers_dir "${PROJECT_BINARY_DIR}/check-headers" )
file ( GLOB_RECURSE headers_to_check
$ { P R O J E C T _ B I N A R Y _ D I R } / * . h p p
$ { P R O J E C T _ S O U R C E _ D I R } / i n c l u d e / * . h p p )
foreach ( header ${ headers_to_check } )
if ( "${header}" MATCHES ".*/include/nodejs/.*" )
# we do not check NodeJS bindings headers
continue ( )
endif ( )
get_filename_component ( filename ${ header } NAME_WE )
set ( filename "${check_headers_dir}/${filename}.cpp" )
if ( NOT EXISTS ${ filename } )
file ( WRITE ${ filename } "#include \" ${ header } \"\n")
endif ( )
list ( APPEND sources ${ filename } )
endforeach ( )
add_library ( check-headers STATIC EXCLUDE_FROM_ALL ${ sources } )
set_target_properties ( check-headers PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${ check_headers_dir } )
2016-12-06 10:14:25 -05:00