From 4168779361ccb557657fac241f7be9dba78a7b69 Mon Sep 17 00:00:00 2001 From: 0xc0170 Date: Mon, 25 Apr 2016 17:20:36 +0100 Subject: [PATCH 1/2] uvision - flags dict creation All flags for uvision are in one dictionary, therefore an exporter or external scripts can get those and use. --- workspace_tools/toolchains/arm.py | 52 +++++++++++++++---------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/workspace_tools/toolchains/arm.py b/workspace_tools/toolchains/arm.py index 19baf30ec91..4a072c7a20c 100644 --- a/workspace_tools/toolchains/arm.py +++ b/workspace_tools/toolchains/arm.py @@ -30,6 +30,16 @@ class ARM(mbedToolchain): DIAGNOSTIC_PATTERN = re.compile('"(?P[^"]+)", line (?P\d+)( \(column (?P\d+)\)|): (?PWarning|Error): (?P.+)') DEP_PATTERN = re.compile('\S+:\s(?P.+)\n') + DEFAULT_FLAGS = { + 'common': ["-c", "--gnu", "-Otime", "--split_sections", "--apcs=interwork", + "--brief_diagnostics", "--restrict", "--multibyte_chars"], + 'asm': ['-I%s' % ARM_INC], + 'c': ["--md", "--no_depend_system_headers", '-I%s' % ARM_INC, + "--c99", "-D__ASSERT_MSG" ], + 'cxx': ["--cpp", "--no_rtti", "-D__ASSERT_MSG"], + 'ld': [], + } + def __init__(self, target, options=None, notify=None, macros=None, silent=False, extra_verbose=False): mbedToolchain.__init__(self, target, options, notify, macros, silent, extra_verbose=extra_verbose) @@ -43,33 +53,25 @@ def __init__(self, target, options=None, notify=None, macros=None, silent=False, cpu = target.core main_cc = join(ARM_BIN, "armcc") - common = ["-c", - "--cpu=%s" % cpu, "--gnu", - "-Otime", "--split_sections", "--apcs=interwork", - "--brief_diagnostics", "--restrict", "--multibyte_chars" - ] + self.flags = self.DEFAULT_FLAGS + self.flags['common'] += ["--cpu=%s" % cpu] if "save-asm" in self.options: - common.extend(["--asm", "--interleave"]) + self.flags['common'].extend(["--asm", "--interleave"]) if "debug-info" in self.options: - common.append("-g") - common.append("-O0") + self.flags['common'].append("-g") + self.flags['common'].append("-O0") else: - common.append("-O3") - - common_c = [ - "--md", "--no_depend_system_headers", - '-I%s' % ARM_INC - ] + self.flags['common'].append("-O3") - self.asm = [main_cc] + common + ['-I%s' % ARM_INC] + self.asm = [main_cc] + self.flags['common'] + self.flags['asm'] if not "analyze" in self.options: - self.cc = [main_cc] + common + common_c + ["--c99"] - self.cppc = [main_cc] + common + common_c + ["--cpp", "--no_rtti"] + self.cc = [main_cc] + self.flags['common'] + self.flags['c'] + self.cppc = [main_cc] + self.flags['common'] + self.flags['c'] + self.flags['cxx'] else: - self.cc = [join(GOANNA_PATH, "goannacc"), "--with-cc=" + main_cc.replace('\\', '/'), "--dialect=armcc", '--output-format="%s"' % self.GOANNA_FORMAT] + common + common_c + ["--c99"] - self.cppc= [join(GOANNA_PATH, "goannac++"), "--with-cxx=" + main_cc.replace('\\', '/'), "--dialect=armcc", '--output-format="%s"' % self.GOANNA_FORMAT] + common + common_c + ["--cpp", "--no_rtti"] + self.cc = [join(GOANNA_PATH, "goannacc"), "--with-cc=" + main_cc.replace('\\', '/'), "--dialect=armcc", '--output-format="%s"' % self.GOANNA_FORMAT] + self.flags['common'] + self.flags['c'] + self.cppc= [join(GOANNA_PATH, "goannac++"), "--with-cxx=" + main_cc.replace('\\', '/'), "--dialect=armcc", '--output-format="%s"' % self.GOANNA_FORMAT] + self.flags['common'] + self.flags['c'] + self.flags['cxx'] self.ld = [join(ARM_BIN, "armlink")] self.sys_libs = [] @@ -151,8 +153,6 @@ def binary(self, resources, elf, bin): class ARM_STD(ARM): def __init__(self, target, options=None, notify=None, macros=None, silent=False, extra_verbose=False): ARM.__init__(self, target, options, notify, macros, silent, extra_verbose=extra_verbose) - self.cc += ["-D__ASSERT_MSG"] - self.cppc += ["-D__ASSERT_MSG"] self.ld.append("--libpath=%s" % ARM_LIB) @@ -163,17 +163,17 @@ def __init__(self, target, options=None, notify=None, macros=None, silent=False, ARM.__init__(self, target, options, notify, macros, silent, extra_verbose=extra_verbose) # Compiler - self.asm += ["-D__MICROLIB"] - self.cc += ["--library_type=microlib", "-D__MICROLIB", "-D__ASSERT_MSG"] - self.cppc += ["--library_type=microlib", "-D__MICROLIB", "-D__ASSERT_MSG"] + self.flags['asm'] += ["-D__MICROLIB"] + self.flags['c'] += ["--library_type=microlib", "-D__MICROLIB"] + self.flags['cxx'] += ["--library_type=microlib", "-D__MICROLIB"] # Linker - self.ld.append("--library_type=microlib") + self.flags['ld'].append("--library_type=microlib") # We had to patch microlib to add C++ support # In later releases this patch should have entered mainline if ARM_MICRO.PATCHED_LIBRARY: - self.ld.append("--noscanlib") + self.flags['ld'].append("--noscanlib") # System Libraries self.sys_libs.extend([join(MY_ARM_CLIB, lib+".l") for lib in ["mc_p", "mf_p", "m_ps"]]) From 690b8f0e8b196ef4d654d910ce6b491860919317 Mon Sep 17 00:00:00 2001 From: 0xc0170 Date: Mon, 25 Apr 2016 17:42:34 +0100 Subject: [PATCH 2/2] uvision exporter - use toolchain flags progen uses flags set by the toolchain, this should produce the same result within the build and an exporter project. --- workspace_tools/export/uvision4.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/workspace_tools/export/uvision4.py b/workspace_tools/export/uvision4.py index 148126438a3..d49dbbe44d5 100644 --- a/workspace_tools/export/uvision4.py +++ b/workspace_tools/export/uvision4.py @@ -64,6 +64,16 @@ def generate(self): project_data['tool_specific'] = {} project_data['tool_specific'].update(tool_specific) + + # get flags from toolchain and apply + project_data['tool_specific']['uvision']['misc'] = {} + project_data['tool_specific']['uvision']['misc']['asm_flags'] = self.toolchain.flags['common'] + self.toolchain.flags['asm'] + project_data['tool_specific']['uvision']['misc']['c_flags'] = self.toolchain.flags['common'] + self.toolchain.flags['c'] + # not compatible with c99 flag set in the template + project_data['tool_specific']['uvision']['misc']['c_flags'].remove("--c99") + project_data['tool_specific']['uvision']['misc']['cxx_flags'] = self.toolchain.flags['common'] + self.toolchain.flags['ld'] + project_data['tool_specific']['uvision']['misc']['ld_flags'] = self.toolchain.flags['ld'] + i = 0 for macro in project_data['common']['macros']: # armasm does not like floating numbers in macros, timestamp to int