aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-02-06 20:37:46 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2013-02-06 20:37:46 +0200
commit40c001772bcc82c9cfed36bd021d1499ea99c281 (patch)
tree973419a8339e70c5d0269b7527fdf1d979ada21c
parent7b611c2c11591c9dfd184e221ff22b1aae1af4da (diff)
downloadmeson-40c001772bcc82c9cfed36bd021d1499ea99c281.zip
meson-40c001772bcc82c9cfed36bd021d1499ea99c281.tar.gz
meson-40c001772bcc82c9cfed36bd021d1499ea99c281.tar.bz2
Generate linking rules.
-rwxr-xr-xgenerators.py57
1 files changed, 38 insertions, 19 deletions
diff --git a/generators.py b/generators.py
index ce7bd66..7ec6135 100755
--- a/generators.py
+++ b/generators.py
@@ -20,6 +20,9 @@ import interpreter, nodes
def shell_quote(cmdlist):
return ["'" + x + "'" for x in cmdlist]
+def ninja_quote(text):
+ return text.replace(' ', '$ ')
+
def do_conf_file(src, dst, variables):
data = open(src).readlines()
regex = re.compile('@(.*?)@')
@@ -50,6 +53,21 @@ class Generator():
self.interpreter = interp
self.processed_targets = {}
+ def get_target_filename(self, target):
+ targetdir = self.get_target_dir(target)
+ filename = os.path.join(targetdir, target.get_filename())
+ return filename
+
+ def get_target_dir(self, target):
+ dirname = os.path.join(self.environment.get_build_dir(), target.get_subdir())
+ os.makedirs(dirname, exist_ok=True)
+ return dirname
+
+ def get_target_private_dir(self, target):
+ dirname = os.path.join(self.get_target_dir(target), target.get_basename() + '.dir')
+ os.makedirs(dirname, exist_ok=True)
+ return dirname
+
class NinjaGenerator(Generator):
def __init__(self, build, interp):
@@ -64,11 +82,13 @@ class NinjaGenerator(Generator):
self.generate_rules(outfile)
def generate_rules(self, outfile):
+ outfile.write('# Rules for compiling.\n\n')
self.generate_compile_rules(outfile)
- self.generate_link_rules(outfile)
-
- def generate_link_rules(self, outfile):
outfile.write('# Rules for linking.\n\n')
+ self.generate_static_link_rules(outfile)
+ self.generate_dynamic_link_rules(outfile)
+
+ def generate_static_link_rules(self, outfile):
static_linker = self.build.static_linker
rule = 'rule STATIC_LINKER\n'
command = ' command = %s %s $out $LINK_FLAGS $in\n' % \
@@ -79,8 +99,21 @@ class NinjaGenerator(Generator):
outfile.write(command)
outfile.write(description)
+ def generate_dynamic_link_rules(self, outfile):
+ for compiler in self.build.compilers:
+ langname = compiler.get_language()
+ rule = 'rule %s_LINKER\n' % langname
+ command = ' command = %s $FLAGS $LINK_FLAGS %s $out %s $in\n' % \
+ (' '.join(compiler.get_exelist()),\
+ ' '.join(compiler.get_output_flags()),\
+ ' '.join(compiler.get_compile_only_flags()))
+ description = ' description = Linking target $out'
+ outfile.write(rule)
+ outfile.write(command)
+ outfile.write(description)
+ outfile.write('\n')
+
def generate_compile_rules(self, outfile):
- outfile.write('# Rules for compiling.\n\n')
for compiler in self.build.compilers:
langname = compiler.get_language()
rule = 'rule %s_COMPILER\n' % langname
@@ -88,7 +121,7 @@ class NinjaGenerator(Generator):
(' '.join(compiler.get_exelist()),\
' '.join(compiler.get_output_flags()),\
' '.join(compiler.get_compile_only_flags()))
- description = ' description = Compiling object %s' % langname
+ description = ' description = Compiling %s object $out' % langname
outfile.write(rule)
outfile.write(command)
outfile.write(description)
@@ -350,16 +383,6 @@ echo Run compile.sh before this or bad things will happen.
outfile.write('\necho Linking \\"%s\\".\n' % target.get_basename())
outfile.write(' '.join(quoted) + ' || exit\n')
- def get_target_dir(self, target):
- dirname = os.path.join(self.environment.get_build_dir(), target.get_subdir())
- os.makedirs(dirname, exist_ok=True)
- return dirname
-
- def get_target_private_dir(self, target):
- dirname = os.path.join(self.get_target_dir(target), target.get_basename() + '.dir')
- os.makedirs(dirname, exist_ok=True)
- return dirname
-
def generate_commands(self, outfile):
for i in self.build.get_targets().items():
target = i[1]
@@ -371,10 +394,6 @@ echo Run compile.sh before this or bad things will happen.
if not tname in self.processed_targets:
self.generate_target(t, outfile)
- def get_target_filename(self, target):
- targetdir = self.get_target_dir(target)
- filename = os.path.join(targetdir, target.get_filename())
- return filename
def generate_pch(self, target, outfile):
print('Generating pch for "%s"' % target.get_basename())