Skip to content

Instantly share code, notes, and snippets.

@syoyo
Created December 15, 2015 10:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save syoyo/778d2294fd5534e0f923 to your computer and use it in GitHub Desktop.
Save syoyo/778d2294fd5534e0f923 to your computer and use it in GitHub Desktop.
ninja generator example
#!/usr/bin/env python
import ninja_syntax
import glob
import os
cxx_files = [
"src/OptionParser.cpp"
, "src/easywsclient.cpp"
, "src/json_to_eson.cc"
, "src/main.cc"
, "src/tiny_obj_loader.cc"
, "src/render.cc"
]
c_files = [
"src/parson.c"
]
include_path = [
"-I./src"
]
def add_gcc_rule(ninja):
ninja.rule('gnucxx', description='CXX $out',
command='$gnucxx -MMD -MF $out.d $gnudefines $gnuincludes $gnucxxflags -c $in -o $out',
depfile='$out.d', deps='gcc')
ninja.rule('gnucc', description='CC $out',
command='$gnucc -MMD -MF $out.d $gnudefines $gnuincludes $gnucflags -c $in -o $out',
depfile='$out.d', deps='gcc')
ninja.rule('gnulink', description='LINK $out', pool='link_pool',
command='$gnuld $gnuldflags -o $out $in $libs')
ninja.rule('gnustamp', description='STAMP $out', command='touch $out')
ninja.newline()
def gen(ninja, target):
ninja.variable('gnucxx', 'g++')
ninja.variable('gnucc', 'gcc')
ninja.variable('gnuld', '$gnucxx')
ninja.variable('gnudefines', [])
ninja.variable('gnuincludes', include_path)
ninja.variable('gnucflags', ['-Wall', '-fno-rtti', '-fno-exceptions'])
ninja.variable('gnucxxflags', ['-Wall', '-fno-rtti', '-fno-exceptions'])
ninja.variable('gnuldflags', [])
ninja.newline()
ninja.pool('link_pool', depth=4)
ninja.newline()
add_gcc_rule(ninja)
obj_files = []
for src in cxx_files:
obj = os.path.splitext(src)[0] + '.o'
obj_files.append(obj)
ninja.build(obj, 'gnucxx', src)
ninja.newline()
for src in c_files:
obj = os.path.splitext(src)[0] + '.o'
obj_files.append(obj)
ninja.build(obj, 'gnucc', src)
ninja.newline()
ninja.build(target, 'gnulink', obj_files)
ninja.build('all', 'phony', [target])
ninja.default('all')
def main():
f = open('build.ninja', 'w')
ninja = ninja_syntax.Writer(f)
gen(ninja, 'tania')
f.close()
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment