#!/usr/bin/env bash if [ -z "$CXX" ]; then CXX="c++" fi if [ -z "$CXXFLAGS" ]; then CXXFLAGS="-std=c++20 -Wall" fi CXX_WITH_FLAGS="$CXX $CXXFLAGS" # `.cpp` files in src/lib will be automatically picked up and compiled into # dynamically linked libraries. echo "Building libs..." mkdir -pv bin/lib for lib in $(find ./src/lib -name "*.cpp"); do COMPILE_COMMAND="$CXX_WITH_FLAGS -fPIC -shared -o $(sed -e 's/^.\/src/.\/bin/;s/cpp$/so/' <<< $lib) $lib" echo $COMPILE_COMMAND $COMPILE_COMMAND & done wait # Commands for every program need to be given individually because we can't # just add all shared libraries to all programs. # Or can we? Idk, cba to find out. # How to build a tool: Tell the compiler where to find shared libraries and # which libraries to use. # Example: shared libraries are in bin/lib => -Lbin/lib # one of the libraries in that directory is nbt.so => use with -l:nbt.so # How to run a tool: specify the library path to use for the dynamic linker # when running a program # Example: LD_LIBRARY_PATH=bin/lib bin/tools/dumpnbt echo "Building tools..." mkdir -pv bin/tools # add compile commands to this array COMPILE_COMMANDS=( "$CXX_WITH_FLAGS src/tools/dumpnbt.cpp -Lbin/lib -l:nbt.so -o bin/tools/dumpnbt" ) for command in ${!COMPILE_COMMANDS[@]}; do echo "${COMPILE_COMMANDS[command]}" ${COMPILE_COMMANDS[command]} & done wait