mirror of
https://github.com/dwhinham/mt32-pi.git
synced 2026-10-26 22:11:05 +00:00
Enable AArch64 builds for Raspberry Pi 3 and 4
This commit is contained in:
1 parent
5a5663adca
commit
8bf865008b
5 files changed
+110
-48
No files matched your search
+52
-24
@@ -2,6 +2,9 @@ name: mt32-pi CI
|
|||||||
|
|
||||||
on: [push, pull_request]
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
env:
|
||||||
|
toolchain-version: 9.2-2019.12
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -9,7 +12,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
board: [pi2, pi3, pi4]
|
board: [pi2, pi3-64, pi4-64]
|
||||||
env:
|
env:
|
||||||
toolchain-version: 9.2-2019.12
|
toolchain-version: 9.2-2019.12
|
||||||
|
|
||||||
@@ -18,22 +21,29 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
- name: Cache ARM toolchain
|
- name: Cache ARM toolchains
|
||||||
|
id: cache-toolchains
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ~/gcc-arm-${{ env.toolchain-version }}-x86_64-arm-none-eabi
|
path: |
|
||||||
key: cache-arm-toolchain-${{ env.toolchain-version }}
|
~/gcc-arm-${{ env.toolchain-version }}-x86_64-arm-none-eabi
|
||||||
|
~/gcc-arm-${{ env.toolchain-version }}-x86_64-aarch64-none-elf
|
||||||
|
key: cache-arm-toolchains-${{ env.toolchain-version }}
|
||||||
|
|
||||||
- name: Install toolchain if not retrieved from cache
|
- name: Install toolchains if not retrieved from cache
|
||||||
|
if: steps.cache-toolchains.outputs.cache-hit != 'true'
|
||||||
run: |
|
run: |
|
||||||
if [ ! -d ~/gcc-arm-${{ env.toolchain-version }}-x86_64-arm-none-eabi ]; then
|
for triplet in arm-none-eabi aarch64-none-elf; do
|
||||||
wget -q https://developer.arm.com/-/media/Files/downloads/gnu-a/${{ env.toolchain-version }}/binrel/gcc-arm-${{ env.toolchain-version }}-x86_64-arm-none-eabi.tar.xz
|
wget -q https://developer.arm.com/-/media/Files/downloads/gnu-a/${{ env.toolchain-version }}/binrel/gcc-arm-${{ env.toolchain-version }}-x86_64-${triplet}.tar.xz
|
||||||
tar -xf gcc-arm-${{ env.toolchain-version }}-x86_64-arm-none-eabi.tar.xz -C ~
|
tar -xf gcc-arm-${{ env.toolchain-version }}-x86_64-${triplet}.tar.xz -C ~
|
||||||
rm gcc-arm-${{ env.toolchain-version }}-x86_64-arm-none-eabi.tar.xz
|
rm gcc-arm-${{ env.toolchain-version }}-x86_64-${triplet}.tar.xz
|
||||||
fi
|
done
|
||||||
|
|
||||||
- name: Update PATH
|
- name: Update PATH
|
||||||
run: echo "$HOME/gcc-arm-${{ env.toolchain-version }}-x86_64-arm-none-eabi/bin" >> $GITHUB_PATH
|
run: |
|
||||||
|
for triplet in arm-none-eabi aarch64-none-elf; do
|
||||||
|
echo "$HOME/gcc-arm-${{ env.toolchain-version }}-x86_64-${triplet}/bin" >> $GITHUB_PATH
|
||||||
|
done
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: make -j BOARD=${{ matrix.board }}
|
run: make -j BOARD=${{ matrix.board }}
|
||||||
@@ -56,9 +66,11 @@ jobs:
|
|||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
- name: Cache boot files
|
- name: Cache boot files
|
||||||
|
id: cache-boot-files
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
|
sdcard/armstub8-rpi4.bin
|
||||||
sdcard/bcm2711-rpi-4-b.dtb
|
sdcard/bcm2711-rpi-4-b.dtb
|
||||||
sdcard/bootcode.bin
|
sdcard/bootcode.bin
|
||||||
sdcard/COPYING.linux
|
sdcard/COPYING.linux
|
||||||
@@ -69,20 +81,36 @@ jobs:
|
|||||||
sdcard/start4cd.elf
|
sdcard/start4cd.elf
|
||||||
key: cache-boot-files-${{ hashFiles(join(env.boot-home, '/Makefile')) }}
|
key: cache-boot-files-${{ hashFiles(join(env.boot-home, '/Makefile')) }}
|
||||||
|
|
||||||
- name: Download boot files if not retrieved from cache
|
- name: Cache ARM toolchains
|
||||||
|
if: steps.cache-boot-files.outputs.cache-hit != 'true'
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/gcc-arm-${{ env.toolchain-version }}-x86_64-arm-none-eabi
|
||||||
|
~/gcc-arm-${{ env.toolchain-version }}-x86_64-aarch64-none-elf
|
||||||
|
key: cache-arm-toolchains-${{ env.toolchain-version }}
|
||||||
|
|
||||||
|
- name: Update PATH
|
||||||
|
if: steps.cache-boot-files.outputs.cache-hit != 'true'
|
||||||
run: |
|
run: |
|
||||||
if [ ! -f sdcard/bootcode.bin ]; then
|
for triplet in arm-none-eabi aarch64-none-elf; do
|
||||||
make -C ${{ env.boot-home }}
|
echo "$HOME/gcc-arm-${{ env.toolchain-version }}-x86_64-${triplet}/bin" >> $GITHUB_PATH
|
||||||
cp ${{ env.boot-home }}/bcm2711-rpi-4-b.dtb \
|
done
|
||||||
${{ env.boot-home }}/bootcode.bin \
|
|
||||||
${{ env.boot-home }}/COPYING.linux \
|
- name: Download boot files and build ARM stub if not retrieved from cache
|
||||||
${{ env.boot-home }}/fixup_cd.dat \
|
if: steps.cache-boot-files.outputs.cache-hit != 'true'
|
||||||
${{ env.boot-home }}/fixup4cd.dat \
|
run: |
|
||||||
${{ env.boot-home }}/LICENCE.broadcom \
|
make -C ${{ env.boot-home }} firmware armstub64
|
||||||
${{ env.boot-home }}/start_cd.elf \
|
cp ${{ env.boot-home }}/armstub8-rpi4.bin \
|
||||||
${{ env.boot-home }}/start4cd.elf \
|
${{ env.boot-home }}/bcm2711-rpi-4-b.dtb \
|
||||||
sdcard
|
${{ env.boot-home }}/bootcode.bin \
|
||||||
fi
|
${{ env.boot-home }}/COPYING.linux \
|
||||||
|
${{ env.boot-home }}/fixup_cd.dat \
|
||||||
|
${{ env.boot-home }}/fixup4cd.dat \
|
||||||
|
${{ env.boot-home }}/LICENCE.broadcom \
|
||||||
|
${{ env.boot-home }}/start_cd.elf \
|
||||||
|
${{ env.boot-home }}/start4cd.elf \
|
||||||
|
sdcard
|
||||||
|
|
||||||
- name: Retrieve built kernels
|
- name: Retrieve built kernels
|
||||||
uses: actions/download-artifact@v2
|
uses: actions/download-artifact@v2
|
||||||
|
|||||||
@@ -2,8 +2,9 @@
|
|||||||
# Build configuration
|
# Build configuration
|
||||||
#
|
#
|
||||||
|
|
||||||
# Path to ARM toolchain
|
# Paths to ARM toolchains
|
||||||
ARM_HOME?=$(HOME)/gcc-arm-9.2-2019.12-x86_64-arm-none-eabi
|
ARM_HOME?=$(HOME)/gcc-arm-9.2-2019.12-x86_64-arm-none-eabi
|
||||||
|
AARCH64_HOME?=$(HOME)/gcc-arm-9.2-2019.12-x86_64-aarch64-none-elf
|
||||||
|
|
||||||
# Valid options: pi0, pi2, pi3, pi4, pi4-64
|
# Valid options: pi0, pi2, pi3, pi4, pi4-64
|
||||||
BOARD?=pi4
|
BOARD?=pi4
|
||||||
@@ -17,6 +18,42 @@ USERBAUD?=115200
|
|||||||
# Enable section garbage collection
|
# Enable section garbage collection
|
||||||
GC_SECTIONS?=0
|
GC_SECTIONS?=0
|
||||||
|
|
||||||
|
# Toolchain setup
|
||||||
|
ifeq ($(BOARD), pi0)
|
||||||
|
RASPBERRYPI=1
|
||||||
|
BITS=32
|
||||||
|
PREFIX=arm-none-eabi-
|
||||||
|
else ifeq ($(BOARD), pi2)
|
||||||
|
RASPBERRYPI=2
|
||||||
|
BITS=32
|
||||||
|
PREFIX=arm-none-eabi-
|
||||||
|
else ifeq ($(BOARD), pi3)
|
||||||
|
RASPBERRYPI=3
|
||||||
|
BITS=32
|
||||||
|
PREFIX=arm-none-eabi-
|
||||||
|
else ifeq ($(BOARD), pi3-64)
|
||||||
|
RASPBERRYPI=3
|
||||||
|
BITS=64
|
||||||
|
PREFIX=aarch64-none-elf-
|
||||||
|
else ifeq ($(BOARD), pi4)
|
||||||
|
RASPBERRYPI=4
|
||||||
|
BITS=32
|
||||||
|
PREFIX=arm-none-eabi-
|
||||||
|
else ifeq ($(BOARD), pi4-64)
|
||||||
|
RASPBERRYPI=4
|
||||||
|
BITS=64
|
||||||
|
PREFIX=aarch64-none-elf-
|
||||||
|
else
|
||||||
|
$(error Invalid board type "$(BOARD)"; please specify one of [ pi0 | pi2 | pi3 | pi3-64 | pi4 | pi4-64 ])
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PREFIX), arm-none-eabi-)
|
||||||
|
CMAKE_TOOLCHAIN_FLAGS=-DARM_HOME=$(ARM_HOME) -DCMAKE_TOOLCHAIN_FILE=../cmake/arm-none-eabi.cmake
|
||||||
|
else
|
||||||
|
CMAKE_TOOLCHAIN_FLAGS=-DAARCH64_HOME=$(AARCH64_HOME) -DCMAKE_TOOLCHAIN_FILE=../cmake/aarch64-none-elf.cmake
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Paths
|
||||||
CIRCLESTDLIBHOME=$(realpath external/circle-stdlib)
|
CIRCLESTDLIBHOME=$(realpath external/circle-stdlib)
|
||||||
CIRCLE_STDLIB_CONFIG=$(CIRCLESTDLIBHOME)/Config.mk
|
CIRCLE_STDLIB_CONFIG=$(CIRCLESTDLIBHOME)/Config.mk
|
||||||
|
|
||||||
|
|||||||
@@ -12,24 +12,8 @@ include Config.mk
|
|||||||
#
|
#
|
||||||
.ONESHELL:
|
.ONESHELL:
|
||||||
$(CIRCLE_STDLIB_CONFIG) $(CIRCLE_CONFIG)&:
|
$(CIRCLE_STDLIB_CONFIG) $(CIRCLE_CONFIG)&:
|
||||||
ifeq ($(BOARD), pi0)
|
@echo "Configuring for Raspberry Pi $(RASPBERRYPI) ($(BITS) bit)"
|
||||||
@echo -n "Configuring for Raspberry Pi 0/1"
|
$(CIRCLESTDLIBHOME)/configure --raspberrypi=$(RASPBERRYPI) --prefix=$(PREFIX)
|
||||||
$(CIRCLESTDLIBHOME)/configure --raspberrypi=1
|
|
||||||
else ifeq ($(BOARD), pi2)
|
|
||||||
@echo -n "Configuring for Raspberry Pi 2"
|
|
||||||
$(CIRCLESTDLIBHOME)/configure --raspberrypi=2
|
|
||||||
else ifeq ($(BOARD), pi3)
|
|
||||||
@echo -n "Configuring for Raspberry Pi 3"
|
|
||||||
$(CIRCLESTDLIBHOME)/configure --raspberrypi=3
|
|
||||||
else ifeq ($(BOARD), pi4)
|
|
||||||
@echo -n "Configuring for Raspberry Pi 4"
|
|
||||||
$(CIRCLESTDLIBHOME)/configure --raspberrypi=4
|
|
||||||
else ifeq ($(BOARD), pi4-64)
|
|
||||||
@echo -n "Configuring for Raspberry Pi 4 (64 bit)"
|
|
||||||
$(CIRCLESTDLIBHOME)/configure --raspberrypi=4 --prefix=aarch64-none-elf
|
|
||||||
else
|
|
||||||
$(error Invalid board type "$(BOARD)"; please specify one of [ pi0 | pi2 | pi3 | pi4 | pi4-64 ])
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Enable multi-core
|
# Enable multi-core
|
||||||
echo "DEFINE += -DARM_ALLOW_MULTI_CORE" >> $(CIRCLE_CONFIG)
|
echo "DEFINE += -DARM_ALLOW_MULTI_CORE" >> $(CIRCLE_CONFIG)
|
||||||
@@ -48,6 +32,7 @@ circle-stdlib: $(CIRCLESTDLIBHOME)/.done
|
|||||||
$(CIRCLESTDLIBHOME)/.done: $(CIRCLE_STDLIB_CONFIG)
|
$(CIRCLESTDLIBHOME)/.done: $(CIRCLE_STDLIB_CONFIG)
|
||||||
@$(MAKE) -C $(CIRCLESTDLIBHOME)
|
@$(MAKE) -C $(CIRCLESTDLIBHOME)
|
||||||
touch $@
|
touch $@
|
||||||
|
|
||||||
#
|
#
|
||||||
# Build mt32emu
|
# Build mt32emu
|
||||||
#
|
#
|
||||||
@@ -56,9 +41,8 @@ mt32emu: $(MT32EMUBUILDDIR)/.done
|
|||||||
$(MT32EMUBUILDDIR)/.done: $(CIRCLESTDLIBHOME)/.done
|
$(MT32EMUBUILDDIR)/.done: $(CIRCLESTDLIBHOME)/.done
|
||||||
@export CFLAGS="$(CFLAGS_FOR_TARGET)"
|
@export CFLAGS="$(CFLAGS_FOR_TARGET)"
|
||||||
@export CXXFLAGS="$(CFLAGS_FOR_TARGET)"
|
@export CXXFLAGS="$(CFLAGS_FOR_TARGET)"
|
||||||
@cmake -B $(MT32EMUBUILDDIR) \
|
@cmake -B $(MT32EMUBUILDDIR) \
|
||||||
-DARM_HOME=$(ARM_HOME) \
|
$(CMAKE_TOOLCHAIN_FLAGS) \
|
||||||
-DCMAKE_TOOLCHAIN_FILE=../cmake/arm-none-eabi.cmake \
|
|
||||||
-DCMAKE_CXX_FLAGS_RELEASE="-Ofast" \
|
-DCMAKE_CXX_FLAGS_RELEASE="-Ofast" \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
-Dlibmt32emu_C_INTERFACE=FALSE \
|
-Dlibmt32emu_C_INTERFACE=FALSE \
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
set(CMAKE_SYSTEM_NAME Generic)
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR aarch64)
|
||||||
|
|
||||||
|
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER ${AARCH64_HOME}/bin/aarch64-none-elf-gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER ${AARCH64_HOME}/bin/aarch64-none-elf-g++)
|
||||||
+8
-2
@@ -4,6 +4,12 @@ disable_splash=1
|
|||||||
force_eeprom_read=0
|
force_eeprom_read=0
|
||||||
gpu_mem=16
|
gpu_mem=16
|
||||||
|
|
||||||
# Ensure that the Pi 4 doesn't try to boot the Pi 3-optimized kernel (kernel8-32.img)
|
# Enable 64-bit mode (AArch64) for Pi 3 and 4
|
||||||
|
[pi3]
|
||||||
|
arm_64bit=1
|
||||||
|
kernel=kernel8.img
|
||||||
|
|
||||||
[pi4]
|
[pi4]
|
||||||
kernel=kernel7l.img
|
arm_64bit=1
|
||||||
|
armstub=armstub8-rpi4.bin
|
||||||
|
kernel=kernel8-rpi4.img
|
||||||
Reference in new issue
Block a user