Open Source Routing Machine - C++ backend
Go to file
Daniel J. Hofmann c01ea2ea3e Disables link-time optimization unless -DENABLE_LTO=ON is passed.
This disables the `-flto` LTO flag by default since we're seeing
segfaults in compiler lto plugins, binutils and linker errors again and
again for various clang / gcc / binutils combinations.

Pass `-DNEBALE_LTO` to `cmake` in order to re-enable LTO.

LTO situation in short:
- LTO does not work at all for gcc<4.9
- With gcc>=4.9 the "slim" LTO format is getting used dumping IR
- Older binutils need LTO plugins which know how to read this IR
- Recent binutils handle this format all by themselves
- LLVM is more or less the same with some Clang versions segfaulting

If you need the performance benefit of LTO, make sure your compiler and
binutils are up to date and see for yourself if LTO builds work for you.

References:
- https://gcc.gnu.org/wiki/LinkTimeOptimizationFAQ
- https://github.com/Project-OSRM/osrm-backend/pull/3481#issuecomment-270618997
- https://github.com/Project-OSRM/osrm-backend/issues/3501
- https://github.com/Project-OSRM/osrm-backend/issues/3441

(and a ton of other LTO tickets if you search for them)
2017-01-06 16:49:49 +01:00
.github Revert "Add simple code review checklist to PR template." 2016-12-06 17:21:38 -08:00
cmake Don't mark all lanes as designated when there are blank lane specifiers in the tag. 2016-12-15 10:55:16 +01:00
docker Don't mark all lanes as designated when there are blank lane specifiers in the tag. 2016-12-15 10:55:16 +01:00
docs refactor merging of segregated roads 2017-01-03 12:32:51 +01:00
example Don't warn in example on 32bit only print message 2016-11-19 17:02:31 +01:00
features Consider number of lanes to cross, resolves #3025. 2017-01-06 12:44:40 +01:00
fuzz Enable data flow guided fuzzing using traces 2016-08-19 13:59:59 +02:00
include Fixes various compiler diagnostics 2017-01-06 16:47:52 +01:00
profiles Add api_version gloabal variable to profiles 2016-12-23 15:02:10 +01:00
scripts Bump SOL2 to v2.15.5 to fix OSX compilation problems. 2016-12-16 10:13:33 +01:00
src Fixes various compiler diagnostics 2017-01-06 16:47:52 +01:00
test Make absolute fixtures path 2016-12-04 16:34:42 +01:00
third_party Bump SOL2 to v2.15.5 to fix OSX compilation problems. 2016-12-16 10:13:33 +01:00
unit_tests refactor merging of segregated roads 2017-01-03 12:32:51 +01:00
.babelrc Restructure API docs so that they can be formatted with Docbox. (#3355) 2016-11-30 19:38:53 -08:00
.clang-format expose lanes as enums, adjusted for comments 2016-06-27 11:12:02 +02:00
.clang-tidy Integration scripts for Clang's Modernize and Tidy tool. 2015-09-22 17:32:32 +02:00
.cncc.style Add simple cncc file 2016-01-05 12:06:33 +01:00
.eslintrc Rewrite cucumber test suite in JS 2016-03-24 16:01:01 -07:00
.gitignore # This is a combination of 4 commits. 2016-10-27 23:26:33 -07:00
.gitmodules Removing Docs submodule 2012-12-26 18:29:16 +01:00
.travis.yml Use clang-format from mason 2017-01-04 08:46:16 +01:00
appveyor-build.bat Enable npm and library tests on windows 2017-01-03 10:24:48 +01:00
appveyor.yml Enable npm and library tests on windows 2017-01-03 10:24:48 +01:00
build-local.bat Updated cmake version to 3.7.0-rc2 2016-10-28 12:42:36 -07:00
CHANGELOG.md Disables link-time optimization unless -DENABLE_LTO=ON is passed. 2017-01-06 16:49:49 +01:00
CMakeLists.txt Disables link-time optimization unless -DENABLE_LTO=ON is passed. 2017-01-06 16:49:49 +01:00
codecov.yml Fix codecov.yml 2016-05-12 17:56:40 +02:00
CONTRIBUTING.md [skip ci] Added info to CONTRIBUTING.md about automatic format checks 2017-01-04 17:31:58 +01:00
cucumber.js Close GH-2795: Rewrite cucumber test caching (and support logic). Fixes #2745 2016-09-19 14:13:44 -07:00
Doxyfile.in Exclude new node_modules folder that might be around if test cases have been run. 2016-04-05 22:59:14 +02:00
LICENCE.TXT We are at 2016 for the license 2016-01-04 18:13:05 +01:00
package.json Enable npm and library tests on windows 2017-01-03 10:24:48 +01:00
README.md Reworks the Readme Landing Page 2017-01-03 11:06:07 +01:00
taginfo.json support junction = circular in all profiles, add additional tests 2016-11-29 13:44:32 +01:00

Open Source Routing Machine

Linux / macOS Windows Code Coverage
Travis AppVeyor Codecov

High performance routing engine written in C++14 designed to run on OpenStreetMap data.

The following services are available via HTTP API, C++ library interface and NodeJs wrapper:

  • Nearest - Snaps coordinates to the street network and returns the nearest matches
  • Route - Finds the fastest route between coordinates
  • Table - Computes the duration of the fastest route between all pairs of supplied coordinates
  • Match - Snaps noisy GPS traces to the road network in the most plausible way
  • Trip - Solves the Traveling Salesman Problem using a greedy heuristic
  • Tile - Generates Mapbox Vector Tiles with internal routing metadata

To quickly try OSRM use our demo server which comes with both the backend and a frontend on top.

Related Project-OSRM repositories:

  • node-osrm - Production-ready NodeJs bindings for the routing engine
  • osrm-frontend - User-facing frontend with map. The demo server runs this on top of the backend
  • osrm-text-instructions - Text instructions from OSRM route response

Contact

  • IRC: irc.oftc.net, channel: #osrm (Webchat)
  • Mailinglist: https://lists.openstreetmap.org/listinfo/osrm-talk

Quick Start

The following targets Ubuntu 16.04. For instructions how to build on different distributions, macOS or Windows see our Wiki.

Install dependencies

sudo apt install build-essential git cmake pkg-config \
libbz2-dev libstxxl-dev libstxxl1v5 libxml2-dev \
libzip-dev libboost-all-dev lua5.2 liblua5.2-dev libtbb-dev

Compile and install OSRM binaries:

mkdir -p build
cd build
cmake ..
cmake --build .
sudo cmake --build . --target install

Grab a .osm.pbf extract from Geofabrik or Mapzen's Metro Extracts

wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf

Pre-process the extract and start the HTTP server

osrm-extract berlin-latest.osm.pbf -p profiles/car.lua
osrm-contract berlin-latest.osrm
osrm-routed berlin-latest.osrm

Running Queries

curl http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true

Documentation

Full documentation

Running a request against the Demo Server

Read the API usage policy. Simple query with instructions and alternatives on Berlin:

curl https://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true&alternatives=true

References in publications

When using the code in a (scientific) publication, please cite

@inproceedings{luxen-vetter-2011,
 author = {Luxen, Dennis and Vetter, Christian},
 title = {Real-time routing with OpenStreetMap data},
 booktitle = {Proceedings of the 19th ACM SIGSPATIAL International Conference on Advances in Geographic Information Systems},
 series = {GIS '11},
 year = {2011},
 isbn = {978-1-4503-1031-4},
 location = {Chicago, Illinois},
 pages = {513--516},
 numpages = {4},
 url = {http://doi.acm.org/10.1145/2093973.2094062},
 doi = {10.1145/2093973.2094062},
 acmid = {2094062},
 publisher = {ACM},
 address = {New York, NY, USA},
}