opt_windows=false
opt_tools=false
opt_full=false
+opt_recompile_mini_audio=false
+opt_gcc=""
opt_steam=""
# Util
echo ""
}
-if [[ -f vg.conf ]]; then
- source vg.conf
-else
- error "Directory is not a VG project"
- exit 1
-fi
+checkfatal(){
+ if [ $? -ne 0 ]; then
+ error "compiler signaled fail"
+ exit 1
+ fi
+}
# Platforms
# ===========================================
target_os_windows(){
target_ext=".exe"
target_compiler="i686-w64-mingw32-gcc"
- target_libs="-lglfw3 -lopengl32 -lm -mwindows"
+ target_libs="-lglfw3 -lopengl32 -lm -mwindows $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"
if [ $opt_release = true ]; then
target_opts="-O3"
else
target_os_linux(){
target_ext=""
target_compiler="gcc"
- target_libs="-lGL -lglfw -lX11 -lXxf86vm -lXrandr -lm -lpthread -lXi -ldl"
+ target_libs="-lGL -lglfw -lX11 -lXxf86vm -lXrandr -lm -lpthread -lXi -ldl -static-libgcc"
+
+ if [ "$opt_steam" != "" ]; then
+ target_libs="$target_libs -lsteam_api"
+ fi
+
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="-O3"
else
- target_opts="-fsanitize=address -ggdb3"
+ 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"
+
+ logit " $cmd"
+ $cmd
+
+ checkfatal
+ success "$2.o built"
+}
+
compile_x(){
- paths="-I. -L$vg_root/dep/glfw -I$vg_root/dep -I$vg_root/src"
- setup="$target_compiler -Wall -Wstrict-aliasing=3 -Wno-unused-function $paths"
- targets="$1 $vg_root/dep/glad/glad.c -o $2$target_ext"
+ 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"
logit " $cmd"
$cmd
- if [ $? -ne 0 ]; then
- error "compiler signaled fail"
- exit 1
- fi
-
+ checkfatal
success "$2$target_ext built"
}
$vg_root/bin/fontcomp$target_ext $vg_root/src/fonts/vg_font.png $vg_root/src/vg/vg_pxfont.h
}
+recompile_miniaudio(){
+ precompile_x $vg_root/dep/dr_soft/miniaudio_impl.c $target_miniaudio
+}
+
# ==============================================================
# Compile process
-if [[ "$OSTYPE" != "linux-gnu"* ]]; then
- host_os=win32
- target_os_windows
-else
- host_os=linux
- target_os_linux
-fi
-options=rptlwa
-longopts=release,build-linux,build-windows,steam,play,build-tools,assets,full
+options=rptlwaq
+longopts=release,build-linux,build-windows,steam,play,build-tools,assets,full,miniaudio,template
parsed=$(getopt --options=$options --longoptions=$longopts --name "vgc" -- "$@")
if [ $? -ne 0 ]; then
eval set -- "$parsed"
while true; do
case "$1" in
+ -q)
+ opt_gcc=""
+ shift;
+ ;;
-a|--assets)
opt_assets=true
shift;
opt_tools=true
shift;
;;
+ --miniaudio)
+ opt_recompile_mini_audio=true
+ shift;
+ ;;
--steam)
opt_steam="-DVG_STEAM"
+ shift;
+ ;;
+ --template)
+
+ if [ -f "main.c" ]; then error "main.c already exists";
+ elif [ -f "vg_config.h" ]; then error "vg_config.h already exists";
+ elif [ -f "vg.conf" ]; then error "vg.conf already exists";
+ else
+ cp $vg_root/src/template/main.c main.c
+ cp $vg_root/src/template/vg_config.h vg_config.h
+ cp $vg_root/src/template/vg.conf vg.conf
+ fi
+
shift;
;;
--)
esac
done
+if [[ -f vg.conf ]]; then
+ source vg.conf
+else
+ error "Directory is not a VG project"
+ exit 1
+fi
+
+detect_os(){
+ if [[ "$OSTYPE" != "linux-gnu"* ]]; then
+ host_os=win32
+ target_os_windows
+ else
+ host_os=linux
+ target_os_linux
+ fi
+}
+
+detect_os
+
titleit " vgc ver: $vg_version\n host: $host_os"
logit " assets: $opt_assets"
logit " release: $opt_release"
logit "build-windows: $opt_windows"
logit " build-tools: $opt_tools"
logit " steam: $opt_steam"
+logit " miniaudio: $opt_recompile_mini_audio"
# Main build steps
-if [ $opt_tools = true ]; then compile_tools; fi
+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_linux = true ]; then target_os_linux; compile_main; fi
if [ $opt_windows = true ]; then