#!/usr/bin/env bash set -e cd "$(dirname "${BASH_SOURCE[0]}")" CC='cc -g' CFLAGS='-Wall -fPIC' BIN_FILE='libsm64.so' LDFLAGS='' prepare() { git submodule update --init --recursive ./extract-decomp-source.py } c_to_obj() { printf 'build/' echo "$1" | sed 's/cp*$/o/;s:/:_:g' } make_cmd() { local obj_file="$(c_to_obj "$1")" $CC $CFLAGS -MM -MT "$obj_file" -c "$1" echo -e "\t$CC $CFLAGS -o $obj_file -c $1" } file_list() { find src -iname '*.c' } print_makefile() { local all_objs='' for f in $(file_list); do all_objs="$all_objs $(c_to_obj $f)" done echo "$BIN_FILE: $all_objs" echo -e "\t$CC -shared -o $BIN_FILE $all_objs $LDFLAGS" for f in $(file_list); do make_cmd "$f" done echo -e "src/mario/anim_data.inc.c: extract-decomp-source.py\n\t ./extract-decomp-source.py" echo -e "src/mario/geo.inc.c: extract-decomp-source.py\n\t ./extract-decomp-source.py" echo -e "src/mario/model.inc.c: extract-decomp-source.py\n\t ./extract-decomp-source.py" echo '.PHONY: clean run .FORCE' echo -e "clean:\n\t find . -iname '*.o' | xargs rm && rm -f ./$BIN_FILE" } prepare mkdir -p build print_makefile > Makefile