From fa527cf45e0cc6abf2462c3589e5e6d3695d53a9 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Tue, 5 Jul 2016 11:51:27 -0500 Subject: [PATCH] Rework vpaths and include file locating --- tools/export/gcc_arm_common.tmpl | 6 +++--- tools/export/gccarm.py | 22 ++++++++++++++++++---- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/tools/export/gcc_arm_common.tmpl b/tools/export/gcc_arm_common.tmpl index 415fdab4e4..565c601656 100644 --- a/tools/export/gcc_arm_common.tmpl +++ b/tools/export/gcc_arm_common.tmpl @@ -29,14 +29,14 @@ clean : {% endblock %} else -VPATH = $(SRCDIR) +VPATH = {% for path in vpath %}{{path}} {% endfor %} GCC_BIN = PROJECT = {{name}} OBJECTS = {% for f in to_be_compiled %}{{f}} {% endfor %} SYS_OBJECTS = {% for f in object_files %}{{f}} {% endfor %} -INCLUDE_PATHS = {% for p in include_paths %}-I../{{p}} {% endfor %} -LIBRARY_PATHS = {% for p in library_paths %}-L../{{p}} {% endfor %} +INCLUDE_PATHS = {% for p in include_paths %}-I{{p}} {% endfor %} +LIBRARY_PATHS = {% for p in library_paths %}-L{{p}} {% endfor %} LIBRARIES = {% for lib in libraries %}-l{{lib}} {% endfor %} LINKER_SCRIPT = {{linker_script}} {%- block additional_variables -%}{% endblock %} diff --git a/tools/export/gccarm.py b/tools/export/gccarm.py index 28d9c90a87..ce321443f2 100644 --- a/tools/export/gccarm.py +++ b/tools/export/gccarm.py @@ -15,8 +15,8 @@ See the License for the specific language governing permissions and limitations under the License. """ from exporters import Exporter -from os.path import splitext, basename -from os import curdir +from os.path import splitext, basename, relpath, join, abspath +from os import curdir, getcwd class GccArm(Exporter): @@ -133,7 +133,7 @@ class GccArm(Exporter): def generate(self): # "make" wants Unix paths self.resources.win_to_unix() - self.resources.relative_to(curdir) + self.resources.relative_to(self.prj_paths[0]) to_be_compiled = [] for r_type in ['s_sources', 'c_sources', 'cpp_sources']: @@ -148,6 +148,7 @@ class GccArm(Exporter): l, _ = splitext(basename(lib)) libraries.append(l[3:]) + build_dir = abspath(join(self.inputDir, ".build")) ctx = { 'name': self.program_name, 'to_be_compiled': to_be_compiled, @@ -157,7 +158,20 @@ class GccArm(Exporter): 'linker_script': self.resources.linker_script, 'libraries': libraries, 'symbols': self.get_symbols(), - 'cpu_flags': self.toolchain.cpu + 'cpu_flags': self.toolchain.cpu, + 'vpath': [relpath(s, build_dir) for s in self.prj_paths] if self.sources_relative else ["../"] } + + for key in ['include_paths', 'library_paths', 'linker_script']: + if isinstance(ctx[key], list): + ctx[key] = [ctx['vpath'][0] + "/" + t for t in ctx[key]] + else: + ctx[key] = ctx['vpath'][0] + "/" + ctx[key] + if "../." not in ctx["include_paths"]: + ctx["include_paths"] += ['../.'] ctx.update(self.progen_flags) self.gen_file('gcc_arm_%s.tmpl' % self.target.lower(), ctx, 'Makefile') + + def scan_and_copy_resources(self, prj_paths, trg_path, relative=False): + self.prj_paths = prj_paths + Exporter.scan_and_copy_resources(self, prj_paths, trg_path, relative)