Owl Positioning System: a Wi-Fi-based, infrastructure-centred indoor positioning system.
http://owlps.pu-pm.univ-fcomte.fr/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
238 lines
6.6 KiB
238 lines
6.6 KiB
# This file is part of the Owl Positioning System (OwlPS) project. |
|
# It is subject to the copyright notice and license terms in the |
|
# COPYRIGHT.t2t file found in the top-level directory of this |
|
# distribution and at |
|
# https://code.lm7.fr/mcy/owlps/src/master/COPYRIGHT.t2t |
|
# No part of the OwlPS Project, including this file, may be copied, |
|
# modified, propagated, or distributed except according to the terms |
|
# contained in the COPYRIGHT.t2t file; the COPYRIGHT.t2t file must be |
|
# distributed along with this file, either separately or by replacing |
|
# this notice by the COPYRIGHT.t2t file's contents. |
|
|
|
cmake_minimum_required(VERSION 2.8) |
|
|
|
project(OwlPS) |
|
|
|
|
|
### Build paths ### |
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") |
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") |
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") |
|
|
|
# Path for the generated header files |
|
set(GENERATED_INCLUDE "${PROJECT_BINARY_DIR}/include") |
|
include_directories("${GENERATED_INCLUDE}") |
|
|
|
|
|
### Dependencies ### |
|
# Note: we test here the dependencies relevant for more than one module; |
|
# other tests are done in each module's directory. |
|
|
|
# Add cmake/Modules to the molude path so that CMake can find the |
|
# additional FindXXX modules we (unfortunately have to) ship |
|
set(CMAKE_MODULE_PATH |
|
${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules") |
|
|
|
# Check if we've got POSIX threads |
|
set(CMAKE_THREAD_PREFER_PTHREAD on) |
|
find_package(Threads) |
|
if (CMAKE_THREAD_LIBS_INIT AND CMAKE_USE_PTHREADS_INIT) |
|
set(HAVE_PTHREADS true) |
|
endif() |
|
|
|
# Check if we've got the Confuse library |
|
find_package(Confuse) |
|
|
|
# Check if Doxygen is available |
|
find_package(Doxygen) |
|
|
|
|
|
### OwlPS' version ### |
|
|
|
# First, try to get it from the environment variable OWLPS_VERSION |
|
if (NOT "$ENV{OWLPS_VERSION}" STREQUAL "") |
|
add_definitions(-DOWLPS_VERSION="$ENV{OWLPS_VERSION}") |
|
|
|
# Environment variable OWLPS_VERSION not set: try to get the version |
|
# number from git describe |
|
else() |
|
execute_process( |
|
COMMAND git describe |
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" |
|
RESULT_VARIABLE RET |
|
OUTPUT_VARIABLE OWLPS_VERSION |
|
ERROR_QUIET |
|
OUTPUT_STRIP_TRAILING_WHITESPACE) |
|
if (${RET} EQUAL 0) |
|
add_definitions(-DOWLPS_VERSION="${OWLPS_VERSION}") |
|
else() |
|
add_definitions(-DOWLPS_VERSION="unknown version") |
|
endif() |
|
endif() |
|
|
|
|
|
### Options ### |
|
|
|
# Configurations |
|
set(CMAKE_CONFIGURATION_TYPES |
|
Debug Release RelWithDebInfo MinSizeRel |
|
CACHE STRING "Set the configurations" FORCE) |
|
# Default configuration |
|
if (NOT CMAKE_BUILD_TYPE) |
|
set(CMAKE_BUILD_TYPE RelWithDebInfo |
|
CACHE STRING "Set the default configuration" FORCE) |
|
endif() |
|
|
|
|
|
### Flags ### |
|
|
|
# Specific compiler flags |
|
# These variables are to be used (manually) when compiling a shared |
|
# library or an executable (or static library). |
|
set(SHARED_FLAGS "-fPIC") |
|
set(EXE_FLAGS "-fPIE") |
|
|
|
# Common compiler flags |
|
set(C_CXX_COMMON_FLAGS "-Wall -Wextra") |
|
set(C_FLAGS "${C_CXX_COMMON_FLAGS} -Wstrict-prototypes") |
|
set(CXX_FLAGS "${C_CXX_COMMON_FLAGS}") |
|
|
|
if (NOT CMAKE_C_FLAGS) |
|
set(CMAKE_C_FLAGS ${C_FLAGS} |
|
CACHE STRING "Set default C flags" FORCE) |
|
endif() |
|
|
|
if (NOT CMAKE_CXX_FLAGS) |
|
set(CMAKE_CXX_FLAGS ${CXX_FLAGS} |
|
CACHE STRING "Set default C++ flags" FORCE) |
|
endif() |
|
|
|
# Linker flags |
|
# Question: why the hell does CMAKE_SHARED_LINKER_FLAGS contain " " |
|
# by default?! |
|
if ("${CMAKE_SHARED_LINKER_FLAGS}" STREQUAL " ") |
|
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" |
|
CACHE STRING "Set default shared linker flags" FORCE) |
|
endif() |
|
|
|
# Linker flags when linking an executable |
|
# Note: -fpie prevents from building static executables, therefore it |
|
# has been deactivated, but it would be nice to find a work-around |
|
# to allow building dynamic (and semistatic) targets with -pie and |
|
# static ones without. |
|
#if ("${CMAKE_EXE_LINKER_FLAGS}" STREQUAL " ") |
|
# set(CMAKE_EXE_LINKER_FLAGS "-pie -fPIE" |
|
# CACHE STRING "Set default shared linker flags" FORCE) |
|
#endif() |
|
|
|
|
|
### Libraries targets ### |
|
|
|
add_subdirectory(libowlps) |
|
include_directories(libowlps) |
|
|
|
add_subdirectory(libowlps-client) |
|
include_directories(libowlps-client) |
|
|
|
add_subdirectory(libowlps-resultreader) |
|
include_directories(libowlps-resultreader) |
|
|
|
|
|
### Programs targets ### |
|
|
|
## Aggregator ## |
|
|
|
if (HAVE_PTHREADS AND CONFUSE_FOUND) |
|
add_subdirectory(owlps-aggregator) |
|
|
|
else() # Warn the user about missing dependencies |
|
if (NOT HAVE_PTHREADS) |
|
message(WARNING |
|
"OwlPS Aggregator dependency missing: POSIX threads") |
|
endif() |
|
if (NOT CONFUSE_FOUND) |
|
message(WARNING |
|
"OwlPS Aggregator dependency missing: libConfuse") |
|
endif() |
|
endif() |
|
|
|
## Client ## |
|
|
|
add_subdirectory(owlps-client) |
|
|
|
## Listener ## |
|
|
|
add_subdirectory(owlps-listener) |
|
|
|
## Positioner ## |
|
|
|
# OwlPS Positioner can be built only with a minimal version of GCC, or |
|
# Clang++. CMAKE_CXX_COMPILER_VERSION is not guaranteed to be set, so we |
|
# will test the version number only if possible. |
|
set(POSITIONER_MIN_GCC_VERSION 4.7) |
|
set(POSITIONER_MIN_CLANG_VERSION 3.2) |
|
|
|
if (CMAKE_CXX_COMPILER_ID STREQUAL GNU) # Are we using GCC? |
|
# Test the compiler version if we can |
|
if (${CMAKE_CXX_COMPILER_VERSION} AND |
|
${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS ${POSITIONER_MIN_GCC_VERSION}) |
|
# GCC's version is too low |
|
message(WARNING |
|
"OwlPS Positioner requires GCC (g++) >= ${POSITIONER_MIN_GCC_VERSION}") |
|
else() |
|
# GCC's version is OK or we couldn'd get it |
|
add_subdirectory(owlps-positioner) |
|
endif() |
|
|
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL Clang) # Are we using Clang? |
|
if (${CMAKE_CXX_COMPILER_VERSION} AND |
|
${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS ${POSITIONER_MIN_CLANG_VERSION}) |
|
# Clang's version is too low |
|
message(WARNING |
|
"OwlPS Positioner requires GCC >= ${POSITIONER_MIN_GCC_VERSION}") |
|
else() |
|
# Clang's version is OK or we couldn'd get it |
|
add_subdirectory(owlps-positioner) |
|
endif() |
|
|
|
else() # we're not using GCC |
|
message(WARNING |
|
"OwlPS Positioner requires GCC (>= ${POSITIONER_MIN_GCC_VERSION}) or Clang (>= ${POSITIONER_MIN_CLANG_VERSION})") |
|
endif() |
|
|
|
## UDP-to-HTTP ## |
|
|
|
if (HAVE_PTHREADS) |
|
add_subdirectory(owlps-udp-to-http) |
|
|
|
else() # Warn the user about missing dependencies |
|
message(WARNING |
|
"OwlPS UDP-to-HTTP dependency missing: POSIX threads") |
|
endif() |
|
|
|
## Scripts ## |
|
|
|
add_subdirectory(scripts) |
|
|
|
|
|
### Documentation ### |
|
|
|
add_subdirectory(doc) |
|
|
|
|
|
### Meta-targets ### |
|
|
|
# The OWLPS_SEMISTATIC_TARGET is defined in subdirectories |
|
add_custom_target(semistatic DEPENDS ${OWLPS_SEMISTATIC_TARGETS}) |
|
|
|
# The OWLPS_STATIC_TARGET is defined in subdirectories |
|
add_custom_target(static DEPENDS ${OWLPS_STATIC_TARGETS}) |
|
|
|
|
|
|
|
### Tests ### |
|
|
|
add_custom_target(tests |
|
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_positioner |
|
DEPENDS test_positioner)
|
|
|