diff options
author | GriffinR <griffin.g.richards@gmail.com> | 2021-03-08 03:03:53 -0500 |
---|---|---|
committer | GriffinR <griffin.g.richards@gmail.com> | 2021-03-10 16:45:38 -0500 |
commit | b2f0efc6f7882d4d8f5da28e5e8748cd4f91159d (patch) | |
tree | b95324c81c904ffeb040b00b354257a136536525 | |
parent | 42b93f8359b07bc99516f5cf6cf1f42ec65ba029 (diff) |
Replace Travis CI with Github workflow
-rwxr-xr-x | .github/calcrom/webhook.sh (renamed from .travis/calcrom/webhook.sh) | 7 | ||||
-rw-r--r-- | .github/workflows/build.yml | 47 | ||||
-rw-r--r-- | .travis.yml | 46 | ||||
-rwxr-xr-x | .travis/calcrom/calcrom.pl | 188 | ||||
-rw-r--r-- | ld_script_modern.txt | 7 |
5 files changed, 55 insertions, 240 deletions
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/.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/.travis/calcrom/calcrom.pl b/.travis/calcrom/calcrom.pl deleted file mode 100755 index fb0a9df8c..000000000 --- a/.travis/calcrom/calcrom.pl +++ /dev/null @@ -1,188 +0,0 @@ -#!/usr/bin/perl - -# Usage: -# calcrom.pl <mapfile> [--verbose] -# -# mapfile: path to .map file output by LD -# verbose: set to get more detailed output - -use IPC::Cmd qw[ run ]; -use Getopt::Long; - -my $verbose = ""; - -GetOptions("verbose" => \$verbose); -(@ARGV == 1) - or die "ERROR: no map file specified.\n"; -open(my $file, $ARGV[0]) - or die "ERROR: could not open file '$ARGV[0]'.\n"; - -my $src = 0; -my $asm = 0; -my $srcdata = 0; -my $data = 0; -my @pairs = (); -while (my $line = <$file>) -{ - if ($line =~ /^ \.(\w+)\s+0x[0-9a-f]+\s+(0x[0-9a-f]+) (\w+)\/(.+)\.o/) - { - my $section = $1; - my $size = hex($2); - my $dir = $3; - my $basename = $4; - if ($size & 3) - { - $size += 4 - ($size % 3); - } - - if ($section =~ /text/) - { - if ($dir eq 'src') - { - $src += $size; - } - elsif ($dir eq 'asm') - { - if (!($basename =~ /(crt0|libagbsyscall|libgcnmultiboot|m4a_1)/)) - { - push @pairs, [$basename, $size]; - } - $asm += $size; - } - } - elsif ($section =~ /rodata/) - { - if ($dir eq 'src') - { - $srcdata += $size; - } - elsif ($dir eq 'data') - { - $data += $size; - } - } - } -} - -my @sorted = sort { $a->[1] <=> $b->[1] } @pairs; - -# Note that the grep filters out all branch labels. It also requires a minimum -# line length of 5, to filter out a ton of generated symbols (like AcCn). No -# settings to nm seem to remove these symbols. Finally, nm prints out a separate -# entry for whenever a name appears in a file, not just where it's defined. uniq -# removes all the duplicate entries. -# -# -# You'd expect this to take a while, because of uniq. It runs in under a second, -# though. Uniq is pretty fast! -my $base_cmd = "nm pokefirered.elf | awk '{print \$3}' | grep '^[^_].\\{4\\}' | uniq"; - -# This looks for Unknown_, Unknown_, or sub_, followed by just numbers. Note that -# it matches even if stuff precedes the unknown, like sUnknown/gUnknown. -my $undoc_cmd = "grep '[Uu]nknown_[0-9a-fA-F]*\\|sub_[0-9a-fA-F]*'"; - -# This looks for every symbol with an address at the end of it. Some things are -# given a name based on their type / location, but still have an unknown purpose. -# For example, FooMap_EventScript_FFFFFFF. -my $partial_doc_cmd = "grep '_[0-38][0-9a-fA-F]\\{5,6\\}'"; - -my $count_cmd = "wc -l"; - -# It sucks that we have to run this three times, but I can't figure out how to get -# stdin working for subcommands in perl while still having a timeout. It's decently -# fast anyway. -my $total_syms_as_string; -(run ( - command => "$base_cmd | $count_cmd", - buffer => \$total_syms_as_string, - timeout => 60 -)) - or die "ERROR: Error while getting all symbols: $?"; - -my $undocumented_as_string; -(run ( - command => "$base_cmd | $undoc_cmd | $count_cmd", - buffer => \$undocumented_as_string, - timeout => 60 -)) - or die "ERROR: Error while filtering for undocumented symbols: $?"; - -my $partial_documented_as_string; -(run ( - command => "$base_cmd | $partial_doc_cmd | $count_cmd", - buffer => \$partial_documented_as_string, - timeout => 60 -)) - or die "ERROR: Error while filtering for partial symbols: $?"; - -# Performing addition on a string converts it to a number. Any string that fails -# to convert to a number becomes 0. So if our converted number is 0, but our string -# is nonzero, then the conversion was an error. -my $undocumented = $undocumented_as_string + 0; -(($undocumented != 0) and ($undocumented_as_string ne "0")) - or die "ERROR: Cannot convert string to num: '$undocumented_as_string'"; - -my $partial_documented = $partial_documented_as_string + 0; -(($partial_documented != 0) and ($partial_documented_as_string ne "0")) - or die "ERROR: Cannot convert string to num: '$partial_documented_as_string'"; - -my $total_syms = $total_syms_as_string + 0; -(($total_syms != 0) and ($total_syms_as_string ne "0")) - or die "ERROR: Cannot convert string to num: '$total_syms_as_string'"; - -($total_syms != 0) - or die "ERROR: No symbols found."; - -my $total = $src + $asm; -my $srcPct = sprintf("%.4f", 100 * $src / $total); -my $asmPct = sprintf("%.4f", 100 * $asm / $total); - -# partial_documented is double-counting the unknown_* and sub_* symbols. -$partial_documented = $partial_documented - $undocumented; - -my $documented = $total_syms - ($undocumented + $partial_documented); -my $docPct = sprintf("%.4f", 100 * $documented / $total_syms); -my $partialPct = sprintf("%.4f", 100 * $partial_documented / $total_syms); -my $undocPct = sprintf("%.4f", 100 * $undocumented / $total_syms); - -if ($asm == 0) -{ - print "Code decompilation is 100% complete\n" -} -else -{ - print "$total total bytes of code\n"; - print "$src bytes of code in src ($srcPct%)\n"; - print "$asm bytes of code in asm ($asmPct%)\n"; -} -print "\n"; - -if ($verbose != 0) -{ - print "BREAKDOWN\n"; - foreach my $item (@sorted) - { - print " $item->[1] bytes in asm/$item->[0].s\n" - } - print "\n"; -} - -if ($partial_documented == 0 && $undocumented == 0) -{ - print "Documentation is 100% complete\n" -} -else -{ - print "$total_syms total symbols\n"; - print "$documented symbols documented ($docPct%)\n"; - print "$partial_documented symbols partially documented ($partialPct%)\n"; - print "$undocumented symbols undocumented ($undocPct%)\n"; -} -print "\n"; - -my $dataTotal = $srcdata + $data; -my $srcDataPct = sprintf("%.4f", 100 * $srcdata / $dataTotal); -my $dataPct = sprintf("%.4f", 100 * $data / $dataTotal); -print "$dataTotal total bytes of data\n"; -print "$srcdata bytes of data in src ($srcDataPct%)\n"; -print "$data bytes of data in data ($dataPct%)\n"; 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) { |