#!/bin/bash list="x86_64-linux-gnu-gcc x86-linux-gnu-gcc arm-linux-gnueabi-gcc aarch64-linux-gnu-gcc \ sparc64-linux-gnu-gcc mips-linux-gnu-gcc powerpc-linux-gnu-gcc x86_64-macos-darwin-gcc \ arm64-macos-darwin-cc x86_64-freebsd-gnu-gcc x86_64-solaris-gnu-gcc armv6-linux-gnueabi-gcc \ armv5-linux-gnueabi-gcc" declare -A alias=( [x86-linux-gnu-gcc]=i686-stretch-linux-gnu-gcc \ [x86_64-linux-gnu-gcc]=x86_64-stretch-linux-gnu-gcc \ [arm-linux-gnueabi-gcc]=armv7-stretch-linux-gnueabi-gcc \ [armv5-linux-gnueabi-gcc]=armv6-stretch-linux-gnueabi-gcc \ [armv6-linux-gnueabi-gcc]=armv6-stretch-linux-gnueabi-gcc \ [aarch64-linux-gnu-gcc]=aarch64-stretch-linux-gnu-gcc \ [sparc64-linux-gnu-gcc]=sparc64-stretch-linux-gnu-gcc \ [mips-linux-gnu-gcc]=mips64-stretch-linux-gnu-gcc \ [powerpc-linux-gnu-gcc]=powerpc64-stretch-linux-gnu-gcc \ [x86_64-macos-darwin-gcc]=x86_64-apple-darwin19-gcc \ [arm64-macos-darwin-cc]=arm64-apple-darwin20.4-cc \ [x86_64-freebsd-gnu-gcc]=x86_64-cross-freebsd12.3-gcc \ [x86_64-solaris-gnu-gcc]=x86_64-cross-solaris2.x-gcc ) declare -A cflags=( [sparc64-linux-gnu-gcc]="-mcpu=v7" \ [mips-linux-gnu-gcc]="-march=mips32" \ [armv5-linux-gnueabi-gcc]="-march=armv5t -mfloat-abi=soft" \ [powerpc-linux-gnu-gcc]="-m32" ) declare -a compilers IFS= read -ra candidates <<< "$list" # do we have "clean" somewhere in parameters (assuming no compiler has "clean" in it... if [[ $@[*]} =~ clean ]]; then clean="clean" fi # first select platforms/compilers for cc in ${candidates[@]}; do # check compiler first if ! command -v ${alias[$cc]:-$cc} &> /dev/null; then if command -v $cc &> /dev/null; then unset alias[$cc] else continue fi fi if [[ $# == 0 || ($# == 1 && -n $clean) ]]; then compilers+=($cc) continue fi for arg in $@ do if [[ $cc =~ $arg ]]; then compilers+=($cc) fi done done # then do the work for cc in ${compilers[@]} do IFS=- read -r platform host package dummy <<< $cc export CFLAGS=${cflags[$cc]} CC=${alias[$cc]:-$cc} make AR=${CC%-*}-ar CC=$CC PLATFORM=$platform HOST=$host $clean -j8 if [[ -n $clean ]]; then continue fi done