+warning(){
+ echo -e "\033[1;33mWarning:\e[0m $@"
+}
+
+success(){
+ echo -e "\033[1;32mSuccess:\e[0m $@"
+}
+
+logit(){
+ echo -e "\033[0;37m$@\e[0m"
+}
+
+# Platforms
+# ===========================================
+
+target_os_windows(){
+ target_ext=".exe"
+ target_compiler="i686-w64-mingw32-gcc"
+ target_libs="-lglfw3 -lopengl32 -lm -mwindows"
+ target_dir="build.win32"
+ target_steam_api="steam_api.dll"
+ if [ $cmd_release = true ]; then
+ target_opts="-O3"
+ else
+ target_opts="-ggdb3"
+ fi
+}
+
+target_os_linux(){
+ target_ext=""
+ target_compiler="gcc"
+ target_libs="-lGL -lglfw -lX11 -lXxf86vm -lXrandr -lm -lpthread -lXi -ldl"
+ target_dir="build.linux"
+ target_steam_api="libsteam_api.so"
+ if [ $cmd_release = true ]; then
+ target_opts="-O3"
+ else
+ target_opts="-fsanitize=address -ggdb3"
+ fi
+}
+
+compile_x(){
+ cmd_setup="$target_compiler -Wall -Wstrict-aliasing=3 -Wno-unused-function $cmd_lib_dir"
+ cmd_targets="$1 gl/glad.c -o $2$target_ext"
+ cmd_final="$target_libs -Wl,-rpath=./ $cmd_defines"
+ cmd="$cmd_setup $target_opts $cmd_targets $cmd_final"
+
+ echo "Compile -> $2$target_ext:"
+ logit " $cmd"
+ $cmd
+
+ if [ $? -ne 0 ]; then
+ error "compiler signaled fail"
+ exit 1
+ fi
+
+ success "$2$target_ext built"
+ echo ""
+}
+
+compile_main(){
+ echo ""
+ echo "compile_main()"
+ mkdir -p $target_dir
+
+ compile_x fishladder.c $target_dir/$cmd_target
+
+ echo "Setting up build structure"
+
+ # Setup build folder
+ mkdir $target_dir/cfg -p
+ mkdir $target_dir/textures -p
+ mkdir $target_dir/sound -p
+ mkdir $target_dir/maps -p
+ mkdir $target_dir/sav -p
+
+ # Copy libraries
+ cp steam/$target_steam_api $target_dir/$target_steam_api
+
+ # Clear and copy assets
+ rm -r $target_dir/textures
+ rm -r $target_dir/sound
+ rm -r $target_dir/maps
+
+ cp -r .temp_textures $target_dir
+ mv $target_dir/.temp_textures $target_dir/textures
+ cp -r sound $target_dir
+ cp -r maps $target_dir
+
+ success "Build made: $target_dir"
+}
+
+compile_tools(){
+ # These should only be compiled for native platform
+ echo ""
+ echo "compile_tools()"
+ mkdir tools -p
+
+ compile_x fontcomp.c tools/fontcomp
+ compile_x texsheet.c tools/texsheet
+ compile_x qoiconv.c tools/qoiconv
+}
+
+compile_assets(){
+ echo ""
+ echo "compile_assets()"
+ [[ -d .temp_textures ]] && rm -r .temp_textures
+ mkdir .temp_textures
+
+ # Convert all png to qoi
+ echo "Compile textures:"
+ for f in textures/*.png;
+ do logit " qoi: $f";
+ ./tools/qoiconv$target_ext $f .temp_textures/"$(basename "$f" .png).qoi"
+ done