Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
CMakeLists.txt 5.59 KiB
cmake_minimum_required(VERSION 3.5.1)
project(car)

set(CMAKE_CXX_STANDARD 14)

# for dealing with threads
set(CMAKE_CXX_FLAGS "-pthread")

# Include Boost
find_package(Boost REQUIRED)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  nodelet
  message_generation
)

add_message_files(
  FILES
  camDataMsg.msg
  ccDataMsg.msg
  environmentDataMsg.msg
  logEnabledMsg.msg
  logStringMsg.msg
  rcEnabledMsg.msg
  stmDataMsg.msg
  ussDataMsg.msg
  laneDataMsg.msg
)
generate_messages(
  DEPENDENCIES
  std_msgs
)

catkin_package(
  INCLUDE_DIRS include
  LIBRARIES main_node
  LIBRARIES environment
  LIBRARIES ultrasonic
  LIBRARIES camera
  LIBRARIES lanekeeping
  LIBRARIES mav_link
  CATKIN_DEPENDS roscpp std_msgs nodelet rospy #message_runtime
)

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)

set(MAIN_NODE_SOURCE_FILES
        include/logging/MessageOStream.h
        include/exceptions/Exceptions.h
        include/mainNode/CruiseController.h
        include/mainNode/EgoMotion.h
        include/mainNode/MainNode.h
        include/mainNode/NotifiableThread.h
        include/mainNode/PlatoonController.h
        include/mainNode/PlatoonState.h
        src/mainNode/MainNode.cpp
        src/mainNode/EgoMotion.cpp
        src/mainNode/NotifiableThread.cpp
        src/mainNode/PlatoonController.cpp
        src/mainNode/CruiseController.cpp
)

set(ENVIRONMENT_SOURCE_FILES
        include/logging/MessageOStream.h
        include/environment/Environment.h
        include/environment/KalmanFilter.h
        include/exceptions/Exceptions.h
        src/environment/Environment.cpp
        src/environment/KalmanFilter.cpp
)

set(LOGGING_SOURCE_FILES
        include/logging/Logging.h
        include/logging/MessageOStream.h
        src/logging/Logging.cpp
)

set(USS_SOURCE_FILES
        include/logging/MessageOStream.h
        include/ultrasonic/StreamMedianFilter.h
        include/ultrasonic/UltrasonicSensor.h
        include/ultrasonic/Ultrasonic.h
        src/ultrasonic/StreamMedianFilter.cpp
        src/ultrasonic/Ultrasonic.cpp
        src/ultrasonic/UltrasonicSensor.cpp
)

set(CAMERA_SOURCE_FILES
        include/logging/MessageOStream.h
        include/camera/Camera.h
        src/camera/Camera.cpp
)

set(LANE_KEEPING_SOURCE_FILES
        include/logging/MessageOStream.h
        include/lanekeeping/Lanekeeping.h
        src/lanekeeping/Lanekeeping.cpp
)

set(MAV_LINK_SOURCE_FILES
        include/logging/MessageOStream.h
        include/mavLink/MavLink.h
        src/mavLink/MavLink.cpp
)

set(LOCAL_INSTALL_DIR ${CMAKE_CURRENT_LIST_DIR}/../../install)

set(CMAKE_PREFIX_PATH "${LOCAL_INSTALL_DIR}")

find_package(NetworkingLib REQUIRED)
find_package(PlatoonProtocolLib REQUIRED)
find_package(PC2CarLib REQUIRED)
find_package(VeloxProtocolLib REQUIRED)
find_package(MessageLib REQUIRED)

add_library(main_node ${MAIN_NODE_SOURCE_FILES})
add_dependencies(main_node ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
target_link_libraries(main_node
        ${catkin_LIBRARIES}
        ${Boost_LIBRARIES}
        NetworkingLib
        PlatoonProtocolLib
        PC2CarLib)
target_include_directories(main_node PUBLIC 
        ${NetworkingLib_INCLUDE_DIRS}
        ${PlatoonProtocolLib_INCLUDE_DIRS}
        ${PC2CarLib_INCLUDE_DIRS})

add_library(environment ${ENVIRONMENT_SOURCE_FILES})
add_dependencies(environment ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
target_link_libraries(environment ${catkin_LIBRARIES})

add_library(logging ${LOGGING_SOURCE_FILES})
add_dependencies(logging ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
target_link_libraries(logging
        ${catkin_LIBRARIES}
        NetworkingLib
        MessageLib)
target_include_directories(logging PUBLIC
        ${NetworkingLib_INCLUDE_DIRS}
        ${MessageLib_INCLUDE_DIRS})

add_library(ultrasonic ${USS_SOURCE_FILES})
add_dependencies(ultrasonic ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
target_link_libraries(ultrasonic
    ${catkin_LIBRARIES}
    NetworkingLib
    libwiringPi.so)
target_include_directories(ultrasonic PUBLIC
        ${NetworkingLib_INCLUDE_DIRS}
        ${MessageLib_INCLUDE_DIRS})

find_package( OpenCV REQUIRED )
add_library(camera ${CAMERA_SOURCE_FILES})
add_dependencies(camera ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
target_link_libraries(camera
    ${catkin_LIBRARIES}
    ${OpenCV_LIBS}
)

add_library(lanekeeping ${LANE_KEEPING_SOURCE_FILES})
add_dependencies(lanekeeping ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
target_link_libraries(lanekeeping ${catkin_LIBRARIES})

add_library(mav_link ${MAV_LINK_SOURCE_FILES})
add_dependencies(mav_link ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
target_link_libraries(mav_link
        ${catkin_LIBRARIES}
        VeloxProtocolLib)
target_include_directories(mav_link PUBLIC
        ${VeloxProtocolLib_INCLUDE_DIRS})

# NotifiableThread Test
set(NOTIFIABLE_THREAD_TEST_SOURCE_FILES
        include/mainNode/NotifiableThread.h
        src/mainNode/NotifiableThread.cpp
        test/mainNode/NotifiableThreadTest.cpp)
add_executable(NotifiableThreadTest ${NOTIFIABLE_THREAD_TEST_SOURCE_FILES})

install(
  TARGETS
    main_node
    environment
    ultrasonic
    camera
    lanekeeping
    mav_link
  ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

install(
  DIRECTORY
    include/
  DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
)

install(
  DIRECTORY plugins/
  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/plugins
  PATTERN ".svn" EXCLUDE
)