#!/usr/bin/env bash
set -e
cd "$(dirname "${BASH_SOURCE[0]}")"

CC='cc -g'
CFLAGS='-Wall -fPIC'
BIN_FILE='libsm64.so'
LDFLAGS=''

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 '.PHONY: clean run'
    echo -e "clean:\n\t find . -iname '*.o' | xargs rm && rm -f ./$BIN_FILE"
}

mkdir -p build
print_makefile > Makefile
