Skip to content

Commit

Permalink
Enable Legacy Builds
Browse files Browse the repository at this point in the history
  • Loading branch information
theotherjimmy committed Feb 1, 2019
1 parent a8d1d26 commit 59535b8
Show file tree
Hide file tree
Showing 7 changed files with 2,279 additions and 9 deletions.
48 changes: 46 additions & 2 deletions tools/build_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,17 @@
BUILD_DIR)
from .resources import Resources, FileType, FileRef
from .notifier.mock import MockNotifier
from .targets import TARGET_NAMES, TARGET_MAP, CORE_ARCH, Target
from .targets import (
TARGET_NAMES,
TARGET_MAP,
CORE_ARCH,
Target,
set_targets_json_location
)
from .libraries import Library
from .toolchains import TOOLCHAIN_CLASSES
from .toolchains import TOOLCHAIN_CLASSES, mbedToolchain
from .config import Config
from .build_profiles import find_build_profile, get_toolchain_profile, find_targets_json

RELEASE_VERSIONS = ['2', '5']

Expand Down Expand Up @@ -506,6 +513,43 @@ def build_project(src_paths, build_path, target, toolchain_name,
rmtree(build_path)
mkdir(build_path)

###################################
# mbed Classic/2.0/libary support #

# Find build system profile
profile = None
targets_json = None
for path in src_paths:
profile = find_build_profile(path) or profile
if profile:
targets_json = join(dirname(abspath(__file__)), 'legacy_targets.json')
else:
targets_json = find_targets_json(path) or targets_json

# Apply targets.json to active targets
if targets_json:
notify.info("Using targets from %s" % targets_json)
set_targets_json_location(targets_json)

# Apply profile to toolchains
if profile:
def init_hook(self):
profile_data = get_toolchain_profile(self.name, profile)
if not profile_data:
return
notify.info("Using toolchain %s profile %s" % (self.name, profile))

for k,v in profile_data.items():
if self.flags.has_key(k):
self.flags[k] = v
else:
setattr(self, k, v)

mbedToolchain.init = init_hook

# mbed Classic/2.0/libary support #
###################################

toolchain = prepare_toolchain(
src_paths, build_path, target, toolchain_name, macros=macros,
clean=clean, jobs=jobs, notify=notify, config=config,
Expand Down
328 changes: 328 additions & 0 deletions tools/build_profiles.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,328 @@
"""
mbed SDK
Copyright (c) 2011-2013 ARM Limited
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""

import re
import tempfile
import colorama

from copy import copy
from os.path import join, abspath, exists
from os import walk
import fnmatch


def get_toolchain_profile(toolchain, profile):
if profile and (TOOLCHAIN_PROFILES.get(toolchain, None) and
TOOLCHAIN_PROFILES[toolchain].get(profile)):
return TOOLCHAIN_PROFILES[toolchain].get(profile)

def find_build_profile(path):
profile = None
builds = find_build_ids(path)
for build in builds:
if build in MBED_SDK_REV_MAP:
idx = MBED_SDK_REV_MAP[build]

if idx <= 43:
profile = 'v1'
elif idx <= 68:
profile = 'v2'
elif idx <= 76:
profile = 'v3'
elif idx <= 105:
profile = 'v4'
elif idx <= 135:
profile = 'v5'

return profile

def find_build_ids(path):
builds = []

for (root, dirs, files) in walk(path):
for d in copy(dirs):
if d.startswith('.'):
dirs.remove(d)

for filename in filter(lambda s: s.endswith(".bld"), files):
try:
url = open(join(root, filename), 'r').read().strip()
builds.append(re.sub(r'^.+/(.*?)$', r'\1', url))
except:
pass

return builds


def find_targets_json(path, depth=1):
f = 'targets.json'
if exists(join(path, f)):
return abspath(join(path, f))

if depth > 2:
return None

for root, dirs, files in walk(path):
for d in copy(dirs):
if d.startswith('.'):
dirs.remove(d)
continue

if exists(join(root, d, f)):
return abspath(join(root, d, f))
else:
found = find_targets_json(join(root, d), depth+1)
if found:
return found

return None


# Toolchain profiles for backward compatibility with old mbed SDK library releases
TOOLCHAIN_PROFILES = {
'ARM_STD' : {
'v5': {
'version': '5.06',
'common': ['-c', '--gnu', '-O3', '-Otime', '--split_sections', '--apcs=interwork'],
'cxx': ['--cpp', '--no_rtti'],
'COMPILE_C_AS_CPP': False,
},
'v4': {
'version': '5.03',
'common': ['-c', '--gnu', '-O3', '-Otime', '--split_sections', '--apcs=interwork'],
'cxx': ['--cpp', '--no_rtti'],
'COMPILE_C_AS_CPP': False,
},
'v3': {
'version': '5.01',
'common': ['-c', '--gnu', '-Ospace', '--split_sections', '--apcs=interwork'],
'cxx': ['--cpp', '--no_rtti'],
'COMPILE_C_AS_CPP': False,
},
'v2': {
'version': '5.01',
'common': ['-c', '--gnu', '-Ospace', '--split_sections', '--apcs=interwork'],
'cxx': ['--cpp', '--no_rtti'],
'COMPILE_C_AS_CPP': False,
},
'v1': {
'version': '4',
'common': ['-c', '--gnu', '-Otime', '--split_sections', '--apcs=interwork'],
'cxx': ['--cpp'],
'COMPILE_C_AS_CPP': True,
}
},
'ARM_MICRO' : {
'v5': {
'version': '5.06',
'common': ['-c', '--gnu', '-O3', '-Otime', '--split_sections', '--apcs=interwork'],
'cxx': ['--cpp', '--no_rtti'],
},
'v4': {
'version': '5.03',
'common': ['-c', '--gnu', '-O3', '-Otime', '--split_sections', '--apcs=interwork'],
'cxx': ['--cpp', '--no_rtti'],
},
'v3': {
'version': '5.01',
'common': ['-c', '--gnu', '-Ospace', '--split_sections', '--apcs=interwork'],
'cxx': ['--cpp', '--no_rtti'],
},
'v2': {
'version': '4',
'common': ['-c', '--gnu', '-Ospace', '--split_sections', '--apcs=interwork'],
'cxx': ['--cpp', '--no_rtti'],
'PATCHED_LIBRARY' : True,
},
'v1': {
'version': '4.1',
'common': ['-c', '--gnu', '-Otime', '--split_sections', '--apcs=interwork'],
'cxx': ['--cpp'],
'COMPILE_C_AS_CPP': True,
'PATCHED_LIBRARY' : True,
}
},
'GCC_ARM' : {
'v5': {
'ld': ['-Wl,--gc-sections', '-Wl,--wrap,main'],
},
'v4': {
'ld': ['-Wl,--gc-sections', '-Wl,--wrap,main'],
},
'v3': {
'ld': ['-Wl,--gc-sections', '-Wl,--wrap,main'],
},
'v2': {
'common': ["-c", "-Wall", "-fmessage-length=0", "-fno-exceptions", "-fno-builtin", "-ffunction-sections", "-fdata-sections"],
'cxx': ['-std=gnu++98'],
'ld': ['-Wl,--gc-sections'],
},
'v1': {
'common': ["-c", "-Wall", "-fmessage-length=0", "-fno-exceptions", "-fno-builtin", "-ffunction-sections", "-fdata-sections"],
'cxx': ['-std=gnu++98'],
'ld': ['-Wl,--gc-sections'],
}
}
}

MBED_SDK_REV_MAP = {
'6f4d9ba055b3': 122,
'c1a077c0ccc5': 123,
'f1e13e937fab': 124,
'a974dc8aa35b': 125,
'4132e2258101': 126,
'62ea7dd49f26': 127,
'e6f9c99959f3': 128,
'31768d6a83cd': 129,
'620374818e03': 130,
'f4b892cad2b9': 131,
'9c0c086c88f0': 132,
'a1e1b8eadde3': 133,
'1a303c31ec8f': 134,
'0b434d521da0': 135,
'2abc4044d39c': 136,
'c2078c12af99': 137,
'86e42d5e9f93': 138,
'4ba4acebdbae': 139,
'608e850de46b': 140,
'd616554d63fc': 141,
'46ffe6167a0b': 142,
'c417c1db60ce': 143,
'6b1076ac9921': 144,
'6c34061e7c34': 121,
'7c328cabac7e': 120,
'aae6fcc7d9bb': 119,
'082adc85693f': 118,
'99a22ba036c9': 117,
'c0f6e94411f5': 116,
'87f2f5183dfb': 115,
'252557024ec3': 114,
'f141b2784e32': 113,
'6f327212ef96': 112,
'4336505e4b1c': 111,
'165afa46840b': 110,
'9296ab0bfc11': 109,
'34e6b704fe68': 108,
'4f6c30876dfa': 107,
'ba1f97679dad': 106,
'8ed44a420e5c': 105,
'b9ad9a133dc7': 104,
'bad568076d81': 103,
'da0ca467f8b5': 102,
'7cff1c4259d7': 101,
'cbbeb26dbd92': 100,
'dbbf35b96557': 99,
'8ab26030e058': 98,
'433970e64889': 97,
'487b796308b0': 96,
'7e07b6fb45cf': 95,
'9ad691361fac': 94,
'e188a91d3eaa': 93,
'4fc01daae5a5': 92,
'031413cf7a89': 91,
'cb3d968589d8': 90,
'552587b429a1': 89,
'9327015d4013': 88,
'6213f644d804': 87,
'04dd9b1680ae': 86,
'024bf7f99721': 85,
'0b3ab51c8877': 84,
'8a40adfe8776': 83,
'6473597d706e': 82,
'7d30d6019079': 81,
'8e73be2a2ac1': 80,
'0c05e21ae27e': 79,
'ed8466a608b4': 78,
'869cf507173a': 77,
'824293ae5e43': 76,
'dc225afb6914': 75,
'a842253909c9': 74,
'1efda918f0ba': 73,
'4096f863f923': 72,
'8fabd470bb6e': 71,
'673126e12c73': 70,
'4a7918f48478': 69,
'f37f3b9c9f0b': 68,
'a9913a65894f': 67,
'9c8f0e3462fb': 66,
'5798e58a58b1': 65,
'e3affc9e7238': 64,
'b3110cd2dd17': 63,
'7e6c9f46b3bd': 62,
'5e5da4a5990b': 61,
'3d0ef94e36ec': 60,
'0883845fe643': 59,
'0954ebd79f59': 58,
'0480438fc29c': 57,
'3753e96f3c8b': 56,
'd722ed6a4237': 55,
'71b101360fb9': 54,
'63cdd78b2dc1': 53,
'09236a68d21b': 52,
'a076018f59af': 51,
'b60934f96c0c': 50,
'eeb8a2a33ec9': 49,
'49c296715c73': 48,
'134def52cfa0': 47,
'890817bdcffb': 46,
'3d775a932e1d': 45,
'24d45a770a51': 44,
'e2ed12d17f06': 43,
'cd19af002ccc': 42,
'10b9abbe79a6': 41,
'976df7c37ad5': 40,
'737756e0b479': 39,
'4c0c40fd0593': 38,
'14f4805c468c': 37,
'b4b9f287a47e': 36,
'5284544d04b6': 35,
'7495d544864f': 34,
'5364839841bd': 33,
'3b05dd009342': 32,
'a7ef757f598c': 31,
'3991a86798e3': 30,
'078e4b97a13e': 29,
'667d61c9177b': 28,
'7110ebee3484': 27,
'63bcd7ba4912': 26,
'9a9732ce53a1': 25,
'e2ac27c8e93e': 24,
'74b8d43b5817': 23,
'9114680c05da': 22,
'3944f1e2fa4f': 21,
'029aa53d7323': 20,
'e6be4cd80aad': 19,
'b3c9f16cbb96': 18,
'49a220cc26e0': 17,
'32af5db564d4': 16,
'd1a9de3f4fe0': 15,
'20a79241b4a0': 14,
'a0336ede94ce': 13,
'f63353af7be8': 12,
'1c1ebd0324fa': 11,
'fcb9359f0959': 10,
'cf0d45ce28a6': 9,
'00a04e5cd407': 8,
'15d74db76485': 7,
'3fd6a337c7cc': 6,
'62573be585e9': 5,
'5d1359a283bc': 4,
'aefd12a1f1c5': 3,
'969fc1867111': 2,
'6b7f447ca868': 1,
'82220227f4fa': 0,
}
Loading

0 comments on commit 59535b8

Please sign in to comment.