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

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 """
29
23 GLIBC_DEFAULTS = """ 30 GLIBC_DEFAULTS = """
24 GLIBC_CC?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-gcc -c 31 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 32 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 33 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 34 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 35 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 36 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 37 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 38 GLIBC_CCFLAGS?=-MMD -pthread $(NACL_WARNINGS) -idirafter $(NACL_SDK_ROOT)/includ e
32 GLIBC_LDFLAGS?=-pthread 39 GLIBC_LDFLAGS?=-pthread
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 '<tc>/<config>/<proj>_arm.nexe', 205 '<tc>/<config>/<proj>_arm.nexe',
199 'SO': None, 206 'SO': None,
200 'LIB': '$(NACL_SDK_ROOT)/lib/<libdir>/<config>/lib<proj>.a', 207 'LIB': '$(NACL_SDK_ROOT)/lib/<libdir>/<config>/lib<proj>.a',
201 } 208 }
202 209
203 210
204 # 211 #
205 # Various Architectures 212 # Various Architectures
206 # 213 #
207 LINUX = { 214 LINUX = {
208 '<arch>': '', 215 '<arch>': 'linux',
209 '<ARCH>': '', 216 '<ARCH>': '',
210 '<MACH>': '', 217 '<MACH>': '',
211 } 218 }
212 NACL_X86_32 = { 219 NACL_X86_32 = {
213 '<arch>': '32', 220 '<arch>': 'x86',
214 '<ARCH>': 'x86_32', 221 '<ARCH>': 'x86_32',
215 '<MACH>': '-m32', 222 '<MACH>': '-m32',
216 } 223 }
217 NACL_X86_64 = { 224 NACL_X86_64 = {
218 '<arch>': '64', 225 '<arch>': 'x64',
219 '<ARCH>': 'x86_64', 226 '<ARCH>': 'x86_64',
220 '<MACH>': '-m64', 227 '<MACH>': '-m64',
221 } 228 }
222 NACL_PNACL = { 229 NACL_PNACL = {
223 '<arch>': 'pnacl', 230 '<arch>': 'pnacl',
224 '<MACH>': '', 231 '<MACH>': '',
225 } 232 }
233 NACL_ARM = {
234 '<arch>': 'arm',
235 '<ARCH>': 'arm',
236 '<MACH>': '',
237 # override the default NACL toolchain
238 '<TOOLSET>': 'ARM',
239 }
226 WIN_32 = { 240 WIN_32 = {
227 '<arch>': '', 241 '<arch>': '',
228 '<ARCH>': 'x86_32', 242 '<ARCH>': 'x86_32',
229 '<MACH>': '', 243 '<MACH>': '',
230 } 244 }
231 245
232 246
233 BUILD_RULES = { 247 BUILD_RULES = {
234 'newlib' : { 248 'newlib' : {
235 'ARCHES': [NACL_X86_32, NACL_X86_64], 249 'ARCHES': [NACL_X86_32, NACL_X86_64, NACL_ARM],
236 'DEFS': NEWLIB_DEFAULTS, 250 'DEFS': NEWLIB_DEFAULTS + ARM_DEFAULTS,
237 'CC' : NACL_CC_RULES, 251 'CC' : NACL_CC_RULES,
238 'CXX' : NACL_CC_RULES, 252 'CXX' : NACL_CC_RULES,
239 'NMF' : NMF_RULE, 253 'NMF' : NMF_RULE,
240 'MAIN': NEXE_LINK_RULES, 254 'MAIN': NEXE_LINK_RULES,
241 'LIB': POSIX_LIB_RULES, 255 'LIB': POSIX_LIB_RULES,
242 'SO' : None, 256 'SO' : None,
243 'TOOL': NACL_TOOL, 257 'TOOL': NACL_TOOL,
244 }, 258 },
245 'glibc' : { 259 'glibc' : {
246 'ARCHES': [NACL_X86_32, NACL_X86_64], 260 'ARCHES': [NACL_X86_32, NACL_X86_64],
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 304
291 class MakeRules(object): 305 class MakeRules(object):
292 """MakeRules generates Tool, Config, and Arch dependend makefile settings. 306 """MakeRules generates Tool, Config, and Arch dependend makefile settings.
293 307
294 The MakeRules object generates strings used in the makefile based on the 308 The MakeRules object generates strings used in the makefile based on the
295 current object settings such as toolchain, configuration, architecture... 309 current object settings such as toolchain, configuration, architecture...
296 It stores settings such as includes, defines, and lists, and converts them 310 It stores settings such as includes, defines, and lists, and converts them
297 to the appropriate format whenever the toolchain changes. 311 to the appropriate format whenever the toolchain changes.
298 """ 312 """
299 313
300 def __init__(self, tc, cfg=None, arch=None): 314 def __init__(self, tc):
301 self.tc = tc 315 self.tc = tc
302 self.project = '' 316 self.project = ''
303 self.cfg = '' 317 self.cfg = ''
304 self.arch = ''
305 self.ptype = '' 318 self.ptype = ''
306 self.arch_ext = '' 319 self.arch_ext = ''
307 self.defines = [] 320 self.defines = []
308 self.includes = [] 321 self.includes = []
309 self.libraries = [] 322 self.libraries = []
310 self.vars = { 323 self.vars = {
311 '<TAB>': '\t', 324 '<TAB>': '\t',
312 } 325 }
313 self.SetToolchain(tc) 326 self.SetToolchain(tc)
314 if cfg:
315 self.SetConfig(cfg)
316 if arch:
317 self.SetArch(arch)
318 327
319 def _BuildList(self, key, items): 328 def _BuildList(self, key, items):
320 pattern = BUILD_RULES[self.tc]['TOOL'][key] 329 pattern = BUILD_RULES[self.tc]['TOOL'][key]
321 if pattern and items: 330 if pattern and items:
322 items = [pattern % item for item in items] 331 items = [pattern % item for item in items]
323 return ' '.join(items) 332 return ' '.join(items)
324 return '' 333 return ''
325 334
326 def BuildDefaults(self): 335 def BuildDefaults(self):
327 return BUILD_RULES[self.tc]['DEFS'] 336 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))' % ( 373 sub_str = '$(patsubst %%,%s/%s/%%%s.o,$(%s_OBJS))' % (
365 self.tc, self.cfg, self.arch_ext, self.project.upper()) 374 self.tc, self.cfg, self.arch_ext, self.project.upper())
366 return '%s:=%s\n' % (obj_list, sub_str) 375 return '%s:=%s\n' % (obj_list, sub_str)
367 376
368 def GetArches(self): 377 def GetArches(self):
369 return BUILD_RULES[self.tc]['ARCHES'] 378 return BUILD_RULES[self.tc]['ARCHES']
370 379
371 def GetObjectList(self): 380 def GetObjectList(self):
372 return '%s_%s_%s%s_O' % (self.project.upper(), self.tc.upper(), 381 return '%s_%s_%s%s_O' % (self.project.upper(), self.tc.upper(),
373 self.cfg.upper(), self.arch_ext) 382 self.cfg.upper(), self.arch_ext)
374
375 def GetPepperPlugin(self): 383 def GetPepperPlugin(self):
376 plugin = self.Replace(BUILD_RULES[self.tc]['TOOL']['MAIN']) 384 plugin = self.Replace(BUILD_RULES[self.tc]['TOOL']['MAIN'])
377 text = 'PPAPI_<CONFIG>:=$(abspath %s)' % plugin 385 text = 'PPAPI_<CONFIG>:=$(abspath %s)' % plugin
378 text += ';application/x-ppapi-%s\n' % self.vars['<config>'].lower() 386 text += ';application/x-ppapi-%s\n' % self.vars['<config>'].lower()
379 return self.Replace(text) 387 return self.Replace(text)
380 388
381
382 def SetArch(self, arch): 389 def SetArch(self, arch):
383 self.arch = arch
384 for key in arch: 390 for key in arch:
385 self.vars[key] = arch[key] 391 self.vars[key] = arch[key]
386 if '<ARCH>' in self.vars: 392 if '<ARCH>' in self.vars:
387 self.arch_ext = "_" + self.arch['<ARCH>'] 393 self.arch_ext = "_" + arch['<ARCH>']
388 self.vars['<libdir>'] = "%s_%s" % (self.tc, self.vars['<ARCH>']) 394 self.vars['<libdir>'] = "%s_%s" % (self.tc, self.vars['<ARCH>'])
389 else: 395 else:
390 self.vars['<libdir>'] = self.tc 396 self.vars['<libdir>'] = self.tc
391 397
398 toolset = arch.get('<TOOLSET>', self.tc.upper())
399 self.SetTools(toolset)
400
392 def SetConfig(self, config): 401 def SetConfig(self, config):
393 self.cfg = config 402 self.cfg = config
394 self.vars['<config>'] = config 403 self.vars['<config>'] = config
395 self.vars['<CONFIG>'] = config.upper() 404 self.vars['<CONFIG>'] = config.upper()
396 405
397 def SetDefines(self, defs): 406 def SetDefines(self, defs):
398 self.defines = defs 407 self.defines = defs
399 self.vars['<DEFLIST>'] = self._BuildList('DEFINE', defs) 408 self.vars['<DEFLIST>'] = self._BuildList('DEFINE', defs)
400 409
401 def SetIncludes(self, incs): 410 def SetIncludes(self, incs):
(...skipping 15 matching lines...) Expand all
417 426
418 def SetSource(self, src): 427 def SetSource(self, src):
419 self.vars['<src>'] = src 428 self.vars['<src>'] = src
420 429
421 def SetToolchain(self, tc): 430 def SetToolchain(self, tc):
422 TC = tc.upper() 431 TC = tc.upper()
423 if tc in ('linux', 'win'): 432 if tc in ('linux', 'win'):
424 tcname = 'host' 433 tcname = 'host'
425 else: 434 else:
426 tcname = tc 435 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 436 self.vars['<tc>'] = tc
432 self.vars['<tcname>'] = tcname 437 self.vars['<tcname>'] = tcname
433 self.vars['<TC>'] = TC 438 self.vars['<TC>'] = TC
434 self.SetDefines(self.defines) 439 self.SetDefines(self.defines)
435 self.SetIncludes(self.includes) 440 self.SetIncludes(self.includes)
436 self.SetLibraries(self.libraries) 441 self.SetLibraries(self.libraries)
437 442
443 def SetTools(self, toolname):
444 self.vars['<CC>'] = '%s_CC' % toolname
445 self.vars['<CXX>'] = '%s_CXX' % toolname
446 self.vars['<LIB>'] = '%s_LIB' % toolname
447 self.vars['<LINK>'] = '%s_LINK' % toolname
448
438 def SetVars(self, **kwargs): 449 def SetVars(self, **kwargs):
439 # Add other passed in replacements 450 # Add other passed in replacements
440 for key in kwargs: 451 for key in kwargs:
441 self.vars['<%s>' % key] = kwargs[key] 452 self.vars['<%s>' % key] = kwargs[key]
442 453
443 def Replace(self, text): 454 def Replace(self, text):
444 return Replace(text, self.vars) 455 return Replace(text, self.vars)
445 456
446 457
447 def Replace(text, replacements): 458 def Replace(text, replacements):
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 replace['<ARCH>'] = arch['<ARCH>'] 506 replace['<ARCH>'] = arch['<ARCH>']
496 for dll in dlls: 507 for dll in dlls:
497 replace['<proj>'] = dll 508 replace['<proj>'] = dll
498 nmf_targets.append(Replace(dll_target, replace)) 509 nmf_targets.append(Replace(dll_target, replace))
499 replace['<proj>'] = main 510 replace['<proj>'] = main
500 nmf_targets.append(Replace(target, replace)) 511 nmf_targets.append(Replace(target, replace))
501 512
502 replace['<NMF_TARGETS>'] = ' '.join(nmf_targets) 513 replace['<NMF_TARGETS>'] = ' '.join(nmf_targets)
503 rules = Replace(BUILD_RULES[tc]['NMF'], replace) 514 rules = Replace(BUILD_RULES[tc]['NMF'], replace)
504 return '\nALL_TARGETS+=%s/%s/%s.nmf' % (tc, cfg, main) + rules + '\n' 515 return '\nALL_TARGETS+=%s/%s/%s.nmf' % (tc, cfg, main) + rules + '\n'
OLDNEW
« no previous file with comments | « native_client_sdk/src/build_tools/generate_make.py ('k') | native_client_sdk/src/libraries/gtest/library.dsc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698