diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d00e822..4b3ca10 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -7,38 +7,30 @@ jobs: name: "build" runs-on: ubuntu-latest steps: - - name: Configure Fast APT Mirror - uses: vegardit/fast-apt-mirror.sh@v1 - with: # the following parameters are listed with their action default values and are optional - healthchecks: 20 # Number of mirrors from the mirrors list to check for availability and up-to-dateness - speedtests: 10 # Maximum number of healthy mirrors to test for speed - parallel: 2 # Number of parallel speed tests - sample-size: 1024 # Number of kilobytes to download during the speed from each mirror - sample-time: 3 # Maximum number of seconds within the sample download from a mirror must finish + + - name: Check out repository code + uses: actions/checkout@v3 - name: Install Dependencies run: | sudo apt update - sudo apt -y install curl wget ninja-build - sudo apt -y install build-essential libtool + sudo apt -y install curl wget cmake ninja-build build-essential libtool + # sudo apt -y install gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi sudo apt -y install python3 python3-pip python-is-python3 - sudo python -m pip install -U pip + # sudo python -m pip install -U pip sudo pip install wheel click ARCH=$(uname -m) if [ "$ARCH" = "x86_64" ]; then - wget -q https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz + wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz --progress=dot:giga mkdir gcc-arm-none-eabi-12.2.rel1 - tar -xf arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz --strip-components=1 -C gcc-arm-none-eabi-12.2.rel1 + tar -xf arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz --strip-components=1 -C gcc-arm-none-eabi-12.2.rel1 --totals else - wget -q https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-aarch64-arm-none-eabi.tar.xz + wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-aarch64-arm-none-eabi.tar.xz --progress=dot:giga mkdir gcc-arm-none-eabi-12.2.rel1 - tar -xf arm-gnu-toolchain-12.2.rel1-aarch64-arm-none-eabi.tar.xz --strip-components=1 -C gcc-arm-none-eabi-12.2.rel1 + tar -xf arm-gnu-toolchain-12.2.rel1-aarch64-arm-none-eabi.tar.xz --strip-components=1 -C gcc-arm-none-eabi-12.2.rel1 --totals fi - - name: Check out repository code - uses: actions/checkout@v3 - - name: Populate vars id: vars run: | @@ -50,8 +42,9 @@ jobs: - name: Build and Sign env: BT_SIG_PK: ${{ secrets.BT_SIG_PK }} + TOOL_CHAIN_PREFIX: "${{ github.workspace }}/gcc-arm-none-eabi-12.2.rel1/bin/arm-none-eabi" + # TOOL_CHAIN_PREFIX: "arm-none-eabi" run: | - export PATH=$PATH:$PWD/gcc-arm-none-eabi-12.2.rel1/bin ./build.sh - name: Upload artifacts diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ca43a3..6cad3a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,22 +1,14 @@ -# cmake options cmake_minimum_required(VERSION 3.22.1) ############################### # Toolchain -set(CMAKE_SYSTEM_NAME Generic) -set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY") -set(TOOL_CHAIN_PREFIX "arm-none-eabi") -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -find_program(CMAKE_C_COMPILER NAMES ${TOOL_CHAIN_PREFIX}-gcc) -find_program(CMAKE_ASM_COMPILER NAMES ${TOOL_CHAIN_PREFIX}-gcc) -find_program(CMAKE_OBJCOPY NAMES ${TOOL_CHAIN_PREFIX}-objcopy) -set(CMAKE_C_STANDARD 17) -set(CMAKE_C_STANDARD_REQUIRED ON) +include("./toolchain.cmake") + ############################### # Project -project(OnekeyProBTFW LANGUAGES C ASM) -set(CMAKE_INCLUDE_CURRENT_DIR ON) +project(OnekeyProBTFW LANGUAGES C) +set(CMAKE_INCLUDE_CURRENT_DIR OFF) ############################### # Sub Projects @@ -28,14 +20,16 @@ ExternalProject_Add( SOURCE_DIR ${PROJECT_SOURCE_DIR}/dfu INSTALL_DIR ${PROJECT_BINARY_DIR}/artifacts CMAKE_GENERATOR "Ninja" - CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:STRING=${PROJECT_SOURCE_DIR}/artifacts" + CMAKE_ARGS "-DTOOL_CHAIN_PREFIX=${TOOL_CHAIN_PREFIX} " + CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:STRING=${PROJECT_SOURCE_DIR}/artifacts " ) ExternalProject_Add( app SOURCE_DIR ${PROJECT_SOURCE_DIR}/app INSTALL_DIR ${PROJECT_BINARY_DIR}/artifacts CMAKE_GENERATOR "Ninja" - CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:STRING=${PROJECT_SOURCE_DIR}/artifacts" + CMAKE_ARGS "-DTOOL_CHAIN_PREFIX=${TOOL_CHAIN_PREFIX} " + CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:STRING=${PROJECT_SOURCE_DIR}/artifacts " ) ############################### @@ -81,7 +75,7 @@ add_custom_target( --app-boot-validation VALIDATE_ECDSA_P256_SHA256 --application ${FILE_INPUT_APP} --application-version 3 --sd-boot-validation VALIDATE_ECDSA_P256_SHA256 --softdevice ${FILE_INPUT_SD} --key-file ${FILE_KEY} ${FILE_INPUT_BL_CONFIG} - DEPENDS ${CMAKE_PROJECT_NAME}_OUT_DIR ${CMAKE_PROJECT_NAME}_UTIL ${CMAKE_PROJECT_NAME}_UTIL ${CMAKE_PROJECT_NAME}_KEY app + DEPENDS ${CMAKE_PROJECT_NAME}_OUT_DIR ${CMAKE_PROJECT_NAME}_UTIL ${CMAKE_PROJECT_NAME}_KEY app ) # megre factory hex @@ -90,7 +84,7 @@ add_custom_target( COMMAND ${DIR_UTILS}/mergehex --merge ${FILE_INPUT_BOOTLOADER} ${FILE_INPUT_BL_CONFIG} ${FILE_INPUT_SD} ${FILE_INPUT_APP} --output ${FILE_OUTPUT_FACTORY_HEX} - DEPENDS ${CMAKE_PROJECT_NAME}_OUT_DIR ${CMAKE_PROJECT_NAME}_UTIL ${CMAKE_PROJECT_NAME}_UTIL ${CMAKE_PROJECT_NAME}_BL_CONF dfu app + DEPENDS ${CMAKE_PROJECT_NAME}_OUT_DIR ${CMAKE_PROJECT_NAME}_UTIL ${CMAKE_PROJECT_NAME}_BL_CONF dfu app ) # gen factory bin @@ -110,7 +104,7 @@ add_custom_target( --application ${FILE_INPUT_APP} --application-version 3 --app-boot-validation VALIDATE_ECDSA_P256_SHA256 --key-file ${FILE_KEY} ${FILE_OUTPUT_ZIP} COMMAND ${DIR_UTILS}/ota_to_onekey_bin.py ${FILE_OUTPUT_ZIP} ${FILE_OUTPUT_OTA_BIN} - DEPENDS ${CMAKE_PROJECT_NAME}_OUT_DIR ${CMAKE_PROJECT_NAME}_UTIL ${CMAKE_PROJECT_NAME}_UTIL ${CMAKE_PROJECT_NAME}_KEY dfu app + DEPENDS ${CMAKE_PROJECT_NAME}_OUT_DIR ${CMAKE_PROJECT_NAME}_UTIL ${CMAKE_PROJECT_NAME}_KEY dfu app ) ############################### diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 1c66730..08877e4 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -1,23 +1,13 @@ -# cmake options cmake_minimum_required(VERSION 3.22.1) ############################### # Toolchain -set(CMAKE_SYSTEM_NAME Generic) -set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY") -set(TOOL_CHAIN_PREFIX "arm-none-eabi") -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -find_program(CMAKE_C_COMPILER NAMES ${TOOL_CHAIN_PREFIX}-gcc) -find_program(CMAKE_ASM_COMPILER NAMES ${TOOL_CHAIN_PREFIX}-gcc) -find_program(CMAKE_OBJCOPY NAMES ${TOOL_CHAIN_PREFIX}-objcopy) -set(CMAKE_C_STANDARD 17) -set(CMAKE_C_STANDARD_REQUIRED ON) +include("../toolchain.cmake") ############################### # Project -project(OnekeyProBTFW_APP LANGUAGES C ASM) +project(OnekeyProBTFW_APP LANGUAGES C CXX ASM) set(CMAKE_INCLUDE_CURRENT_DIR ON) - ############################### # NRF SDK set(NRF_SDK_ROOT "${PROJECT_SOURCE_DIR}/../ble-firmware") diff --git a/build.sh b/build.sh index 8641bd0..ce41b35 100755 --- a/build.sh +++ b/build.sh @@ -15,7 +15,7 @@ rm -rf artifacts_signed rm -rf _build # build mkdir -p _build -cmake -G 'Ninja' -S ./ -B ./_build +cmake -G 'Ninja' -S ./ -B ./_build -DTOOL_CHAIN_PREFIX=$TOOL_CHAIN_PREFIX cmake --build ./_build --config Release -- -j$(nproc) utils/hash.py -t bluetooth -f artifacts/OnekeyProBTFW_APP.bin > artifacts/sha256.txt # remove build folder diff --git a/dfu/CMakeLists.txt b/dfu/CMakeLists.txt index f57ce4f..0a29a22 100644 --- a/dfu/CMakeLists.txt +++ b/dfu/CMakeLists.txt @@ -1,23 +1,13 @@ -# cmake options cmake_minimum_required(VERSION 3.22.1) ############################### # Toolchain -set(CMAKE_SYSTEM_NAME Generic) -set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY") -set(TOOL_CHAIN_PREFIX "arm-none-eabi") -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -find_program(CMAKE_C_COMPILER NAMES ${TOOL_CHAIN_PREFIX}-gcc) -find_program(CMAKE_ASM_COMPILER NAMES ${TOOL_CHAIN_PREFIX}-gcc) -find_program(CMAKE_OBJCOPY NAMES ${TOOL_CHAIN_PREFIX}-objcopy) -set(CMAKE_C_STANDARD 17) -set(CMAKE_C_STANDARD_REQUIRED ON) +include("../toolchain.cmake") ############################### # Project -project(OnekeyProBTFW_BL LANGUAGES C ASM) +project(OnekeyProBTFW_BL LANGUAGES C CXX ASM) set(CMAKE_INCLUDE_CURRENT_DIR ON) - ############################### # NRF SDK set(NRF_SDK_ROOT "${PROJECT_SOURCE_DIR}/../ble-firmware") diff --git a/toolchain.cmake b/toolchain.cmake new file mode 100644 index 0000000..86e426d --- /dev/null +++ b/toolchain.cmake @@ -0,0 +1,42 @@ +############################### +# Toolchain +message("TOOL_CHAIN_PREFIX=${TOOL_CHAIN_PREFIX}") +# input required +if (NOT TOOL_CHAIN_PREFIX) + message(FATAL_ERROR "TOOL_CHAIN_PREFIX required but not set") +endif () +# standard +set(CMAKE_C_STANDARD 17) +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +# cross options +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR ARM) +set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY") +# search programs +find_program(CMAKE_ASM_COMPILER NAMES ${TOOL_CHAIN_PREFIX}-gcc) +find_program(CMAKE_C_COMPILER NAMES ${TOOL_CHAIN_PREFIX}-gcc) +find_program(CMAKE_CXX_COMPILER NAMES ${TOOL_CHAIN_PREFIX}-g++) +find_program(CMAKE_OBJCOPY NAMES ${TOOL_CHAIN_PREFIX}-objcopy) +# set(CMAKE_ASM_COMPILER ${TOOL_CHAIN_PREFIX}-gcc) +# set(CMAKE_C_COMPILER ${TOOL_CHAIN_PREFIX}-gcc) +# set(CMAKE_CXX_COMPILER ${TOOL_CHAIN_PREFIX}-g++) +# set(CMAKE_OBJCOPY ${TOOL_CHAIN_PREFIX}-objcopy) +message("CMAKE_ASM_COMPILER=${CMAKE_ASM_COMPILER}") +message("CMAKE_C_COMPILER=${CMAKE_C_COMPILER}") +message("CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}") +message("CMAKE_OBJCOPY=${CMAKE_OBJCOPY}") +# check tools +if ((NOT CMAKE_ASM_COMPILER) OR (NOT CMAKE_C_COMPILER) OR (NOT CMAKE_CXX_COMPILER) OR (NOT CMAKE_OBJCOPY)) + message(FATAL_ERROR "Valid toolchain not found") +endif () +# get sysroot +execute_process(COMMAND ${CMAKE_C_COMPILER} -print-sysroot + OUTPUT_VARIABLE ARM_GCC_SYSROOT OUTPUT_STRIP_TRAILING_WHITESPACE) +set(CMAKE_SYSROOT ${ARM_GCC_SYSROOT}) +# set root path +set(CMAKE_FIND_ROOT_PATH ${CMAKE_C_COMPILER}) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) \ No newline at end of file