Skip to content
Snippets Groups Projects
Select Git revision
  • nas-pitot-correction
  • main default protected
  • nd015x-dma
  • logger-documentation
  • arp
  • arp-gyro
  • async-fsm
  • chipselect-mux
  • nas-catch-dev
  • parafoil-mavlink-upd
  • mockup-main-software
  • quadspi-flash
  • quadspi-flash2
  • sx1278-resilience
  • units-impl
  • nokia-tm-dev
  • spi
  • cc3135
  • ARP-pre-2.7
  • PYXIS_ROCCARASO
  • PYXIS_EUROC
  • lynx-euroc
  • hermes-v1.0
  • hermes-flight-1
24 results

boardcore.cmake

Blame
  • boardcore.cmake 9.48 KiB
    # Copyright (c) 2021 Skyward Experimental Rocketry
    # Authors: Damiano Amatruda
    #
    # Permission is hereby granted, free of charge, to any person obtaining a copy
    # of this software and associated documentation files (the "Software"), to deal
    # in the Software without restriction, including without limitation the rights
    # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    # copies of the Software, and to permit persons to whom the Software is
    # furnished to do so, subject to the following conditions:
    #
    # The above copyright notice and this permission notice shall be included in
    # all copies or substantial portions of the Software.
    #
    # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    # THE SOFTWARE.
    
    # Load in BOARDCORE_PATH the project path if not already defined
    if (NOT DEFINED BOARDCORE_PATH)
        cmake_path(GET CMAKE_CURRENT_LIST_DIR PARENT_PATH BOARDCORE_PATH)
    endif()
    
    # Include dependencies and board list
    include(${BOARDCORE_PATH}/cmake/dependencies.cmake)
    include(${BOARDCORE_PATH}/cmake/boardcore-host.cmake)
    include(${BOARDCORE_PATH}/cmake/boards.cmake)
    
    # Boardcore source files
    set(BOARDCORE_SRC
        # Actuators
        ${BOARDCORE_PATH}/src/shared/actuators/HBridge/HBridge.cpp
        ${BOARDCORE_PATH}/src/shared/actuators/Servo/Servo.cpp
        ${BOARDCORE_PATH}/src/shared/actuators/stepper/Stepper.cpp
        ${BOARDCORE_PATH}/src/shared/actuators/stepper/StepperPWM.cpp
    
        # Algorithms
        ${BOARDCORE_PATH}/src/shared/algorithms/ADA/ADA.cpp
        ${BOARDCORE_PATH}/src/shared/algorithms/MEA/MEA.cpp
        ${BOARDCORE_PATH}/src/shared/algorithms/AirBrakes/AirBrakesPI.cpp
        ${BOARDCORE_PATH}/src/shared/algorithms/AirBrakes/AirBrakesInterp.cpp
        ${BOARDCORE_PATH}/src/shared/algorithms/NAS/NAS.cpp
        ${BOARDCORE_PATH}/src/shared/algorithms/NAS/StateInitializer.cpp
        ${SBS_BASE}/src/shared/algorithms/Propagator/Propagator.cpp
        ${SBS_BASE}/src/shared/algorithms/Follower/Follower.cpp
    
        # Debug
        ${BOARDCORE_PATH}/src/shared/utils/Debug.cpp
        ${BOARDCORE_PATH}/src/shared/diagnostic/CpuMeter/CpuMeter.cpp
        ${BOARDCORE_PATH}/src/shared/diagnostic/PrintLogger.cpp
    
        # Drivers
        ${BOARDCORE_PATH}/src/shared/drivers/AD5204/AD5204.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/adc/InternalADC.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/canbus/CanDriver/CanDriver.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/canbus/CanDriver/CanInterrupt.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/dma/DMA.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/dma/DMADefs.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/interrupt/external_interrupts.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/timer/PWM.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/timer/CountedPWM.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/runcam/Runcam.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/spi/SPITransaction.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/usart/USART.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/i2c/I2CDriver-f4.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/i2c/I2CDriver-f7.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/i2c/I2C.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/WIZ5500/WIZ5500.cpp
        ${BOARDCORE_PATH}/src/shared/drivers/DipSwitch/DipSwitch.cpp
    
        # Events
        ${BOARDCORE_PATH}/src/shared/events/EventBroker.cpp
    
        # Logger
        ${BOARDCORE_PATH}/src/shared/logger/Logger.cpp
    
        # Radio
        ${BOARDCORE_PATH}/src/shared/radio/gamma868/Gamma868.cpp
        ${BOARDCORE_PATH}/src/shared/radio/Xbee/APIFrameParser.cpp
        ${BOARDCORE_PATH}/src/shared/radio/Xbee/Xbee.cpp
        ${BOARDCORE_PATH}/src/shared/radio/SX1278/SX1278Fsk.cpp
        ${BOARDCORE_PATH}/src/shared/radio/SX1278/SX1278Lora.cpp
        ${BOARDCORE_PATH}/src/shared/radio/SX1278/SX1278Common.cpp
    
        # Scheduler
        ${BOARDCORE_PATH}/src/shared/scheduler/TaskScheduler.cpp
    
        # Sensors
        ${BOARDCORE_PATH}/src/shared/sensors/ADS1118/ADS1118.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/ADS131M04/ADS131M04.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/ADS131M08/ADS131M08.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/BME280/BME280.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/BME280/BME280I2C.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/BMP280/BMP280.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/BMP280/BMP280I2C.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/BMX160/BMX160.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/BMX160/BMX160WithCorrection.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/H3LIS331DL/H3LIS331DL.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/HX711/HX711.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/LIS3MDL/LIS3MDL.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/LIS331HH/LIS331HH.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/LPS331AP/LPS331AP.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/MAX6675/MAX6675.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/MAX31855/MAX31855.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/MAX31856/MAX31856.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/MBLoadCell/MBLoadCell.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/MPU9250/MPU9250.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/MS5803/MS5803.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/MS5803/MS5803I2C.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/RotatedIMU/RotatedIMU.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/SensorManager.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/SensorSampler.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/UBXGPS/UBXGPSSerial.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/UBXGPS/UBXGPSSpi.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/Vectornav/VNCommonSerial.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/Vectornav/VN100/VN100Serial.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/Vectornav/VN100/VN100Spi.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/Vectornav/VN300/VN300.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/LIS2MDL/LIS2MDL.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/LPS28DFW/LPS28DFW.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/LPS22DF/LPS22DF.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/LSM6DSRX/LSM6DSRX.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/ND015X/ND015D.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/ND015X/ND015A.cpp
    
        # Calibration
        ${BOARDCORE_PATH}/src/shared/sensors/calibration/BiasCalibration/BiasCalibration.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/calibration/SensorDataExtra/SensorDataExtra.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/calibration/SixParameterCalibration/SixParameterCalibration.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/calibration/SoftAndHardIronCalibration/SoftAndHardIronCalibration.cpp
    
        # Correction
        ${BOARDCORE_PATH}/src/shared/sensors/correction/BiasCorrector/BiasCorrector.cpp
        ${BOARDCORE_PATH}/src/shared/sensors/correction/SixParametersCorrector/SixParametersCorrector.cpp
    
        # Utils
        ${BOARDCORE_PATH}/src/shared/utils/AeroUtils/AeroUtils.cpp
        ${BOARDCORE_PATH}/src/shared/utils/ButtonHandler/ButtonHandler.cpp
        ${BOARDCORE_PATH}/src/shared/utils/PinObserver/PinObserver.cpp
        ${BOARDCORE_PATH}/src/shared/utils/SkyQuaternion/SkyQuaternion.cpp
        ${BOARDCORE_PATH}/src/shared/utils/Stats/Stats.cpp
        ${BOARDCORE_PATH}/src/shared/utils/TestUtils/TestHelper.cpp
        ${BOARDCORE_PATH}/src/shared/utils/Registry/RegistryFrontend.cpp
        ${BOARDCORE_PATH}/src/shared/utils/Registry/RegistrySerializer.cpp
        ${BOARDCORE_PATH}/src/shared/utils/Registry/Backend/FileBackend.cpp
        ${BOARDCORE_PATH}/src/shared/utils/DependencyManager/DependencyManager.cpp
    )
    
    # Creates the Skyward::Boardcore::${BOARD_NAME} library
    function(add_boardcore_library BOARD_OPTIONS_FILE)
        # Get board options
        include(${BOARD_OPTIONS_FILE})
    
        # Create a library for the board
        set(BOARDCORE_LIB boardcore-${BOARD_NAME})
        add_library(${BOARDCORE_LIB} STATIC EXCLUDE_FROM_ALL ${BOARDCORE_SRC})
    
        # Only one include directory for Boardcore!
        target_include_directories(${BOARDCORE_LIB} PUBLIC ${BOARDCORE_PATH}/src/shared)
    
        # Define DEBUG when in Debug mode
        target_compile_definitions(${BOARDCORE_LIB} PUBLIC $<$<CONFIG:Debug>:DEBUG>)
        # Define NDEBUG when not in Debug mode
        target_compile_definitions(${BOARDCORE_LIB} PUBLIC $<$<NOT:$<CONFIG:Debug>>:NDEBUG>)
    
        # Link libraries
        target_link_libraries(${BOARDCORE_LIB} PUBLIC
            $<TARGET_OBJECTS:Miosix::Boot::${BOARD_NAME}>
            $<LINK_GROUP:RESCAN,Miosix::Kernel::${BOARD_NAME},stdc++,c,m,gcc,atomic>
            TSCPP::TSCPP
            Eigen3::Eigen
            fmt::fmt-header-only
            Catch2::Catch2
            Mavlink::Mavlink
        )
    
        # Link MxGui if supported by the target
        if(DEFINED MXGUI_BASE_BOARD_NAME)
            target_link_libraries(${BOARDCORE_LIB} PUBLIC MxGui::${MXGUI_BASE_BOARD_NAME})
        elseif(TARGET MxGui::${BOARD_NAME})
            target_link_libraries(${BOARDCORE_LIB} PUBLIC MxGui::${BOARD_NAME})
        endif()
    
        # Create a nice alias for the library
        add_library(Skyward::Boardcore::${BOARD_NAME} ALIAS ${BOARDCORE_LIB})
    endfunction()
    
    # Create the Miosix libraries for Boardcore custom boards
    foreach(BOARD_OPTIONS_FILE ${BOARDCORE_BOARDS_OPTIONS_FILES})
        add_miosix_libraries(${BOARD_OPTIONS_FILE})
    endforeach()
    
    # Create Boardcore library for each board
    foreach(BOARD_OPTIONS_FILE ${MIOSIX_BOARDS_OPTIONS_FILES} ${BOARDCORE_BOARDS_OPTIONS_FILES})
        add_boardcore_library(${BOARD_OPTIONS_FILE})
    endforeach()