I2I3WERCRM7KAHR477JRZSN5XNXUIAWMDFQK25LV6L7VDZJTTANQC #!/bin/bashBUILD_TYPE=Debugcat << EndOfStringbuilddir = buildinclude_directories = -Itabula/include -Ialias/include -I\$builddir/includedev_cflags =dev_ldflags = -L\$builddir/dev-libdev_cc = gccrule copycommand = cp \$in \$outrule re2ccommand = re2c \$flags -o \$out \$inrule gen_geometric_algebracommand = \$builddir/alias-gen-geometric_algebra \$flags > \$outrule arcommand = rm -f \$out && ar crs \$out \$inrule lemoncommand = \$builddir/lemon \$in \$outEndOfStringdeclare -A rule_implicit_dependenciesdeclare -A lib_cflagsdeclare -A lib_ldflagsrule_implicit_dependencies["gen_geometric_algebra"]="\$builddir/alias-gen-geometric_algebra"rule_implicit_dependencies["lemon"]="\$builddir/lemon"getcflags() {local pkg=$1shiftflags=${lib_cflags[$pkg]}if [[ -z "$flags" ]]; thenflags=$(pkg-config --cflags "$pkg")lib_cflags[$pkg]="$flags"fiecho $flags}getldflags() {local pkg=$1shiftflags=${lib_ldflags[$pkg]}if [[ -z "$flags" ]]; thenflags=$(pkg-config --libs $pkg)lib_ldflags[$pkg]="$flags"fiecho $flags}compile_rules() {local platform=$1shiftlocal name=$1shiftlocal cflags=local ldflags=local implicit_dependencies=while (( "$#" )); doif [[ $1 = -C* ]]; thencflags="$cflags ${1:2}"elif [[ $1 = -L* ]]; thenldflags="$ldflags ${1:2}"elif [[ $1 = -D* ]]; thenimplicit_dependencies="$implicit_dependencies ${1:2}"elseadd_cflags=$(getcflags $1)add_ldflags=$(getldflags $1)cflags="$cflags $add_cflags"ldflags="$ldflags $add_ldflags"fishiftdonecflags=$(echo $cflags | uniq)ldfalgs=$(echo $cflags | uniq)rule_implicit_dependencies[$(echo $name)_c]=$implicit_dependenciescat << EndOfStringrule $(echo $name)_cdepfile = \$out.dcommand = \$$(echo $platform)_cc -MD -MF \$out.d \$include_directories \$$(echo $platform)_cflags $cflags -c \$in -o \$outdeps = gccrule $(echo $name)_linkcommand = \$$(echo $platform)_cc \$$(echo $platform)_cflags $(echo $cflags) \$$(echo $platform)_ldflags $ldflags \$in -o \$outEndOfString}compile_rules dev gencompile_rules dev dev_alias \"-C-Ialias/ext/shishua" \"-D\$builddir/include/alias/pga2d.h" \"-D\$builddir/include/alias/pga3d.h" \"-D\$builddir/include/alias/cga2d.h" \"-D\$builddir/include/alias/cga3d.h"build() {local dst=$1shiftlocal rule=$1shiftlocal src=$1shiftlocal implicit_dependencies=${rule_implicit_dependencies[$rule]}local flags=while (( "$#" )); doif [[ "$1" = -- ]]; thenshiftflags=$@breakelseimplicit_dependencies="$implicit_dependencies $1"fishiftdone
source ./configure-lib.sh
while (( "$#" )); doobject=\$builddir/$rules-$(echo $1 | sed "s/\//-/g" | sed "s/\.c$/.o/")objects="$objects $object"build $object $rules_c $1shiftdone
rule gen_geometric_algebra --implicit \$builddir/alias-gen_geometric_algebra --command "\$builddir/alias-gen_geometric_algebra \$flags > \$out"
build "\$builddir/$name" $rules_link "$objects"}
build "\$builddir/include/alias/pga2d.h" gen_geometric_algebra "" --flags "-p 2 -d 1 --binary meet outer_product --binary join regressive_product --code m02"build "\$builddir/include/alias/pga3d.h" gen_geometric_algebra "" --flags "-p 3 -d 1 --binary meet outer_product --binary join regressive_product --code m024"build "\$builddir/include/alias/cga2d.h" gen_geometric_algebra "" --flags "-p 3 -n 1 --binary meet outer_product --binary join regressive_product"build "\$builddir/include/alias/cga3d.h" gen_geometric_algebra "" --flags "-p 4 -n 1 --binary meet outer_product --binary join regressive_product"
static_library() {local rules=$1local rules_c=$(echo $rules)_cshift
phony geometric_algebra_headers \--include-directory "\$builddir/include" \"\$builddir/include/alias/pga2d.h" \"\$builddir/include/alias/pga3d.h" \"\$builddir/include/alias/cga2d.h" \"\$builddir/include/alias/cga3d.h"
local out=$1shiftlocal objects=while (( "$#" )); doobject=\$builddir/$rules-$(echo $1 | sed "s/\//-/g" | sed "s/\.c$/.o/")objects="$objects $object"build $object $rules_c $1shiftdonebuild \$builddir/$out ar "$objects"}executable gen alias-gen-geometric_algebra alias/gen/geometric_algebra.cbuild "\$builddir/include/alias/pga2d.h" gen_geometric_algebra "" -- -p 2 -d 1 --binary meet outer_product --binary join regressive_product --code m02build "\$builddir/include/alias/pga3d.h" gen_geometric_algebra "" -- -p 3 -d 1 --binary meet outer_product --binary join regressive_product --code m024build "\$builddir/include/alias/cga2d.h" gen_geometric_algebra "" -- -p 3 -n 1 --binary meet outer_product --binary join regressive_productbuild "\$builddir/include/alias/cga3d.h" gen_geometric_algebra "" -- -p 4 -n 1 --binary meet outer_product --binary join regressive_productstatic_library dev_alias dev-lib/libalias.a \
library lnx-alias \--include-directory alias/include \tabula \geometric_algebra_headers \
compile_rules dev dev libuv \"-D\$builddir/dev-lib/libalias.a" \"-L-lalias"
library lnx-engine \lnx-libuv lnx-glfw3 lnx-alias \--include-directory engine/include \engine/src/engine.cexecutable lnx-engine-integration_test \lnx-engine engine/integration_test/src/main.c
# SQLITEcat << EndOfStringrule sqlite_configurecommand = mkdir -p \$builddir/sqlite && cd \$builddir/sqlite && ../../engine/ext/sqlite/configure 1>/dev/nullgenerator = 1description = sqlite::configurerule sqlite3_amalgamationcommand = cd \$builddir/sqlite && make sqlite3.c 1>/dev/nulldescription = sqlite::make sqlite3.cbuild \$builddir/sqlite/Makefile: sqlite_configurebuild \$builddir/sqlite/sqlite3.c | \$builddir/sqlite/sqlite3.h \$builddir/sqlite/lemon: sqlite3_amalgamation | \$builddir/sqlite/Makefilebuild \$builddir/include/sqlite3.h: copy \$builddir/sqlite/sqlite3.hbuild \$builddir/lemon: copy \$builddir/sqlite/lemonEndOfString
rule gen_build_graph --command "ninja -t graph | dot -Tpng -o \$out" --implicit build.ninjabuild build.ninja.png gen_build_graph
# NINJA BUILD and GRAPHS!cat << EndOfStringrule configurecommand = ./configure.sh > build.ninjagenerator = 1build build.ninja: configure | configure.shrule gen_build_graphcommand = ninja -t graph | dot -Tpng -o \$outbuild build.ninja.png: gen_build_graph | build.ninjaEndOfString
#!/bin/bashvariable() {local name=$1shiftecho "$name = $*"}declare -A rule_implicit_dependenciesrule() {local name=$1shiftlocal command=local deps=local depfile=local implicit_dependencies=local generator=while (( "$#" )); dolocal arg=$1shiftif [[ $arg = --command ]]; thencommand=$1shiftelif [[ $arg = --generator ]]; thengenerator=1elif [[ $arg = --implicit ]]; thenimplicit_dependencies="$implicit_dependencies $1"shiftelif [[ $arg = --deps ]]; thendeps="$1"shiftelif [[ $arg = --depfile ]]; thendepfile="$1"shiftfidonerule_implicit_dependencies[$name]=$implicit_dependenciesecho "rule $name"if [[ ! -z $command ]]; thenecho " command = $command"fiif [[ ! -z $deps ]]; thenecho " deps = $deps"fiif [[ ! -z $depfile ]]; thenecho " depfile = $depfile"fiif [[ ! -z $generator ]]; thenecho " generator = 1"fi}build() {local output=$1shiftlocal _rule=$1shiftlocal inputs=local implicit_dependencies=${rule_implicit_dependencies[$_rule]}local flags=while (( "$#" )); dolocal arg=$1shiftif [[ $arg = --implicit ]]; thenimplicit_dependencies="$implicit_dependencies $1"shiftelif [[ $arg = --flags ]]; thenflags=$1shiftelseinputs="$inputs $arg"fidoneimplicit_dependencies=$(echo $implicit_dependencies | uniq)if [[ ! -z "$implicit_dependencies" ]]; thenimplicit_dependencies="| $implicit_dependencies"fiecho "build $output : $_rule $inputs $implicit_dependencies"if [[ ! -z "$flags" ]]; thenecho " flags = $flags"fi}PKG_CONFIG_lnx=pkg-configCC_lnx=gccLINK_lnx=gccEXE_lnx=CFLAGS_lnx=LFLAGS_lnx=AR_lnx=arPKG_CONFIG_win=x86_64-w64-ming32-pkg-configCC_win=x86_64-w64-mingw32-gccLINK_win=x86_64-w64-mingw32-gccEXE_win=".exe"CFLAGS_win=LFLAGS_win=AR_win=ardeclare -A target_defined target_include_directories target_defines target_cflags target_lflags target_implicit_dependencies target_link_dependenciestarget() {local name=$1shiftlocal platform=lnxlocal sources=local objects=local executable=local phony=local include_directories=local defines=local cflags=local lflags=local implicit_dependencies=local link_dependencies=local PKG_CONFIG=PKG_CONFIG_${platform}local CC=CC_${platform}local LINK=LINK_${platform}local EXE=EXE_${platform}local CFLAGS=CFLAGS_${platform}local LFLAGS=LFLAGS_${platform}local AR=AR_${platform}local no_c=while (( "$#" )); dolocal arg=$1shiftif [[ $arg = --executable ]]; thenexecutable=1elif [[ $arg = --phony ]]; thenphony=1elif [[ $arg = --include-directory ]]; theninclude_directories="$include_directories -I$1"shiftelif [[ $arg = --implicit ]]; thenimplicit_dependencies="$implicit_dependencies $1"shiftelif [[ $arg = --pkg-config ]]; thencflags="$cflags $(pkg-config --cflags $1)"lflags="$lflags $(pkg-config --libs $1)"shiftelselocal tgt=${target_defined[$arg]}if [[ -z "$tgt" ]]; thenif [[ -z "$phony" ]]; thensources="$sources $arg"no_c=${arg%.c}[ $arg = $no_c ] && echo "only c sources can be used"objects="$objects \$builddir/${platform}-${no_c//\//-}.o"elsephony="$phony $arg"fielseinclude_directories="$include_directories ${target_include_directories[$arg]}"defines="$defines ${target_defines[$arg]}"cflags="$cflags ${target_cflags[$arg]}"lflags="$lflags ${target_lflags[$arg]}"implicit_dependencies="$implicit_dependencies ${target_implicit_dependencies[$arg]}"link_dependencies="$link_dependencies ${target_link_dependencies[$arg]}"fifidoneif [[ ! -z "$phony" ]]; thenimplicit_dependencies="$implicit_dependencies $name"build $name phony ${phony:1}fiimplicit_dependencies=$(echo $implicit_dependencies | uniq)if [[ ! -z "$sources" ]]; thenrule ${name}_cc \--command "${!CC} -MD -MF \$out.d $include_directories $defines ${!CFLAGS} $cflags -c \$in -o \$out" \--depfile "\$out.d" \--deps "gcc"for src in $sources; dono_c=${src%.c}build "\$builddir/${platform}-${no_c//\//-}.o" ${name}_cc $src --implicit "$implicit_dependencies"doneif [[ ! -z "$executable" ]]; thenrule ${name}_link \--command "${!LINK} ${!CFLAGS} $cflags ${!LFLAGS} -L\$builddir/${platform}-lib $lflags \$in -o \$out"build \$builddir/$name${!EXE} ${name}_link $objects --implicit "$link_dependencies"elserule ${name}_ar \--command "rm -f \$out && ${!AR} crs \$out \$in"build \$builddir/${platform}-lib/lib${name}.a ${name}_ar $objectslflags="$lflags -l$name"link_dependencies="$link_dependencies \$builddir/${platform}-lib/lib${name}.a"fifitarget_defined[$name]=1target_include_directories[$name]=$(echo $include_directories | uniq)target_defines[$name]=$(echo $defines | uniq)target_cflags[$name]=$(echo $cflags | uniq)target_lflags[$name]=$(echo $lflags | uniq)target_implicit_dependencies[$name]=$implicit_dependenciestarget_link_dependencies[$name]=$link_dependencies}phony() {local name=$1shifttarget $name --phony $*}library() {target $*}executable() {local name=$1shifttarget $name --executable $*}