| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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' |
| OLD | NEW |