####################### 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 11) # 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-gnueabihf-gcc-7) SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-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 ########################