From d52d86ae82c6ca9f3c57d75c5db6bc6e44e4f9fa Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Mon, 22 Apr 2013 22:23:53 +0200 Subject: [PATCH] Manually merging cmake support --- CMakeLists.txt | 109 +++++++++++++++++++++++ cmake/FindLuabind.cmake | 75 ++++++++++++++++ cmake/FindOSMPBF.cmake | 54 +++++++++++ cmake/FindSTXXL.cmake | 51 +++++++++++ cmake/GetGitRevisionDescription.cmake | 123 ++++++++++++++++++++++++++ cmake/cmake_install.cmake | 39 ++++++++ 6 files changed, 451 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 cmake/FindLuabind.cmake create mode 100644 cmake/FindOSMPBF.cmake create mode 100644 cmake/FindSTXXL.cmake create mode 100644 cmake/GetGitRevisionDescription.cmake create mode 100644 cmake/cmake_install.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..9881da81f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,109 @@ +cmake_minimum_required(VERSION 2.6) +project(OSRM) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) +set(BOOST_COMPONENTS filesystem regex system thread) + +file(GLOB ExtractorGlob Extractor/*.cpp) +set(ExtractorSources extractor.cpp ${ExtractorGlob}) +add_executable(osrm-extract ${ExtractorSources}) + +file(GLOB PrepareGlob Contractor/*.cpp) +set(PrepareSources createHierarchy.cpp ${PrepareGlob}) +add_executable(osrm-prepare ${PrepareSources}) + +file(GLOB RoutedGlob Server/DataStructures/*.cpp Descriptors/*.cpp) +set(RoutedSources routed.cpp ${RoutedGlob}) +add_executable(osrm-routed ${RoutedSources}) +set_target_properties(osrm-routed PROPERTIES COMPILE_FLAGS -DROUTED) + +# Check the release mode +if(NOT CMAKE_BUILD_TYPE MATCHES Debug) + set(CMAKE_BUILD_TYPE Release) +endif(NOT CMAKE_BUILD_TYPE MATCHES Debug) +if(CMAKE_BUILD_TYPE MATCHES Debug) + message(STATUS "Configuring OSRM in debug mode") +endif(CMAKE_BUILD_TYPE MATCHES Debug) +if(CMAKE_BUILD_TYPE MATCHES Release) + message(STATUS "Configuring OSRM in release mode") +endif(CMAKE_BUILD_TYPE MATCHES Release) + +#Configuring compilers +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + # using Clang + set(CMAKE_CXX_FLAGS "-Wall -Wno-unknown-pragmas") + message(STATUS "OpenMP parallelization not available using clang++") +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + # using GCC + set(CMAKE_CXX_FLAGS "-Wall -fopenmp") +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") + # using Intel C++ + set(CMAKE_CXX_FLAGS "-static-intel -wd10237 -Wall -openmp -ipo") +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") + # using Visual Studio C++ +endif() + +if(APPLE) + SET(CMAKE_OSX_ARCHITECTURES "x86_64") + message("Set Archtitecture to x64 on OS X") +endif() + +#Check Boost +set(BOOST_MIN_VERSION "1.44.0") +find_package( Boost ${BOOST_MIN_VERSION} COMPONENTS ${BOOST_COMPONENTS} REQUIRED ) +if (NOT Boost_FOUND) + message(FATAL_ERROR "Fatal error: Boost (version >= 1.44.0) required.\n") +endif (NOT Boost_FOUND) +target_link_libraries( osrm-extract ${Boost_LIBRARIES} ) +target_link_libraries( osrm-prepare ${Boost_LIBRARIES} ) +target_link_libraries( osrm-routed ${Boost_LIBRARIES} ) + +find_package ( BZip2 REQUIRED ) +include_directories(${BZIP_INCLUDE_DIRS}) +target_link_libraries (osrm-extract ${BZIP2_LIBRARIES}) + +find_package( ZLIB REQUIRED ) +target_link_libraries (osrm-extract ${ZLIB_LIBRARY}) +target_link_libraries (osrm-routed ${ZLIB_LIBRARY}) + +find_package( Threads REQUIRED ) +target_link_libraries (osrm-extract ${Threads_LIBRARY}) + +find_package( Lua51 REQUIRED ) +include_directories(${LUA_INCLUDE_DIR}) +target_link_libraries( osrm-extract ${LUA_LIBRARY} ) +target_link_libraries( osrm-prepare ${LUA_LIBRARY} ) + +find_package( LibXml2 REQUIRED ) +include_directories(${LIBXML2_INCLUDE_DIR}) +target_link_libraries (osrm-extract ${LIBXML2_LIBRARIES}) + +find_package( Luabind REQUIRED ) +include_directories(${LUABIND_INCLUDE_DIR}) +target_link_libraries (osrm-extract ${LUABIND_LIBRARY}) +target_link_libraries (osrm-prepare ${LUABIND_LIBRARY}) + +find_package( Protobuf REQUIRED ) +include_directories(${PROTOBUF_INCLUDE_DIRS}) +target_link_libraries (osrm-extract ${PROTOBUF_LIBRARY}) +target_link_libraries (osrm-prepare ${PROTOBUF_LIBRARY}) + +find_package( STXXL REQUIRED ) +include_directories(${STXXL_INCLUDE_DIR}) +target_link_libraries (osrm-extract ${STXXL_LIBRARY}) +target_link_libraries (osrm-prepare ${STXXL_LIBRARY}) + +find_package( OSMPBF REQUIRED ) +include_directories(${OSMPBF_INCLUDE_DIR}) +target_link_libraries (osrm-extract ${OSMPBF_LIBRARY}) +target_link_libraries (osrm-prepare ${OSMPBF_LIBRARY}) + +if(WITH_TOOLS) + message("-- Activating OSRM internal tools") + find_package( GDAL ) + if(GDAL_FOUND) + add_executable(osrm-components Tools/componentAnalysis.cpp) + include_directories(${GDAL_INCLUDE_DIR}) + target_link_libraries( osrm-components ${GDAL_LIBRARIES} ) + target_link_libraries( osrm-components ${Boost_LIBRARIES} ) + endif(GDAL_FOUND) +endif(WITH_TOOLS) diff --git a/cmake/FindLuabind.cmake b/cmake/FindLuabind.cmake new file mode 100644 index 000000000..39b325059 --- /dev/null +++ b/cmake/FindLuabind.cmake @@ -0,0 +1,75 @@ +# Locate Luabind library +# This module defines +# LUABIND_FOUND, if false, do not try to link to Luabind +# LUABIND_LIBRARIES +# LUABIND_INCLUDE_DIR, where to find luabind.hpp +# +# Note that the expected include convention is +# #include +# and not +# #include + +IF( NOT LUABIND_FIND_QUIETLY ) + MESSAGE(STATUS "Looking for Luabind...") +ENDIF() + +FIND_PATH(LUABIND_INCLUDE_DIR luabind.hpp + HINTS + $ENV{LUABIND_DIR} + PATH_SUFFIXES luabind include/luabind include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /opt/local # DarwinPorts + /opt +) + +FIND_LIBRARY(LUABIND_LIBRARY + NAMES luabind + HINTS + $ENV{LUABIND_DIR} + PATH_SUFFIXES lib64 lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /opt/local + /opt +) + +FIND_LIBRARY(LUABIND_LIBRARY_DBG + NAMES luabindd + HINTS + $ENV{LUABIND_DIR} + PATH_SUFFIXES lib64 lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /opt/local + /opt +) + +IF(LUABIND_LIBRARY) + SET( LUABIND_LIBRARIES "${LUABIND_LIBRARY}" CACHE STRING "Luabind Libraries") +ENDIF(LUABIND_LIBRARY) + +INCLUDE(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set LUABIND_FOUND to TRUE if +# all listed variables are TRUE +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Luabind DEFAULT_MSG LUABIND_LIBRARIES LUABIND_INCLUDE_DIR) + +IF( NOT LUABIND_FIND_QUIETLY ) + IF( LUABIND_FOUND ) + MESSAGE(STATUS "Found Luabind: ${LUABIND_LIBRARY}" ) + ENDIF() + IF( LUABIND_LIBRARY_DBG ) + MESSAGE(STATUS "Luabind debug library availible: ${LUABIND_LIBRARY_DBG}") + ENDIF() +ENDIF() + +MARK_AS_ADVANCED(LUABIND_INCLUDE_DIR LUABIND_LIBRARIES LUABIND_LIBRARY LUABIND_LIBRARY_DBG) diff --git a/cmake/FindOSMPBF.cmake b/cmake/FindOSMPBF.cmake new file mode 100644 index 000000000..78b1d9dc8 --- /dev/null +++ b/cmake/FindOSMPBF.cmake @@ -0,0 +1,54 @@ +# Locate OSMPBF library +# This module defines +# OSMPBF_FOUND, if false, do not try to link to OSMPBF +# OSMPBF_LIBRARIES +# OSMPBF_INCLUDE_DIR, where to find OSMPBF.hpp +# +# Note that the expected include convention is +# #include +# and not +# #include + +IF( NOT OSMPBF_FIND_QUIETLY ) + MESSAGE(STATUS "Looking for OSMPBF...") +ENDIF() + +FIND_PATH(OSMPBF_INCLUDE_DIR osmpbf.h + HINTS + $ENV{OSMPBF_DIR} + PATH_SUFFIXES OSMPBF include/osmpbf include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /opt/local # DarwinPorts + /opt +) + +FIND_LIBRARY(OSMPBF_LIBRARY + NAMES osmpbf + HINTS + $ENV{OSMPBF_DIR} + PATH_SUFFIXES lib64 lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /opt/local + /opt +) + +INCLUDE(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set OSMPBF_FOUND to TRUE if +# all listed variables are TRUE +FIND_PACKAGE_HANDLE_STANDARD_ARGS(OSMPBF DEFAULT_MSG OSMPBF_LIBRARY OSMPBF_INCLUDE_DIR) + +IF( NOT OSMPBF_FIND_QUIETLY ) + IF( OSMPBF_FOUND ) + MESSAGE(STATUS "Found OSMPBF: ${OSMPBF_LIBRARY}" ) + ENDIF() +ENDIF() + +#MARK_AS_ADVANCED(OSMPBF_INCLUDE_DIR OSMPBF_LIBRARIES OSMPBF_LIBRARY OSMPBF_LIBRARY_DBG) diff --git a/cmake/FindSTXXL.cmake b/cmake/FindSTXXL.cmake new file mode 100644 index 000000000..52d508c05 --- /dev/null +++ b/cmake/FindSTXXL.cmake @@ -0,0 +1,51 @@ +# Locate STXXL library +# This module defines +# STXXL_FOUND, if false, do not try to link to libstxxl +# STXXL_LIBRARY +# STXXL_INCLUDE_DIR, where to find stxxl.h +# + + +IF( NOT STXXL_FIND_QUIETLY ) + MESSAGE(STATUS "Looking for STXXL...") +ENDIF() + +FIND_PATH(STXXL_INCLUDE_DIR stxxl.h + HINTS + $ENV{STXXL_DIR} + PATH_SUFFIXES stxxl include/stxxl/stxxl include/stxxl include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /opt/local # DarwinPorts + /opt +) + +FIND_LIBRARY(STXXL_LIBRARY + NAMES stxxl + HINTS + $ENV{STXXL_DIR} + PATH_SUFFIXES lib64 lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /opt/local + /opt +) + +INCLUDE(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set STXXL_FOUND to TRUE if +# all listed variables are TRUE +FIND_PACKAGE_HANDLE_STANDARD_ARGS(STXXL DEFAULT_MSG STXXL_LIBRARY STXXL_INCLUDE_DIR) + +IF( NOT STXXL_FIND_QUIETLY ) + IF( STXXL_FOUND ) + MESSAGE(STATUS "Found STXXL: ${STXXL_LIBRARY}" ) + ENDIF() +ENDIF() + +MARK_AS_ADVANCED(STXXL_INCLUDE_DIR STXXL_LIBRARY) diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake new file mode 100644 index 000000000..1bf023008 --- /dev/null +++ b/cmake/GetGitRevisionDescription.cmake @@ -0,0 +1,123 @@ +# - Returns a version string from Git +# +# These functions force a re-configure on each git commit so that you can +# trust the values of the variables in your build system. +# +# get_git_head_revision( [ ...]) +# +# Returns the refspec and sha hash of the current head revision +# +# git_describe( [ ...]) +# +# Returns the results of git describe on the source tree, and adjusting +# the output so that it tests false if an error occurs. +# +# git_get_exact_tag( [ ...]) +# +# Returns the results of git describe --exact-match on the source tree, +# and adjusting the output so that it tests false if there was no exact +# matching tag. +# +# Requires CMake 2.6 or newer (uses the 'function' command) +# +# Original Author: +# 2009-2010 Ryan Pavlik +# http://academic.cleardefinition.com +# Iowa State University HCI Graduate Program/VRAC +# +# Copyright Iowa State University 2009-2010. +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +if(__get_git_revision_description) + return() +endif() +set(__get_git_revision_description YES) + +# We must run the following at "include" time, not at function call time, +# to find the path to this module rather than the path to a calling list file +get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH) + +function(get_git_head_revision _refspecvar _hashvar) + set(GIT_PARENT_DIR "${CMAKE_SOURCE_DIR}") + set(GIT_DIR "${GIT_PARENT_DIR}/.git") + while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories + set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}") + get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH) + if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT) + # We have reached the root directory, we are not in git + set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE) + set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE) + return() + endif() + set(GIT_DIR "${GIT_PARENT_DIR}/.git") + endwhile() + set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data") + if(NOT EXISTS "${GIT_DATA}") + file(MAKE_DIRECTORY "${GIT_DATA}") + endif() + + if(NOT EXISTS "${GIT_DIR}/HEAD") + return() + endif() + set(HEAD_FILE "${GIT_DATA}/HEAD") + configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY) + + configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in" + "${GIT_DATA}/grabRef.cmake" + @ONLY) + include("${GIT_DATA}/grabRef.cmake") + + set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE) + set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE) +endfunction() + +function(git_describe _var) + if(NOT GIT_FOUND) + find_package(Git QUIET) + endif() + get_git_head_revision(refspec hash) + if(NOT GIT_FOUND) + set(${_var} "GIT-NOTFOUND" PARENT_SCOPE) + return() + endif() + if(NOT hash) + set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE) + return() + endif() + + # TODO sanitize + #if((${ARGN}" MATCHES "&&") OR + # (ARGN MATCHES "||") OR + # (ARGN MATCHES "\\;")) + # message("Please report the following error to the project!") + # message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}") + #endif() + + #message(STATUS "Arguments to execute_process: ${ARGN}") + + execute_process(COMMAND + "${GIT_EXECUTABLE}" + describe + ${hash} + ${ARGN} + WORKING_DIRECTORY + "${CMAKE_SOURCE_DIR}" + RESULT_VARIABLE + res + OUTPUT_VARIABLE + out + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(NOT res EQUAL 0) + set(out "${out}-${res}-NOTFOUND") + endif() + + set(${_var} "${out}" PARENT_SCOPE) +endfunction() + +function(git_get_exact_tag _var) + git_describe(out --exact-match ${ARGN}) + set(${_var} "${out}" PARENT_SCOPE) +endfunction() diff --git a/cmake/cmake_install.cmake b/cmake/cmake_install.cmake new file mode 100644 index 000000000..d7fab3c90 --- /dev/null +++ b/cmake/cmake_install.cmake @@ -0,0 +1,39 @@ +# Install script for directory: /Users/dennisluxen/Coding/Project-OSRM + +# Set the install prefix +IF(NOT DEFINED CMAKE_INSTALL_PREFIX) + SET(CMAKE_INSTALL_PREFIX "/usr/local") +ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX) +STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + IF(BUILD_TYPE) + STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + ELSE(BUILD_TYPE) + SET(CMAKE_INSTALL_CONFIG_NAME "") + ENDIF(BUILD_TYPE) + MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + +# Set the component getting installed. +IF(NOT CMAKE_INSTALL_COMPONENT) + IF(COMPONENT) + MESSAGE(STATUS "Install component: \"${COMPONENT}\"") + SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + ELSE(COMPONENT) + SET(CMAKE_INSTALL_COMPONENT) + ENDIF(COMPONENT) +ENDIF(NOT CMAKE_INSTALL_COMPONENT) + +IF(CMAKE_INSTALL_COMPONENT) + SET(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +ELSE(CMAKE_INSTALL_COMPONENT) + SET(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +ENDIF(CMAKE_INSTALL_COMPONENT) + +FILE(WRITE "/Users/dennisluxen/Coding/Project-OSRM/${CMAKE_INSTALL_MANIFEST}" "") +FOREACH(file ${CMAKE_INSTALL_MANIFEST_FILES}) + FILE(APPEND "/Users/dennisluxen/Coding/Project-OSRM/${CMAKE_INSTALL_MANIFEST}" "${file}\n") +ENDFOREACH(file)