#!/bin/bash # Requires: # sudo apt install gcc-arm-linux-gnueabihf gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu set -e set -u cd "${0%/*}" declare -ar FLAGS=( '-std=c89' '-pedantic' '-Wall' '-Werror' '-Werror=implicit-fallthrough' '-Werror=strict-prototypes' '-Wsign-compare' '-Wsign-conversion' '-Wunused-parameter' '-Wuninitialized' '-Os' '-fomit-frame-pointer' ) # __aeabi_uidiv __gnu_thumb1_case_uhi __gnu_thumb1_case_uqi # t=armv6-m #2820 1 2 2 # t=armv6s-m #2820 1 2 2 # t=armv7 #2868 1 0 0 t=armv7-m #2876 0 0 0 # t=armv7e-m #2880 0 0 0 # t=armv8-m.base #2760 0 2 2 # t=armv8-m.main #2868 0 0 0 # t=armv8.1-m.main #2924 0 0 0 arm-linux-gnueabi-gcc -march="${t}" "${FLAGS[@]}" apf_interpreter.c -c -o apf_interpreter.armt.o # This dumps external calls: # 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]+)$' || : arm-linux-gnueabi-gcc "${FLAGS[@]}" apf_interpreter.c -c -o apf_interpreter.arm.o aarch64-linux-gnu-gcc "${FLAGS[@]}" apf_interpreter.c -c -o apf_interpreter.aarch64.o clang -m32 "${FLAGS[@]}" -Wnullable-to-nonnull-conversion -Wthread-safety apf_interpreter.c -c -o apf_interpreter.x86.o clang -m64 "${FLAGS[@]}" -Wnullable-to-nonnull-conversion -Wthread-safety apf_interpreter.c -c -o apf_interpreter.x86-64.o size apf_interpreter.armt.o size apf_interpreter.arm.o | tail -n +2 size apf_interpreter.aarch64.o | tail -n +2 size apf_interpreter.x86.o | tail -n +2 size apf_interpreter.x86-64.o | tail -n +2