2 # Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved
5 vg_root
=`dirname $vg_root`
15 opt_recompile_mini_audio
=false
20 # ===========================================
22 echo -e "\033[1;31mError:\e[0m $@"
27 echo -e "\033[1;33mWarning:\e[0m $@"
31 echo -e "\033[1;32mSuccess:\e[0m $@"
35 echo -e "\033[0;37m$@\e[0m"
40 echo -e "\033[1;35m$@\e[0m"
41 echo "=========================="
47 error
"compiler signaled fail"
52 if [[ -f vg.conf
]]; then
55 error
"Directory is not a VG project"
60 # ===========================================
64 target_compiler
="i686-w64-mingw32-gcc"
65 target_libs
="-lglfw3 -lopengl32 -lm -mwindows"
66 target_dir
="build.win32"
67 target_steam_api
="steam_api.dll"
68 target_miniaudio
="$vg_root/dep/dr_soft/miniaudio_win32.o"
69 if [ $opt_release = true
]; then
79 target_libs
="-lGL -lglfw -lX11 -lXxf86vm -lXrandr -lm -lpthread -lXi -ldl -lsteam_api"
80 target_dir
="build.linux"
81 target_steam_api
="libsteam_api.so"
82 target_miniaudio
="$vg_root/dep/dr_soft/miniaudio_linux.o"
83 if [ $opt_release = true
]; then
86 target_opts
="-fsanitize=address -ggdb3"
91 cmd
="$target_compiler -O3 -Wall -c $1 -o $2.o"
101 paths
="-I. -L$vg_root/dep/glfw -L$vg_root/dep/steam -I$vg_root/dep -I$vg_root/src"
102 setup
="$target_compiler $opt_gcc -Wall -Wstrict-aliasing=3 -Wno-unused-function $paths"
103 targets
="$1 $vg_root/dep/glad/glad.c $target_miniaudio -o $2$target_ext"
104 final
="$target_libs -Wl,-rpath=./ $opt_steam"
105 cmd
="$setup $target_opts $targets $final"
111 success
"$2$target_ext built"
115 titleit
"Main build: $target_dir"
118 compile_x
$vg_src $target_dir/$vg_target
120 logit
"Setting up build structure"
123 mkdir
$target_dir/cfg
-p
124 mkdir
$target_dir/textures
-p
125 mkdir
$target_dir/sound
-p
126 mkdir
$target_dir/maps
-p
127 mkdir
$target_dir/sav
-p
130 if [ "$opt_steam" != "" ]; then
131 cp $vg_root/dep
/steam
/$target_steam_api $target_dir/$target_steam_api
134 # Clear and copy assets
135 rm -r $target_dir/textures
136 rm -r $target_dir/sound
137 rm -r $target_dir/maps
139 cp -r .temp_textures
$target_dir
140 mv $target_dir/.temp_textures
$target_dir/textures
141 cp -r sound
$target_dir
142 cp -r maps
$target_dir
146 # These should only be compiled for native platform
149 mkdir
$vg_root/bin
-p
151 compile_x
$vg_root/src
/fontcomp.c
$vg_root/bin
/fontcomp
152 compile_x
$vg_root/src
/texsheet.c
$vg_root/bin
/texsheet
153 compile_x
$vg_root/src
/qoiconv.c
$vg_root/bin
/qoiconv
158 [[ -d .temp_textures
]] && rm -r .temp_textures
161 # Convert all png to qoi
162 echo "Compile textures:"
163 for f
in textures
/*.png
;
165 $vg_root/bin
/qoiconv
$target_ext $f .temp_textures
/"$(basename "$f" .png).qoi"
168 # Autocombine textures
174 do logit
" combine: $f";
175 auto_combine
="$auto_combine $f"
177 $vg_root/bin
/texsheet
$taget_ext ..
/.temp_textures
/autocombine.qoi ..
/sprites_autocombine.h sprites_auto_combine
$auto_combine
182 echo "Compile fonts:"
183 $vg_root/bin
/fontcomp
$target_ext $vg_root/src
/fonts
/vg_font.png
$vg_root/src
/vg
/vg_pxfont.h
186 recompile_miniaudio
(){
188 precompile_x
$vg_root/dep
/dr_soft
/miniaudio_impl.c
$vg_root/dep
/dr_soft
/miniaudio_win32
191 precompile_x
$vg_root/dep
/dr_soft
/miniaudio_impl.c
$vg_root/dep
/dr_soft
/miniaudio_linux
194 # ==============================================================
199 longopts
=release
,build-linux
,build-windows
,steam
,play
,build-tools
,assets
,full
,miniaudio
200 parsed
=$
(getopt
--options=$options --longoptions=$longopts --name "vgc" -- "$@")
202 if [ $?
-ne 0 ]; then
203 error
"getopt failed"
207 eval set -- "$parsed"
249 opt_recompile_mini_audio
=true
253 opt_steam
="-DVG_STEAM"
261 error
"programming error"
268 if [[ "$OSTYPE" != "linux-gnu"* ]]; then
279 if [ ! -f $vg_root/dep
/dr_soft
/miniaudio_linux.o
]; then opt_recompile_mini_audio
=true
; fi
281 titleit
" vgc ver: $vg_version\n host: $host_os"
282 logit
" assets: $opt_assets"
283 logit
" release: $opt_release"
284 logit
" play: $opt_play"
285 logit
" build-linux: $opt_linux"
286 logit
"build-windows: $opt_windows"
287 logit
" build-tools: $opt_tools"
288 logit
" steam: $opt_steam"
289 logit
" miniaudio: $opt_recompile_mini_audio"
293 if [ $opt_recompile_mini_audio = true
]; then recompile_miniaudio
; fi
294 if [ $opt_tools = true
]; then detect_os
; compile_tools
; fi
295 if [ $opt_assets = true
]; then compile_assets
; fi
296 if [ $opt_linux = true
]; then target_os_linux
; compile_main
; fi
297 if [ $opt_windows = true
]; then
301 cp $vg_root/dep
/glfw
/glfw3.dll
$target_dir/glfw3.dll
304 if [ $opt_play = true
]; then
306 if [ $host_os = linux
]; then
313 logit
"======= exec: $target_dir/$vg_target$target_ext ======="
317 .
/$vg_target$target_ext