simplify gitignore
[vg.git] / vg_compiler.sh
index 899a04a641f72e10a3d85247f9ed7d372f13d6b3..33d80575df8953dfb5110d137cd20109c513409c 100755 (executable)
@@ -6,6 +6,7 @@ vg_root=`dirname $vg_root`
 vg_version="0.2"
 
 opt_assets=false
+opt_shaders=false
 opt_release=false
 opt_play=false
 opt_linux=false
@@ -17,6 +18,7 @@ opt_steam=""
 target_platform_include=""
 target_standard="-std=c99"
 target_link_steam=false
+target_shaders=""
 
 # Util
 # ===========================================
@@ -57,7 +59,7 @@ checkfatal(){
 target_os_windows(){
    target_ext=".exe"
    target_compiler="i686-w64-mingw32-gcc"
-       target_libs="-lglfw3 -lopengl32 -lm -mwindows"
+       target_libs="-lglfw3dll -lopengl32 -lm -mwindows"
    target_libs_steam="$vg_root/dep/steam/steam_api.dll"
    target_dir="build.win32"
        target_steam_api="steam_api.dll"
@@ -65,7 +67,7 @@ target_os_windows(){
    target_platform_include=""
 
    if [ $opt_release = true ]; then
-      target_opts="-O3"
+      target_opts="-O3 -DVG_RELEASE"
    else
       target_opts="-ggdb3"
    fi
@@ -74,7 +76,7 @@ target_os_windows(){
 target_os_linux(){
    target_ext=""
    target_compiler="gcc"
-   target_libs="-lGL -lglfw -lX11 -lXxf86vm -lXrandr -lm -pthread -lXi -ldl"
+   target_libs="-lGL -lglfw3 -lX11 -lXxf86vm -lXrandr -lm -pthread -lXi -ldl"
    target_libs_steam="-lsteam_api"
    #target_platform_include="-include $vg_root/platformutils/force_link_glibc_2.23.h"
    target_platform_include=""
@@ -82,16 +84,20 @@ target_os_linux(){
    target_steam_api="libsteam_api.so"
    target_miniaudio="$vg_root/dep/dr_soft/miniaudio_linux.o"
    if [ $opt_release = true ]; then
-      target_opts="-O3"
+      target_opts="-O3 -DVG_RELEASE"
    else
       target_opts="-O0 -fsanitize=address -ggdb3 -fno-omit-frame-pointer"
    fi
 }
 
 precompile_x(){
+   if ! [ -x "$(command -v $target_compiler)" ]; then
+      warning "Compiler $target_compiler is not installed. Skipping item"
+      return 0
+   fi
    sources="$1"
    output="-o $2"
-   cmd="$target_compiler -D_REENTRANT $target_standard $target_opts $target_platform_include
+   cmd="$target_compiler $target_standard $target_opts $target_platform_include
         -c $sources
         $output"
 
@@ -103,6 +109,11 @@ precompile_x(){
 }
 
 compile_x(){
+   if ! [ -x "$(command -v $target_compiler)" ]; then
+      warning "Compiler $target_compiler is not installed. Skipping item"
+      return 0
+   fi
+
    include="-I. -I$vg_root/dep -I$vg_root/src"
    libs="-L./ -L$vg_root/dep/glfw -L$vg_root/dep/steam"
 
@@ -111,7 +122,7 @@ compile_x(){
       steam_part="$opt_steam $target_libs_steam"
    fi
 
-   warnings="-Wall -Wstrict-aliasing=3 -Wno-unused-function"
+   warnings="-Wall -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable"
    sources="$1 $vg_root/dep/glad/glad.c $target_miniaudio"
    output="-o $2$target_ext"
 
@@ -154,16 +165,6 @@ compile_main(){
    if [ "$opt_steam" != "" ]; then
       cp $vg_root/dep/steam/$target_steam_api $target_dir/$target_steam_api
    fi
-
-   # 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
 }
 
 compile_tools(){
@@ -178,10 +179,10 @@ compile_tools(){
    compile_x $vg_root/src/fontcomp.c $vg_root/bin/fontcomp
    compile_x $vg_root/src/texsheet.c $vg_root/bin/texsheet
    compile_x $vg_root/src/qoiconv.c $vg_root/bin/qoiconv
+   compile_x $vg_root/src/shader.c $vg_root/bin/shader
 
    opt_steam=$steam_prev
 }
-
 compile_assets(){
    titleit "Assets"
    [[ -d .temp_textures ]] && rm -r .temp_textures
@@ -194,28 +195,54 @@ compile_assets(){
       $vg_root/bin/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
-   $vg_root/bin/texsheet$taget_ext ../.temp_textures/autocombine.qoi ../sprites_autocombine.h sprites_auto_combine $auto_combine
-   cd ..
+   if [[ -d "textures_combine" ]]; then
+      echo "  [combine]:"
+
+      auto_combine=""
+      cd textures_combine
+      for f in *.png;
+         do logit "    combine: $f";
+         auto_combine="$auto_combine $f"
+      done
+      $vg_root/bin/texsheet$target_ext ../.temp_textures/autocombine.qoi ../sprites_autocombine.h sprites_auto_combine $auto_combine
+      cd ..
+   fi
 
    # Compile font file
    echo ""
    echo "Compile fonts:"
    $vg_root/bin/fontcomp$target_ext $vg_root/src/fonts/vg_font.png $vg_root/src/vg/vg_pxfont.h
+
+   # 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
+   cp -r models $target_dir
+}
+
+compile_shaders(){
+   titleit "Shaders"
+
+   if [[ -d "shaders" ]]; then
+      cd shaders
+      $vg_root/bin/shader$target_ext $target_shaders
+      cd ..
+   fi
+}
+
+shader(){
+   target_shaders="$target_shaders $1 $2 $3"
 }
 
 # ==============================================================
 # Compile process
 
-options=rptlwa
+options=rptlwas
 longopts=release,build-linux,build-windows,steam,play,build-tools,assets,full,miniaudio,template
 parsed=$(getopt --options=$options --longoptions=$longopts --name "vgc" -- "$@")
 
@@ -227,8 +254,13 @@ fi
 eval set -- "$parsed"
 while true; do
    case "$1" in
+      -s|--shaders)
+         opt_shaders=true
+         shift;
+         ;;
       -a|--assets)
          opt_assets=true
+         opt_shaders=true
          shift;
          ;;
       -r|--release)
@@ -314,6 +346,7 @@ detect_os
 
 titleit "      vgc ver: $vg_version\n         host: $host_os"
 logit "       assets: $opt_assets"
+logit "      shaders: $opt_shaders"
 logit "      release: $opt_release"
 logit "         play: $opt_play"
 logit "  build-linux: $opt_linux"
@@ -324,6 +357,9 @@ logit "    miniaudio: $opt_recompile_mini_audio"
 
 # Main build steps
 
+if [ $opt_tools = true ]; then detect_os; compile_tools; fi
+if [ $opt_assets = true ]; then compile_assets; fi
+if [ $opt_shaders = true ]; then compile_shaders; fi
 if [ $opt_linux = true ]; then target_os_linux; compile_main; fi
 if [ $opt_windows = true ]; then 
    target_os_windows 
@@ -331,8 +367,8 @@ if [ $opt_windows = true ]; then
 
    cp $vg_root/dep/glfw/glfw3.dll $target_dir/glfw3.dll
 fi
-if [ $opt_tools = true ]; then detect_os; compile_tools; fi
-if [ $opt_assets = true ]; then compile_assets; fi
+
+success "Build completed (check compiler results)"
 
 if [ $opt_play = true ]; then