140 lines
4.8 KiB
CMake
140 lines
4.8 KiB
CMake
####################### OPTIONS #########################
|
|
option(BUILD_SHARED_LIB "Build a shared lib instead of a static." OFF)
|
|
option(ENABLE_TESTING "Enables testing." ON)
|
|
option(CROSS_COMPILE "Enables crosscompiling for raspberry pi" OFF)
|
|
|
|
#################### CONFIGURATION ######################
|
|
set(OUTPUT_PATH bin)
|
|
set(LIB_DIR lib)
|
|
set(DEFAULT_BUILD_TYPE DEBUG)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
# Boost configuration
|
|
set(BOOST_COMPONENTS program_options thread timer chrono)
|
|
|
|
|
|
|
|
################### CROSS_COMPILING ######################
|
|
IF(NOT RPI_ROOT)
|
|
set(RPI_ROOT $ENV{HOME}/FlippR/rpi)
|
|
set(RPI_TOOLCHAIN ${RPI_ROOT}/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin)
|
|
ENDIF()
|
|
|
|
IF(CROSS_COMPILE)
|
|
#SET(CMAKE_TOOLCHAIN_FILE ${RPI_ROOT}/Toolchain-RaspberryPi.cmake)
|
|
SET(CMAKE_SYSTEM_NAME Linux)
|
|
SET(CMAKE_SYSTEM_VERSION 1)
|
|
|
|
# Specify the cross compiler
|
|
SET(CMAKE_C_COMPILER arm-linux-gnueabi-gcc-7)
|
|
SET(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++-7)
|
|
|
|
SET(CMAKE_FIND_ROOT_PATH $ENV{HOME}/raspberrypi/rootfs)
|
|
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
|
|
SET(Boost_NO_SYSTEM_PATHS TRUE)
|
|
SET(BOOST_ROOT "$ENV{HOME}/boost_1_64_0/")
|
|
SET(BOOST_INCLUDEDIR "$ENV{HOME}/boost_1_64_0/")
|
|
SET(BOOST_LIBRARYDIR "$ENV{HOME}/boost_1_64_0/")
|
|
|
|
# Where is the target environment
|
|
#SET(CMAKE_FIND_ROOT_PATH ${RPI_ROOT}/rootfs)
|
|
#SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --sysroot=${CMAKE_FIND_ROOT_PATH}")
|
|
#SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --sysroot=${CMAKE_FIND_ROOT_PATH}")
|
|
#SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} --sysroot=${CMAKE_FIND_ROOT_PATH}")
|
|
|
|
# Search for programs only in the build host directories
|
|
#SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
|
|
# Search for libraries and headers only in the target directories
|
|
#SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
#SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
ENDIF(CROSS_COMPILE)
|
|
|
|
###################### START_CMAKE #######################
|
|
cmake_minimum_required(VERSION 3.9.1)
|
|
#cmake_minimum_required(VERSION 3.0.2)
|
|
project(FlippR-Driver VERSION 0.1.0)# LANGUAGES CXX)
|
|
|
|
#set easylogging flags
|
|
add_definitions(-DELPP_NO_DEFAULT_LOG_FILE)
|
|
|
|
# Compile library to output_path
|
|
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/${OUTPUT_PATH})
|
|
|
|
|
|
# Default to Release build
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE ${DEFAULT_BUILD_TYPE})
|
|
endif(NOT CMAKE_BUILD_TYPE)
|
|
|
|
|
|
#set code-coverage flags if Debug mode
|
|
IF(CMAKE_BUILD_TYPE MATCHES DEBUG)
|
|
message("Setting gcov flags")
|
|
SET(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage")
|
|
SET(GCC_COVERAGE_LINK_FLAGS "-lgcov")
|
|
|
|
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" )
|
|
SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )
|
|
ENDIF(CMAKE_BUILD_TYPE MATCHES DEBUG)
|
|
|
|
#################### Adding Library #####################
|
|
file(GLOB_RECURSE SOURCES src/*.cpp)
|
|
|
|
if(BUILD_SHARED_LIB)
|
|
add_library(${PROJECT_NAME} SHARED ${SOURCES})
|
|
else()
|
|
add_library(${PROJECT_NAME} STATIC ${SOURCES})
|
|
endif(BUILD_SHARED_LIB)
|
|
|
|
######################### BOOST #########################
|
|
find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS})
|
|
if(Boost_FOUND)
|
|
# Include and link with boost
|
|
target_include_directories(${PROJECT_NAME} PUBLIC ${Boost_INCLUDE_DIRS})
|
|
target_link_libraries(${PROJECT_NAME} PUBLIC ${Boost_LIBRARIES})
|
|
message ("Boost found and linked.")
|
|
else()
|
|
message (FATAL_ERROR "Can't find Boost.")
|
|
endif(Boost_FOUND)
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src)
|
|
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/include)
|
|
|
|
# Set libraries include path
|
|
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/${LIB_DIR})
|
|
|
|
##################### WIRING_PI ##########################
|
|
find_library(WIRING_PI NAMES libwiringPi.so.2.44 HINTS ${CMAKE_SOURCE_DIR}/lib)
|
|
|
|
if(NOT WIRING_PI)
|
|
message(FATAL_ERROR "Could not find wiringPi library")
|
|
endif()
|
|
|
|
target_link_libraries(${PROJECT_NAME} PUBLIC ${WIRING_PI})
|
|
|
|
## EASYLOGGING
|
|
set(EASYLOGGING_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/${LIB_DIR}/easylogging)
|
|
add_library(Easylogging STATIC ${EASYLOGGING_INCLUDE_DIR}/easylogging++.cc)
|
|
|
|
target_include_directories(${PROJECT_NAME} PUBLIC ${EASYLOGGING_INCLUDE_DIR})
|
|
target_link_libraries(${PROJECT_NAME} PUBLIC Easylogging)
|
|
|
|
## CATCH
|
|
set(CATCH_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/tests)
|
|
add_library(Catch INTERFACE)
|
|
target_include_directories(Catch INTERFACE ${CATCH_INCLUDE_DIR})
|
|
|
|
## THREAD
|
|
find_package(Threads REQUIRED)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE ${Threads_LIBRARIES})
|
|
|
|
if(ENABLE_TESTING)
|
|
add_subdirectory(tests)
|
|
endif(ENABLE_TESTING)
|
|
####################### END_CMAKE ########################
|