Skip to content

Commit 677f4e9

Browse files
author
Pushkar Kulkarni
committed
Eliminate duplicate rules in generated build.ninja
1 parent dffecf1 commit 677f4e9

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

lib/product.py

+13-10
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,12 @@ class Library(Product):
7777
def __init__(self, name):
7878
Product.__init__(self, name)
7979

80-
def generate(self, flags):
81-
generated = Product.generate(self)
82-
objects = []
83-
for phase in self.phases:
84-
objects += phase.objects
80+
def generate(self, flags, objects = []):
81+
generated = ""
82+
if len(objects) == 0:
83+
generated = Product.generate(self)
84+
for phase in self.phases:
85+
objects += phase.objects
8586

8687
product_flags = " ".join(flags)
8788
if self.LDFLAGS is not None:
@@ -106,23 +107,23 @@ def generate(self, flags):
106107
107108
"""
108109

109-
return generated
110+
return objects, generated
110111

111112

112113
class DynamicLibrary(Library):
113114
def __init__(self, name):
114115
Library.__init__(self, name)
115116
self.name = name
116117

117-
def generate(self):
118+
def generate(self, objects = []):
118119
self.rule = "Link"
119120
self.product_name = Configuration.current.target.dynamic_library_prefix + self.name + Configuration.current.target.dynamic_library_suffix
120121
if Configuration.current.target.sdk == OSType.Linux or Configuration.current.target.sdk == OSType.FreeBSD:
121122
self.conformance_begin = '${SDKROOT}/lib/swift/${OS}/${ARCH}/swift_begin.o'
122123
self.conformance_end = '${SDKROOT}/lib/swift/${OS}/${ARCH}/swift_end.o'
123-
return Library.generate(self, ["-shared", "-Wl,-soname," + self.product_name, "-Wl,--no-undefined"])
124+
return Library.generate(self, ["-shared", "-Wl,-soname," + self.product_name, "-Wl,--no-undefined"], objects)
124125
else:
125-
return Library.generate(self, ["-shared"])
126+
return Library.generate(self, ["-shared"], objects)
126127

127128

128129
class Framework(Product):
@@ -189,7 +190,9 @@ def __init__(self, name):
189190
DynamicLibrary.__init__(self, name)
190191

191192
def generate(self):
192-
return StaticLibrary.generate(self) + DynamicLibrary.generate(self)
193+
objects, generatedForStatic = StaticLibrary.generate(self)
194+
_, generatedForDynamic = DynamicLibrary.generate(self, objects)
195+
return generatedForStatic + generatedForDynamic
193196

194197
class Executable(Product):
195198
def __init__(self, name):

0 commit comments

Comments
 (0)