Created
August 1, 2022 15:04
-
-
Save Syzygies/fe8cf2096fcb91dd11b5c8cf763f9fc7 to your computer and use it in GitHub Desktop.
Example Ruby script to create build.ninja file
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ninja - link Macaulay.bin in build/ | |
# ninja clean - remove build/ | |
cflags = -g -w -std=c99 | |
lflags = | |
rule CC | |
depfile = $out.d | |
command = gcc -MD -MF $out.d $cflags -c $in -o $out | |
description = CC $out | |
rule LN | |
command = gcc $cflags $lflags $in -o $out | |
description = LN $out | |
rule CLEAN | |
command = rm -rf build | |
description = CLEAN | |
build build/array.o: CC source/array.c | |
build build/betti.o: CC source/betti.c | |
build build/boxcmds.o: CC source/boxcmds.c | |
build build/boxprocs.o: CC source/boxprocs.c | |
build build/charp.o: CC source/charp.c | |
build build/cmdnames.o: CC source/cmdnames.c | |
build build/cmds.o: CC source/cmds.c | |
build build/debug.o: CC source/debug.c | |
build build/det.o: CC source/det.c | |
build build/detach.o: CC source/detach.c | |
build build/dot_fns.o: CC source/dot_fns.c | |
build build/ed.o: CC source/ed.c | |
build build/generic.o: CC source/generic.c | |
build build/getdet.o: CC source/getdet.c | |
build build/gm_cmds.o: CC source/gm_cmds.c | |
build build/gm_dlist.o: CC source/gm_dlist.c | |
build build/gm_plist.o: CC source/gm_plist.c | |
build build/gm_poly.o: CC source/gm_poly.c | |
build build/gmatrix.o: CC source/gmatrix.c | |
build build/help.o: CC source/help.c | |
build build/hilb.o: CC source/hilb.c | |
build build/hilb2.o: CC source/hilb2.c | |
build build/hulb.o: CC source/hulb.c | |
build build/human_io.o: CC source/human_io.c | |
build build/inhomog.o: CC source/inhomog.c | |
build build/input.o: CC source/input.c | |
build build/intersect.o: CC source/intersect.c | |
build build/koszul.o: CC source/koszul.c | |
build build/mac.o: CC source/mac.c | |
build build/mem.o: CC source/mem.c | |
build build/monideal.o: CC source/monideal.c | |
build build/monitor.o: CC source/monitor.c | |
build build/monoms.o: CC source/monoms.c | |
build build/parse.o: CC source/parse.c | |
build build/parsepoly.o: CC source/parsepoly.c | |
build build/comb_rec.o: CC source/comb_rec.c | |
build build/plist.o: CC source/plist.c | |
build build/poly.o: CC source/poly.c | |
build build/printf.o: CC source/printf.c | |
build build/prpoly.o: CC source/prpoly.c | |
build build/qring.o: CC source/qring.c | |
build build/rescmds.o: CC source/rescmds.c | |
build build/ring.o: CC source/ring.c | |
build build/rmap.o: CC source/rmap.c | |
build build/rvar.o: CC source/rvar.c | |
build build/set.o: CC source/set.c | |
build build/shell.o: CC source/shell.c | |
build build/smallterm.o: CC source/smallterm.c | |
build build/spcmds.o: CC source/spcmds.c | |
build build/standard.o: CC source/standard.c | |
build build/stash.o: CC source/stash.c | |
build build/stats.o: CC source/stats.c | |
build build/stdcmds.o: CC source/stdcmds.c | |
build build/tables.o: CC source/tables.c | |
build build/term.o: CC source/term.c | |
build build/vars.o: CC source/vars.c | |
build build/version.o: CC source/version.c | |
build build/Macaulay.bin: LN $ | |
build/array.o $ | |
build/betti.o $ | |
build/boxcmds.o $ | |
build/boxprocs.o $ | |
build/charp.o $ | |
build/cmdnames.o $ | |
build/cmds.o $ | |
build/debug.o $ | |
build/det.o $ | |
build/detach.o $ | |
build/dot_fns.o $ | |
build/ed.o $ | |
build/generic.o $ | |
build/getdet.o $ | |
build/gm_cmds.o $ | |
build/gm_dlist.o $ | |
build/gm_plist.o $ | |
build/gm_poly.o $ | |
build/gmatrix.o $ | |
build/help.o $ | |
build/hilb.o $ | |
build/hilb2.o $ | |
build/hulb.o $ | |
build/human_io.o $ | |
build/inhomog.o $ | |
build/input.o $ | |
build/intersect.o $ | |
build/koszul.o $ | |
build/mac.o $ | |
build/mem.o $ | |
build/monideal.o $ | |
build/monitor.o $ | |
build/monoms.o $ | |
build/parse.o $ | |
build/parsepoly.o $ | |
build/comb_rec.o $ | |
build/plist.o $ | |
build/poly.o $ | |
build/printf.o $ | |
build/prpoly.o $ | |
build/qring.o $ | |
build/rescmds.o $ | |
build/ring.o $ | |
build/rmap.o $ | |
build/rvar.o $ | |
build/set.o $ | |
build/shell.o $ | |
build/smallterm.o $ | |
build/spcmds.o $ | |
build/standard.o $ | |
build/stash.o $ | |
build/stats.o $ | |
build/stdcmds.o $ | |
build/tables.o $ | |
build/term.o $ | |
build/vars.o $ | |
build/version.o | |
default build/Macaulay.bin | |
build clean: CLEAN |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ninja - link Macaulay.bin in build/, save errors to errors/ | |
# ninja clean - remove build/, errors/ | |
cflags = -w -std=c99 | |
lflags = | |
rule CC | |
depfile = $out.d | |
command = ( $ | |
mkdir -p errors ; $ | |
err=$$( echo $out | sed 's/^build/errors/' | sed 's/.o$$/.txt/' ) ; $ | |
gcc -MD -MF $out.d $cflags -c $in -o $out 2> $${err} && rm $${err} || echo "[0;31m$in[0m" ) | |
description = CC $out | |
rule LN | |
command = ( $ | |
mkdir -p errors ; $ | |
err=errors/Macaulay.bin.txt ; $ | |
gcc $cflags $lflags $in -o $out 2> $${err} && rm $${err} || echo "[0;31m$out[0m" ) | |
description = LN $out | |
rule CLEAN | |
command = rm -rf build errors | |
description = CLEAN | |
build build/array.o: CC source/array.c | |
build build/betti.o: CC source/betti.c | |
build build/boxcmds.o: CC source/boxcmds.c | |
build build/boxprocs.o: CC source/boxprocs.c | |
build build/charp.o: CC source/charp.c | |
build build/cmdnames.o: CC source/cmdnames.c | |
build build/cmds.o: CC source/cmds.c | |
build build/debug.o: CC source/debug.c | |
build build/det.o: CC source/det.c | |
build build/detach.o: CC source/detach.c | |
build build/dot_fns.o: CC source/dot_fns.c | |
build build/ed.o: CC source/ed.c | |
build build/generic.o: CC source/generic.c | |
build build/getdet.o: CC source/getdet.c | |
build build/gm_cmds.o: CC source/gm_cmds.c | |
build build/gm_dlist.o: CC source/gm_dlist.c | |
build build/gm_plist.o: CC source/gm_plist.c | |
build build/gm_poly.o: CC source/gm_poly.c | |
build build/gmatrix.o: CC source/gmatrix.c | |
build build/help.o: CC source/help.c | |
build build/hilb.o: CC source/hilb.c | |
build build/hilb2.o: CC source/hilb2.c | |
build build/hulb.o: CC source/hulb.c | |
build build/human_io.o: CC source/human_io.c | |
build build/inhomog.o: CC source/inhomog.c | |
build build/input.o: CC source/input.c | |
build build/intersect.o: CC source/intersect.c | |
build build/koszul.o: CC source/koszul.c | |
build build/mac.o: CC source/mac.c | |
build build/mem.o: CC source/mem.c | |
build build/monideal.o: CC source/monideal.c | |
build build/monitor.o: CC source/monitor.c | |
build build/monoms.o: CC source/monoms.c | |
build build/parse.o: CC source/parse.c | |
build build/parsepoly.o: CC source/parsepoly.c | |
build build/comb_rec.o: CC source/comb_rec.c | |
build build/plist.o: CC source/plist.c | |
build build/poly.o: CC source/poly.c | |
build build/printf.o: CC source/printf.c | |
build build/prpoly.o: CC source/prpoly.c | |
build build/qring.o: CC source/qring.c | |
build build/rescmds.o: CC source/rescmds.c | |
build build/ring.o: CC source/ring.c | |
build build/rmap.o: CC source/rmap.c | |
build build/rvar.o: CC source/rvar.c | |
build build/set.o: CC source/set.c | |
build build/shell.o: CC source/shell.c | |
build build/smallterm.o: CC source/smallterm.c | |
build build/spcmds.o: CC source/spcmds.c | |
build build/standard.o: CC source/standard.c | |
build build/stash.o: CC source/stash.c | |
build build/stats.o: CC source/stats.c | |
build build/stdcmds.o: CC source/stdcmds.c | |
build build/tables.o: CC source/tables.c | |
build build/term.o: CC source/term.c | |
build build/vars.o: CC source/vars.c | |
build build/version.o: CC source/version.c | |
build build/Macaulay.bin: LN $ | |
build/array.o $ | |
build/betti.o $ | |
build/boxcmds.o $ | |
build/boxprocs.o $ | |
build/charp.o $ | |
build/cmdnames.o $ | |
build/cmds.o $ | |
build/debug.o $ | |
build/det.o $ | |
build/detach.o $ | |
build/dot_fns.o $ | |
build/ed.o $ | |
build/generic.o $ | |
build/getdet.o $ | |
build/gm_cmds.o $ | |
build/gm_dlist.o $ | |
build/gm_plist.o $ | |
build/gm_poly.o $ | |
build/gmatrix.o $ | |
build/help.o $ | |
build/hilb.o $ | |
build/hilb2.o $ | |
build/hulb.o $ | |
build/human_io.o $ | |
build/inhomog.o $ | |
build/input.o $ | |
build/intersect.o $ | |
build/koszul.o $ | |
build/mac.o $ | |
build/mem.o $ | |
build/monideal.o $ | |
build/monitor.o $ | |
build/monoms.o $ | |
build/parse.o $ | |
build/parsepoly.o $ | |
build/comb_rec.o $ | |
build/plist.o $ | |
build/poly.o $ | |
build/printf.o $ | |
build/prpoly.o $ | |
build/qring.o $ | |
build/rescmds.o $ | |
build/ring.o $ | |
build/rmap.o $ | |
build/rvar.o $ | |
build/set.o $ | |
build/shell.o $ | |
build/smallterm.o $ | |
build/spcmds.o $ | |
build/standard.o $ | |
build/stash.o $ | |
build/stats.o $ | |
build/stdcmds.o $ | |
build/tables.o $ | |
build/term.o $ | |
build/vars.o $ | |
build/version.o | |
default build/Macaulay.bin | |
build clean: CLEAN |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# ninja.rb [arg] - create build.ninja | |
# arg - save errors to errors/ | |
proj = File.expand_path("..", __dir__) | |
# -g Generate source-level debug information | |
# -w Suppress all warnings | |
# -c Only run preprocess, compile, and assemble steps | |
SOURCES = %w{ | |
array betti boxcmds boxprocs charp cmdnames | |
cmds debug det detach dot_fns ed | |
generic getdet gm_cmds gm_dlist gm_plist gm_poly | |
gmatrix help hilb hilb2 hulb human_io | |
inhomog input intersect koszul mac mem | |
monideal monitor monoms parse parsepoly comb_rec | |
plist poly printf prpoly qring rescmds | |
ring rmap rvar set shell smallterm | |
spcmds standard stash stats stdcmds tables | |
term vars version | |
} | |
if ARGV.empty? | |
header = <<~EOF | |
# ninja - link Macaulay.bin in build/ | |
# ninja clean - remove build/ | |
cflags = -g -w -std=c99 | |
lflags = | |
rule CC | |
depfile = $out.d | |
command = gcc -MD -MF $out.d $cflags -c $in -o $out | |
description = CC $out | |
rule LN | |
command = gcc $cflags $lflags $in -o $out | |
description = LN $out | |
rule CLEAN | |
command = rm -rf build | |
description = CLEAN | |
EOF | |
else | |
header = <<~EOF | |
# ninja - link Macaulay2.bin in build/, save errors to errors/ | |
# ninja clean - remove build/, errors/ | |
cflags = -w -std=c99 | |
lflags = | |
rule CC | |
depfile = $out.d | |
command = ( $ | |
mkdir -p errors ; $ | |
err=$$( echo $out | sed 's/^build/errors/' | sed 's/.o$$/.txt/' ) ; $ | |
gcc -MD -MF $out.d $cflags -c $in -o $out 2> $${err} && rm $${err} || echo "\e[0;31m$in\e[0m" ) | |
description = CC $out | |
rule LN | |
command = ( $ | |
mkdir -p errors ; $ | |
err=errors/Macaulay.bin.txt ; $ | |
gcc $cflags $lflags $in -o $out 2> $${err} && rm $${err} || echo "\e[0;31m$out\e[0m" ) | |
description = LN $out | |
rule CLEAN | |
command = rm -rf build errors | |
description = CLEAN | |
EOF | |
end | |
footer = <<~EOF | |
default build/Macaulay.bin | |
build clean: CLEAN | |
EOF | |
def sources(out, before, each) | |
out << before | |
SOURCES.each do |file| | |
out << each.gsub(/@/, file) | |
end | |
out << "\n" | |
end | |
Dir.chdir(proj) do | |
File.open('build.ninja', 'w') do |out| | |
out << header | |
sources out, "\n", "build build/@.o: CC source/@.c\n" | |
sources out, "build build/Macaulay.bin: LN", " $\n build/@.o" | |
out << footer | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment