diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index 454e273f4ec..20b7f9ab735 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -170,7 +170,6 @@ jobs: continue-on-error: false node: 20 runs-on: ubuntu-24.04 - BUILD_TOOLS: ON BUILD_TYPE: Debug CCOMPILER: gcc-13 CUCUMBER_TIMEOUT: 20000 @@ -181,7 +180,6 @@ jobs: continue-on-error: false node: 20 runs-on: ubuntu-24.04 - BUILD_TOOLS: ON BUILD_TYPE: Debug CCOMPILER: clang-18 CUCUMBER_TIMEOUT: 20000 @@ -195,7 +193,6 @@ jobs: continue-on-error: false node: 18 runs-on: ubuntu-24.04 - BUILD_TOOLS: ON BUILD_TYPE: Release CCOMPILER: clang-18 CXXCOMPILER: clang++-18 @@ -206,7 +203,6 @@ jobs: continue-on-error: false node: 18 runs-on: ubuntu-24.04 - BUILD_TOOLS: ON BUILD_TYPE: Debug CCOMPILER: clang-18 CXXCOMPILER: clang++-18 @@ -217,7 +213,6 @@ jobs: continue-on-error: false node: 18 runs-on: ubuntu-24.04 - BUILD_TOOLS: ON BUILD_TYPE: Debug CCOMPILER: clang-18 CXXCOMPILER: clang++-18 @@ -229,7 +224,6 @@ jobs: continue-on-error: false node: 18 runs-on: ubuntu-24.04 - BUILD_TOOLS: ON BUILD_TYPE: Release CCOMPILER: clang-17 CXXCOMPILER: clang++-17 @@ -240,7 +234,6 @@ jobs: continue-on-error: false node: 18 runs-on: ubuntu-24.04 - BUILD_TOOLS: ON BUILD_TYPE: Release CCOMPILER: clang-16 CXXCOMPILER: clang++-16 @@ -251,7 +244,6 @@ jobs: continue-on-error: false node: 18 runs-on: ubuntu-24.04 - BUILD_TOOLS: ON BUILD_TYPE: Release CCOMPILER: clang-18 CXXCOMPILER: clang++-18 @@ -263,7 +255,6 @@ jobs: continue-on-error: false node: 18 runs-on: ubuntu-24.04 - BUILD_TOOLS: ON BUILD_TYPE: Release CCOMPILER: clang-18 CXXCOMPILER: clang++-18 @@ -274,7 +265,6 @@ jobs: continue-on-error: false node: 20 runs-on: ubuntu-24.04 - BUILD_TOOLS: ON BUILD_TYPE: Release CCOMPILER: gcc-14 CXXCOMPILER: g++-14 @@ -284,7 +274,6 @@ jobs: continue-on-error: false node: 20 runs-on: ubuntu-24.04 - BUILD_TOOLS: ON BUILD_TYPE: Release CCOMPILER: gcc-13 CXXCOMPILER: g++-13 @@ -294,7 +283,6 @@ jobs: continue-on-error: false node: 20 runs-on: ubuntu-22.04 - BUILD_TOOLS: ON BUILD_TYPE: Release CCOMPILER: gcc-12 CXXCOMPILER: g++-12 @@ -350,7 +338,6 @@ jobs: continue-on-error: ${{ matrix.continue-on-error }} runs-on: ${{ matrix.runs-on }} env: - BUILD_TOOLS: ${{ matrix.BUILD_TOOLS }} BUILD_TYPE: ${{ matrix.BUILD_TYPE }} BUILD_SHARED_LIBS: ${{ matrix.BUILD_SHARED_LIBS }} CCOMPILER: ${{ matrix.CCOMPILER }} @@ -533,7 +520,6 @@ jobs: -DENABLE_COVERAGE=${ENABLE_COVERAGE:-OFF} \ -DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \ -DENABLE_SANITIZER=${ENABLE_SANITIZER:-OFF} \ - -DBUILD_TOOLS=${BUILD_TOOLS:-OFF} \ -DENABLE_CCACHE=ON \ -DENABLE_LTO=${ENABLE_LTO:-ON} \ -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} @@ -550,13 +536,6 @@ jobs: echo "PKG_CONFIG_PATH=${OSRM_INSTALL_DIR}/lib/pkgconfig" >> $GITHUB_ENV fi popd - - name: Build example - if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY != 'ON' }} - run: | - mkdir example/build && pushd example/build - cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} - make --jobs=${JOBS} - popd - name: Run all tests if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY != 'ON' }} run: | @@ -564,7 +543,6 @@ jobs: # macOS SIP strips the linker path. Reset this inside the running shell export LD_LIBRARY_PATH=${{ env.LD_LIBRARY_PATH }} - ./example/build/osrm-example test/data/mld/monaco.osrm # All tests assume to be run from the build directory pushd ${OSRM_BUILD_DIR} diff --git a/.gitignore b/.gitignore index 9180d6fb50b..a9dd4b9d46d 100644 --- a/.gitignore +++ b/.gitignore @@ -43,7 +43,6 @@ Thumbs.db ####################### /_build* /build/ -/example/build/ /test/data/monaco.osrm* /test/data/ch /test/data/corech diff --git a/CMakeLists.txt b/CMakeLists.txt index 046d8877fcb..83106cad20b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.18) - +project(OSRM C CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) @@ -10,6 +10,12 @@ 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() +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + message(STATUS "Building on a 64 bit system") +else() + message(FATAL_ERROR "Building on a 32 bit system is not supported") +endif() + # 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) @@ -22,43 +28,26 @@ if (NOT WIN32 AND NOT DEFINED ENV{OSRM_BUILD_DIR}) set(ENV{OSRM_BUILD_DIR} ${CMAKE_CURRENT_BINARY_DIR}) endif() -option(ENABLE_CONAN "Use conan for dependencies" OFF) -option(ENABLE_CCACHE "Speed up incremental rebuilds via ccache" ON) -option(BUILD_TOOLS "Build OSRM tools" OFF) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + option(BUILD_PACKAGE "Build OSRM package" OFF) -option(BUILD_ROUTED "Build osrm-routed HTTP server" ON) option(ENABLE_ASSERTIONS "Use assertions in release mode" OFF) -option(ENABLE_DEBUG_LOGGING "Use debug logging in release mode" OFF) +option(ENABLE_CCACHE "Speed up incremental rebuilds via ccache" ON) +option(ENABLE_CLANG_TIDY "Enables clang-tidy checks" OFF) +option(ENABLE_CONAN "Use conan for dependencies" OFF) option(ENABLE_COVERAGE "Build with coverage instrumentalisation" OFF) -option(ENABLE_SANITIZER "Use memory sanitizer for Debug build" OFF) -option(ENABLE_LTO "Use Link Time Optimisation" ON) +option(ENABLE_DEBUG_LOGGING "Use debug logging in release mode" OFF) option(ENABLE_FUZZING "Fuzz testing using LLVM's libFuzzer" OFF) +option(ENABLE_LTO "Use Link Time Optimisation" ON) option(ENABLE_NODE_BINDINGS "Build NodeJs bindings" OFF) -option(ENABLE_CLANG_TIDY "Enables clang-tidy checks" OFF) - +option(ENABLE_SANITIZER "Use memory sanitizer for Debug build" 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=*;--header-filter=.*") - endif() + find_program(CLANG_TIDY_COMMAND NAMES clang-tidy REQUIRED) + message(STATUS "Found clang-tidy at ${CLANG_TIDY_COMMAND}") + set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND};--warnings-as-errors=*;--header-filter=.*") endif() -list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") - -# be compatible with version handling before cmake 3.x -if (POLICY CMP0057) - cmake_policy(SET CMP0057 NEW) -endif() -if (POLICY CMP0074) - cmake_policy(SET CMP0074 NEW) -endif() -project(OSRM C CXX) - - if(ENABLE_LTO AND (CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES MinRelSize OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)) include(CheckIPOSupported) check_ipo_supported(RESULT LTO_SUPPORTED OUTPUT error) @@ -86,14 +75,14 @@ sbeParseJson(packagejson packagejsonraw) # This regex is not strict enough, but the correct one is too complicated for cmake matching. # https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string if (packagejson.version MATCHES "^([0-9]+)\.([0-9]+)\.([0-9]+)([-+][0-9a-zA-Z.-]+)?$") - set(OSRM_VERSION_MAJOR ${CMAKE_MATCH_1}) - set(OSRM_VERSION_MINOR ${CMAKE_MATCH_2}) - set(OSRM_VERSION_PATCH ${CMAKE_MATCH_3}) - set(OSRM_VERSION_PRERELEASE_BUILD ${CMAKE_MATCH_4}) + set(OSRM_VERSION_MAJOR ${CMAKE_MATCH_1}) + set(OSRM_VERSION_MINOR ${CMAKE_MATCH_2}) + set(OSRM_VERSION_PATCH ${CMAKE_MATCH_3}) + set(OSRM_VERSION_PRERELEASE_BUILD ${CMAKE_MATCH_4}) - set(OSRM_VERSION packagejson.version) + set(OSRM_VERSION packagejson.version) else() - message(FATAL_ERROR "Version from package.json cannot be parsed, expected semver compatible label, but found ${packagejson.version}") + message(FATAL_ERROR "Version from package.json cannot be parsed, expected semver compatible label, but found ${packagejson.version}") endif() if (MSVC) @@ -125,12 +114,6 @@ include(CheckCXXCompilerFlag) include(FindPackageHandleStandardArgs) include(GNUInstallDirs) -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - message(STATUS "Building on a 64 bit system") -else() - message(FATAL_ERROR "Building on a 32 bit system is not supported") -endif() - 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/sol2/include) @@ -151,7 +134,6 @@ file(GLOB UpdaterGlob src/updater/*.cpp) file(GLOB StorageGlob src/storage/*.cpp) file(GLOB ServerGlob src/server/*.cpp src/server/**/*.cpp) file(GLOB EngineGlob src/engine/*.cpp src/engine/**/*.cpp) -file(GLOB ErrorcodesGlob src/osrm/errorcodes.cpp) add_library(UTIL OBJECT ${UtilGlob}) add_library(EXTRACTOR OBJECT ${ExtractorGlob}) @@ -162,14 +144,11 @@ add_library(CONTRACTOR OBJECT ${ContractorGlob}) add_library(UPDATER OBJECT ${UpdaterGlob}) add_library(STORAGE OBJECT ${StorageGlob}) add_library(ENGINE OBJECT ${EngineGlob}) - -if (BUILD_ROUTED) - add_library(SERVER OBJECT ${ServerGlob}) - add_executable(osrm-routed src/tools/routed.cpp $ $) -endif() +add_library(SERVER OBJECT ${ServerGlob}) set_target_properties(UTIL PROPERTIES LINKER_LANGUAGE CXX) +add_executable(osrm-routed src/tools/routed.cpp $ $) add_executable(osrm-extract src/tools/extract.cpp) add_executable(osrm-partition src/tools/partition.cpp) add_executable(osrm-customize src/tools/customize.cpp) @@ -479,9 +458,7 @@ target_link_libraries(osrm-extract osrm_extract ${Boost_PROGRAM_OPTIONS_LIBRARY} target_link_libraries(osrm-partition osrm_partition ${Boost_PROGRAM_OPTIONS_LIBRARY}) target_link_libraries(osrm-customize osrm_customize ${Boost_PROGRAM_OPTIONS_LIBRARY}) target_link_libraries(osrm-contract osrm_contract ${Boost_PROGRAM_OPTIONS_LIBRARY}) -if (BUILD_ROUTED) - target_link_libraries(osrm-routed osrm ${Boost_PROGRAM_OPTIONS_LIBRARY} ${OPTIONAL_SOCKET_LIBS} ${ZLIB_LIBRARY}) -endif() +target_link_libraries(osrm-routed osrm ${Boost_PROGRAM_OPTIONS_LIBRARY} ${OPTIONAL_SOCKET_LIBS} ${ZLIB_LIBRARY}) set(EXTRACTOR_LIBRARIES ${BZIP2_LIBRARIES} @@ -555,18 +532,13 @@ target_link_libraries(osrm_partition ${PARTITIONER_LIBRARIES}) target_link_libraries(osrm_customize ${CUSTOMIZER_LIBRARIES} osrm_update osrm_store) target_link_libraries(osrm_store ${STORAGE_LIBRARIES}) -# BUILD_COMPONENTS add_executable(osrm-components src/tools/components.cpp $ $) target_link_libraries(osrm-components ${TBB_LIBRARIES} ${BOOST_BASE_LIBRARIES} ${UTIL_LIBRARIES}) install(TARGETS osrm-components DESTINATION bin) -if(BUILD_TOOLS) - message(STATUS "Activating OSRM internal tools") - add_executable(osrm-io-benchmark src/tools/io-benchmark.cpp $) - target_link_libraries(osrm-io-benchmark ${BOOST_BASE_LIBRARIES} ${TBB_LIBRARIES}) - - install(TARGETS osrm-io-benchmark DESTINATION bin) -endif() +add_executable(osrm-io-benchmark src/tools/io-benchmark.cpp $) +target_link_libraries(osrm-io-benchmark ${BOOST_BASE_LIBRARIES} ${TBB_LIBRARIES}) +install(TARGETS osrm-io-benchmark DESTINATION bin) if (ENABLE_ASSERTIONS) message(STATUS "Enabling assertions") @@ -585,47 +557,14 @@ set_property(TARGET osrm-extract PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE) set_property(TARGET osrm-partition PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE) set_property(TARGET osrm-contract PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE) set_property(TARGET osrm-datastore PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE) -if (BUILD_ROUTED) - set_property(TARGET osrm-routed PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE) -endif() +set_property(TARGET osrm-routed PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE) -file(GLOB FlatbuffersGlob third_party/flatbuffers/include/flatbuffers/*.h) -file(GLOB LibraryGlob include/osrm/*.hpp) -file(GLOB ParametersGlob include/engine/api/*_parameters.hpp) -set(ApiHeader include/engine/api/base_result.hpp) -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) -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) -set(ExtractorHeader include/extractor/extractor.hpp include/storage/io_config.hpp include/extractor/extractor_config.hpp include/extractor/travel_mode.hpp) -set(PartitionerHeader include/partitioner/partitioner.hpp include/partitioner/partitioner_config.hpp) -set(ContractorHeader include/contractor/contractor.hpp include/contractor/contractor_config.hpp) -set(StorageHeader include/storage/storage.hpp include/storage/io_config.hpp include/storage/storage_config.hpp) -install(FILES ${EngineHeader} DESTINATION include/osrm/engine) -install(FILES ${UtilHeader} DESTINATION include/osrm/util) -install(FILES ${StorageHeader} DESTINATION include/osrm/storage) -install(FILES ${ExtractorHeader} DESTINATION include/osrm/extractor) -install(FILES ${PartitionerHeader} DESTINATION include/osrm/partitioner) -install(FILES ${ContractorHeader} DESTINATION include/osrm/contractor) -install(FILES ${LibraryGlob} DESTINATION include/osrm) -install(FILES ${ParametersGlob} DESTINATION include/osrm/engine/api) -install(FILES ${ApiHeader} DESTINATION include/osrm/engine/api) -install(FILES ${FlatbuffersGlob} DESTINATION include/flatbuffers) install(TARGETS osrm-extract DESTINATION bin) install(TARGETS osrm-partition DESTINATION bin) install(TARGETS osrm-customize DESTINATION bin) install(TARGETS osrm-contract DESTINATION bin) install(TARGETS osrm-datastore DESTINATION bin) -if (BUILD_ROUTED) - install(TARGETS osrm-routed DESTINATION bin) -endif() -install(TARGETS osrm DESTINATION lib) -install(TARGETS osrm_extract DESTINATION lib) -install(TARGETS osrm_partition DESTINATION lib) -install(TARGETS osrm_customize DESTINATION lib) -install(TARGETS osrm_update DESTINATION lib) -install(TARGETS osrm_contract DESTINATION lib) -install(TARGETS osrm_store DESTINATION lib) -install(TARGETS osrm_guidance DESTINATION lib) - +install(TARGETS osrm-routed DESTINATION bin) # Install profiles and support library to /usr/local/share/osrm/profiles by default set(DefaultProfilesDir profiles) @@ -636,8 +575,6 @@ set(DefaultProfilesDir data) install(DIRECTORY ${DefaultProfilesDir} DESTINATION share/osrm) # Setup exporting variables for pkgconfig and subproject -# - if(BUILD_PACKAGE) include(CPackConfig) include(CPack) @@ -714,7 +651,6 @@ if (ENABLE_NODE_BINDINGS) add_subdirectory(src/nodejs) endif() - if (ENABLE_FUZZING) # 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") @@ -748,4 +684,3 @@ foreach(header ${headers_to_check}) endforeach() add_library(check-headers STATIC EXCLUDE_FROM_ALL ${sources}) set_target_properties(check-headers PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${check_headers_dir}) - diff --git a/docker/Dockerfile-alpine b/docker/Dockerfile-alpine index fe22173f9ac..935f2768f92 100644 --- a/docker/Dockerfile-alpine +++ b/docker/Dockerfile-alpine @@ -27,11 +27,10 @@ RUN NPROC=${BUILD_CONCURRENCY:-$(nproc)} && \ cd build && \ BUILD_TYPE="Release" && \ ENABLE_ASSERTIONS="Off" && \ - BUILD_TOOLS="Off" && \ case ${DOCKER_TAG} in *"-debug"*) BUILD_TYPE="Debug";; esac && \ - case ${DOCKER_TAG} in *"-assertions"*) BUILD_TYPE="RelWithDebInfo" && ENABLE_ASSERTIONS="On" && BUILD_TOOLS="On";; esac && \ - echo "Building ${BUILD_TYPE} with ENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} BUILD_TOOLS=${BUILD_TOOLS}" && \ - cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} -DBUILD_TOOLS=${BUILD_TOOLS} -DENABLE_LTO=OFF && \ + case ${DOCKER_TAG} in *"-assertions"*) BUILD_TYPE="RelWithDebInfo" && ENABLE_ASSERTIONS="On";; esac && \ + echo "Building ${BUILD_TYPE} with ENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} && \ + cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} -DENABLE_LTO=OFF && \ make -j${NPROC} install && \ cd ../profiles && \ cp -r * /opt && \ diff --git a/docker/Dockerfile-debian b/docker/Dockerfile-debian index 8b51c516855..087e9dfc750 100644 --- a/docker/Dockerfile-debian +++ b/docker/Dockerfile-debian @@ -29,11 +29,10 @@ RUN NPROC=${BUILD_CONCURRENCY:-$(nproc)} && \ cd build && \ BUILD_TYPE="Release" && \ ENABLE_ASSERTIONS="Off" && \ - BUILD_TOOLS="Off" && \ case ${DOCKER_TAG} in *"-debug"*) BUILD_TYPE="Debug";; esac && \ - case ${DOCKER_TAG} in *"-assertions"*) BUILD_TYPE="RelWithDebInfo" && ENABLE_ASSERTIONS="On" && BUILD_TOOLS="On";; esac && \ - echo "Building ${BUILD_TYPE} with ENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} BUILD_TOOLS=${BUILD_TOOLS}" && \ - cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} -DBUILD_TOOLS=${BUILD_TOOLS} -DENABLE_LTO=On && \ + case ${DOCKER_TAG} in *"-assertions"*) BUILD_TYPE="RelWithDebInfo" && ENABLE_ASSERTIONS="On";; esac && \ + echo "Building ${BUILD_TYPE} with ENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} && \ + cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_ASSERTIONS=${ENABLE_ASSERTIONS} -DENABLE_LTO=On && \ make -j${NPROC} install && \ cd ../profiles && \ cp -r * /opt && \ diff --git a/docs/libosrm.md b/docs/libosrm.md deleted file mode 100644 index 9b84180f1f3..00000000000 --- a/docs/libosrm.md +++ /dev/null @@ -1,33 +0,0 @@ -## Introduction - -OSRM can be used as a library (libosrm) via C++ instead of using it through the HTTP interface and `osrm-routed`. This allows for fine-tuning OSRM and has much less overhead. Here is a quick introduction into how to use `libosrm` in the upcoming v5 release. - -Take a look at the example code that lives in the [example directory](https://github.com/Project-OSRM/osrm-backend/tree/master/example). Here is all you ever wanted to know about `libosrm`, that is a short description of what the types do and where to find documentation on it: - -## Important interface objects - -- [`EngineConfig`](https://github.com/Project-OSRM/osrm-backend/blob/master/include/engine/engine_config.hpp) - for initializing an OSRM instance we can configure certain properties and constraints. E.g. the storage config is the base path such as `france.osm.osrm` from which we derive and load `france.osm.osrm.*` auxiliary files. This also lets you set constraints such as the maximum number of locations allowed for specific services. - -- [`OSRM`](https://github.com/Project-OSRM/osrm-backend/blob/master/include/osrm/osrm.hpp) - this is the main Routing Machine type with functions such as `Route` and `Table`. You initialize it with a `EngineConfig`. It does all the heavy lifting for you. Each function takes its own parameters, e.g. the `Route` function takes `RouteParameters`, and a out-reference to a JSON result that gets filled. The return value is a `Status`, indicating error or success. - -- [`Status`](https://github.com/Project-OSRM/osrm-backend/blob/master/include/engine/status.hpp) - this is a type wrapping `Error` or `Ok` for indicating error or success, respectively. - -- [`TableParameters`](https://github.com/Project-OSRM/osrm-backend/blob/master/include/engine/api/table_parameters.hpp) - this is an example of parameter types the Routing Machine functions expect. In this case `Table` expects its own parameters as `TableParameters`. You can see it wrapping two vectors, sources and destinations --- these are indices into your coordinates for the table service to construct a matrix from (empty sources or destinations means: use all of them). If you ask yourself where coordinates come from, you can see `TableParameters` inheriting from `BaseParameters`. - -- [`BaseParameter`](https://github.com/Project-OSRM/osrm-backend/blob/master/include/engine/api/base_parameters.hpp) - this most importantly holds coordinates (and a few other optional properties that you don't need for basic usage); the specific parameter types inherit from `BaseParameters` to get these member attributes. That means your `TableParameters` type has `coordinates`, `sources` and `destination` member attributes (and a few other that we ignore for now). - -- [`Coordinate`](https://github.com/Project-OSRM/osrm-backend/blob/master/include/util/coordinate.hpp) - this is a wrapper around a (longitude, latitude) pair. We really don't care about (lon,lat) vs (lat, lon) but we don't want you to accidentally mix them up, so both latitude and longitude are strictly typed wrappers around integers (fixed notation such as `13423240`) and floating points (floating notation such as `13.42324`). - -- [Parameters for other services](https://github.com/Project-OSRM/osrm-backend/tree/master/include/engine/api) - here are all other `*Parameters` you need for other Routing Machine services. - -- [JSON](https://github.com/Project-OSRM/osrm-backend/blob/master/include/util/json_container.hpp) - this is a sum type resembling JSON. The Routing Machine service functions take a out-ref to a JSON result and fill it accordingly. It is currently implemented using [mapbox/variant](https://github.com/mapbox/variant) which is similar to [Boost.Variant](http://www.boost.org/doc/libs/1_55_0/doc/html/variant.html). There are two ways to work with this sum type: either provide a visitor that acts on each type on visitation or use the `get` function in case you're sure about the structure. The JSON structure is written down in the [HTTP API](#http-api). - -## Example - -See [the example folder](https://github.com/Project-OSRM/osrm-backend/tree/master/example) in the OSRM repository. - -## Workflow - - - Create an `OSRM` instance initialized with a `EngineConfig` - - Call the service function on the `OSRM` object providing service specific `*Parameters` - - Check the return code and use the JSON result diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt deleted file mode 100644 index 1ec0ff9cc74..00000000000 --- a/example/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -cmake_minimum_required(VERSION 3.18) - -if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR AND NOT MSVC_IDE) - message(FATAL_ERROR "In-source builds are not allowed. -Please create a directory and run cmake from there, passing the path to this source directory as the last argument. -This process created the file `CMakeCache.txt' and the directory `CMakeFiles'. Please delete them.") -endif() - -if(NOT CMAKE_BUILD_TYPE MATCHES Debug) - set(CMAKE_BUILD_TYPE Release) -endif() - -project(osrm-example C CXX) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") - -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - message(STATUS "Building on a 64 bit system") -else() - message(STATUS "Building on a 32 bit system") -endif() - -link_directories(${LibOSRM_LIBRARY_DIRS}) -add_executable(osrm-example example.cpp) - -find_package(LibOSRM REQUIRED) - -target_link_libraries(osrm-example ${LibOSRM_LIBRARIES} ${LibOSRM_DEPENDENT_LIBRARIES}) -include_directories(SYSTEM ${LibOSRM_INCLUDE_DIRS}) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LibOSRM_CXXFLAGS}") diff --git a/example/cmake/FindLibOSRM.cmake b/example/cmake/FindLibOSRM.cmake deleted file mode 100644 index 50a5641a192..00000000000 --- a/example/cmake/FindLibOSRM.cmake +++ /dev/null @@ -1,63 +0,0 @@ -# - Try to find LibOSRM -# Once done this will define -# LibOSRM_FOUND - System has LibOSRM -# LibOSRM_LIBRARIES - The libraries and ldflags needed to use LibOSRM -# LibOSRM_DEPENDENT_LIBRARIES - The libraries and ldflags need to link LibOSRM dependencies -# LibOSRM_LIBRARY_DIRS - The libraries paths needed to find LibOSRM -# LibOSRM_CXXFLAGS - Compiler switches required for using LibOSRM - -find_package(PkgConfig) -pkg_search_module(PC_LibOSRM QUIET libosrm) - -function(JOIN VALUES GLUE OUTPUT) - string (REPLACE ";" "${GLUE}" _TMP_STR "${VALUES}") - set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE) -endfunction() - -list(REMOVE_ITEM PC_LibOSRM_CFLAGS " ") -JOIN("${PC_LibOSRM_CFLAGS}" " " output) - -set(LibOSRM_CXXFLAGS ${output}) -set(LibOSRM_LIBRARY_DIRS ${PC_LibOSRM_LIBRARY_DIRS}) - -find_path(LibOSRM_INCLUDE_DIR osrm/osrm.hpp - PATH_SUFFIXES osrm include/osrm include - HINTS ${PC_LibOSRM_INCLUDEDIR} ${PC_LibOSRM_INCLUDE_DIRS} - ~/Library/Frameworks - /Library/Frameworks - /usr/local - /usr - /opt/local - /opt) - -find_library(TEST_LibOSRM_STATIC_LIBRARY Names osrm.lib libosrm.a - PATH_SUFFIXES osrm lib/osrm lib - HINTS ${PC_LibOSRM_LIBDIR} ${PC_LibOSRM_LIBRARY_DIRS} - ~/Library/Frameworks - /Library/Frameworks - /usr/local - /usr - /opt/local - /opt) -find_library(TEST_LibOSRM_DYNAMIC_LIBRARY Names libosrm.dylib libosrm.so - PATH_SUFFIXES osrm lib/osrm lib - HINTS ${PC_LibOSRM_LIBDIR} ${PC_LibOSRM_LIBRARY_DIRS} - ~/Library/Frameworks - /Library/Frameworks - /usr/local - /usr - /opt/local - /opt) - -set(LibOSRM_DEPENDENT_LIBRARIES ${PC_LibOSRM_STATIC_LDFLAGS}) -set(LibOSRM_LIBRARIES ${PC_LibOSRM_LDFLAGS}) - -include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set LIBOSRM_FOUND to TRUE -# if all listed variables are TRUE -find_package_handle_standard_args(LibOSRM DEFAULT_MSG - LibOSRM_LIBRARY_DIRS - LibOSRM_CXXFLAGS - LibOSRM_LIBRARIES - LibOSRM_DEPENDENT_LIBRARIES - LibOSRM_INCLUDE_DIR) diff --git a/example/cmake/FindTBB.cmake b/example/cmake/FindTBB.cmake deleted file mode 120000 index f51bdf7429c..00000000000 --- a/example/cmake/FindTBB.cmake +++ /dev/null @@ -1 +0,0 @@ -../../cmake/FindTBB.cmake \ No newline at end of file diff --git a/example/example.cpp b/example/example.cpp deleted file mode 100644 index 1d08eb9fce4..00000000000 --- a/example/example.cpp +++ /dev/null @@ -1,90 +0,0 @@ -#include "osrm/match_parameters.hpp" -#include "osrm/nearest_parameters.hpp" -#include "osrm/route_parameters.hpp" -#include "osrm/table_parameters.hpp" -#include "osrm/trip_parameters.hpp" - -#include "osrm/coordinate.hpp" -#include "osrm/engine_config.hpp" -#include "osrm/json_container.hpp" - -#include "osrm/osrm.hpp" -#include "osrm/status.hpp" - -#include -#include -#include -#include - -#include - -int main(int argc, const char *argv[]) -{ - if (argc < 2) - { - std::cerr << "Usage: " << argv[0] << " data.osrm\n"; - return EXIT_FAILURE; - } - - using namespace osrm; - - // Configure based on a .osrm base path, and no datasets in shared mem from osrm-datastore - EngineConfig config; - - config.storage_config = {argv[1]}; - config.use_shared_memory = false; - - // We support two routing speed up techniques: - // - Contraction Hierarchies (CH): requires extract+contract pre-processing - // - Multi-Level Dijkstra (MLD): requires extract+partition+customize pre-processing - // - // config.algorithm = EngineConfig::Algorithm::CH; - config.algorithm = EngineConfig::Algorithm::MLD; - - // Routing machine with several services (such as Route, Table, Nearest, Trip, Match) - const OSRM osrm{config}; - - // The following shows how to use the Route service; configure this service - RouteParameters params; - - // Route in monaco - params.coordinates.push_back({util::FloatLongitude{7.419758}, util::FloatLatitude{43.731142}}); - params.coordinates.push_back({util::FloatLongitude{7.419505}, util::FloatLatitude{43.736825}}); - - // Response is in JSON format - engine::api::ResultT result = json::Object(); - - // Execute routing request, this does the heavy lifting - const auto status = osrm.Route(params, result); - - auto &json_result = std::get(result); - if (status == Status::Ok) - { - auto &routes = std::get(json_result.values["routes"]); - - // Let's just use the first route - auto &route = std::get(routes.values.at(0)); - const auto distance = std::get(route.values["distance"]).value; - const auto duration = std::get(route.values["duration"]).value; - - // Warn users if extract does not contain the default coordinates from above - if (distance == 0 || duration == 0) - { - std::cout << "Note: distance or duration is zero. "; - std::cout << "You are probably doing a query outside of the OSM extract.\n\n"; - } - - std::cout << "Distance: " << distance << " meter\n"; - std::cout << "Duration: " << duration << " seconds\n"; - return EXIT_SUCCESS; - } - else if (status == Status::Error) - { - const auto code = std::get(json_result.values["code"]).value; - const auto message = std::get(json_result.values["message"]).value; - - std::cout << "Code: " << code << "\n"; - std::cout << "Message: " << code << "\n"; - return EXIT_FAILURE; - } -} diff --git a/unit_tests/CMakeLists.txt b/unit_tests/CMakeLists.txt index cf2ece5c00b..86a5297e5d7 100644 --- a/unit_tests/CMakeLists.txt +++ b/unit_tests/CMakeLists.txt @@ -114,12 +114,10 @@ add_executable(library-partition-tests EXCLUDE_FROM_ALL ${LibraryPartitionTestsSources}) -if (BUILD_ROUTED) - add_executable(server-tests +add_executable(server-tests EXCLUDE_FROM_ALL ${ServerTestsSources} $ $) -endif() add_executable(util-tests EXCLUDE_FROM_ALL @@ -172,9 +170,7 @@ target_link_libraries(library-extract-tests osrm_extract osrm_guidance ${Boost_U target_link_libraries(library-contract-tests osrm_contract ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) target_link_libraries(library-customize-tests osrm_customize ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) target_link_libraries(library-partition-tests osrm_partition ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) -if (BUILD_ROUTED) - target_link_libraries(server-tests osrm ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) -endif() +target_link_libraries(server-tests osrm ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) target_link_libraries(util-tests ${UTIL_LIBRARIES} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) target_link_libraries(contractor-tests osrm_contract ${CONTRACTOR_LIBRARIES} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) target_link_libraries(storage-tests osrm_store ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})