154 lines
4.1 KiB
CMake
154 lines
4.1 KiB
CMake
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}")
|
|
|
|
|
|
### 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}")
|
|
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()
|
|
|
|
option (DEBUG
|
|
"Enable debug code"
|
|
on)
|
|
if (DEBUG)
|
|
add_definitions(-DDEBUG)
|
|
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
|
|
if ("${CMAKE_EXE_LINKER_FLAGS}" STREQUAL " ")
|
|
set(CMAKE_EXE_LINKER_FLAGS "-pie -fPIE"
|
|
CACHE STRING "Set default shared linker flags" FORCE)
|
|
endif()
|
|
|
|
|
|
### Libraries ###
|
|
|
|
add_subdirectory(libowlps)
|
|
include_directories(libowlps)
|
|
|
|
add_subdirectory(libowlps-client)
|
|
include_directories(libowlps-client)
|
|
|
|
add_subdirectory(libowlps-resultreader)
|
|
include_directories(libowlps-resultreader)
|
|
|
|
|
|
### Programs ###
|
|
|
|
add_subdirectory(owlps-aggregator)
|
|
|
|
add_subdirectory(owlps-client)
|
|
|
|
if (${CMAKE_SYSTEM_NAME} STREQUAL Linux)
|
|
add_subdirectory(owlps-listener)
|
|
else()
|
|
message(WARNING
|
|
"OwlPS Listener can be built only for Linux systems")
|
|
endif()
|
|
|
|
# OwlPS Positioner can be built only with GCC, and with a minimal
|
|
# version. CMAKE_CXX_COMPILER_VERSION is not guaranteed to be set,
|
|
# so we will test GCC's version number only if possible.
|
|
set(POSITIONER_MIN_GCC_VERSION 4.7)
|
|
if (CMAKE_COMPILER_IS_GNUCXX)
|
|
# Test the compiler version if we can
|
|
if (${CMAKE_CXX_COMPILER_VERSION})
|
|
if (${CMAKE_CXX_COMPILER_VERSION} VERSION_EQUAL ${POSITIONER_MIN_GCC_VERSION} OR
|
|
${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER ${POSITIONER_MIN_GCC_VERSION})
|
|
add_subdirectory(owlps-positioner)
|
|
else() # GCC's version is too low
|
|
message(WARNING
|
|
"OwlPS Positioner requires GCC >= ${POSITIONER_MIN_GCC_VERSION}")
|
|
endif()
|
|
else() # we couldn't get GCC's version, let's try to build anyway
|
|
add_subdirectory(owlps-positioner)
|
|
endif()
|
|
else() # we're not using GCC
|
|
message(WARNING
|
|
"OwlPS Positioner requires GCC (>= ${POSITIONER_MIN_GCC_VERSION})")
|
|
endif()
|
|
|
|
add_subdirectory(owlps-udp-to-http)
|
|
|
|
|
|
### 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})
|