Skip to content

Commit cdcda9a

Browse files
authored
Feature dependency (#154)
* Add shapelib to third party * In progress with add cpp-api * Remove OSM dependencies * Clean cmake file * Done with an initial version of external project * Add fmm prefix to header * Update installation path * Fix RPATH issue
1 parent 2d87a19 commit cdcda9a

File tree

934 files changed

+772
-121609
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

934 files changed

+772
-121609
lines changed

CMakeLists.txt

Lines changed: 67 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,19 @@ if (POLICY CMP0078)
1818
endif()
1919

2020
# Prevent in source build
21-
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
21+
set(CMAKE_DISABLE_SOURCE_CHANGES OFF)
2222
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
2323

2424
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
2525

2626
project(fmm)
2727

2828
set(CMAKE_BUILD_TYPE "Release")
29-
# set(CMAKE_C_FLAGS "-std=c11")
3029
set(CMAKE_CXX_FLAGS "-O3 -DSPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE")
3130
set(CMAKE_CXX_STANDARD 11)
3231
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build")
3332

34-
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake"
35-
"${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/cmake")
33+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
3634

3735
find_package(Conda)
3836
if(CONDA_PREFIX)
@@ -42,22 +40,6 @@ else()
4240
message(STATUS "Non conda exist, search library in default path")
4341
endif()
4442

45-
if(NOT OSMIUM_INCLUDE_DIR)
46-
set(OSMIUM_INCLUDE_DIR "third_party/libosmium/include")
47-
endif()
48-
if(NOT PROTOZERO_INCLUDE_DIR)
49-
set(PROTOZERO_INCLUDE_DIR "third_party/protozero/include")
50-
endif()
51-
52-
find_package(Osmium REQUIRED COMPONENTS io)
53-
if(OSMIUM_FOUND)
54-
message(STATUS "OSMium found at ${OSMIUM_INCLUDE_DIRS}")
55-
message(STATUS "OSMium library found at ${OSMIUM_LIBRARIES}")
56-
include_directories(${OSMIUM_INCLUDE_DIR})
57-
else()
58-
message(FATAL_ERROR "Libosmium not found!\n")
59-
endif()
60-
6143
find_package(GDAL 2.2 REQUIRED)
6244
if (GDAL_FOUND)
6345
message(STATUS "GDAL headers found at ${GDAL_INCLUDE_DIR}")
@@ -84,10 +66,32 @@ if(OPENMP_FOUND)
8466
message(STATUS "OpenMP_CXX_LIBRARIES found at ${OpenMP_CXX_LIBRARIES}")
8567
endif()
8668

87-
include_directories(third_party)
88-
include_directories(third_party/libosmium/include)
89-
include_directories(third_party/protozero/include)
90-
include_directories(src)
69+
### Set RPATH properties
70+
71+
set(CMAKE_SKIP_BUILD_RPATH FALSE)
72+
73+
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
74+
75+
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
76+
77+
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
78+
79+
# Build h3 objects
80+
81+
set(UNCONFIGURED_API_HEADER
82+
${CMAKE_CURRENT_SOURCE_DIR}/third_party/h3/include/h3api.h.in)
83+
set(CONFIGURED_API_HEADER
84+
${CMAKE_CURRENT_SOURCE_DIR}/third_party/h3/include/h3api.h)
85+
configure_file(${UNCONFIGURED_API_HEADER} ${CONFIGURED_API_HEADER})
86+
87+
# Creation of FMMLIB
88+
89+
set(FMM_INCLUDE_PATH
90+
${CMAKE_CURRENT_SOURCE_DIR}/src
91+
${CMAKE_CURRENT_SOURCE_DIR}/third_party
92+
${CMAKE_CURRENT_SOURCE_DIR}/third_party/h3/include)
93+
94+
include_directories(${FMM_INCLUDE_PATH})
9195

