X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg_compiler.sh;h=33d80575df8953dfb5110d137cd20109c513409c;hb=3dd767bb10e6fee9cbffeb185d1a9685810c17b5;hp=2573a403abe7d09ae34d9fed0bc86ff0a3bc012e;hpb=95c9a820474d4974ee394f2fcfae82fbfa367dbd;p=vg.git diff --git a/vg_compiler.sh b/vg_compiler.sh index 2573a40..33d8057 100755 --- a/vg_compiler.sh +++ b/vg_compiler.sh @@ -3,19 +3,23 @@ vg_root=`readlink $0` vg_root=`dirname $vg_root` -vg_version="0.1" +vg_version="0.2" opt_assets=false +opt_shaders=false opt_release=false opt_play=false opt_linux=false opt_windows=false opt_tools=false -opt_full=false opt_recompile_mini_audio=false -opt_gcc="" opt_steam="" +target_platform_include="" +target_standard="-std=c99" +target_link_steam=false +target_shaders="" + # Util # =========================================== error(){ @@ -55,12 +59,15 @@ checkfatal(){ target_os_windows(){ target_ext=".exe" target_compiler="i686-w64-mingw32-gcc" - target_libs="-lglfw3 -lopengl32 -lm -mwindows $vg_root/dep/steam/steam_api.dll" + 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_miniaudio="$vg_root/dep/dr_soft/miniaudio_win32.o" + target_platform_include="" + if [ $opt_release = true ]; then - target_opts="-O3" + target_opts="-O3 -DVG_RELEASE" else target_opts="-ggdb3" fi @@ -69,40 +76,66 @@ target_os_windows(){ target_os_linux(){ target_ext="" target_compiler="gcc" - target_libs="-lGL -lglfw -lX11 -lXxf86vm -lXrandr -lm -lpthread -lXi -ldl" - - if [ "$opt_steam" != "" ]; then - target_libs="$target_libs -lsteam_api" - fi - + 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_dir="build.linux" target_steam_api="libsteam_api.so" target_miniaudio="$vg_root/dep/dr_soft/miniaudio_linux.o" if [ $opt_release = true ]; then - target_opts="-O0" + target_opts="-O3 -DVG_RELEASE" else target_opts="-O0 -fsanitize=address -ggdb3 -fno-omit-frame-pointer" fi } precompile_x(){ - cmd="$target_compiler -O3 -Wall -Wstrict-aliasing=3 -c $1 -o $2.o" + 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 $target_standard $target_opts $target_platform_include + -c $sources + $output" logit " $cmd" $cmd checkfatal - success "$2.o built" + success "$2 built" } compile_x(){ - paths="-I. -L./ -L$vg_root/dep/glfw -L$vg_root/dep/steam -I$vg_root/dep -I$vg_root/src" - setup="$target_compiler $opt_gcc -Wall -Wstrict-aliasing=3 -Wno-unused-function $paths" - targets="$1 $vg_root/dep/glad/glad.c $target_miniaudio -o $2$target_ext" - final="$target_libs -Wl,-rpath=./ $opt_steam" - cmd="$setup $target_opts $targets $final" + if ! [ -x "$(command -v $target_compiler)" ]; then + warning "Compiler $target_compiler is not installed. Skipping item" + return 0 + fi - logit " $cmd" + include="-I. -I$vg_root/dep -I$vg_root/src" + libs="-L./ -L$vg_root/dep/glfw -L$vg_root/dep/steam" + + steam_part="" + if [ "$opt_steam" != "" ]; then + steam_part="$opt_steam $target_libs_steam" + fi + + 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" + + cmd="$target_compiler -D_REENTRANT $target_standard $target_opts $target_platform_include + $warnings + $include + $libs + $sources + $output + $target_libs $steam_part + -Wl,-rpath=./" + + logit " $cmd\n" $cmd checkfatal @@ -112,6 +145,10 @@ compile_x(){ compile_main(){ titleit "Main build: $target_dir" mkdir -p $target_dir + + if [ "$opt_recompile_mini_audio" == true ]; then + precompile_x $vg_root/dep/dr_soft/miniaudio_impl.c $target_miniaudio + fi compile_x $vg_src $target_dir/$vg_target echo "" @@ -128,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(){ @@ -146,11 +173,16 @@ compile_tools(){ mkdir $vg_root/bin -p + steam_prev=$opt_steam + opt_steam="" + 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 @@ -163,37 +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 } -recompile_miniaudio(){ - target_os_windows - precompile_x $vg_root/dep/dr_soft/miniaudio_impl.c $vg_root/dep/dr_soft/miniaudio_win32 +compile_shaders(){ + titleit "Shaders" + + if [[ -d "shaders" ]]; then + cd shaders + $vg_root/bin/shader$target_ext $target_shaders + cd .. + fi +} - target_os_linux - precompile_x $vg_root/dep/dr_soft/miniaudio_impl.c $vg_root/dep/dr_soft/miniaudio_linux +shader(){ + target_shaders="$target_shaders $1 $2 $3" } # ============================================================== # Compile process - -options=rptlwaq +options=rptlwas longopts=release,build-linux,build-windows,steam,play,build-tools,assets,full,miniaudio,template parsed=$(getopt --options=$options --longoptions=$longopts --name "vgc" -- "$@") @@ -205,12 +254,13 @@ fi eval set -- "$parsed" while true; do case "$1" in - -q) - opt_gcc="" + -s|--shaders) + opt_shaders=true shift; ;; -a|--assets) opt_assets=true + opt_shaders=true shift; ;; -r|--release) @@ -234,13 +284,13 @@ while true; do shift; ;; --full) - opt_full=true opt_assets=true opt_release=true - opt_play=true opt_linux=true opt_windows=true opt_tools=true + opt_steam="-DVG_STEAM" + opt_recompile_mini_audio=true shift; ;; --miniaudio) @@ -294,10 +344,9 @@ detect_os(){ detect_os -if [ ! -f $vg_root/dep/dr_soft/miniaudio_linux.o ]; then opt_recompile_mini_audio=true; fi - 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" @@ -308,9 +357,9 @@ logit " miniaudio: $opt_recompile_mini_audio" # Main build steps -if [ $opt_recompile_mini_audio = true ]; then recompile_miniaudio; fi 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 @@ -319,6 +368,8 @@ if [ $opt_windows = true ]; then cp $vg_root/dep/glfw/glfw3.dll $target_dir/glfw3.dll fi +success "Build completed (check compiler results)" + if [ $opt_play = true ]; then if [ $host_os = linux ]; then