Skip to content

Commit

Permalink
CI config update, toolchain config update (#26)
Browse files Browse the repository at this point in the history
Signed-off-by: Adam BZH <[email protected]>
  • Loading branch information
424778940z authored Apr 25, 2024
1 parent a3889ef commit bf4574f
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 61 deletions.
31 changes: 12 additions & 19 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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: |
Expand All @@ -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
Expand Down
28 changes: 11 additions & 17 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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 "
)

###############################
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
)

###############################
Expand Down
14 changes: 2 additions & 12 deletions app/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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")
Expand Down
2 changes: 1 addition & 1 deletion build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 2 additions & 12 deletions dfu/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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")
Expand Down
42 changes: 42 additions & 0 deletions toolchain.cmake
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit bf4574f

Please sign in to comment.