cmake_minimum_required(VERSION 3.5.1) project(openauto CXX) message(STATUS "OpenAuto") option(NOPI "Build for Non Raspberry Pi" OFF) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) # Set Compile Versions set(OPENAUTO_BUILD_DATE 20241124) # Binary Release Build Date set(OPENAUTO_BUILD_MAJOR_RELEASE 4) # Binary Release Build Major Number set(OPENAUTO_BUILD_MINOR_RELEASE 1) # Binary Release Build Minor Number set(OPENAUTO_BUILD_INCREMENTAL 0) # Binary Build Version - Increment for Each Build # Configure CMAKE set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_INIT} -Wall -pedantic -fPIC") set(CMAKE_CXX_FLAGS_DEBUG "-g -O0") set(CMAKE_CXX_FLAGS_RELEASE "-g -O3") # Default to Release mode unless overridden with -DCMAKE_BUILD_TYPE=Debug on cmake command if(NOT CMAKE_BUILD_TYPE) message(STATUS "Forcing Release build type") set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,/usr/local/qt5/lib") # Set the possible values of build type for cmake-gui set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() # Paths set(resources_directory ${CMAKE_CURRENT_SOURCE_DIR}/assets) set(sources_directory ${CMAKE_CURRENT_SOURCE_DIR}/src) set(include_directory ${CMAKE_CURRENT_SOURCE_DIR}/include) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin) set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake_modules/") # Configure Boost set(Boost_USE_STATIC_LIBS OFF) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) add_definitions(-DBOOST_ALL_DYN_LINK) if(CMAKE_BUILD_TYPE STREQUAL "Release") message(STATUS "Disabling Boost DEBUG logs") add_definitions(-DNDEBUG) endif() if (WIN32) set(WINSOCK2_LIBRARIES "ws2_32") endif (WIN32) if (DEFINED NOPI) message(STATUS "Configuring for Non-Raspberry Pi") else() message(STATUS "Configuring for RaspberryPi") add_definitions(-DUSE_OMX -DOMX_SKIP64BIT -DRASPBERRYPI3) set(BCM_HOST_LIBRARIES "/opt/vc/lib/libbcm_host.so") set(BCM_HOST_INCLUDE_DIRS "/opt/vc/include") set(ILCLIENT_INCLUDE_DIRS "/opt/vc/src/hello_pi/libs/ilclient") set(ILCLIENT_LIBRARIES "/opt/vc/src/hello_pi/libs/ilclient/libilclient.a;/opt/vc/lib/libvcos.so;/opt/vc/lib/libvcilcs.a;/opt/vc/lib/libvchiq_arm.so") endif () # Building on a Mac requires Abseil if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") # macOS message(STATUS "MacOS System Detected") add_definitions(-DMAC_OS) find_package(protobuf REQUIRED CONFIG) find_package(absl REQUIRED) set(CMAKE_PREFIX_PATH "/usr/local/opt/qt@5" ${CMAKE_PREFIX_PATH}) list(APPEND CMAKE_PREFIX_PATH /usr/local/opt/util-linux) list(APPEND CMAKE_PREFIX_PATH /usr/local/opt/taglib) include(FindProtobuf) else () find_package(Protobuf REQUIRED) endif () find_package(aap_protobuf REQUIRED) find_package(aasdk REQUIRED) find_package(Boost REQUIRED COMPONENTS system log_setup log OPTIONAL_COMPONENTS unit_test_framework) find_package(libusb-1.0 REQUIRED) find_package(Qt5 REQUIRED COMPONENTS DBus Multimedia MultimediaWidgets Bluetooth Network WebSockets) find_package(OpenSSL REQUIRED) find_package(rtaudio REQUIRED) find_package(taglib REQUIRED) find_package(blkid REQUIRED) find_package(gps REQUIRED) include_directories(${CMAKE_CURRENT_BINARY_DIR} ${Qt5Multimedia_INCLUDE_DIRS} ${Qt5MultimediaWidgets_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Bluetooth_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR} ${RTAUDIO_INCLUDE_DIRS} ${TAGLIB_INCLUDE_DIRS} ${BLKID_INCLUDE_DIRS} ${BCM_HOST_INCLUDE_DIRS} ${ILCLIENT_INCLUDE_DIRS} ${include_directory} ${PROTOBUF_INCLUDE_DIR} ${AAP_PROTOBUF_INCLUDE_DIR} ${AASDK_INCLUDE_DIR}) link_directories(${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) set(common_include_directory ${include_directory}/f1x/openauto/Common) set(autoapp_sources_directory ${sources_directory}/autoapp) set(autoapp_include_directory ${include_directory}/f1x/openauto/autoapp) file(GLOB_RECURSE autoapp_source_files ${autoapp_sources_directory}/*.ui ${autoapp_sources_directory}/*.cpp ${autoapp_include_directory}/*.hpp ${autoapp_include_directory}/*.h ${common_include_directory}/*.hpp ${resources_directory}/*.qrc) add_executable(autoapp ${autoapp_source_files}) target_include_directories(autoapp PUBLIC ${AAP_PROTOBUF_INCLUDE_DIR} ${AASDK_INCLUDE_DIR}) target_link_libraries(autoapp PUBLIC libusb Qt5::WebSockets ${Boost_LIBRARIES} ${Qt5DBus_LIBRARIES} ${Qt5Multimedia_LIBRARIES} ${Qt5MultimediaWidgets_LIBRARIES} ${Qt5Bluetooth_LIBRARIES} ${Qt5Network_LIBRARIES} ${BCM_HOST_LIBRARIES} ${ILCLIENT_LIBRARIES} ${WINSOCK2_LIBRARIES} ${RTAUDIO_LIBRARIES} ${TAGLIB_LIBRARIES} ${BLKID_LIBRARIES} ${GPS_LIBRARIES} ${PROTOBUF_LIBRARIES} ${AAP_PROTOBUF_LIB_DIR} ${AASDK_LIB_DIR}) set(PROGRAM_VERSION_STRING "${OPENAUTO_BUILD_MAJOR_RELEASE}.${OPENAUTO_BUILD_MINOR_RELEASE}.${OPENAUTO_BUILD_INCREMENTAL}+${OPENAUTO_BUILD_DATE}") message(STATUS "Project Version: ${PROGRAM_VERSION_STRING}") set(btservice_sources_directory ${sources_directory}/btservice) set(btservice_include_directory ${include_directory}/f1x/openauto/btservice) file(GLOB_RECURSE btservice_source_files ${btservice_sources_directory}/*.cpp ${btservice_include_directory}/*.hpp ${autoapp_sources_directory}/Configuration/*.cpp ${autoapp_includes_directory}/Configuration/*.hpp ${common_include_directory}/*.hpp) add_executable(btservice ${btservice_source_files} src/btservice/BluetoothHandler.cpp) target_link_libraries(btservice PUBLIC ${Boost_LIBRARIES} ${Qt5Bluetooth_LIBRARIES} ${Qt5Network_LIBRARIES} ${Qt5MultimediaWidgets_LIBRARIES} ${PROTOBUF_LIBRARIES} ${AAP_PROTOBUF_LIB_DIR}) set_target_properties(autoapp PROPERTIES VERSION ${PROGRAM_VERSION_STRING} SOVERSION ${OPENAUTO_BUILD_INCREMENTAL}) # Install rules #install(TARGETS autoapp btservice # EXPORT aasdkTargets # RUNTIME DESTINATION bin #)