def __init__(self, target, notify=None, macros=None, build_profile=None, build_dir=None, coverage_patterns=None): mbedToolchain.__init__( self, target, notify, macros, build_dir=build_dir, build_profile=build_profile) if target.core not in self.SUPPORTED_CORES: raise NotSupportedException( "this compiler does not support the core %s" % target.core) toolchain = "arm" if should_replace_small_c_lib(target, toolchain): target.c_lib = "std" self.check_c_lib_supported(target, toolchain) if ( getattr(target, "default_toolchain", "ARM") == "uARM" or getattr(target, "c_lib", "std") == "small" ): if "-DMBED_RTOS_SINGLE_THREAD" not in self.flags['common']: self.flags['common'].append("-DMBED_RTOS_SINGLE_THREAD") if "-D__MICROLIB" not in self.flags['common']: self.flags['common'].append("-D__MICROLIB") if "--library_type=microlib" not in self.flags['ld']: self.flags['ld'].append("--library_type=microlib") if "--library_type=microlib" not in self.flags['common']: self.flags['common'].append("--library_type=microlib") self.check_and_add_minimal_printf(target) cpu = { "Cortex-M0+": "Cortex-M0plus", "Cortex-M4F": "Cortex-M4.fp.sp", "Cortex-M7F": "Cortex-M7.fp.sp", "Cortex-M7FD": "Cortex-M7.fp.dp"}.get(target.core, target.core) ARM_BIN = join(TOOLCHAIN_PATHS['ARM'], "bin") main_cc = join(ARM_BIN, "armcc") self.flags['common'] += ["--cpu=%s" % cpu] self.asm = [main_cc] + self.flags['common'] + self.flags['asm'] self.cc = [main_cc] + self.flags['common'] + self.flags['c'] self.cppc = ( [main_cc] + self.flags['common'] + self.flags['c'] + self.flags['cxx'] ) self.ld = [join(ARM_BIN, "armlink")] + self.flags['ld'] self.ar = join(ARM_BIN, "armar") self.elf2bin = join(ARM_BIN, "fromelf") self.SHEBANG += " --cpu=%s" % cpu self.product_name = None
def __init__(self, target, *args, **kwargs): mbedToolchain.__init__(self, target, *args, **kwargs) if target.core not in self.SUPPORTED_CORES: raise NotSupportedException( "this compiler does not support the core %s" % target.core) if int(target.build_tools_metadata["version"]) > 0: if not set(("ARM", "ARMC6", "uARM")).intersection( set(target.supported_toolchains)): raise NotSupportedException( "ARM/ARMC6 compiler support is required for ARMC6 build") else: if not set(("ARM", "ARMC6")).intersection( set(target.supported_toolchains)): raise NotSupportedException( "ARM/ARMC6 compiler support is required for ARMC6 build") toolchain = "arm" if should_replace_small_c_lib(target, toolchain): target.c_lib = "std" self.check_c_lib_supported(target, toolchain) if (getattr(target, "default_toolchain", "ARMC6") == "uARM" or getattr(target, "c_lib", "std") == "small"): if "-DMBED_RTOS_SINGLE_THREAD" not in self.flags['common']: self.flags['common'].append("-DMBED_RTOS_SINGLE_THREAD") if "-D__MICROLIB" not in self.flags['common']: self.flags['common'].append("-D__MICROLIB") if "--library_type=microlib" not in self.flags['ld']: self.flags['ld'].append("--library_type=microlib") if "--library_type=microlib" not in self.flags['asm']: self.flags['asm'].append("--library_type=microlib") self.check_and_add_minimal_printf(target) if target.is_TrustZone_non_secure_target: # Add linking time preprocessor macro DOMAIN_NS # (DOMAIN_NS is passed to compiler and assembler via CORTEX_SYMBOLS # in mbedToolchain.get_symbols) define_string = self.make_ld_define("DOMAIN_NS", "0x1") self.flags["ld"].append(define_string) core = target.core_without_NS cpu = { "Cortex-M0+": "cortex-m0plus", "Cortex-M4F": "cortex-m4", "Cortex-M7F": "cortex-m7", "Cortex-M7FD": "cortex-m7", "Cortex-M33": "cortex-m33+nodsp", "Cortex-M33F": "cortex-m33+nodsp", "Cortex-M33E": "cortex-m33", "Cortex-M33FE": "cortex-m33" }.get(core, core) cpu = cpu.lower() self.flags['common'].append("-mcpu=%s" % cpu) self.SHEBANG += " -mcpu=%s" % cpu # FPU handling if core in ["Cortex-M4", "Cortex-M7", "Cortex-M33", "Cortex-M33E"]: self.flags['common'].append("-mfpu=none") elif core == "Cortex-M4F": self.flags['common'].append("-mfpu=fpv4-sp-d16") self.flags['common'].append("-mfloat-abi=hard") elif core == "Cortex-M7F" or core.startswith("Cortex-M33F"): self.flags['common'].append("-mfpu=fpv5-sp-d16") self.flags['common'].append("-mfloat-abi=hard") elif core == "Cortex-M7FD": self.flags['common'].append("-mfpu=fpv5-d16") self.flags['common'].append("-mfloat-abi=hard") asm_ld_cpu = { "Cortex-M0+": "Cortex-M0plus", "Cortex-M4": "Cortex-M4.no_fp", "Cortex-M4F": "Cortex-M4", "Cortex-M7": "Cortex-M7.no_fp", "Cortex-M7F": "Cortex-M7.fp.sp", "Cortex-M7FD": "Cortex-M7", "Cortex-M33": "Cortex-M33.no_dsp.no_fp", "Cortex-M33E": "Cortex-M33.no_fp", "Cortex-M33F": "Cortex-M33.no_dsp", "Cortex-M33FE": "Cortex-M33" }.get(core, core) self.flags['asm'].append("--cpu=%s" % asm_ld_cpu) self.flags['ld'].append("--cpu=%s" % asm_ld_cpu) self.cc = ([join(TOOLCHAIN_PATHS["ARMC6"], "armclang")] + self.flags['common'] + self.flags['c']) self.cppc = ([join(TOOLCHAIN_PATHS["ARMC6"], "armclang")] + self.flags['common'] + self.flags['cxx']) self.asm = [join(TOOLCHAIN_PATHS["ARMC6"], "armasm")] self.asm += self.flags['asm'] self.ld = [join(TOOLCHAIN_PATHS["ARMC6"], "armlink")] self.ld += self.flags['ld'] self.ar = join(TOOLCHAIN_PATHS["ARMC6"], "armar") self.elf2bin = join(TOOLCHAIN_PATHS["ARMC6"], "fromelf") # Adding this for safety since this inherits the `version_check` # function but does not call the constructor of ARM_STD, so the # `product_name` variable is not initialized. self.product_name = None
def __init__(self, target, notify=None, macros=None, build_profile=None, build_dir=None, coverage_patterns=None): mbedToolchain.__init__(self, target, notify, macros, build_profile=build_profile, build_dir=build_dir, coverage_patterns=coverage_patterns) tool_path = TOOLCHAIN_PATHS['GCC_ARM'] # Add flags for current size setting c_lib = "std" if hasattr(target, "c_lib"): toolchain = "gcc_arm" if should_replace_small_c_lib(target, toolchain): target.c_lib = "std" self.check_c_lib_supported(target, toolchain) c_lib = target.c_lib elif hasattr(target, "default_build"): c_lib = target.default_build if c_lib == "small": common_flags = ["-DMBED_RTOS_SINGLE_THREAD", "-D__NEWLIB_NANO"] self.flags["common"].extend(common_flags) self.flags["ld"].append("--specs=nano.specs") self.check_and_add_minimal_printf(target) if getattr(target, "printf_lib", "std") == "minimal-printf": minimal_printf_wraps = [ "-Wl,--wrap,printf", "-Wl,--wrap,sprintf", "-Wl,--wrap,snprintf", "-Wl,--wrap,vprintf", "-Wl,--wrap,vsprintf", "-Wl,--wrap,vsnprintf", "-Wl,--wrap,fprintf", "-Wl,--wrap,vfprintf", ] # Add the linker option to wrap the f\v\s\printf functions if not # already added. for minimal_printf_wrap in minimal_printf_wraps: if minimal_printf_wrap not in self.flags["ld"]: self.flags["ld"].append(minimal_printf_wrap) self.cpu = [] if target.is_TrustZone_non_secure_target: # Add linking time preprocessor macro DOMAIN_NS # (DOMAIN_NS is passed to compiler and assembler via CORTEX_SYMBOLS # in mbedToolchain.get_symbols) self.flags["ld"].append("-DDOMAIN_NS=1") core = target.core_without_NS cpu = { "Cortex-M0+": "cortex-m0plus", "Cortex-M4F": "cortex-m4", "Cortex-M7F": "cortex-m7", "Cortex-M7FD": "cortex-m7", "Cortex-M33": "cortex-m33+nodsp", "Cortex-M33E": "cortex-m33", "Cortex-M33F": "cortex-m33+nodsp", "Cortex-M33FE": "cortex-m33" }.get(core, core) if cpu == "cortex-m33+nodsp": self.cpu.append("-march=armv8-m.main") elif cpu == "cortex-m33": self.cpu.append("-march=armv8-m.main+dsp") else: self.cpu.append("-mcpu={}".format(cpu.lower())) if target.core.startswith("Cortex-M"): self.cpu.append("-mthumb") # FPU handling, M7 possibly to have double FPU if core == "Cortex-M4F": self.cpu.append("-mfpu=fpv4-sp-d16") self.cpu.append("-mfloat-abi=softfp") elif core == "Cortex-M7F" or core.startswith("Cortex-M33F"): self.cpu.append("-mfpu=fpv5-sp-d16") self.cpu.append("-mfloat-abi=softfp") elif core == "Cortex-M7FD": self.cpu.append("-mfpu=fpv5-d16") self.cpu.append("-mfloat-abi=softfp") if target.core == "Cortex-A9": self.cpu.append("-mthumb-interwork") self.cpu.append("-marm") self.cpu.append("-march=armv7-a") self.cpu.append("-mfpu=vfpv3") self.cpu.append("-mfloat-abi=hard") self.cpu.append("-mno-unaligned-access") self.flags["common"] += self.cpu self.coverage_supported = True main_cc = join(tool_path, "arm-none-eabi-gcc") main_cppc = join(tool_path, "arm-none-eabi-g++") self.asm = [main_cc] + self.flags['asm'] + self.flags["common"] self.cc = [main_cc] self.cppc = [main_cppc] self.cc += self.flags['c'] + self.flags['common'] self.cppc += self.flags['cxx'] + self.flags['common'] self.flags['ld'] += self.cpu self.ld = [join(tool_path, "arm-none-eabi-gcc")] self.ld += self.flags['ld'] + self.flags['common'] self.sys_libs = ["stdc++", "supc++", "m", "c", "gcc", "nosys"] self.preproc = [join(tool_path, "arm-none-eabi-cpp"), "-E", "-P"] self.ar = join(tool_path, "arm-none-eabi-ar") self.elf2bin = join(tool_path, "arm-none-eabi-objcopy") self.objdump = join(tool_path, "arm-none-eabi-objdump") self.use_distcc = (bool(getenv("DISTCC_POTENTIAL_HOSTS", False)) and not getenv("MBED_DISABLE_DISTCC", False)) # create copies of gcc/ld options as coverage build options, and injects extra coverage options self.coverage_cc = self.cc + ["--coverage", "-DENABLE_LIBGCOV_PORT"] self.coverage_cppc = self.cppc + [ "--coverage", "-DENABLE_LIBGCOV_PORT" ] self.coverage_ld = self.ld + [ '--coverage', '-Wl,--wrap,GREENTEA_SETUP', '-Wl,--wrap,_Z25GREENTEA_TESTSUITE_RESULTi' ] # for gcc coverage options remove MBED_DEBUG macro (this is required by code coverage function) for flag in ["-DMBED_DEBUG"]: if flag in self.coverage_cc: self.coverage_cc.remove(flag) if flag in self.coverage_cppc: self.coverage_cppc.remove(flag) # for lg coverage options remove exit wrapper (this is required by code coverage function) for flag in ['-Wl,--wrap,exit', '-Wl,--wrap,atexit']: if flag in self.coverage_ld: self.coverage_ld.remove(flag)
def __init__(self, target, notify=None, macros=None, build_profile=None, build_dir=None, coverage_patterns=None): mbedToolchain.__init__( self, target, notify, macros, build_dir=build_dir, build_profile=build_profile ) toolchain = "iar" if should_replace_small_c_lib(target, toolchain): target.c_lib = "std" self.check_c_lib_supported(target, "iar") if target.is_TrustZone_non_secure_target: # Add linking time preprocessor macro DOMAIN_NS # (DOMAIN_NS is passed to compiler and assembler via CORTEX_SYMBOLS # in mbedToolchain.get_symbols) define_string = self.make_ld_define("DOMAIN_NS", "0x1") self.flags["ld"].append(define_string) self.check_and_add_minimal_printf(target) core = target.core_without_NS cpu = { "Cortex-M7F": "Cortex-M7.fp.sp", "Cortex-M7FD": "Cortex-M7.fp.dp", "Cortex-M33": "Cortex-M33.no_dsp", "Cortex-M33E": "Cortex-M33", "Cortex-M33F": "Cortex-M33.fp.no_dsp", "Cortex-M33FE": "Cortex-M33.fp"}.get(core, core) # flags_cmd are used only by our scripts, the project files have them # already defined, using this flags results in the errors (duplication) # asm accepts --cpu Core or --fpu FPU, not like c/c++ --cpu=Core asm_flags_cmd = ["--cpu", cpu] # custom c flags c_flags_cmd = ["--cpu", cpu] c_flags_cmd.extend([ "--thumb", "--dlib_config", "DLib_Config_Full.h" ]) # custom c++ cmd flags cxx_flags_cmd = [ "--c++", "--no_rtti", "--no_exceptions" ] IAR_BIN = join(TOOLCHAIN_PATHS['IAR'], "bin") main_cc = join(IAR_BIN, "iccarm") self.asm = [join(IAR_BIN, "iasmarm")] self.asm += asm_flags_cmd self.asm += self.flags["asm"] self.cc = [main_cc] self.cc += self.flags["common"] self.cc += c_flags_cmd self.cc += self.flags["c"] self.cppc = [main_cc] self.cppc += self.flags["common"] self.cppc += c_flags_cmd self.cppc += cxx_flags_cmd self.cppc += self.flags["cxx"] self.ld = [join(IAR_BIN, "ilinkarm")] + self.flags['ld'] self.ar = join(IAR_BIN, "iarchive") self.elf2bin = join(IAR_BIN, "ielftool")