run: build
    ./build/main

build: mkdir objects
    gcc build/*.o -o build/main -O3
    du -h build/main

objects: mkdir
    cd build && gcc -c -I ../lib -Wall -Werror -fpic ../src/*.c -O3
    du -h build/*.o

asm: mkdir
    cd build && gcc -S -masm=intel -I ../lib -Wall -Werror -fpic ../src/*.c -O3

release: mkdir build && check-releases
    mkdir release -p
    strip build/main
    cd release && tar -czvf build.tar.gz ../build &> /dev/null
    cd release && 7za a -tzip build.zip ../build -mx=9 &> /dev/null

check-releases:
    sha256sum release/* > release/sha256sums.txt
    tar -tf release/build.tar.gz &>/dev/null # Checking if tar is valid
    7za t release/build.zip &>/dev/null # Checking if zip is valid

mkdir:
    mkdir build -p

clean:
    rm -rf release
    rm -rf build

hex: build
    objdump -M intel -d build/main

symbols: build
    nm build/main

symbols2: build
    readelf -s build/main

rodata: build
    objdump -s -j .rodata build/main

fmt:
    fd -e c -e h -x clang-format --verbose -i {}