Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: native_client_sdk/src/build_tools/dsc2gyp.py

Issue 1655873003: [NaCl SDK] Cleanup references to old newlib toolchain (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@add_pepper_50
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 import argparse
7 import StringIO
8 import sys
9 import os
10
11 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
12 sys.path.append(os.path.join(os.path.dirname(SCRIPT_DIR), 'tools'))
13
14 import getos
15
16 valid_tools = ['newlib', 'glibc', getos.GetPlatform()]
17
18
19 def Error(msg):
20 print(msg)
21 sys.exit(1)
22
23
24 PREAMBLE = """\
25 {
26 'includes': ['%s/build_tools/nacl.gypi'],
27 """
28
29 NEXE_TARGET = """\
30 {
31 'target_name': '%(NAME)s_x86_32%(EXT)s',
32 'product_name': '%(NAME)s_x86_32%(EXT)s',
33 'type': '%(GYP_TYPE)s',
34 'sources': %(SOURCES)s,
35 'libraries': %(LIBS)s,
36 'include_dirs': %(INCLUDES)s,
37 'cflags': ['-m32', '-pedantic'] + %(CFLAGS)s,
38 'make_valid_configurations': ['newlib-debug', 'newlib-release',
39 'glibc-debug', 'glibc-release'],
40 'ldflags': ['-m32', '-L../../lib/x86_32/<(CONFIGURATION_NAME)'],
41 'toolset': 'target',
42 %(CONFIGS)s
43 },
44 {
45 'target_name': '%(NAME)s_x86_64%(EXT)s',
46 'product_name': '%(NAME)s_x86_64%(EXT)s',
47 'type': '%(GYP_TYPE)s',
48 'sources': %(SOURCES)s,
49 'libraries': %(LIBS)s,
50 'include_dirs': %(INCLUDES)s,
51 'make_valid_configurations': ['newlib-debug', 'newlib-release',
52 'glibc-debug', 'glibc-release'],
53 'cflags': ['-m64', '-pedantic'] + %(CFLAGS)s,
54 'ldflags': ['-m64', '-L../../lib/x86_64/<(CONFIGURATION_NAME)'],
55 'toolset': 'target',
56 %(CONFIGS)s
57 },
58 """
59
60 NLIB_TARGET = """\
61 {
62 'target_name': '%(NAME)s_x86_32%(EXT)s',
63 'product_name': 'lib%(NAME)s%(EXT)s',
64 'product_dir': '../../lib/x86_32/<(CONFIGURATION_NAME)',
65 'type': '%(GYP_TYPE)s',
66 'sources': %(SOURCES)s,
67 'libraries': %(LIBS)s,
68 'include_dirs': %(INCLUDES)s,
69 'cflags': ['-m32', '-pedantic'] + %(CFLAGS)s,
70 'make_valid_configurations': ['newlib-debug', 'newlib-release',
71 'glibc-debug', 'glibc-release'],
72 'ldflags': ['-m32'],
73 'toolset': 'target',
74 %(CONFIGS)s
75 },
76 {
77 'target_name': '%(NAME)s_x86_64%(EXT)s',
78 'product_name': 'lib%(NAME)s%(EXT)s',
79 'product_dir': '../../lib/x86_64/<(CONFIGURATION_NAME)',
80 'type': '%(GYP_TYPE)s',
81 'sources': %(SOURCES)s,
82 'libraries': %(LIBS)s,
83 'include_dirs': %(INCLUDES)s,
84 'make_valid_configurations': ['newlib-debug', 'newlib-release',
85 'glibc-debug', 'glibc-release'],
86 'cflags': ['-m64', '-pedantic'] + %(CFLAGS)s,
87 'ldflags': ['-m64'],
88 'toolset': 'target',
89 %(CONFIGS)s
90 },
91 """
92
93 HOST_LIB_TARGET = """\
94 {
95 'target_name': '%(NAME)s%(EXT)s',
96 'type': '%(GYP_TYPE)s',
97 'toolset': 'host',
98 'sources': %(SOURCES)s,
99 'cflags': %(CFLAGS)s,
100 'cflags_c': ['-std=gnu99'],
101 'include_dirs': %(INCLUDES)s,
102 'make_valid_configurations': ['host-debug', 'host-release'],
103 'product_dir': '../../lib/%(ARCH)s/<(CONFIGURATION_NAME)',
104 'product_name': '%(NAME)s%(EXT)s',
105 %(CONFIGS)s
106 },
107 """
108
109 HOST_EXE_TARGET = """\
110 {
111 'target_name': '%(NAME)s%(EXT)s',
112 'type': '%(GYP_TYPE)s',
113 'toolset': 'host',
114 'sources': %(SOURCES)s,
115 'cflags': %(CFLAGS)s,
116 'cflags_c': ['-std=gnu99'],
117 'ldflags': ['-L../../lib/%(ARCH)s/<(CONFIGURATION_NAME)'],
118 'libraries': %(LIBS)s,
119 'include_dirs': %(INCLUDES)s,
120 'make_valid_configurations': ['host-debug', 'host-release'],
121 'msvs_settings': {
122 'VCLinkerTool': {
123 'AdditionalLibraryDirectories':
124 ['../../lib/%(ARCH)s/<(CONFIGURATION_NAME)'],
125 }
126 },
127 %(CONFIGS)s
128 },
129 """
130
131 NMF_TARGET = """\
132 {
133 'target_name': '%(NAME)s_%(TOOLCHAIN)s.nmf',
134 'product_name': '%(NAME)s.nmf',
135 'product_dir': '<(PRODUCT_DIR)/%(TOOLCHAIN)s',
136 'type': 'none',
137 'make_valid_configurations': ['%(TOOLCHAIN)s-debug', '%(TOOLCHAIN)s-releas e'],
138 'actions': [
139 {
140 'action_name': 'nmf',
141 'inputs': ['<(PRODUCT_DIR)/%(NAME)s_x86_32.nexe',
142 '<(PRODUCT_DIR)/%(NAME)s_x86_64.nexe'] + %(SODEPS)s,
143 'outputs': ['<(PRODUCT_DIR)/%(NAME)s.nmf'],
144 'action': ['../../tools/create_nmf.py', '-t', '%(TOOLCHAIN)s', '-s',
145 '<(PRODUCT_DIR)'] + %(NMFACTION)s,
146 },
147 ]
148 },
149 """
150
151 TOOLCHAIN_CONFIG = """\
152 '%(toolchain)s-release' : {
153 'cflags' : ['-O2'],
154 },
155 '%(toolchain)s-debug' : {
156 'cflags' : ['-g', '-O0'],
157 },
158 """
159
160 NEXE_CONFIG = """\
161 '%(toolchain)s-release' : {
162 'cflags' : ['--%(toolchain)s', '-O2',
163 '-idirafter', '../../include'],
164 'ldflags' : ['--%(toolchain)s'],
165 'arflags' : ['--%(toolchain)s'],
166 },
167 '%(toolchain)s-debug' : {
168 'cflags' : ['--%(toolchain)s', '-g', '-O0',
169 '-idirafter', '../../include'],
170 'ldflags' : ['--%(toolchain)s'],
171 'arflags' : ['--%(toolchain)s'],
172 },
173 """
174
175 WIN32_CONFIGS = """\
176 'target_defaults': {
177 'default_configuration': 'Debug_PPAPI',
178 'configurations': {
179 'Debug_PPAPI': {
180 'msvs_configuration_platform': 'PPAPI',
181 'msbuild_configuration_attributes': {
182 'ConfigurationType': 'DynamicLibrary'
183 },
184 'include_dirs': ['../../include/win'],
185 'defines': ['_WINDOWS', '_DEBUG', 'WIN32'],
186 },
187 'Release_PPAPI': {
188 'msvs_configuration_platform': 'PPAPI',
189 'msbuild_configuration_attributes': {
190 'ConfigurationType': 'DynamicLibrary'
191 },
192 'include_dirs': ['../../include/win'],
193 'defines': ['_WINDOWS', 'NDEBUG', 'WIN32'],
194 },
195 'Debug_NaCl': {
196 'msvs_configuration_platform': 'NaCl',
197 'msbuild_configuration_attributes': {
198 'ConfigurationType': 'Application'
199 },
200 },
201 'Release_NaCl': {
202 'msvs_configuration_platform': 'NaCl',
203 'msbuild_configuration_attributes': {
204 'ConfigurationType': 'Application'
205 },
206 },
207 },
208 },
209 """
210
211
212 def WriteNaClTargets(output, target, tools):
213 configs = "'configurations' : {\n"
214 for tc in tools:
215 if tc not in valid_tools:
216 continue
217 if tc in ['newlib', 'glibc']:
218 configs += NEXE_CONFIG % {'toolchain': tc}
219 configs += " }"
220 target['CONFIGS'] = configs
221 if target['TYPE'] == 'lib':
222 output.write(NLIB_TARGET % target)
223 else:
224 output.write(NEXE_TARGET % target)
225
226
227 def ConfigName(toolchain):
228 if toolchain == getos.GetPlatform():
229 return 'host'
230 else:
231 return toolchain
232
233
234 def ProcessDSC(filename, outfile=None):
235 if not os.path.exists(filename):
236 Error("file not found: %s" % filename)
237
238 desc = open(filename).read()
239 desc = eval(desc, {}, {})
240 if not desc.get('TARGETS'):
241 Error("no TARGETS found in dsc")
242
243 if not outfile:
244 outfile = desc['NAME'] + '.gyp'
245 outfile = os.path.join(os.path.dirname(filename), outfile)
246
247 output = StringIO.StringIO()
248
249 srcdir = os.path.dirname(SCRIPT_DIR)
250 output.write(PREAMBLE % srcdir.replace("\\", '/'))
251
252 win32 = sys.platform in ('win32', 'cygwin')
253 if win32:
254 output.write(WIN32_CONFIGS)
255 else:
256 for tc in desc['TOOLS']:
257 if tc in valid_tools:
258 default = '%s-debug' % ConfigName(tc)
259 break
260
261 output.write("""\
262 'target_defaults': {
263 'default_configuration': '%s',
264 'configurations' : {\n""" % default)
265
266 for tc in desc['TOOLS']:
267 if tc not in valid_tools:
268 continue
269 output.write(TOOLCHAIN_CONFIG % {'toolchain': ConfigName(tc)})
270
271 output.write(" }\n },\n")
272
273 output.write("\n 'targets': [\n")
274
275 # make a list of all the so target names so that the nmf rules
276 # can depend on them all
277 sofiles = []
278 soremap = []
279 for target in desc['TARGETS']:
280 if target['TYPE'] == 'so':
281 name = target['NAME']
282 sofiles.append('<(PRODUCT_DIR)/%s_x86_64.so' % name)
283 sofiles.append('<(PRODUCT_DIR)/%s_x86_32.so' % name)
284 soremap += ['-n', '%s_x86_64.so,%s.so' % (name, name)]
285 soremap += ['-n', '%s_x86_32.so,%s.so' % (name, name)]
286
287
288 # iterate through dsc targets generating gyp targets
289 for target in desc['TARGETS']:
290 target.setdefault('INCLUDES', [])
291 target['INCLUDES'] = [x.replace("$(NACL_SDK_ROOT)", "../..")
292 for x in target['INCLUDES']]
293
294 libs = target.get('LIBS', [])
295 if win32:
296 libs = [l for l in libs if l not in ('ppapi', 'ppapi_cpp')]
297 target['LIBS'] = ['-l' + l + '.lib' for l in libs]
298 else:
299 target['LIBS'] = ['-l' + l for l in libs]
300 if target['TYPE'] == 'so':
301 if win32:
302 target['EXT'] = ''
303 else:
304 target['EXT'] = '.so'
305 target['GYP_TYPE'] = 'shared_library'
306 elif target['TYPE'] == 'lib':
307 if win32:
308 target['EXT'] = ''
309 else:
310 target['EXT'] = '.a'
311 target['GYP_TYPE'] = 'static_library'
312 elif target['TYPE'] == 'main':
313 target['EXT'] = '.nexe'
314 target['GYP_TYPE'] = 'executable'
315 else:
316 Error("unknown type: %s" % target['TYPE'])
317
318 target['CFLAGS'] = target.get('CXXFLAGS', [])
319
320 if not win32 and ('newlib' in desc['TOOLS'] or 'glibc' in desc['TOOLS']):
321 WriteNaClTargets(output, target, desc['TOOLS'])
322 if target['TYPE'] == 'main':
323 target['SODEPS'] = sofiles
324 target['NMFACTION'] = ['-o', '<@(_outputs)', '-L<(NMF_PATH1)',
325 '-L<(NMF_PATH2)', '-D', '<(OBJDUMP)',
326 '<@(_inputs)']
327 target['NMFACTION'] += soremap
328 if 'newlib' in desc['TOOLS']:
329 target['TOOLCHAIN'] = 'newlib'
330 output.write(NMF_TARGET % target)
331 if 'glibc' in desc['TOOLS']:
332 target['TOOLCHAIN'] = 'glibc'
333 output.write(NMF_TARGET % target)
334
335 if win32 or getos.GetPlatform() in desc['TOOLS']:
336 target['ARCH'] = 'x86_32'
337 target['INCLUDES'].append('../../include')
338 if win32:
339 target['HOST'] = 'win'
340 target['CONFIGS'] = ''
341 target['CFLAGS'] = []
342 else:
343 target['CONFIGS'] = ''
344 target['HOST'] = 'linux'
345 target['CFLAGS'].append('-fPIC')
346 if target['TYPE'] == 'main':
347 target['GYP_TYPE'] = 'shared_library'
348 if win32:
349 target['EXT'] = ''
350 else:
351 target['EXT'] = '.so'
352 output.write(HOST_EXE_TARGET % target)
353 else:
354 output.write(HOST_LIB_TARGET % target)
355
356 output.write(' ],\n}\n')
357
358 print('Writing: ' + outfile)
359 open(outfile, 'w').write(output.getvalue())
360
361
362 def main(args):
363 parser = argparse.ArgumentParser()
364 parser.add_argument('-o', help='Set output filename.', dest='output')
365 parser.add_argument('dsc', help='dsc to convert')
366 options = parser.parse_args(args)
367
368 if options.output:
369 outdir = os.path.dirname(options.output)
370 if not os.path.exists(outdir):
371 os.makedirs(outdir)
372
373 ProcessDSC(options.dsc, options.output)
374 return 0
375
376
377 if __name__ == '__main__':
378 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « native_client_sdk/src/build_tools/build_sdk.py ('k') | native_client_sdk/src/build_tools/nacl.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698