summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x.github/calcrom/calcrom.pl (renamed from .travis/calcrom/calcrom.pl)0
-rwxr-xr-x.github/calcrom/webhook.sh (renamed from .travis/calcrom/webhook.sh)7
-rw-r--r--.github/workflows/build.yml47
-rw-r--r--.gitignore2
-rw-r--r--.travis.yml46
-rw-r--r--Makefile2
-rw-r--r--berry_fix/Makefile30
-rw-r--r--berry_fix/payload/Makefile35
-rw-r--r--include/config.h5
-rw-r--r--ld_script_modern.txt7
10 files changed, 114 insertions, 67 deletions
diff --git a/.travis/calcrom/calcrom.pl b/.github/calcrom/calcrom.pl
index fb0a9df8c..fb0a9df8c 100755
--- a/.travis/calcrom/calcrom.pl
+++ b/.github/calcrom/calcrom.pl
diff --git a/.travis/calcrom/webhook.sh b/.github/calcrom/webhook.sh
index 86da74c87..2a3015969 100755
--- a/.travis/calcrom/webhook.sh
+++ b/.github/calcrom/webhook.sh
@@ -1,10 +1,5 @@
#!/bin/bash -ex
-# Only run this script if it's the master branch build.
-if [[ "$TRAVIS_BRANCH" != "master" || "$TRAVIS_PULL_REQUEST" != "false" ]]; then
- exit 0
-fi
-
build_name=$1
map_file=$build_name.map
if [ ! -f $map_file ]; then
@@ -13,4 +8,4 @@ if [ ! -f $map_file ]; then
fi
output=$(perl $(dirname "$0")/calcrom.pl $build_name.map | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g')
-curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$CALCROM_DISCORD_WEBHOOK_AVATAR_URL\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST $CALCROM_DISCORD_WEBHOOK_URL
+curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$CALCROM_DISCORD_WEBHOOK_AVATAR_URL\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST "$CALCROM_DISCORD_WEBHOOK_URL"
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 000000000..f8ad97065
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,47 @@
+name: CI
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+
+jobs:
+ build:
+ runs-on: ubuntu-18.04
+ steps:
+ - name: Checkout
+ uses: actions/checkout@master
+
+ - name: Install binutils
+ run: sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi
+ # build-essential, git, and libpng-dev are already installed
+ # gcc-arm-none-eabi is only needed for the modern build
+ # as an alternative to dkP
+
+ - name: Install agbcc
+ run: |
+ git clone https://github.com/pret/agbcc.git
+ cd agbcc
+ ./build.sh
+ ./install.sh ../
+
+ - name: Compare FireRed
+ run: |
+ make -j${nproc} compare_firered
+ make -j${nproc} compare_firered_rev1
+
+ - name: Compare LeafGreen
+ run: |
+ make -j${nproc} compare_leafgreen
+ make -j${nproc} compare_leafgreen_rev1
+
+ - name: Modern
+ run: make -j${nproc} modern
+
+ - name: Webhook
+ if: ${{ github.event_name == 'push' }}
+ env:
+ CALCROM_DISCORD_WEBHOOK_USERNAME: OK
+ CALCROM_DISCORD_WEBHOOK_AVATAR_URL: https://i.imgur.com/38BQHdd.png
+ CALCROM_DISCORD_WEBHOOK_URL: ${{ secrets.CALCROM_DISCORD_WEBHOOK_URL }}
+ run: sh .github/calcrom/webhook.sh pokefirered
diff --git a/.gitignore b/.gitignore
index af2644ade..a5dc2b2a4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -50,7 +50,7 @@ tags
tools/agbcc
tools/binutils
types_*.taghl
-!.travis/calcrom/calcrom.pl
+!.github/calcrom/calcrom.pl
!sound/programmable_wave_samples/*.pcm
_Deparsed_XSubs.pm
porymap.project.cfg
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 2f9187233..000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-language: generic
-dist: bionic
-os: linux
-env:
- global:
- - DEVKITPRO=$HOME
- - DEVKITARM=$DEVKITPRO/devkitARM
-addons:
- apt:
- packages:
- - gcc-multilib
- - linux-libc-dev
- - zlib-dev
-cache:
- apt: true
-install:
- - pushd $HOME
- - travis_retry wget https://github.com/devkitPro/buildscripts/releases/download/devkitARM_r52/devkitARM_r52-linux.tar.xz
- - tar xJf devkitARM*.tar.xz
- - travis_retry wget https://github.com/devkitPro/devkitarm-rules/releases/download/v1.0.0/devkitarm-rules-1.0.0.tar.xz
- - tar xJf devkitarm-rules-*.tar.xz -C $DEVKITARM
- - travis_retry git clone https://github.com/pret/agbcc.git
- - cd agbcc && sh build.sh && sh install.sh $TRAVIS_BUILD_DIR
- - popd
-jobs:
- include:
- - os: linux
- addons:
- apt:
- sources:
- - ubuntu-toolchain-r-test
- packages:
- - g++-7
- env: _="Build"
- script:
- - make tools CXX=g++-7
- - make -j2 compare
- - make -j2 compare_leafgreen
- - make -j2 compare_firered_rev1
- - make -j2 compare_leafgreen_rev1
- - make -j2 modern
- - make -j2 leafgreen_modern
- - make -j2 firered_rev1_modern
- - make -j2 leafgreen_rev1_modern
-after_success:
- - .travis/calcrom/webhook.sh pokefirered
diff --git a/Makefile b/Makefile
index 51877e9b9..405a190f8 100644
--- a/Makefile
+++ b/Makefile
@@ -266,7 +266,7 @@ $(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) -I . $(DATA_ASM_SUBDIR)/
endif
berry_fix:
- @$(MAKE) -C berry_fix COMPARE=$(COMPARE)
+ @$(MAKE) -C berry_fix COMPARE=$(COMPARE) TOOLCHAIN=$(TOOLCHAIN)
berry_fix/berry_fix.gba: berry_fix
diff --git a/berry_fix/Makefile b/berry_fix/Makefile
index 1e0f3ee25..a63941494 100644
--- a/berry_fix/Makefile
+++ b/berry_fix/Makefile
@@ -1,8 +1,29 @@
-include $(DEVKITARM)/base_tools
+TOOLCHAIN := $(DEVKITARM)
COMPARE ?= 0
-CPP := $(CC) -E
-LD := $(DEVKITARM)/bin/arm-none-eabi-ld
+ifeq ($(CC),)
+HOSTCC := gcc
+else
+HOSTCC := $(CC)
+endif
+
+ifeq ($(CXX),)
+HOSTCXX := g++
+else
+HOSTCXX := $(CXX)
+endif
+
+ifneq (,$(wildcard $(TOOLCHAIN)/base_tools))
+include $(TOOLCHAIN)/base_tools
+else
+export PATH := $(TOOLCHAIN)/bin:$(PATH)
+PREFIX := arm-none-eabi-
+OBJCOPY := $(PREFIX)objcopy
+export CC := $(PREFIX)gcc
+export AS := $(PREFIX)as
+endif
+export CPP := $(PREFIX)cpp
+export LD := $(PREFIX)ld
ifeq ($(OS),Windows_NT)
EXE := .exe
@@ -145,7 +166,7 @@ $(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) $(DATA_ASM_SUBDIR)/$*.s)
endif
payload:
- @$(MAKE) -C payload COMPARE=$(COMPARE)
+ @$(MAKE) -C payload COMPARE=$(COMPARE) TOOLCHAIN=$(TOOLCHAIN)
payload/payload.gba: payload
@@ -164,4 +185,3 @@ $(ELF): ld_script.txt $(OBJS)
$(ROM): $(ELF)
$(OBJCOPY) -O binary $< $@
$(FIX) $@ -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent
-
diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile
index c87a06c41..a852c52dc 100644
--- a/berry_fix/payload/Makefile
+++ b/berry_fix/payload/Makefile
@@ -1,8 +1,29 @@
-include $(DEVKITARM)/base_tools
+TOOLCHAIN := $(DEVKITARM)
COMPARE ?= 0
-CPP := $(CC) -E
-LD := $(DEVKITARM)/bin/arm-none-eabi-ld
+ifeq ($(CC),)
+HOSTCC := gcc
+else
+HOSTCC := $(CC)
+endif
+
+ifeq ($(CXX),)
+HOSTCXX := g++
+else
+HOSTCXX := $(CXX)
+endif
+
+ifneq (,$(wildcard $(TOOLCHAIN)/base_tools))
+include $(TOOLCHAIN)/base_tools
+else
+export PATH := $(TOOLCHAIN)/bin:$(PATH)
+PREFIX := arm-none-eabi-
+OBJCOPY := $(PREFIX)objcopy
+export CC := $(PREFIX)gcc
+export AS := $(PREFIX)as
+endif
+export CPP := $(PREFIX)cpp
+export LD := $(PREFIX)ld
ifeq ($(OS),Windows_NT)
EXE := .exe
@@ -56,7 +77,7 @@ FIX := ../../tools/gbafix/gbafix$(EXE)
# Secondary expansion is required for dependency variables in object rules.
.SECONDEXPANSION:
-.PHONY: rom clean compare tidy
+.PHONY: all rom clean compare tidy
C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c)
C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS))
@@ -95,8 +116,7 @@ ifeq ($(COMPARE),1)
endif
# For contributors to make sure a change didn't affect the contents of the ROM.
-compare:
- @$(MAKE) COMPARE=1
+compare: ; @$(MAKE) COMPARE=1
clean: tidy
rm -f sound/direct_sound_samples/*.bin
@@ -158,7 +178,7 @@ $(OBJ_DIR)/sym_bss.ld: sym_bss.txt
$(RAMSCRGEN) .bss $< ENGLISH > $@
$(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt)
- $(RAMSCRGEN) COMMON $< ENGLISH -c $(C_BUILDDIR),common_syms,../../tools/agbcc/lib > $@
+ $(RAMSCRGEN) COMMON $< ENGLISH -c $(C_BUILDDIR),common_syms > $@
$(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt
$(RAMSCRGEN) ewram_data $< ENGLISH > $@
@@ -171,4 +191,3 @@ $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS)
$(ROM): $(ELF)
$(OBJCOPY) -O binary $< $@
-
diff --git a/include/config.h b/include/config.h
index bdad6bb28..4bb35c764 100644
--- a/include/config.h
+++ b/include/config.h
@@ -38,7 +38,12 @@
// Crashes may occur due to section reordering in the modern build,
// so we force BUGFIX here.
#if MODERN
+#ifndef BUGFIX
#define BUGFIX
+#endif // BUGFIX
+#ifndef NONMATCHING
+#define NONMATCHING
+#endif // NONMATCHING
#endif // MODERN
#endif // GUARD_CONFIG_H
diff --git a/ld_script_modern.txt b/ld_script_modern.txt
index 588685112..9f1508067 100644
--- a/ld_script_modern.txt
+++ b/ld_script_modern.txt
@@ -41,6 +41,13 @@ SECTIONS {
*(.text*);
} =0
+ .text.unlikely :
+ ALIGN(4)
+ {
+ src/crt0.o(.text.unlikely);
+ *(.text.unlikely*);
+ } =0
+
script_data :
ALIGN(4)
{