osrm-backend/CMakeLists.txt

288 lines
11 KiB
CMake
Raw Normal View History

2014-05-02 04:08:07 -04:00
cmake_minimum_required(VERSION 2.8)
2013-04-22 16:23:53 -04:00
project(OSRM)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include(CheckCXXCompilerFlag)
include(FindPackageHandleStandardArgs)
2013-07-03 07:32:31 -04:00
2013-08-10 07:29:24 -04:00
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include(GetGitRevisionDescription)
git_describe(GIT_DESCRIPTION)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
set(bitness 32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(bitness 64)
message(STATUS "Building on a 64 bit system")
else()
message(WARNING "Building on a 32 bit system is unsupported")
endif()
2013-12-20 07:13:35 -05:00
include_directories(${CMAKE_SOURCE_DIR}/Include/)
2013-07-19 10:58:13 -04:00
add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/Util/UUID.cpp UUID.cpp.alwaysbuild
2013-08-20 07:17:19 -04:00
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/UUID-Config.cmake
DEPENDS
2013-07-19 10:36:57 -04:00
${CMAKE_SOURCE_DIR}/Util/UUID.cpp.in
2013-12-17 15:42:00 -05:00
${CMAKE_SOURCE_DIR}/cmake/UUID-Config.cmake
COMMENT "Configuring UUID.cpp"
VERBATIM)
2013-07-03 07:32:31 -04:00
2013-12-17 15:42:00 -05:00
add_custom_target(UUIDConfigure DEPENDS ${CMAKE_SOURCE_DIR}/Util/UUID.cpp)
2013-04-22 16:23:53 -04:00
set(BOOST_COMPONENTS date_time filesystem iostreams program_options regex system thread)
2013-12-17 15:42:00 -05:00
configure_file(
2013-12-20 07:13:35 -05:00
${CMAKE_SOURCE_DIR}/Util/GitDescription.cpp.in
2013-12-17 15:42:00 -05:00
${CMAKE_SOURCE_DIR}/Util/GitDescription.cpp
)
2013-04-22 16:23:53 -04:00
file(GLOB ExtractorGlob Extractor/*.cpp)
set(ExtractorSources extractor.cpp ${ExtractorGlob})
add_executable(osrm-extract ${ExtractorSources})
2013-04-22 16:23:53 -04:00
file(GLOB PrepareGlob Contractor/*.cpp DataStructures/HilbertValue.cpp DataStructures/RestrictionMap.cpp)
set(PrepareSources prepare.cpp ${PrepareGlob})
add_executable(osrm-prepare ${PrepareSources})
2013-04-22 16:23:53 -04:00
2013-11-13 18:42:42 -05:00
file(GLOB ServerGlob Server/*.cpp)
file(GLOB DescriptorGlob Descriptors/*.cpp)
file(GLOB DatastructureGlob DataStructures/SearchEngineData.cpp DataStructures/RouteParameters.cpp)
2013-12-13 17:26:57 -05:00
file(GLOB CoordinateGlob DataStructures/Coordinate.cpp)
file(GLOB AlgorithmGlob Algorithms/*.cpp)
2013-11-14 12:29:56 -05:00
file(GLOB HttpGlob Server/Http/*.cpp)
file(GLOB LibOSRMGlob Library/*.cpp)
2013-12-17 15:42:00 -05:00
set(
OSRMSources
${LibOSRMGlob}
${DescriptorGlob}
${DatastructureGlob}
2013-12-18 18:08:25 -05:00
${CoordinateGlob}
2013-12-17 15:42:00 -05:00
${AlgorithmGlob}
${HttpGlob}
)
add_library(COORDLIB STATIC ${CoordinateGlob})
add_library(OSRM ${OSRMSources} Util/GitDescription.cpp Util/UUID.cpp)
2013-12-17 15:42:00 -05:00
add_library(UUID STATIC Util/UUID.cpp)
add_library(GITDESCRIPTION STATIC Util/GitDescription.cpp)
add_dependencies(UUID UUIDConfigure)
add_dependencies(GITDESCRIPTION GIT_DESCRIPTION)
2013-11-14 12:29:56 -05:00
add_executable(osrm-routed routed.cpp ${ServerGlob})
set_target_properties(osrm-routed PROPERTIES COMPILE_FLAGS -DROUTED)
add_executable(osrm-datastore datastore.cpp)
2013-11-14 12:29:56 -05:00
2013-04-22 16:23:53 -04:00
# Check the release mode
if(NOT CMAKE_BUILD_TYPE MATCHES Debug)
2013-12-17 15:42:00 -05:00
set(CMAKE_BUILD_TYPE Release)
endif()
2013-04-22 16:23:53 -04:00
if(CMAKE_BUILD_TYPE MATCHES Debug)
message(STATUS "Configuring OSRM in debug mode")
if(NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
message(STATUS "adding profiling flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage -fno-inline")
set(CMAKE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage -fno-inline")
endif()
2013-12-17 15:42:00 -05:00
endif()
2013-04-22 16:23:53 -04:00
if(CMAKE_BUILD_TYPE MATCHES Release)
2014-05-16 09:00:31 -04:00
message(STATUS "Configuring OSRM in release mode")
# Check if LTO is available
set(LTO_FLAGS "")
CHECK_CXX_COMPILER_FLAG("-flto" HAS_LTO_FLAG)
if (HAS_LTO_FLAG)
set(LTO_FLAGS "${LTO_FLAGS} -flto")
# Since gcc 4.9 the LTO format is non-standart ('slim'), so we need to use the build-in tools
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND
NOT "${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS "4.9.0")
message(STATUS "Using gcc specific binutils for LTO.")
set(CMAKE_AR "/usr/bin/gcc-ar")
set(CMAKE_RANLIB "/usr/bin/gcc-ranlib")
endif()
endif (HAS_LTO_FLAG)
2013-12-17 15:42:00 -05:00
endif()
2013-04-22 16:23:53 -04:00
2013-10-28 09:51:20 -04:00
# Configuring compilers
2013-12-16 11:58:57 -05:00
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
2013-12-17 15:42:00 -05:00
# using Clang
2014-02-26 09:55:04 -05:00
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wunreachable-code -Wno-unknown-pragmas -Wno-unneeded-internal-declaration -pedantic -fPIC")
2013-12-17 15:42:00 -05:00
message(STATUS "OpenMP parallelization not available using clang++")
2013-12-16 11:58:57 -05:00
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
2013-12-17 15:42:00 -05:00
# using GCC
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fopenmp -pedantic -fPIC")
2013-12-16 11:58:57 -05:00
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
2013-12-17 15:42:00 -05:00
# using Intel C++
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-intel -wd10237 -Wall -openmp -ipo -fPIC")
2013-12-16 11:58:57 -05:00
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
2013-12-17 15:42:00 -05:00
# using Visual Studio C++
2013-04-22 16:23:53 -04:00
endif()
# disable partitioning of LTO process when possible (fixes Debian issues)
set(LTO_PARTITION_FLAGS "")
CHECK_CXX_COMPILER_FLAG("-flto-partition=none" HAS_LTO_PARTITION_FLAG)
if (HAS_LTO_PARTITION_FLAG)
set(LTO_PARTITION_FLAGS "${LTO_PARTITION_FLAGS} -flto-partition=none")
endif (HAS_LTO_PARTITION_FLAG)
2014-05-02 05:27:01 -04:00
# Add Link-Time-Optimization flags, if supported (GCC >= 4.7) and enabled
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LTO_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LTO_FLAGS} ${LTO_PARTITION_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LTO_FLAGS} ${LTO_PARTITION_FLAGS}")
2014-05-02 04:08:07 -04:00
# Activate C++11
ADD_DEFINITIONS(
-std=c++11 # Or -std=c++0x
# Other flags
)
2013-10-28 09:51:20 -04:00
# Configuring other platform dependencies
2013-04-22 16:23:53 -04:00
if(APPLE)
2013-12-17 15:42:00 -05:00
set(CMAKE_OSX_ARCHITECTURES "x86_64")
message(STATUS "Set Architecture to x64 on OS X")
exec_program(uname ARGS -v OUTPUT_VARIABLE DARWIN_VERSION)
string(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION})
2014-05-02 04:08:07 -04:00
# if(DARWIN_VERSION GREATER 12 AND NOT OSXLIBSTD)
# message(STATUS "Activating -std=c++11 flag for >= OS X 10.9")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# endif()
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)
target_link_libraries(osrm-datastore rt)
target_link_libraries(OSRM rt)
2013-12-17 15:42:00 -05:00
endif()
2013-10-28 09:51:20 -04:00
2013-04-22 16:23:53 -04:00
#Check Boost
set(BOOST_MIN_VERSION "1.49.0")
2013-12-17 15:42:00 -05:00
find_package(Boost ${BOOST_MIN_VERSION} COMPONENTS ${BOOST_COMPONENTS} REQUIRED)
2013-12-16 11:58:57 -05:00
if(NOT Boost_FOUND)
message(FATAL_ERROR "Fatal error: Boost (version >= 1.49.0) required.\n")
2013-12-17 15:42:00 -05:00
endif()
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(OSRM ${Boost_LIBRARIES} COORDLIB)
target_link_libraries(osrm-extract ${Boost_LIBRARIES} UUID GITDESCRIPTION COORDLIB)
target_link_libraries(osrm-prepare ${Boost_LIBRARIES} UUID GITDESCRIPTION COORDLIB)
target_link_libraries(osrm-routed ${Boost_LIBRARIES} OSRM UUID GITDESCRIPTION)
target_link_libraries(osrm-datastore ${Boost_LIBRARIES} UUID GITDESCRIPTION COORDLIB)
2013-04-22 16:23:53 -04:00
2013-12-17 15:42:00 -05:00
find_package(Threads REQUIRED)
target_link_libraries(osrm-extract ${CMAKE_THREAD_LIBS_INIT})
2013-04-22 16:23:53 -04:00
2014-05-16 07:26:42 -04:00
find_package(TBB REQUIRED)
target_link_libraries(osrm-extract ${TBB_LIBRARIES})
2014-05-20 17:57:48 -04:00
target_link_libraries(osrm-prepare ${TBB_LIBRARIES})
2014-05-16 07:26:42 -04:00
include_directories(${TBB_INCLUDE_DIR})
2013-12-17 15:42:00 -05:00
find_package(Lua52)
if(NOT LUA52_FOUND)
find_package(Lua51 REQUIRED)
2013-12-16 11:58:57 -05:00
if(NOT APPLE)
2013-12-17 15:42:00 -05:00
find_package(LuaJIT 5.1)
endif()
else()
2013-12-16 11:58:57 -05:00
if(NOT APPLE)
2013-12-17 15:42:00 -05:00
find_package(LuaJIT 5.2)
endif()
endif()
2013-11-20 10:22:39 -05:00
2013-12-16 11:58:57 -05:00
if( LUAJIT_FOUND )
2013-12-17 15:42:00 -05:00
target_link_libraries(osrm-extract ${LUAJIT_LIBRARIES})
target_link_libraries(osrm-prepare ${LUAJIT_LIBRARIES})
2013-12-16 11:58:57 -05:00
else()
2013-12-17 15:42:00 -05:00
target_link_libraries(osrm-extract ${LUA_LIBRARY})
target_link_libraries(osrm-prepare ${LUA_LIBRARY})
2013-12-16 11:58:57 -05:00
endif()
2013-11-20 10:22:39 -05:00
include_directories(${LUA_INCLUDE_DIR})
2013-12-17 15:42:00 -05:00
find_package(LibXml2 REQUIRED)
2013-04-22 16:23:53 -04:00
include_directories(${LIBXML2_INCLUDE_DIR})
2013-12-17 15:42:00 -05:00
target_link_libraries(osrm-extract ${LIBXML2_LIBRARIES})
2013-04-22 16:23:53 -04:00
find_package( Luabind REQUIRED )
include_directories(${LUABIND_INCLUDE_DIR})
2013-12-17 15:42:00 -05:00
target_link_libraries(osrm-extract ${LUABIND_LIBRARY})
target_link_libraries(osrm-prepare ${LUABIND_LIBRARY})
2013-04-22 16:23:53 -04:00
find_package( STXXL REQUIRED )
include_directories(${STXXL_INCLUDE_DIR})
2013-12-17 15:42:00 -05:00
target_link_libraries(OSRM ${STXXL_LIBRARY})
target_link_libraries(osrm-extract ${STXXL_LIBRARY})
target_link_libraries(osrm-prepare ${STXXL_LIBRARY})
2013-04-22 16:23:53 -04:00
find_package( OSMPBF REQUIRED )
include_directories(${OSMPBF_INCLUDE_DIR})
2013-12-17 15:42:00 -05:00
target_link_libraries(osrm-extract ${OSMPBF_LIBRARY})
target_link_libraries(osrm-prepare ${OSMPBF_LIBRARY})
2013-04-22 16:23:53 -04:00
2013-12-17 15:42:00 -05:00
find_package(Protobuf REQUIRED)
include_directories(${PROTOBUF_INCLUDE_DIRS})
2013-12-17 15:42:00 -05:00
target_link_libraries(osrm-extract ${PROTOBUF_LIBRARY})
target_link_libraries(osrm-prepare ${PROTOBUF_LIBRARY})
2013-12-17 15:42:00 -05:00
find_package(BZip2 REQUIRED)
include_directories(${BZIP_INCLUDE_DIRS})
2013-12-17 15:42:00 -05:00
target_link_libraries(osrm-extract ${BZIP2_LIBRARIES})
2013-12-17 15:42:00 -05:00
find_package(ZLIB REQUIRED)
include_directories(${ZLIB_INCLUDE_DIRS})
2013-12-17 15:42:00 -05:00
target_link_libraries(osrm-extract ${ZLIB_LIBRARY})
target_link_libraries(osrm-routed ${ZLIB_LIBRARY})
2013-04-22 16:23:53 -04:00
if(WITH_TOOLS)
2013-12-17 15:42:00 -05:00
message(STATUS "Activating OSRM internal tools")
find_package(GDAL)
if(GDAL_FOUND)
2014-05-08 12:34:58 -04:00
add_executable(osrm-components Tools/components.cpp)
2013-12-17 15:42:00 -05:00
include_directories(${GDAL_INCLUDE_DIR})
target_link_libraries(
osrm-components
${GDAL_LIBRARIES} ${Boost_LIBRARIES} UUID GITDESCRIPTION COORDLIB)
endif()
add_executable(osrm-cli Tools/simpleclient.cpp)
target_link_libraries(osrm-cli ${Boost_LIBRARIES} OSRM UUID GITDESCRIPTION)
add_executable(osrm-io-benchmark Tools/io-benchmark.cpp)
target_link_libraries(osrm-io-benchmark ${Boost_LIBRARIES} GITDESCRIPTION)
add_executable(osrm-unlock-all Tools/unlock_all_mutexes.cpp)
target_link_libraries(osrm-unlock-all ${Boost_LIBRARIES} GITDESCRIPTION)
2013-10-30 11:33:16 -04:00
if(UNIX AND NOT APPLE)
2013-12-17 15:42:00 -05:00
target_link_libraries(osrm-unlock-all rt)
endif()
endif()
2013-12-13 17:26:57 -05:00
2013-12-20 12:14:09 -05:00
file(GLOB InstallGlob Include/osrm/*.h Library/OSRM.h)
# 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)
set_property(TARGET osrm-prepare PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
set_property(TARGET osrm-datastore PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
set_property(TARGET osrm-routed PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
2013-12-17 14:26:15 -05:00
install(FILES ${InstallGlob} DESTINATION include/osrm)
install(TARGETS osrm-extract DESTINATION bin)
install(TARGETS osrm-prepare DESTINATION bin)
install(TARGETS osrm-datastore DESTINATION bin)
install(TARGETS osrm-routed DESTINATION bin)
install(TARGETS OSRM DESTINATION lib)
2013-12-20 14:00:30 -05:00
list(GET Boost_LIBRARIES 1 BOOST_LIBRARY_FIRST)
get_filename_component(BOOST_LIBRARY_LISTING "${BOOST_LIBRARY_FIRST}" PATH)
set(BOOST_LIBRARY_LISTING "-L${BOOST_LIBRARY_LISTING}")
foreach (lib ${Boost_LIBRARIES})
get_filename_component(BOOST_LIBRARY_NAME "${lib}" NAME_WE)
string(REPLACE "lib" "" BOOST_LIBRARY_NAME ${BOOST_LIBRARY_NAME})
set(BOOST_LIBRARY_LISTING "${BOOST_LIBRARY_LISTING} -l${BOOST_LIBRARY_NAME}")
2013-12-20 14:00:30 -05:00
endforeach ()
2013-12-20 07:13:35 -05:00
configure_file(${CMAKE_SOURCE_DIR}/cmake/pkgconfig.in libosrm.pc @ONLY)
install(FILES ${PROJECT_BINARY_DIR}/libosrm.pc DESTINATION lib/pkgconfig)