mirror of https://github.com/ARMmbed/mbed-os.git
parent
f4f34a025d
commit
cd669a943f
|
@ -85,9 +85,11 @@ if __name__ == '__main__':
|
||||||
id = "%s::%s" % (toolchain, target)
|
id = "%s::%s" % (toolchain, target)
|
||||||
try:
|
try:
|
||||||
mcu = TARGET_MAP[target]
|
mcu = TARGET_MAP[target]
|
||||||
build_mbed_libs(mcu, toolchain, verbose=options.verbose)
|
build_mbed_libs(mcu, toolchain, options=options.options,
|
||||||
|
verbose=options.verbose)
|
||||||
for lib_id in libraries:
|
for lib_id in libraries:
|
||||||
build_lib(lib_id, mcu, toolchain, verbose=options.verbose)
|
build_lib(lib_id, mcu, toolchain, options=options.options,
|
||||||
|
verbose=options.verbose)
|
||||||
successes.append(id)
|
successes.append(id)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
if options.verbose:
|
if options.verbose:
|
||||||
|
|
|
@ -9,10 +9,10 @@ from workspace_tools.libraries import Library
|
||||||
|
|
||||||
|
|
||||||
def build_project(src_path, build_path, target, toolchain_name,
|
def build_project(src_path, build_path, target, toolchain_name,
|
||||||
libraries_paths=None, linker_script=None,
|
libraries_paths=None, options=None, linker_script=None,
|
||||||
clean=False, notify=None, verbose=False, name=None):
|
clean=False, notify=None, verbose=False, name=None):
|
||||||
# Toolchain instance
|
# Toolchain instance
|
||||||
toolchain = TOOLCHAIN_CLASSES[toolchain_name](target, notify)
|
toolchain = TOOLCHAIN_CLASSES[toolchain_name](target, options, notify)
|
||||||
toolchain.VERBOSE = verbose
|
toolchain.VERBOSE = verbose
|
||||||
toolchain.build_all = clean
|
toolchain.build_all = clean
|
||||||
|
|
||||||
|
@ -50,7 +50,8 @@ notify: Notify function for logs
|
||||||
verbose: Write the actual tools command lines if True
|
verbose: Write the actual tools command lines if True
|
||||||
"""
|
"""
|
||||||
def build_library(src_paths, build_path, target, toolchain_name,
|
def build_library(src_paths, build_path, target, toolchain_name,
|
||||||
dependencies_paths=None, name=None, clean=False, notify=None, verbose=False):
|
dependencies_paths=None, options=None, name=None, clean=False,
|
||||||
|
notify=None, verbose=False):
|
||||||
if type(src_paths) != ListType: src_paths = [src_paths]
|
if type(src_paths) != ListType: src_paths = [src_paths]
|
||||||
|
|
||||||
for src_path in src_paths:
|
for src_path in src_paths:
|
||||||
|
@ -58,7 +59,7 @@ def build_library(src_paths, build_path, target, toolchain_name,
|
||||||
raise Exception("The library source folder does not exist: %s", src_path)
|
raise Exception("The library source folder does not exist: %s", src_path)
|
||||||
|
|
||||||
# Toolchain instance
|
# Toolchain instance
|
||||||
toolchain = TOOLCHAIN_CLASSES[toolchain_name](target, notify)
|
toolchain = TOOLCHAIN_CLASSES[toolchain_name](target, options, notify)
|
||||||
toolchain.VERBOSE = verbose
|
toolchain.VERBOSE = verbose
|
||||||
toolchain.build_all = clean
|
toolchain.build_all = clean
|
||||||
|
|
||||||
|
@ -95,23 +96,23 @@ def build_library(src_paths, build_path, target, toolchain_name,
|
||||||
toolchain.build_library(objects, bin_path, name)
|
toolchain.build_library(objects, bin_path, name)
|
||||||
|
|
||||||
|
|
||||||
def build_lib(lib_id, target, toolchain, verbose=False):
|
def build_lib(lib_id, target, toolchain, options=None, verbose=False):
|
||||||
lib = Library(lib_id)
|
lib = Library(lib_id)
|
||||||
if lib.is_supported(target, toolchain):
|
if lib.is_supported(target, toolchain):
|
||||||
build_library(lib.source_dir, lib.build_dir, target, toolchain, lib.dependencies, verbose=verbose)
|
build_library(lib.source_dir, lib.build_dir, target, toolchain, lib.dependencies, options, verbose=verbose)
|
||||||
else:
|
else:
|
||||||
print '\n\nLibrary "%s" is not yet supported on target %s with toolchain %s' % (lib_id, target.name, toolchain)
|
print '\n\nLibrary "%s" is not yet supported on target %s with toolchain %s' % (lib_id, target.name, toolchain)
|
||||||
|
|
||||||
|
|
||||||
# We do have unique legacy conventions about how we build and package the mbed library
|
# We do have unique legacy conventions about how we build and package the mbed library
|
||||||
def build_mbed_libs(target, toolchain_name, verbose=False):
|
def build_mbed_libs(target, toolchain_name, options=None, verbose=False):
|
||||||
# Check toolchain support
|
# Check toolchain support
|
||||||
if toolchain_name not in target.supported_toolchains:
|
if toolchain_name not in target.supported_toolchains:
|
||||||
print '\n%s target is not yet supported by toolchain %s' % (target.name, toolchain_name)
|
print '\n%s target is not yet supported by toolchain %s' % (target.name, toolchain_name)
|
||||||
return
|
return
|
||||||
|
|
||||||
# Toolchain
|
# Toolchain
|
||||||
toolchain = TOOLCHAIN_CLASSES[toolchain_name](target)
|
toolchain = TOOLCHAIN_CLASSES[toolchain_name](target, options)
|
||||||
toolchain.VERBOSE = verbose
|
toolchain.VERBOSE = verbose
|
||||||
|
|
||||||
# Source and Build Paths
|
# Source and Build Paths
|
||||||
|
|
|
@ -91,7 +91,8 @@ if __name__ == '__main__':
|
||||||
target = TARGET_MAP[mcu]
|
target = TARGET_MAP[mcu]
|
||||||
try:
|
try:
|
||||||
bin = build_project(test.source_dir, build_dir, target, toolchain,
|
bin = build_project(test.source_dir, build_dir, target, toolchain,
|
||||||
test.dependencies, linker_script=options.linker_script,
|
test.dependencies, options.options,
|
||||||
|
linker_script=options.linker_script,
|
||||||
clean=options.clean, verbose=options.verbose)
|
clean=options.clean, verbose=options.verbose)
|
||||||
print 'Image: %s' % bin
|
print 'Image: %s' % bin
|
||||||
|
|
||||||
|
|
|
@ -7,16 +7,18 @@ from workspace_tools.targets import TARGET_NAMES
|
||||||
def get_default_options_parser():
|
def get_default_options_parser():
|
||||||
parser = OptionParser()
|
parser = OptionParser()
|
||||||
|
|
||||||
parser.add_option("-m", "--mcu", dest="mcu",
|
parser.add_option("-m", "--mcu",
|
||||||
help="build for the given MCU (%s)" % ', '.join(TARGET_NAMES),
|
help="build for the given MCU (%s)" % ', '.join(TARGET_NAMES),
|
||||||
metavar="MCU")
|
metavar="MCU")
|
||||||
|
|
||||||
parser.add_option("-t", "--tool", dest="tool",
|
parser.add_option("-t", "--tool",
|
||||||
help="build using the given TOOLCHAIN (%s)" % ', '.join(TOOLCHAINS),
|
help="build using the given TOOLCHAIN (%s)" % ', '.join(TOOLCHAINS),
|
||||||
metavar="TOOLCHAIN")
|
metavar="TOOLCHAIN")
|
||||||
|
|
||||||
parser.add_option("-c", "--clean",
|
parser.add_option("-c", "--clean", action="store_true", default=False,
|
||||||
action="store_true", dest="clean", default=False,
|
|
||||||
help="clean the build directory")
|
help="clean the build directory")
|
||||||
|
|
||||||
|
parser.add_option("-o", "--options", action="append",
|
||||||
|
help='Add a build option ("save-asm": save the asm generated by the compiler)')
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
|
@ -71,6 +71,8 @@ IAR_PATH = "C:/Program Files (x86)/IAR Systems/Embedded Workbench 6.0/arm"
|
||||||
CW_GCC_PATH = "C:/Freescale/CW MCU v10.3/Cross_Tools/arm-none-eabi-gcc-4_6_2/bin"
|
CW_GCC_PATH = "C:/Freescale/CW MCU v10.3/Cross_Tools/arm-none-eabi-gcc-4_6_2/bin"
|
||||||
CW_EWL_PATH = "C:/Freescale/CW MCU v10.3/MCU/ARM_GCC_Support/ewl/lib"
|
CW_EWL_PATH = "C:/Freescale/CW MCU v10.3/MCU/ARM_GCC_Support/ewl/lib"
|
||||||
|
|
||||||
|
BUILD_OPTIONS = []
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Allow to overwrite the default settings without the need to edit the
|
# Allow to overwrite the default settings without the need to edit the
|
||||||
# settings file stored in the repository
|
# settings file stored in the repository
|
||||||
|
|
|
@ -7,6 +7,7 @@ from inspect import getmro
|
||||||
|
|
||||||
from workspace_tools.utils import run_cmd, mkdir, rel_path, ToolException, split_path
|
from workspace_tools.utils import run_cmd, mkdir, rel_path, ToolException, split_path
|
||||||
from workspace_tools.patch import patch
|
from workspace_tools.patch import patch
|
||||||
|
from workspace_tools.settings import BUILD_OPTIONS
|
||||||
|
|
||||||
|
|
||||||
def print_notify(event):
|
def print_notify(event):
|
||||||
|
@ -110,7 +111,7 @@ class mbedToolchain:
|
||||||
"Cortex-M4" : ["__CORTEX_M4", "ARM_MATH_CM4", "__FPU_PRESENT=1"],
|
"Cortex-M4" : ["__CORTEX_M4", "ARM_MATH_CM4", "__FPU_PRESENT=1"],
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, target, notify=None):
|
def __init__(self, target, options=None, notify=None):
|
||||||
self.target = target
|
self.target = target
|
||||||
|
|
||||||
if notify is not None:
|
if notify is not None:
|
||||||
|
@ -118,6 +119,14 @@ class mbedToolchain:
|
||||||
else:
|
else:
|
||||||
self.notify = print_notify
|
self.notify = print_notify
|
||||||
|
|
||||||
|
if options is None:
|
||||||
|
self.options = []
|
||||||
|
else:
|
||||||
|
self.options = options
|
||||||
|
self.options.extend(BUILD_OPTIONS)
|
||||||
|
if self.options:
|
||||||
|
self.info("Build Options: %s" % (', '.join(self.options)))
|
||||||
|
|
||||||
self.name = self.__class__.__name__
|
self.name = self.__class__.__name__
|
||||||
self.obj_path = join(target.name, self.name)
|
self.obj_path = join(target.name, self.name)
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,8 @@ class ARM(mbedToolchain):
|
||||||
DIAGNOSTIC_PATTERN = re.compile('"(?P<file>[^"]+)", line (?P<line>\d+): (?P<severity>Warning|Error): (?P<message>.+)')
|
DIAGNOSTIC_PATTERN = re.compile('"(?P<file>[^"]+)", line (?P<line>\d+): (?P<severity>Warning|Error): (?P<message>.+)')
|
||||||
DEP_PATTERN = re.compile('\S+:\s(?P<file>.+)\n')
|
DEP_PATTERN = re.compile('\S+:\s(?P<file>.+)\n')
|
||||||
|
|
||||||
def __init__(self, target, notify):
|
def __init__(self, target, options=None, notify=None):
|
||||||
mbedToolchain.__init__(self, target, notify)
|
mbedToolchain.__init__(self, target, options, notify)
|
||||||
|
|
||||||
if target.core == "Cortex-M0+":
|
if target.core == "Cortex-M0+":
|
||||||
cpu = "Cortex-M0"
|
cpu = "Cortex-M0"
|
||||||
|
@ -27,7 +27,11 @@ class ARM(mbedToolchain):
|
||||||
"--cpu=%s" % cpu, "--gnu",
|
"--cpu=%s" % cpu, "--gnu",
|
||||||
"-Ospace", "--split_sections", "--apcs=interwork",
|
"-Ospace", "--split_sections", "--apcs=interwork",
|
||||||
"--brief_diagnostics", "--restrict"
|
"--brief_diagnostics", "--restrict"
|
||||||
] # "--asm" "--interleave"
|
]
|
||||||
|
|
||||||
|
if "save-asm" in self.options:
|
||||||
|
common.extend(["--asm", "--interleave"])
|
||||||
|
|
||||||
common_c = [
|
common_c = [
|
||||||
"--md", "--no_depend_system_headers",
|
"--md", "--no_depend_system_headers",
|
||||||
'-I%s' % ARM_INC
|
'-I%s' % ARM_INC
|
||||||
|
@ -85,15 +89,15 @@ class ARM(mbedToolchain):
|
||||||
|
|
||||||
|
|
||||||
class ARM_STD(ARM):
|
class ARM_STD(ARM):
|
||||||
def __init__(self, target, notify=None):
|
def __init__(self, target, options=None, notify=None):
|
||||||
ARM.__init__(self, target, notify)
|
ARM.__init__(self, target, options, notify)
|
||||||
self.ld.append("--libpath=%s" % ARM_LIB)
|
self.ld.append("--libpath=%s" % ARM_LIB)
|
||||||
|
|
||||||
|
|
||||||
class ARM_MICRO(ARM):
|
class ARM_MICRO(ARM):
|
||||||
PATCHED_LIBRARY = True
|
PATCHED_LIBRARY = True
|
||||||
|
|
||||||
def __init__(self, target, notify=None):
|
def __init__(self, target, options=None, notify=None):
|
||||||
ARM.__init__(self, target, notify)
|
ARM.__init__(self, target, notify)
|
||||||
|
|
||||||
# Compiler
|
# Compiler
|
||||||
|
|
|
@ -13,8 +13,8 @@ class GCC(mbedToolchain):
|
||||||
CIRCULAR_DEPENDENCIES = True
|
CIRCULAR_DEPENDENCIES = True
|
||||||
DIAGNOSTIC_PATTERN = re.compile('((?P<line>\d+):)(\d+:)? (?P<severity>warning|error): (?P<message>.+)')
|
DIAGNOSTIC_PATTERN = re.compile('((?P<line>\d+):)(\d+:)? (?P<severity>warning|error): (?P<message>.+)')
|
||||||
|
|
||||||
def __init__(self, target, notify, tool_path):
|
def __init__(self, target, options=None, notify=None, tool_path=""):
|
||||||
mbedToolchain.__init__(self, target, notify)
|
mbedToolchain.__init__(self, target, options, notify)
|
||||||
|
|
||||||
if target.core == "Cortex-M0+":
|
if target.core == "Cortex-M0+":
|
||||||
cpu = "cortex-m0"
|
cpu = "cortex-m0"
|
||||||
|
@ -34,9 +34,12 @@ class GCC(mbedToolchain):
|
||||||
common_flags = ["-c", "-O2", "-Wall",
|
common_flags = ["-c", "-O2", "-Wall",
|
||||||
"-fmessage-length=0", "-fno-exceptions", "-fno-builtin",
|
"-fmessage-length=0", "-fno-exceptions", "-fno-builtin",
|
||||||
"-ffunction-sections", "-fdata-sections",
|
"-ffunction-sections", "-fdata-sections",
|
||||||
"-MMD", "-save-temps"
|
"-MMD"
|
||||||
] + self.cpu
|
] + self.cpu
|
||||||
|
|
||||||
|
if "save-asm" in self.options:
|
||||||
|
common_flags.extends("-save-temps")
|
||||||
|
|
||||||
self.asm = [join(tool_path, "arm-none-eabi-as")] + self.cpu
|
self.asm = [join(tool_path, "arm-none-eabi-as")] + self.cpu
|
||||||
|
|
||||||
self.cc = [join(tool_path, "arm-none-eabi-gcc"), "-std=gnu99"] + common_flags
|
self.cc = [join(tool_path, "arm-none-eabi-gcc"), "-std=gnu99"] + common_flags
|
||||||
|
@ -112,8 +115,8 @@ class GCC(mbedToolchain):
|
||||||
|
|
||||||
|
|
||||||
class GCC_ARM(GCC):
|
class GCC_ARM(GCC):
|
||||||
def __init__(self, target, notify=None):
|
def __init__(self, target, options=None, notify=None):
|
||||||
GCC.__init__(self, target, notify, GCC_ARM_PATH)
|
GCC.__init__(self, target, options, notify, GCC_ARM_PATH)
|
||||||
|
|
||||||
# Use latest gcc nanolib
|
# Use latest gcc nanolib
|
||||||
self.ld.append("--specs=nano.specs")
|
self.ld.append("--specs=nano.specs")
|
||||||
|
@ -124,8 +127,8 @@ class GCC_ARM(GCC):
|
||||||
|
|
||||||
|
|
||||||
class GCC_CR(GCC):
|
class GCC_CR(GCC):
|
||||||
def __init__(self, target, notify=None):
|
def __init__(self, target, options=None, notify=None):
|
||||||
GCC.__init__(self, target, notify, GCC_CR_PATH)
|
GCC.__init__(self, target, options, notify, GCC_CR_PATH)
|
||||||
|
|
||||||
additional_compiler_flags = [
|
additional_compiler_flags = [
|
||||||
"-D__NEWLIB__", "-D__CODE_RED", "-D__USE_CMSIS", "-DCPP_USE_HEAP",
|
"-D__NEWLIB__", "-D__CODE_RED", "-D__USE_CMSIS", "-DCPP_USE_HEAP",
|
||||||
|
@ -137,8 +140,8 @@ class GCC_CR(GCC):
|
||||||
|
|
||||||
|
|
||||||
class GCC_CS(GCC):
|
class GCC_CS(GCC):
|
||||||
def __init__(self, target, notify=None):
|
def __init__(self, target, options=None, notify=None):
|
||||||
GCC.__init__(self, target, notify, GCC_CS_PATH)
|
GCC.__init__(self, target, options, notify, GCC_CS_PATH)
|
||||||
|
|
||||||
|
|
||||||
class GCC_CW(GCC):
|
class GCC_CW(GCC):
|
||||||
|
@ -146,13 +149,13 @@ class GCC_CW(GCC):
|
||||||
"Cortex-M0+": "armv6-m",
|
"Cortex-M0+": "armv6-m",
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, target, notify=None):
|
def __init__(self, target, options=None, notify=None):
|
||||||
GCC.__init__(self, target, notify, CW_GCC_PATH)
|
GCC.__init__(self, target, options, notify, CW_GCC_PATH)
|
||||||
|
|
||||||
|
|
||||||
class GCC_CW_EWL(GCC_CW):
|
class GCC_CW_EWL(GCC_CW):
|
||||||
def __init__(self, target, notify=None):
|
def __init__(self, target, options=None, notify=None):
|
||||||
GCC_CW.__init__(self, target, notify)
|
GCC_CW.__init__(self, target, options, notify)
|
||||||
|
|
||||||
# Compiler
|
# Compiler
|
||||||
common = [
|
common = [
|
||||||
|
@ -170,7 +173,7 @@ class GCC_CW_EWL(GCC_CW):
|
||||||
# Linker
|
# Linker
|
||||||
self.sys_libs = []
|
self.sys_libs = []
|
||||||
self.CIRCULAR_DEPENDENCIES = False
|
self.CIRCULAR_DEPENDENCIES = False
|
||||||
self.ld = [join(GCC_CW_PATH, "arm-none-eabi-g++"),
|
self.ld = [join(CW_GCC_PATH, "arm-none-eabi-g++"),
|
||||||
"-Xlinker", "--gc-sections",
|
"-Xlinker", "--gc-sections",
|
||||||
"-L%s" % join(CW_EWL_PATH, "lib", GCC_CW.ARCH_LIB[target.core]),
|
"-L%s" % join(CW_EWL_PATH, "lib", GCC_CW.ARCH_LIB[target.core]),
|
||||||
"-n", "-specs=ewl_c++.specs", "-mfloat-abi=soft",
|
"-n", "-specs=ewl_c++.specs", "-mfloat-abi=soft",
|
||||||
|
@ -180,5 +183,5 @@ class GCC_CW_EWL(GCC_CW):
|
||||||
|
|
||||||
|
|
||||||
class GCC_CW_NEWLIB(GCC_CW):
|
class GCC_CW_NEWLIB(GCC_CW):
|
||||||
def __init__(self, target, notify=None):
|
def __init__(self, target, options=None, notify=None):
|
||||||
GCC_CW.__init__(self, target, notify)
|
GCC_CW.__init__(self, target, options, notify)
|
||||||
|
|
|
@ -13,8 +13,8 @@ class IAR(mbedToolchain):
|
||||||
|
|
||||||
DIAGNOSTIC_PATTERN = re.compile('"(?P<file>[^"]+)",(?P<line>[\d]+)\s+(?P<severity>Warning|Error)(?P<message>.+)')
|
DIAGNOSTIC_PATTERN = re.compile('"(?P<file>[^"]+)",(?P<line>[\d]+)\s+(?P<severity>Warning|Error)(?P<message>.+)')
|
||||||
|
|
||||||
def __init__(self, target, notify=None):
|
def __init__(self, target, options=None, notify=None):
|
||||||
mbedToolchain.__init__(self, target, notify)
|
mbedToolchain.__init__(self, target, options, notify)
|
||||||
|
|
||||||
c_flags = [
|
c_flags = [
|
||||||
"-Oh",
|
"-Oh",
|
||||||
|
|
Loading…
Reference in New Issue