X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=build.sh;h=9eb56fad4ba8f05fbfd2220ac84733caf79a28ed;hb=3363633178b1eea582304742ad1202487af0feb1;hp=c22ad791c750c60902445519645bcefc33ac33f0;hpb=b68e3832a078dc6a4a3c8c4670632148c8288bf8;p=fishladder.git diff --git a/build.sh b/build.sh index c22ad79..9eb56fa 100755 --- a/build.sh +++ b/build.sh @@ -1,45 +1,207 @@ # Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved -src="fishladder.c" -target="fishladder" -lib="-I. -L./lib -L./" -libs="-lGL -lglfw -lX11 -lXxf86vm -lXrandr -lm -lpthread -lXi -ldl" # -l:steam/libsteam_api.so" -flags="-fsanitize=address -ggdb3 -Wno-unused-function -DNO_STEAM" +cmd_lib_dir="-I. -L./lib -L./" +cmd_release=false +cmd_defines="" +cmd_target="fishladder" + +# Util +# =========================================== +error(){ + echo -e "\033[1;31mError:\e[0m $@" + exit 1 +} + +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 + + # Autocombine textures + echo " [combine]:" + + auto_combine="" + cd textures_combine + for f in *.png; + do logit " combine: $f"; + auto_combine="$auto_combine $f" + done + ../tools/texsheet$taget_ext ../.temp_textures/autocombine.qoi ../sprites_autocombine.h sprites_auto_combine $auto_combine + cd .. + + # Compile font file + echo "" + echo "Compile fonts:" + ./tools/fontcomp$target_ext fonts/vg_font.png vg/vg_pxfont.h +} + +# ============================================================== +# Compile process if [[ "$OSTYPE" != "linux-gnu"* ]]; then - echo "Operating system is not GNU/Linux, windows will be assumed." - target="fishladder.exe" - libs="-lglfw3 -lopengl32 -lm -mwindows" - flags="-ggdb3 -Wno-unused-function -DNO_STEAM" + echo "Host: Microsoft Windows (implied)" + host_is_linux=false + target_os_windows +else + echo "Host: GNU/Linux" + host_is_linux=true + target_os_linux fi -run_after=false -do_build=true -compile_tools=false -compile_models=false - +# Main compile loop while (( "$#" )); do case $1 in -r|--release) - flags="-O3 -Wno-unused-function -DNO_STEAM" - echo "Release mode" - ;; - -p|--play) - run_after=true - echo "& Run" + cmd_release=true + echo " + Release Mode" ;; - -n|--nobuild) - do_build=false - echo "no-build" + -s|--no-steam) + cmd_defines="-DVG_NO_STEAM" + echo " + Disable steam" ;; -t|--tools) - compile_tools=true - echo "build-tools" - ;; - -m|--models) - compile_models=true - echo "build-models" + compile_tools ;; + -a|-assets) + compile_assets + ;; + --build-linux) + target_os_linux + compile_main + ;; + --build-windows) + target_os_windows + compile_main + + # Extra glfw.dll copy step + cp glfw/glfw3.dll $target_dir/glfw3.dll + ;; + -p|--play) + if [ $host_is_linux ]; then + target_os_linux + else + target_os_windows + fi + + echo "" + logit "======= exec: $target_dir/$cmd_target$target_ext =======" + echo "" + + cd $target_dir + ./$cmd_target + cd ./../ + ;; *) echo "Unkown param: $1" exit 1 @@ -48,85 +210,5 @@ while (( "$#" )); do shift done -# Tools -if [ "$compile_tools" = true ]; then - echo "Building tools" - mkdir tools -p - gcc -Wall -Wstrict-aliasing=3 $lib $flags mdlcomp.c gl/glad.c -o tools/mdlcomp $libs -Wl,-rpath=./ $defines - gcc -Wall -Wstrict-aliasing=3 $lib $flags fontcomp.c gl/glad.c -o tools/fontcomp $libs -Wl,-rpath=./ $defines - gcc $lib qoiconv.c -std=c99 -O3 -o tools/qoiconv -fi - -# Resources -if [ "$compile_models" = true ]; then - echo "Recompiling models" - for f in models/*.obj; - do echo "Compiling $f.."; - ./tools/mdlcomp $f $f.h - done -fi - -# Convert all png to qoi -echo "Compiling textures" -mkdir _temp_textures -for f in textures/*.png; - do echo "-> qoi: $f"; - ./tools/qoiconv $f ./_temp_textures/"$(basename "$f" .png).qoi" -done - -# Main build -if [ "$do_build" = true ]; then - gcc -Wall -Wstrict-aliasing=3 $lib $flags $src gl/glad.c -o $target $libs -Wl,-rpath=./ $defines - - if [ $? -ne 0 ]; then - echo "GCC build failed" - exit 1 - fi - - echo "Build succeeded" -fi - -if [[ "$OSTYPE" == "linux-gnu"* ]]; then - # Directories to initialize - mkdir build.linux/cfg -p - mkdir build.linux/textures -p - mkdir build.linux/sound -p - mkdir build.linux/maps -p - mkdir build.linux/sav -p - - cp $target ./build.linux/$target - cp ./steam/libsteam_api.so ./build.linux/libsteam_api.so - rm -r ./build.linux/textures - mv ./_temp_textures/ ./build.linux/textures - cp -r ./sound/ ./build.linux/ - cp -r ./maps/ ./build.linux/ - - if [ "$run_after" = true ]; then - echo "Playing" - - cd ./build.linux/ - ./$target - cd ./../ - fi -else - mkdir build.win32/cfg -p - mkdir build.win32/textures -p - mkdir build.win32/sound -p - mkdir build.win32/maps -p - mkdir build.win32/sav -p - - cp $target ./build.win32/$target - rm -r ./build.win32/textures - mv ./_temp_textures/ ./build.win32/textures - cp -r ./sound/ ./build.win32/ - cp -r ./maps/ ./build.win32/ - cp ./lib/glfw3.dll ./build.win32/glfw3.dll - - if [ "$run_after" = true ]; then - echo "Playing" - - cd ./build.win32/ - ./$target - cd ./../ - fi -fi +# Cleanup +logit "cleaning up..."