vg_version="0.2"
opt_assets=false
+opt_shaders=false
opt_release=false
opt_play=false
opt_linux=false
target_platform_include=""
target_standard="-std=c99"
target_link_steam=false
+target_shaders=""
# Util
# ===========================================
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"
target_platform_include=""
if [ $opt_release = true ]; then
- target_opts="-O3"
+ target_opts="-O3 -DVG_RELEASE"
else
target_opts="-ggdb3"
fi
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=""
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"
}
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"
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"
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(){
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
$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" -- "$@")
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)
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"
# 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
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