9296
file(GLOB CoreGlob src/core/*.cpp)
9397
file(GLOB AlgorithmGlob src/algorithm/*.cpp)
@@ -98,6 +102,7 @@ file(GLOB UtilGlob src/util/*.cpp)
98102
file(GLOB MMGlob src/mm/*.cpp)
99103
file(GLOB FMMGlob src/mm/fmm/*.cpp)
100104
file(GLOB STMATCHGlob src/mm/stmatch/*.cpp)
105+
file(GLOB h3Glob third_party/h3/lib/*.c)
101106

102107
add_library(CORE OBJECT ${CoreGlob})
103108
add_library(ALGORITHM OBJECT ${AlgorithmGlob})
@@ -108,36 +113,8 @@ add_library(NETWORK OBJECT ${NetworkGlob})
108113
add_library(MM_OBJ OBJECT ${MMGlob})
109114
add_library(FMM_OBJ OBJECT ${FMMGlob})
110115
add_library(STMATCH_OBJ OBJECT ${STMATCHGlob})
111-
112-
# Build h3 objects
113-
114-
set(UNCONFIGURED_API_HEADER third_party/h3/src/h3lib/include/h3api.h.in)
115-
set(CONFIGURED_API_HEADER third_party/h3/src/h3lib/include/h3api.h)
116-
configure_file(${UNCONFIGURED_API_HEADER} ${CONFIGURED_API_HEADER})
117-
message(STATUS "Copy h3 header to ${CONFIGURED_API_HEADER}")
118-
set(H3_INCLUDE_PATH
119-
${CMAKE_CURRENT_BINARY_DIR}/third_party/h3/src/h3lib/include
120-
${CMAKE_CURRENT_SOURCE_DIR}/third_party/h3/src/h3lib/include)
121-
122-
file(GLOB h3Glob third_party/h3/src/h3lib/lib/*.c)
123116
add_library(H3_OBJ OBJECT ${h3Glob})
124-
target_include_directories(H3_OBJ PUBLIC ${H3_INCLUDE_PATH})
125117

126-
### Set RPATH properties
127-
128-
set(CMAKE_SKIP_BUILD_RPATH FALSE)
129-
130-
# when building, don't use the install RPATH already
131-
# (but later on when installing)
132-
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
133-
134-
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
135-
136-
# add the automatically determined parts of the RPATH
137-
# which point to directories outside the build tree to the install RPATH
138-
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
139-
140-
# Creation of FMMLIB
141118
add_library(FMMLIB SHARED
142119
$<TARGET_OBJECTS:MM_OBJ>
143120
$<TARGET_OBJECTS:FMM_OBJ>
@@ -149,11 +126,10 @@ add_library(FMMLIB SHARED
149126
$<TARGET_OBJECTS:NETWORK>
150127
$<TARGET_OBJECTS:IO>
151128
$<TARGET_OBJECTS:H3_OBJ>)
129+
152130
target_link_libraries(FMMLIB
153-
${OSMIUM_LIBRARIES}
154131
${GDAL_LIBRARIES} ${Boost_LIBRARIES}
155132
${OpenMP_CXX_LIBRARIES})
156-
install(TARGETS FMMLIB DESTINATION lib)
157133

158134
# Add executables
159135

@@ -167,14 +143,47 @@ add_executable(stmatch src/app/stmatch.cpp)
167143
target_link_libraries(stmatch FMMLIB)
168144

169145
add_executable(h3mm src/app/h3mm.cpp)
170-
target_include_directories(
171-
h3mm PUBLIC ${H3_INCLUDE_PATH})
172-
173146
target_link_libraries(h3mm FMMLIB)
174147

175148
message(STATUS "Installation folder ${CMAKE_INSTALL_PREFIX}")
176149

150+
install(TARGETS FMMLIB LIBRARY DESTINATION lib)
151+
177152
install(TARGETS fmm ubodt_gen stmatch h3mm DESTINATION bin)
178153

154+
set(FMM_DIST_INCLUDE_PATH
155+
${CMAKE_CURRENT_SOURCE_DIR}/src/algorithm
156+
${CMAKE_CURRENT_SOURCE_DIR}/src/config
157+
${CMAKE_CURRENT_SOURCE_DIR}/src/core
158+
${CMAKE_CURRENT_SOURCE_DIR}/src/io
159+
${CMAKE_CURRENT_SOURCE_DIR}/src/mm
160+
${CMAKE_CURRENT_SOURCE_DIR}/src/network
161+
${CMAKE_CURRENT_SOURCE_DIR}/src/python
162+
${CMAKE_CURRENT_SOURCE_DIR}/src/util
163+
${CMAKE_CURRENT_SOURCE_DIR}/third_party/cxxopts
164+
${CMAKE_CURRENT_SOURCE_DIR}/third_party/fiboheap
165+
${CMAKE_CURRENT_SOURCE_DIR}/third_party/h3
166+
${CMAKE_CURRENT_SOURCE_DIR}/third_party/spdlog)
167+
168+
set(FMM_API_HEADER
169+
${CMAKE_CURRENT_SOURCE_DIR}/src/fmm-api.hpp
170+
)
171+
172+
install(
173+
DIRECTORY
174+
${FMM_DIST_INCLUDE_PATH}
175+
DESTINATION
176+
"include/fmm"
177+
FILES_MATCHING
178+
PATTERN "*.hpp"
179+
PATTERN "*.h"
180+
)
181+
install(
182+
FILES
183+
${FMM_API_HEADER}
184+
DESTINATION
185+
"include/fmm"
186+
)
187+
179188
add_subdirectory(python)
180-
add_subdirectory(test EXCLUDE_FROM_ALL)
189+
# add_subdirectory(test EXCLUDE_FROM_ALL)

appveyor.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ init:
1717
- '%CYG_INSTALL% "wget"'
1818
- '%CYG_SH% "wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg"'
1919
- '%CYG_SH% "install apt-cyg /bin"'
20-
- '%CYG_SH% "apt-cyg install make gcc-g++ cmake gdal libboost-devel zlib-devel libgdal-devel libexpat1-devel libbz2-devel"'
20+
- '%CYG_SH% "apt-cyg install make gcc-g++ cmake gdal libboost-devel libgdal-devel"'
2121
- '%CYG_SH% "apt-cyg install swig python-devel"'
2222

2323
# clone directory

example/README.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,5 @@
2222

2323
- [web_demo](web_demo)
2424

25-
### OSM example
26-
- [OSM example](osm_example)
27-
2825
### OSMNX example
2926
- [OSMNX example](osmnx_example)

example/cpp-api/CMakeLists.txt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
cmake_minimum_required( VERSION 3.5.1)
2+
3+
project(fmm-contrib)
4+
5+
set(CMAKE_CXX_FLAGS "-O3 -DSPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE")
6+
set(CMAKE_CXX_STANDARD 11)
7+
8+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
9+
10+
find_package(FMM REQUIRED)
11+
if (FMM_FOUND)
12+
message(STATUS "FMM headers found at ${FMM_INCLUDE_DIR}")
13+
message(STATUS "FMM library found at ${FMM_LIBRARY}")
14+
include_directories(${FMM_INCLUDE_DIR})
15+
include_directories(${FMM_INCLUDE_DIR}/fmm)
16+
else()
17+
message(FATAL_ERROR "FMM Not Found!")
18+
endif (FMM_FOUND)
19+
20+
add_executable(fmm_print_network main.cpp)
21+
target_link_libraries(fmm_print_network ${FMM_LIBRARY})
22+
23+
install(TARGETS fmm_print_network DESTINATION bin)

example/cpp-api/README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
### Use fmm in an external project
2+
3+
Build the program
4+
5+
```
6+
mkdir build
7+
cd build
8+
cmake .. -DFMM_LIB -DFMM_HEADER
9+
make
10+
sudo make install
11+
```
12+
13+
Run it with
14+
15+
```
16+
fmm_print_network example/data/edges.shp
17+
```
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
if (NOT FMM_INCLUDE_DIR)
2+
find_path(FMM_INCLUDE_DIR fmm/fmm-api.hpp ${CMAKE_PREFIX_PATH} PATH_SUFFIXES include)
3+
else ()
4+
file(TO_CMAKE_PATH "${FMM_INCLUDE_DIR}" FMM_INCLUDE_DIR)
5+
endif ()
6+
7+
if (NOT FMM_LIBRARY)
8+
find_library(FMM_LIBRARY NAMES fmmlib NAMES_PER_DIR PATH_SUFFIXES lib)
9+
else ()
10+
file(TO_CMAKE_PATH "${FMM_LIBRARY}" FMM_LIBRARY)
11+
endif ()
12+
13+
include(FindPackageHandleStandardArgs)
14+
find_package_handle_standard_args(FMM
15+
REQUIRED_VARS FMM_LIBRARY FMM_INCLUDE_DIR)

example/cpp-api/main.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#include <fmm/fmm-api.hpp>
2+
#include <iostream>
3+
using namespace FMM;
4+
using namespace FMM::NETWORK;
5+
using namespace FMM::CORE;
6+
using namespace FMM::MM;
7+
8+
int main(int argc, char **argv){
9+
SPDLOG_INFO("Use FMM in an external project");
10+
if (argc!=2){
11+
SPDLOG_ERROR("Incorrect number of arguments");
12+
} else {
13+
std::string filename(argv[1]);
14+
SPDLOG_INFO("Network file {}",filename);
15+
Network network(filename,"id","source","target");
16+
SPDLOG_INFO("Network node count {}",network.get_node_count());
17+
SPDLOG_INFO("Network edge count {}",network.get_edge_count());
18+
}
19+
};

example/osm_example/README.md

Lines changed: 0 additions & 34 deletions
This file was deleted.

example/osm_example/result.png

-427 KB
Binary file not shown.

example/osm_example/traj.csv

Lines changed: 0 additions & 2 deletions
This file was deleted.

0 commit comments

Comments
 (0)