mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2026-07-26 10:38:52 +00:00
0fe51fa7e3
* Move flashsize.h to build directory to avoid conflicts when switching builds plus small fix in praline image generation * Update hackrf submodule to latest next * fix fpga append comments * Update firmware/CMakeLists.txt Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update firmware/CMakeLists.txt Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * remove ls dependency from build --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: gullradriel <gullradriel@users.noreply.github.com>
170 lines
6.7 KiB
CMake
170 lines
6.7 KiB
CMake
# Copyright 2016 Jared Boone <jared@sharebrained.com>
|
|
#
|
|
# This file is part of PortaPack.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2, or (at your option)
|
|
# any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; see the file COPYING. If not, write to
|
|
# the Free Software Foundation, Inc., 51 Franklin Street,
|
|
# Boston, MA 02110-1301, USA.
|
|
#
|
|
|
|
cmake_minimum_required(VERSION 3.16)
|
|
|
|
project(firmware)
|
|
|
|
set(BASEBAND ${PROJECT_SOURCE_DIR}/baseband)
|
|
set(COMMON ${PROJECT_SOURCE_DIR}/common)
|
|
set(CHIBIOS ${PROJECT_SOURCE_DIR}/chibios)
|
|
set(CHIBIOS_PORTAPACK ${PROJECT_SOURCE_DIR}/chibios-portapack)
|
|
|
|
set(EXTRACT_CPLD_DATA ${PROJECT_SOURCE_DIR}/tools/extract_cpld_data.py)
|
|
set(EXPORT_EXTERNAL_APP_IMAGES ${PROJECT_SOURCE_DIR}/tools/export_external_apps.py)
|
|
set(MAKE_SPI_IMAGE ${PROJECT_SOURCE_DIR}/tools/make_spi_image.py)
|
|
set(MAKE_IMAGE_CHUNK ${PROJECT_SOURCE_DIR}/tools/make_image_chunk.py)
|
|
set(LZ4 lz4)
|
|
|
|
set(FIRMWARE_NAME portapack-mayhem-firmware)
|
|
set(FIRMWARE_FILENAME ${FIRMWARE_NAME}.bin)
|
|
set(PPFW_FILENAME "portapack-mayhem_OCI.ppfw.tar")
|
|
|
|
# In our current build container cmake need a little help to get the version :)
|
|
if(NOT DEFINED ${CMAKE_CXX_COMPILER_VERSION})
|
|
execute_process(COMMAND bash "-c" "arm-none-eabi-g++ -v 2>&1 | grep 'gcc version' | awk '{print $3}'" OUTPUT_VARIABLE CMAKE_CXX_COMPILER_VERSION)
|
|
string(STRIP ${CMAKE_CXX_COMPILER_VERSION} CMAKE_CXX_COMPILER_VERSION)
|
|
endif()
|
|
|
|
set(GCC_VERSION_MISMATCH 0)
|
|
if(NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_EQUAL ${EXPECTED_GCC_VERSION})
|
|
set(GCC_VERSION_MISMATCH 1)
|
|
endif()
|
|
|
|
#generate h files
|
|
configure_file(flashsize.h.in flashsize.h)
|
|
add_compile_options(-include ${CMAKE_CURRENT_BINARY_DIR}/flashsize.h)
|
|
|
|
add_subdirectory(application)
|
|
add_subdirectory(baseband)
|
|
add_subdirectory(standalone)
|
|
add_subdirectory(test)
|
|
|
|
if(BOARD STREQUAL "PRALINE")
|
|
math(EXPR PRALINE_FINAL_SIZE "4 * 1024 * 1024")
|
|
set(PRALINE_FPGA_BIN ${CMAKE_CURRENT_SOURCE_DIR}/../hackrf/firmware/fpga/build/praline_fpga.bin)
|
|
set(APPEND_FPGA_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/tools/append_fpga_bitstream.py)
|
|
|
|
# NOTE: Dependencies break if the .bin files aren't included in DEPENDS. WTF, CMake?
|
|
add_custom_command(
|
|
OUTPUT ${FIRMWARE_FILENAME}
|
|
COMMAND ${MAKE_SPI_IMAGE} ${application_BINARY_DIR}/application.bin ${baseband_BINARY_DIR}/baseband.img ${FIRMWARE_FILENAME} ${FLASH_BYTES_LIMIT_SIZE}
|
|
# PRALINE: Append FPGA bitstream to firmware at offset 0x380000
|
|
# The base firmware is 3.5MB, FPGA bitstream gets appended at the end of it, final size is 4MB
|
|
COMMAND ${CMAKE_COMMAND} -E echo "Appending PRALINE FPGA bitstream to firmware..."
|
|
COMMAND python3 ${APPEND_FPGA_SCRIPT} ${FIRMWARE_FILENAME} ${PRALINE_FPGA_BIN} ${FIRMWARE_FILENAME}.tmp ${PRALINE_FINAL_SIZE}
|
|
COMMAND ${CMAKE_COMMAND} -E rename ${FIRMWARE_FILENAME}.tmp ${FIRMWARE_FILENAME}
|
|
DEPENDS baseband application ${MAKE_SPI_IMAGE}
|
|
${baseband_BINARY_DIR}/baseband.img ${application_BINARY_DIR}/application.bin
|
|
${PRALINE_FPGA_BIN} ${APPEND_FPGA_SCRIPT}
|
|
VERBATIM
|
|
)
|
|
else() # Sadly this part had to be duplicated (or at least I couldn't find a better way to do it)
|
|
# NOTE: Dependencies break if the .bin files aren't included in DEPENDS. WTF, CMake?
|
|
add_custom_command(
|
|
OUTPUT ${FIRMWARE_FILENAME}
|
|
COMMAND ${MAKE_SPI_IMAGE} ${application_BINARY_DIR}/application.bin ${baseband_BINARY_DIR}/baseband.img ${FIRMWARE_FILENAME} ${FLASH_BYTES_LIMIT_SIZE}
|
|
DEPENDS baseband application ${MAKE_SPI_IMAGE}
|
|
${baseband_BINARY_DIR}/baseband.img ${application_BINARY_DIR}/application.bin
|
|
VERBATIM
|
|
)
|
|
endif()
|
|
|
|
add_custom_target(
|
|
firmware
|
|
DEPENDS ${FIRMWARE_FILENAME} ${HACKRF_FIRMWARE_DFU_FILENAME} ${HACKRF_FIRMWARE_FILENAME}
|
|
)
|
|
|
|
if(${GCC_VERSION_MISMATCH})
|
|
set(COMPILER_MISMATCH_MESSAGE "WARNING: Compiler version mismatch, please use the official compiler version ${EXPECTED_GCC_VERSION} when sharing builds! Current compiler version: ${CMAKE_CXX_COMPILER_VERSION}")
|
|
message(${COMPILER_MISMATCH_MESSAGE})
|
|
add_custom_command(
|
|
TARGET firmware POST_BUILD
|
|
COMMAND echo ${COMPILER_MISMATCH_MESSAGE}
|
|
VERBATIM)
|
|
endif()
|
|
|
|
add_custom_target(
|
|
program
|
|
COMMAND ${PROJECT_SOURCE_DIR}/tools/enter_mode.sh hackrf
|
|
COMMAND dfu-util --device 1fc9:000c --download ${HACKRF_FIRMWARE_DFU_IMAGE} || (exit 0) # We need to add it for dfu-utils v.011 , (in v.09 it is not necessary)
|
|
COMMAND sleep 3s
|
|
COMMAND hackrf_spiflash -i -R -w ${FIRMWARE_FILENAME}
|
|
DEPENDS firmware ${FIRMWARE_FILENAME}
|
|
)
|
|
|
|
add_custom_target(
|
|
program-external-apps
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND ${PROJECT_SOURCE_DIR}/tools/copy_external_apps.sh
|
|
DEPENDS program standalone_apps
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${PPFW_FILENAME}
|
|
|
|
COMMAND rm -rf firmware_tar
|
|
COMMAND mkdir -p firmware_tar/FIRMWARE
|
|
# Using VERSION_NOHASH to avoid dev builds piling up in the FIRMWARE folder of the sd card of testers in #test-drive
|
|
COMMAND cp ${FIRMWARE_FILENAME} firmware_tar/FIRMWARE/portapack-mayhem_${VERSION_NOHASH}.bin
|
|
COMMAND mkdir -p firmware_tar/APPS
|
|
COMMAND cp application/*.ppma firmware_tar/APPS
|
|
COMMAND cp standalone/*/*.ppmp firmware_tar/APPS
|
|
COMMAND cd firmware_tar && tar -cvaf ../${PPFW_FILENAME} *
|
|
DEPENDS firmware ${FIRMWARE_FILENAME} standalone_apps
|
|
# Dont use VERBATIM here as it prevents usage of globbing (*)
|
|
# There shouldnt be any funny business in the filenames above :)
|
|
)
|
|
|
|
# TODO: Bad hack to fix location of LICENSE file for tar.
|
|
add_custom_command(
|
|
OUTPUT ${FIRMWARE_NAME}-${VERSION}.tar.bz2 ${FIRMWARE_NAME}-${VERSION}.zip
|
|
COMMAND cp ${LICENSE_PATH} LICENSE
|
|
COMMAND cp ${HACKRF_FIRMWARE_DFU_IMAGE} ${HACKRF_FIRMWARE_DFU_FILENAME}
|
|
COMMAND tar -c -j -f ${FIRMWARE_NAME}-${VERSION}.tar.bz2 ${FIRMWARE_FILENAME} ${HACKRF_FIRMWARE_DFU_FILENAME} LICENSE
|
|
COMMAND zip -9 -q ${FIRMWARE_NAME}-${VERSION}.zip ${FIRMWARE_FILENAME} ${HACKRF_FIRMWARE_DFU_FILENAME} LICENSE
|
|
COMMAND rm -f LICENSE ${HACKRF_FIRMWARE_DFU_FILENAME}
|
|
DEPENDS ${FIRMWARE_FILENAME} ${LICENSE_PATH} ${HACKRF_FIRMWARE_DFU_FILENAME}
|
|
VERBATIM
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT MD5SUMS SHA256SUMS
|
|
COMMAND md5sum --binary ${FIRMWARE_NAME}-${VERSION}.tar.bz2 ${FIRMWARE_NAME}-${VERSION}.zip >MD5SUMS
|
|
COMMAND sha256sum --binary ${FIRMWARE_NAME}-${VERSION}.tar.bz2 ${FIRMWARE_NAME}-${VERSION}.zip >SHA256SUMS
|
|
DEPENDS ${FIRMWARE_NAME}-${VERSION}.tar.bz2 ${FIRMWARE_NAME}-${VERSION}.zip
|
|
)
|
|
|
|
add_custom_target(
|
|
ppfw ALL
|
|
DEPENDS ${PPFW_FILENAME}
|
|
)
|
|
|
|
add_custom_target(
|
|
oci
|
|
DEPENDS ${PPFW_FILENAME}
|
|
)
|
|
|
|
add_custom_target(
|
|
release
|
|
DEPENDS MD5SUMS SHA256SUMS
|
|
)
|
|
|