Skip to content

Commit

Permalink
Differentiate ASM and CXX symbols as they are not treated the same in…
Browse files Browse the repository at this point in the history
… ARMCC and IAR compilers
  • Loading branch information
screamerbg committed Aug 4, 2016
1 parent 68d48ea commit 88564a9
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 48 deletions.
77 changes: 46 additions & 31 deletions tools/toolchains/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,8 @@ def __init__(self, target, options=None, notify=None, macros=None, silent=False,
self.macros = macros or []

# Macros generated from toolchain and target rules/features
self.symbols = None
self.asm_symbols = None
self.cxx_symbols = None

# Labels generated from toolchain and target rules/features (used for selective build)
self.labels = None
Expand Down Expand Up @@ -372,36 +373,50 @@ def notify(self, event):
event['toolchain'] = self
return self.notify_fun(event, self.silent)

def get_symbols(self):
if self.symbols is None:
# Target and Toolchain symbols
labels = self.get_labels()
self.symbols = ["TARGET_%s" % t for t in labels['TARGET']]
self.symbols.extend(["TOOLCHAIN_%s" % t for t in labels['TOOLCHAIN']])

# Cortex CPU symbols
if self.target.core in mbedToolchain.CORTEX_SYMBOLS:
self.symbols.extend(mbedToolchain.CORTEX_SYMBOLS[self.target.core])

# Symbols defined by the on-line build.system
self.symbols.extend(['MBED_BUILD_TIMESTAMP=%s' % self.timestamp, 'TARGET_LIKE_MBED', '__MBED__=1'])
if MBED_ORG_USER:
self.symbols.append('MBED_USERNAME=' + MBED_ORG_USER)

# Add target's symbols
self.symbols += self.target.macros
# Add target's hardware
self.symbols += ["DEVICE_" + data + "=1" for data in self.target.device_has]
# Add target's features
self.symbols += ["FEATURE_" + data + "=1" for data in self.target.features]
# Add extra symbols passed via 'macros' parameter
self.symbols += self.macros

# Form factor variables
if hasattr(self.target, 'supported_form_factors'):
self.symbols.extend(["TARGET_FF_%s" % t for t in self.target.supported_form_factors])

return list(set(self.symbols)) # Return only unique symbols
def get_symbols(self, for_asm=False):
if for_asm:
if self.asm_symbols is None:
self.asm_symbols = []

# Cortex CPU symbols
if self.target.core in mbedToolchain.CORTEX_SYMBOLS:
self.asm_symbols.extend(mbedToolchain.CORTEX_SYMBOLS[self.target.core])

# Add target's symbols
self.asm_symbols += self.target.macros
# Add extra symbols passed via 'macros' parameter
self.asm_symbols += self.macros
return list(set(self.asm_symbols)) # Return only unique symbols
else:
if self.cxx_symbols is None:
# Target and Toolchain symbols
labels = self.get_labels()
self.cxx_symbols = ["TARGET_%s" % t for t in labels['TARGET']]
self.cxx_symbols.extend(["TOOLCHAIN_%s" % t for t in labels['TOOLCHAIN']])

# Cortex CPU symbols
if self.target.core in mbedToolchain.CORTEX_SYMBOLS:
self.cxx_symbols.extend(mbedToolchain.CORTEX_SYMBOLS[self.target.core])

# Symbols defined by the on-line build.system
self.cxx_symbols.extend(['MBED_BUILD_TIMESTAMP=%s' % self.timestamp, 'TARGET_LIKE_MBED', '__MBED__=1'])
if MBED_ORG_USER:
self.cxx_symbols.append('MBED_USERNAME=' + MBED_ORG_USER)

# Add target's symbols
self.cxx_symbols += self.target.macros
# Add target's hardware
self.cxx_symbols += ["DEVICE_" + data + "=1" for data in self.target.device_has]
# Add target's features
self.cxx_symbols += ["FEATURE_" + data + "=1" for data in self.target.features]
# Add extra symbols passed via 'macros' parameter
self.cxx_symbols += self.macros

# Form factor variables
if hasattr(self.target, 'supported_form_factors'):
self.cxx_symbols.extend(["TARGET_FF_%s" % t for t in self.target.supported_form_factors])

return list(set(self.cxx_symbols)) # Return only unique symbols

# Extend the internal list of macros
def add_macros(self, new_macros):
Expand Down
11 changes: 6 additions & 5 deletions tools/toolchains/arm.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,16 +128,17 @@ def get_dep_option(self, object):
def get_config_option(self, config_header):
return ['--preinclude=' + config_header]

def get_compile_options(self, defines, includes):
def get_compile_options(self, defines, includes, for_asm=False):
opts = ['-D%s' % d for d in defines]
if self.RESPONSE_FILES:
opts += ['--via', self.get_inc_file(includes)]
else:
opts += ["-I%s" % i for i in includes]

config_header = self.get_config_header()
if config_header is not None:
opts = opts + self.get_config_option(config_header)
if not for_asm:
config_header = self.get_config_header()
if config_header is not None:
opts = opts + self.get_config_option(config_header)
return opts

@hook_tool
Expand All @@ -148,7 +149,7 @@ def assemble(self, source, object, includes):
tempfile = join(dir, basename(object) + '.E.s')

# Build preprocess assemble command
cmd_pre = self.asm + self.get_compile_options(self.get_symbols(), includes) + ["-E", "-o", tempfile, source]
cmd_pre = self.asm + self.get_compile_options(self.get_symbols(True), includes) + ["-E", "-o", tempfile, source]

# Build main assemble command
cmd = self.asm + ["-o", object, tempfile]
Expand Down
11 changes: 6 additions & 5 deletions tools/toolchains/gcc.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,22 +170,23 @@ def get_dep_option(self, object):
def get_config_option(self, config_header):
return ['-include', config_header]

def get_compile_options(self, defines, includes):
def get_compile_options(self, defines, includes, for_asm=False):
opts = ['-D%s' % d for d in defines]
if self.RESPONSE_FILES:
opts += ['@%s' % self.get_inc_file(includes)]
else:
opts += ["-I%s" % i for i in includes]

config_header = self.get_config_header()
if config_header is not None:
opts = opts + self.get_config_option(config_header)
if not for_asm:
config_header = self.get_config_header()
if config_header is not None:
opts = opts + self.get_config_option(config_header)
return opts

@hook_tool
def assemble(self, source, object, includes):
# Build assemble command
cmd = self.asm + self.get_compile_options(self.get_symbols(), includes) + ["-o", object, source]
cmd = self.asm + self.get_compile_options(self.get_symbols(True), includes) + ["-o", object, source]

# Call cmdline hook
cmd = self.hook.get_cmdline_assembler(cmd)
Expand Down
9 changes: 2 additions & 7 deletions tools/toolchains/iar.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,12 +151,7 @@ def get_compile_options(self, defines, includes, for_asm=False):
else:
opts += ["-I%s" % i for i in includes]

config_header = self.get_config_header()
if for_asm:
# The assembler doesn't support '--preinclude', so we need to add
# the macros directly
opts = opts + ['-D%s' % d for d in self.get_config_macros()]
else:
if not for_asm:
config_header = self.get_config_header()
if config_header is not None:
opts = opts + self.get_config_option(config_header)
Expand All @@ -165,7 +160,7 @@ def get_compile_options(self, defines, includes, for_asm=False):
@hook_tool
def assemble(self, source, object, includes):
# Build assemble command
cmd = self.asm + self.get_compile_options(self.get_symbols(), includes, for_asm=True) + ["-o", object, source]
cmd = self.asm + self.get_compile_options(self.get_symbols(True), includes, True) + ["-o", object, source]

# Call cmdline hook
cmd = self.hook.get_cmdline_assembler(cmd)
Expand Down

0 comments on commit 88564a9

Please sign in to comment.