X-Git-Url: https://harrygodden.com/git/?p=vg.git;a=blobdiff_plain;f=vg_compiler.sh;h=33d80575df8953dfb5110d137cd20109c513409c;hp=bea6ebf0c1ee44abaa150952979ce03e732dbe32;hb=HEAD;hpb=a153af7a16d9d4f81e9ebe4cfb2c99a028755189 diff --git a/vg_compiler.sh b/vg_compiler.sh deleted file mode 100755 index bea6ebf..0000000 --- a/vg_compiler.sh +++ /dev/null @@ -1,364 +0,0 @@ -#!/bin/bash -# Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved - -vg_root=`readlink $0` -vg_root=`dirname $vg_root` -vg_version="0.2" - -opt_assets=false -opt_release=false -opt_play=false -opt_linux=false -opt_windows=false -opt_tools=false -opt_recompile_mini_audio=false -opt_steam="" - -target_platform_include="" -target_standard="-std=c99" -target_link_steam=false - -# Util -# =========================================== -error(){ - echo -e "\033[1;31mError:\e[0m $@" - exit 1 -} - -warning(){ - echo -e "\033[1;33mWarning:\e[0m $@" -} - -success(){ - echo -e "\033[1;32mSuccess:\e[0m $@" -} - -logit(){ - echo -e "\033[0;37m$@\e[0m" -} - -titleit(){ - echo "" - echo -e "\033[1;35m$@\e[0m" - echo "==========================" - echo "" -} - -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="-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" - else - target_opts="-ggdb3" - fi -} - -target_os_linux(){ - target_ext="" - target_compiler="gcc" - 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="-O3" - 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 - -c $sources - $output" - - logit " $cmd" - $cmd - - checkfatal - success "$2 built" -} - -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="" - if [ "$opt_steam" != "" ]; then - steam_part="$opt_steam $target_libs_steam" - fi - - warnings="-Wall -Wstrict-aliasing=3 -Wno-unused-function" - 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 - success "$2$target_ext built" -} - -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 "" - logit "Setting up build structure" - - # Setup build folder - mkdir $target_dir/cfg -p - mkdir $target_dir/textures -p - mkdir $target_dir/sound -p - mkdir $target_dir/maps -p - mkdir $target_dir/sav -p - - # Copy libraries - 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(){ - # These should only be compiled for native platform - titleit "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 - - opt_steam=$steam_prev -} - -compile_assets(){ - titleit "Assets" - [[ -d .temp_textures ]] && rm -r .temp_textures - mkdir .temp_textures - - # Convert all png to qoi - echo "Compile textures:" - for f in textures/*.png; - do logit " qoi: $f"; - $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 .. - - # 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 -} - -# ============================================================== -# Compile process - -options=rptlwa -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 - error "getopt failed" - exit 1 -fi - -eval set -- "$parsed" -while true; do - case "$1" in - -a|--assets) - opt_assets=true - shift; - ;; - -r|--release) - opt_release=true - shift; - ;; - -p|--play) - opt_play=true - shift; - ;; - -l|--build-linux) - opt_linux=true - shift; - ;; - -w|--build-windows) - opt_windows=true - shift; - ;; - -t|--build-tools) - opt_tools=true - shift; - ;; - --full) - opt_assets=true - opt_release=true - opt_linux=true - opt_windows=true - opt_tools=true - opt_steam="-DVG_STEAM" - opt_recompile_mini_audio=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; - ;; - --) - shift - break - ;; - *) - error "programming error" - break - ;; - 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 " play: $opt_play" -logit " build-linux: $opt_linux" -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 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 - target_os_windows - compile_main - - 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 - target_os_linux - else - target_os_windows - fi - - echo "" - logit "======= exec: $target_dir/$vg_target$target_ext =======" - echo "" - - cd $target_dir - ./$vg_target$target_ext - cd ./../ - -fi