1#!/bin/bash 2# Requires: 3# sudo apt install gcc-arm-linux-gnueabihf gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu 4 5set -e 6set -u 7 8cd "${0%/*}" 9 10declare -ar FLAGS=( 11 '-std=c89' 12 '-pedantic' 13 '-Wall' 14 '-Werror' 15 '-Werror=implicit-fallthrough' 16 '-Werror=strict-prototypes' 17 '-Wsign-compare' 18 '-Wsign-conversion' 19 '-Wunused-parameter' 20 '-Wuninitialized' 21 '-Os' 22 '-fomit-frame-pointer' 23) 24 25# __aeabi_uidiv __gnu_thumb1_case_uhi __gnu_thumb1_case_uqi 26# t=armv6-m #2820 1 2 2 27# t=armv6s-m #2820 1 2 2 28# t=armv7 #2868 1 0 0 29 t=armv7-m #2876 0 0 0 30# t=armv7e-m #2880 0 0 0 31# t=armv8-m.base #2760 0 2 2 32# t=armv8-m.main #2868 0 0 0 33# t=armv8.1-m.main #2924 0 0 0 34arm-linux-gnueabi-gcc -march="${t}" "${FLAGS[@]}" apf_interpreter.c -c -o apf_interpreter.armt.o 35# This dumps external calls: 36# llvm-objdump -d -r apf_interpreter.armt.o | grep -E --color=yes -A1 'f7ff fffe' | grep -E R_ARM_THM_CALL | grep -Ev $'\t(memcmp|memcpy|memset|apf_allocate_buffer|apf_transmit_buffer|apf_internal_[_a-z]+)$' || : 37 38arm-linux-gnueabi-gcc "${FLAGS[@]}" apf_interpreter.c -c -o apf_interpreter.arm.o 39aarch64-linux-gnu-gcc "${FLAGS[@]}" apf_interpreter.c -c -o apf_interpreter.aarch64.o 40clang -m32 "${FLAGS[@]}" -Wnullable-to-nonnull-conversion -Wthread-safety apf_interpreter.c -c -o apf_interpreter.x86.o 41clang -m64 "${FLAGS[@]}" -Wnullable-to-nonnull-conversion -Wthread-safety apf_interpreter.c -c -o apf_interpreter.x86-64.o 42 43size apf_interpreter.armt.o 44size apf_interpreter.arm.o | tail -n +2 45size apf_interpreter.aarch64.o | tail -n +2 46size apf_interpreter.x86.o | tail -n +2 47size apf_interpreter.x86-64.o | tail -n +2 48