diff --git a/workspace_tools/build_api.py b/workspace_tools/build_api.py index 847e9cedc9..ddebb18bac 100644 --- a/workspace_tools/build_api.py +++ b/workspace_tools/build_api.py @@ -136,18 +136,20 @@ def build_mbed_libs(target, toolchain_name, options=None, verbose=False): # mbed toolchain.info("\n>>> BUILD LIBRARY %s (%s, %s)" % ('MBED', target.name, toolchain_name)) - HAL_SRC = join(MBED_TARGETS_PATH, "hal") - hal_implementation = toolchain.scan_resources(HAL_SRC) - mbed_resources = toolchain.scan_resources(MBED_COMMON) - mbed_resources.add(hal_implementation) - - # Headers + # Common Headers toolchain.copy_files(toolchain.scan_resources(MBED_API).headers, MBED_LIBRARIES) toolchain.copy_files(toolchain.scan_resources(MBED_HAL).headers, MBED_LIBRARIES) - toolchain.copy_files(hal_implementation.headers, BUILD_TARGET) - objects = toolchain.compile_sources(mbed_resources, TMP_PATH, [MBED_LIBRARIES, BUILD_TARGET]) + # Target specific sources + HAL_SRC = join(MBED_TARGETS_PATH, "hal") + hal_implementation = toolchain.scan_resources(HAL_SRC) + toolchain.copy_files(hal_implementation.headers, BUILD_TARGET) + objects = toolchain.compile_sources(hal_implementation, TMP_PATH, [MBED_LIBRARIES, BUILD_TARGET]) + + # Common Sources + mbed_resources = toolchain.scan_resources(MBED_COMMON) + objects += toolchain.compile_sources(mbed_resources, TMP_PATH, [MBED_LIBRARIES, BUILD_TARGET]) # Keep the stdio retargeting as a standalone object to be sure the # C standard library symbols get overridden diff --git a/workspace_tools/export_test.py b/workspace_tools/export_test.py index 52036a6d9c..a78ea28720 100644 --- a/workspace_tools/export_test.py +++ b/workspace_tools/export_test.py @@ -9,12 +9,16 @@ from workspace_tools.export import export from shutil import copytree +EXPORT_DIR = join(BUILD_DIR, "export_test") +USER_WORKSPACE = join(EXPORT_DIR, "user_workspace") -USR_PRJ_NAME = "export_test" -USER_PRJ = join(BUILD_DIR, USR_PRJ_NAME) +USR_PRJ_NAME = "usr_prj" +USER_PRJ = join(USER_WORKSPACE, USR_PRJ_NAME) USER_LIB = join(USER_PRJ, "lib") USER_SRC = join(USER_PRJ, "src") -TEMP = join(USER_PRJ, ".temp") + +TEMP = join(USER_WORKSPACE, ".temp") + def setup_test_user_prj(): if exists(USER_PRJ): @@ -50,7 +54,7 @@ def test_export(toolchain, target, expected_error=None): zip_path, report = export(USER_PRJ, USR_PRJ_NAME, toolchain, target, base_dir, temp_dir, False, fake_build_url_resolver) if report['success']: - export_name = join(TEMP, "export_%s_%s.zip" % (toolchain, target)) + export_name = join(EXPORT_DIR, "export_%s_%s.zip" % (toolchain, target)) cmd(["mv", zip_path, export_name]) print "[OK]" else: @@ -66,9 +70,6 @@ def test_export(toolchain, target, expected_error=None): if __name__ == '__main__': - # import logging as log - # log.getLogger().setLevel(log.DEBUG) - setup_test_user_prj() for toolchain, target in [ diff --git a/workspace_tools/toolchains/__init__.py b/workspace_tools/toolchains/__init__.py index 62d5d2d2e3..f694fc540c 100644 --- a/workspace_tools/toolchains/__init__.py +++ b/workspace_tools/toolchains/__init__.py @@ -101,6 +101,20 @@ class Resources: return '\n'.join(s) +# Support legacy build conventions: the original mbed build system did not have +# standard labels for the "TARGET_" and "TOOLCHAIN_" specific directories, but +# had the knowledge of a list of these directories to be ignored. +LEGACY_IGNORE_DIRS = set([ + 'LPC11U24', 'LPC1768', 'LPC2368', 'LPC4088', 'LPC812', 'KL25Z', + 'ARM', 'GCC_ARM', 'GCC_CR', 'GCC_CS', 'IAR', 'uARM' +]) +LEGACY_TOOLCHAIN_NAMES = { + 'ARM_STD':'ARM', 'ARM_MICRO': 'uARM', + 'GCC_ARM': 'GCC_ARM', 'GCC_CR': 'GCC_CR', 'GCC_CS': 'GCC_CS', + 'IAR': 'IAR', +} + + class mbedToolchain: VERBOSE = True @@ -113,6 +127,9 @@ class mbedToolchain: def __init__(self, target, options=None, notify=None): self.target = target + self.name = self.__class__.__name__ + + self.legacy_ignore_dirs = LEGACY_IGNORE_DIRS - set([target.name, LEGACY_TOOLCHAIN_NAMES[self.name]]) if notify is not None: self.notify = notify @@ -127,7 +144,6 @@ class mbedToolchain: if self.options: self.info("Build Options: %s" % (', '.join(self.options))) - self.name = self.__class__.__name__ self.obj_path = join(target.name, self.name) self.symbols = None @@ -195,7 +211,7 @@ class mbedToolchain: for root, dirs, files in walk(path): # Remove ignored directories for d in copy(dirs): - if ((d.startswith('.') or d in set(['CVS'])) or + if ((d.startswith('.') or d in self.legacy_ignore_dirs) or (d.startswith('TARGET_') and d[7:] not in labels['TARGET']) or (d.startswith('TOOLCHAIN_') and d[10:] not in labels['TOOLCHAIN'])): dirs.remove(d)