Rework vpaths and include file locating

pull/2106/head
Jimmy Brisson 2016-07-05 11:51:27 -05:00
parent 4b7f591d33
commit fa527cf45e
2 changed files with 21 additions and 7 deletions

View File

@ -29,14 +29,14 @@ clean :
{% endblock %} {% endblock %}
else else
VPATH = $(SRCDIR) VPATH = {% for path in vpath %}{{path}} {% endfor %}
GCC_BIN = GCC_BIN =
PROJECT = {{name}} PROJECT = {{name}}
OBJECTS = {% for f in to_be_compiled %}{{f}} {% endfor %} OBJECTS = {% for f in to_be_compiled %}{{f}} {% endfor %}
SYS_OBJECTS = {% for f in object_files %}{{f}} {% endfor %} SYS_OBJECTS = {% for f in object_files %}{{f}} {% endfor %}
INCLUDE_PATHS = {% for p in include_paths %}-I../{{p}} {% endfor %} INCLUDE_PATHS = {% for p in include_paths %}-I{{p}} {% endfor %}
LIBRARY_PATHS = {% for p in library_paths %}-L../{{p}} {% endfor %} LIBRARY_PATHS = {% for p in library_paths %}-L{{p}} {% endfor %}
LIBRARIES = {% for lib in libraries %}-l{{lib}} {% endfor %} LIBRARIES = {% for lib in libraries %}-l{{lib}} {% endfor %}
LINKER_SCRIPT = {{linker_script}} LINKER_SCRIPT = {{linker_script}}
{%- block additional_variables -%}{% endblock %} {%- block additional_variables -%}{% endblock %}

View File

@ -15,8 +15,8 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
""" """
from exporters import Exporter from exporters import Exporter
from os.path import splitext, basename from os.path import splitext, basename, relpath, join, abspath
from os import curdir from os import curdir, getcwd
class GccArm(Exporter): class GccArm(Exporter):
@ -133,7 +133,7 @@ class GccArm(Exporter):
def generate(self): def generate(self):
# "make" wants Unix paths # "make" wants Unix paths
self.resources.win_to_unix() self.resources.win_to_unix()
self.resources.relative_to(curdir) self.resources.relative_to(self.prj_paths[0])
to_be_compiled = [] to_be_compiled = []
for r_type in ['s_sources', 'c_sources', 'cpp_sources']: for r_type in ['s_sources', 'c_sources', 'cpp_sources']:
@ -148,6 +148,7 @@ class GccArm(Exporter):
l, _ = splitext(basename(lib)) l, _ = splitext(basename(lib))
libraries.append(l[3:]) libraries.append(l[3:])
build_dir = abspath(join(self.inputDir, ".build"))
ctx = { ctx = {
'name': self.program_name, 'name': self.program_name,
'to_be_compiled': to_be_compiled, 'to_be_compiled': to_be_compiled,
@ -157,7 +158,20 @@ class GccArm(Exporter):
'linker_script': self.resources.linker_script, 'linker_script': self.resources.linker_script,
'libraries': libraries, 'libraries': libraries,
'symbols': self.get_symbols(), '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) ctx.update(self.progen_flags)
self.gen_file('gcc_arm_%s.tmpl' % self.target.lower(), ctx, 'Makefile') 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)