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

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

Issue 11280256: [NaCl SDK] Add arm gcc toolchain support to the SDK (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years 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 | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import os 6 import os
7 7
8 # pylint: disable=C0301 8 # pylint: disable=C0301
9 # This file contains lines longer than 80 9 # This file contains lines longer than 80
10 10
11 # 11 #
12 # Default macros for various platforms. 12 # Default macros for various platforms.
13 # 13 #
14 NEWLIB_DEFAULTS = """ 14 NEWLIB_DEFAULTS = """
15 NEWLIB_CC?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-gcc -c 15 NEWLIB_CC?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-gcc -c
16 NEWLIB_CXX?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-g++ -c 16 NEWLIB_CXX?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-g++ -c
17 NEWLIB_LINK?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-g++ -Wl,-as-needed 17 NEWLIB_LINK?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-g++ -Wl,-as-needed
18 NEWLIB_LIB?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-ar r 18 NEWLIB_LIB?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-ar r
19 NEWLIB_CCFLAGS?=-MMD -pthread $(NACL_WARNINGS) -idirafter $(NACL_SDK_ROOT)/inclu de 19 NEWLIB_CCFLAGS?=-MMD -pthread $(NACL_WARNINGS) -idirafter $(NACL_SDK_ROOT)/inclu de
20 NEWLIB_LDFLAGS?=-pthread 20 NEWLIB_LDFLAGS?=-pthread
21 """ 21 """
22 22
23 ARM_DEFAULTS = """
24 ARM_CC?=$(TC_PATH)/$(OSNAME)_arm_newlib/bin/arm-nacl-gcc -c
25 ARM_CXX?=$(TC_PATH)/$(OSNAME)_arm_newlib/bin/arm-nacl-g++ -c
26 ARM_LINK?=$(TC_PATH)/$(OSNAME)_arm_newlib/bin/arm-nacl-g++ -Wl,-as-needed
27 ARM_LIB?=$(TC_PATH)/$(OSNAME)_arm_newlib/bin/arm-nacl-ar r
28 ARM_CCFLAGS?=-MMD -pthread $(NACL_WARNINGS) -idirafter $(NACL_SDK_ROOT)/include
29 ARM_LDFLAGS?=-pthread
30 """
31
23 GLIBC_DEFAULTS = """ 32 GLIBC_DEFAULTS = """
24 GLIBC_CC?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-gcc -c 33 GLIBC_CC?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-gcc -c
25 GLIBC_CXX?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-g++ -c 34 GLIBC_CXX?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-g++ -c
26 GLIBC_LINK?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-g++ -Wl,-as-needed 35 GLIBC_LINK?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-g++ -Wl,-as-needed
27 GLIBC_LIB?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-ar r 36 GLIBC_LIB?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-ar r
28 GLIBC_DUMP?=$(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/bin/objdump 37 GLIBC_DUMP?=$(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/bin/objdump
29 GLIBC_PATHS:=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib32 38 GLIBC_PATHS:=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib32
30 GLIBC_PATHS+=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib 39 GLIBC_PATHS+=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib
31 GLIBC_CCFLAGS?=-MMD -pthread $(NACL_WARNINGS) -idirafter $(NACL_SDK_ROOT)/includ e 40 GLIBC_CCFLAGS?=-MMD -pthread $(NACL_WARNINGS) -idirafter $(NACL_SDK_ROOT)/includ e
32 GLIBC_LDFLAGS?=-pthread 41 GLIBC_LDFLAGS?=-pthread
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 } 225 }
217 NACL_X86_64 = { 226 NACL_X86_64 = {
218 '<arch>': '64', 227 '<arch>': '64',
219 '<ARCH>': 'x86_64', 228 '<ARCH>': 'x86_64',
220 '<MACH>': '-m64', 229 '<MACH>': '-m64',
221 } 230 }
222 NACL_PNACL = { 231 NACL_PNACL = {
223 '<arch>': 'pnacl', 232 '<arch>': 'pnacl',
224 '<MACH>': '', 233 '<MACH>': '',
225 } 234 }
235 NACL_ARM = {
236 '<ARCH>': 'arm',
237 '<MACH>': '',
238 # override the default NACL toolchain
239 'TOOLSET': 'ARM',
240 }
226 WIN_32 = { 241 WIN_32 = {
227 '<arch>': '', 242 '<arch>': '',
228 '<ARCH>': 'x86_32', 243 '<ARCH>': 'x86_32',
229 '<MACH>': '', 244 '<MACH>': '',
230 } 245 }
231 246
232 247
233 BUILD_RULES = { 248 BUILD_RULES = {
234 'newlib' : { 249 'newlib' : {
235 'ARCHES': [NACL_X86_32, NACL_X86_64], 250 'ARCHES': [NACL_X86_32, NACL_X86_64, NACL_ARM],
236 'DEFS': NEWLIB_DEFAULTS, 251 'DEFS': NEWLIB_DEFAULTS + ARM_DEFAULTS,
237 'CC' : NACL_CC_RULES, 252 'CC' : NACL_CC_RULES,
238 'CXX' : NACL_CC_RULES, 253 'CXX' : NACL_CC_RULES,
239 'NMF' : NMF_RULE, 254 'NMF' : NMF_RULE,
240 'MAIN': NEXE_LINK_RULES, 255 'MAIN': NEXE_LINK_RULES,
241 'LIB': POSIX_LIB_RULES, 256 'LIB': POSIX_LIB_RULES,
242 'SO' : None, 257 'SO' : None,
243 'TOOL': NACL_TOOL, 258 'TOOL': NACL_TOOL,
244 }, 259 },
245 'glibc' : { 260 'glibc' : {
246 'ARCHES': [NACL_X86_32, NACL_X86_64], 261 'ARCHES': [NACL_X86_32, NACL_X86_64],
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 305
291 class MakeRules(object): 306 class MakeRules(object):
292 """MakeRules generates Tool, Config, and Arch dependend makefile settings. 307 """MakeRules generates Tool, Config, and Arch dependend makefile settings.
293 308
294 The MakeRules object generates strings used in the makefile based on the 309 The MakeRules object generates strings used in the makefile based on the
295 current object settings such as toolchain, configuration, architecture... 310 current object settings such as toolchain, configuration, architecture...
296 It stores settings such as includes, defines, and lists, and converts them 311 It stores settings such as includes, defines, and lists, and converts them
297 to the appropriate format whenever the toolchain changes. 312 to the appropriate format whenever the toolchain changes.
298 """ 313 """
299 314
300 def __init__(self, tc, cfg=None, arch=None): 315 def __init__(self, tc):
301 self.tc = tc 316 self.tc = tc
302 self.project = '' 317 self.project = ''
303 self.cfg = '' 318 self.cfg = ''
304 self.arch = ''
305 self.ptype = '' 319 self.ptype = ''
306 self.arch_ext = '' 320 self.arch_ext = ''
307 self.defines = [] 321 self.defines = []
308 self.includes = [] 322 self.includes = []
309 self.libraries = [] 323 self.libraries = []
310 self.vars = { 324 self.vars = {
311 '<TAB>': '\t', 325 '<TAB>': '\t',
312 } 326 }
313 self.SetToolchain(tc) 327 self.SetToolchain(tc)
314 if cfg:
315 self.SetConfig(cfg)
316 if arch:
317 self.SetArch(arch)
318 328
319 def _BuildList(self, key, items): 329 def _BuildList(self, key, items):
320 pattern = BUILD_RULES[self.tc]['TOOL'][key] 330 pattern = BUILD_RULES[self.tc]['TOOL'][key]
321 if pattern and items: 331 if pattern and items:
322 items = [pattern % item for item in items] 332 items = [pattern % item for item in items]
323 return ' '.join(items) 333 return ' '.join(items)
324 return '' 334 return ''
325 335
326 def BuildDefaults(self): 336 def BuildDefaults(self):
327 return BUILD_RULES[self.tc]['DEFS'] 337 return BUILD_RULES[self.tc]['DEFS']
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 sub_str = '$(patsubst %%,%s/%s/%%%s.o,$(%s_OBJS))' % ( 374 sub_str = '$(patsubst %%,%s/%s/%%%s.o,$(%s_OBJS))' % (
365 self.tc, self.cfg, self.arch_ext, self.project.upper()) 375 self.tc, self.cfg, self.arch_ext, self.project.upper())
366 return '%s:=%s\n' % (obj_list, sub_str) 376 return '%s:=%s\n' % (obj_list, sub_str)
367 377
368 def GetArches(self): 378 def GetArches(self):
369 return BUILD_RULES[self.tc]['ARCHES'] 379 return BUILD_RULES[self.tc]['ARCHES']
370 380
371 def GetObjectList(self): 381 def GetObjectList(self):
372 return '%s_%s_%s%s_O' % (self.project.upper(), self.tc.upper(), 382 return '%s_%s_%s%s_O' % (self.project.upper(), self.tc.upper(),
373 self.cfg.upper(), self.arch_ext) 383 self.cfg.upper(), self.arch_ext)
374
375 def GetPepperPlugin(self): 384 def GetPepperPlugin(self):
376 plugin = self.Replace(BUILD_RULES[self.tc]['TOOL']['MAIN']) 385 plugin = self.Replace(BUILD_RULES[self.tc]['TOOL']['MAIN'])
377 text = 'PPAPI_<CONFIG>:=$(abspath %s)' % plugin 386 text = 'PPAPI_<CONFIG>:=$(abspath %s)' % plugin
378 text += ';application/x-ppapi-%s\n' % self.vars['<config>'].lower() 387 text += ';application/x-ppapi-%s\n' % self.vars['<config>'].lower()
379 return self.Replace(text) 388 return self.Replace(text)
380 389
381
382 def SetArch(self, arch): 390 def SetArch(self, arch):
383 self.arch = arch
384 for key in arch: 391 for key in arch:
385 self.vars[key] = arch[key] 392 self.vars[key] = arch[key]
386 if '<ARCH>' in self.vars: 393 if '<ARCH>' in self.vars:
387 self.arch_ext = "_" + self.arch['<ARCH>'] 394 self.arch_ext = "_" + arch['<ARCH>']
388 self.vars['<libdir>'] = "%s_%s" % (self.tc, self.vars['<ARCH>']) 395 self.vars['<libdir>'] = "%s_%s" % (self.tc, self.vars['<ARCH>'])
389 else: 396 else:
390 self.vars['<libdir>'] = self.tc 397 self.vars['<libdir>'] = self.tc
391 398
399 toolset = arch.get('TOOLSET', self.tc.upper())
400 self.SetTools(toolset)
401
392 def SetConfig(self, config): 402 def SetConfig(self, config):
393 self.cfg = config 403 self.cfg = config
394 self.vars['<config>'] = config 404 self.vars['<config>'] = config
395 self.vars['<CONFIG>'] = config.upper() 405 self.vars['<CONFIG>'] = config.upper()
396 406
397 def SetDefines(self, defs): 407 def SetDefines(self, defs):
398 self.defines = defs 408 self.defines = defs
399 self.vars['<DEFLIST>'] = self._BuildList('DEFINE', defs) 409 self.vars['<DEFLIST>'] = self._BuildList('DEFINE', defs)
400 410
401 def SetIncludes(self, incs): 411 def SetIncludes(self, incs):
(...skipping 15 matching lines...) Expand all
417 427
418 def SetSource(self, src): 428 def SetSource(self, src):
419 self.vars['<src>'] = src 429 self.vars['<src>'] = src
420 430
421 def SetToolchain(self, tc): 431 def SetToolchain(self, tc):
422 TC = tc.upper() 432 TC = tc.upper()
423 if tc in ('linux', 'win'): 433 if tc in ('linux', 'win'):
424 tcname = 'host' 434 tcname = 'host'
425 else: 435 else:
426 tcname = tc 436 tcname = tc
427 self.vars['<CC>'] = '%s_CC' % TC
428 self.vars['<CXX>'] = '%s_CXX' % TC
429 self.vars['<LIB>'] = '%s_LIB' % TC
430 self.vars['<LINK>'] = '%s_LINK' % TC
431 self.vars['<tc>'] = tc 437 self.vars['<tc>'] = tc
432 self.vars['<tcname>'] = tcname 438 self.vars['<tcname>'] = tcname
433 self.vars['<TC>'] = TC 439 self.vars['<TC>'] = TC
434 self.SetDefines(self.defines) 440 self.SetDefines(self.defines)
435 self.SetIncludes(self.includes) 441 self.SetIncludes(self.includes)
436 self.SetLibraries(self.libraries) 442 self.SetLibraries(self.libraries)
437 443
444 def SetTools(self, toolname):
445 self.vars['<CC>'] = '%s_CC' % toolname
446 self.vars['<CXX>'] = '%s_CXX' % toolname
447 self.vars['<LIB>'] = '%s_LIB' % toolname
448 self.vars['<LINK>'] = '%s_LINK' % toolname
449
438 def SetVars(self, **kwargs): 450 def SetVars(self, **kwargs):
439 # Add other passed in replacements 451 # Add other passed in replacements
440 for key in kwargs: 452 for key in kwargs:
441 self.vars['<%s>' % key] = kwargs[key] 453 self.vars['<%s>' % key] = kwargs[key]
442 454
443 def Replace(self, text): 455 def Replace(self, text):
444 return Replace(text, self.vars) 456 return Replace(text, self.vars)
445 457
446 458
447 def Replace(text, replacements): 459 def Replace(text, replacements):
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 replace['<ARCH>'] = arch['<ARCH>'] 507 replace['<ARCH>'] = arch['<ARCH>']
496 for dll in dlls: 508 for dll in dlls:
497 replace['<proj>'] = dll 509 replace['<proj>'] = dll
498 nmf_targets.append(Replace(dll_target, replace)) 510 nmf_targets.append(Replace(dll_target, replace))
499 replace['<proj>'] = main 511 replace['<proj>'] = main
500 nmf_targets.append(Replace(target, replace)) 512 nmf_targets.append(Replace(target, replace))
501 513
502 replace['<NMF_TARGETS>'] = ' '.join(nmf_targets) 514 replace['<NMF_TARGETS>'] = ' '.join(nmf_targets)
503 rules = Replace(BUILD_RULES[tc]['NMF'], replace) 515 rules = Replace(BUILD_RULES[tc]['NMF'], replace)
504 return '\nALL_TARGETS+=%s/%s/%s.nmf' % (tc, cfg, main) + rules + '\n' 516 return '\nALL_TARGETS+=%s/%s/%s.nmf' % (tc, cfg, main) + rules + '\n'
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698