Skip to content

Commit 8166889

Browse files
committed
Compute inc_dirs from headers
1 parent a4cc320 commit 8166889

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

tools/build_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ def build_project(src_paths, build_path, target, toolchain_name,
528528
resources.add_file_ref(linker_script, linker_script)
529529

530530
# Compile Sources
531-
objects = toolchain.compile_sources(resources, resources.inc_dirs)
531+
objects = toolchain.compile_sources(resources, sorted(resources.get_file_paths(FileType.INC_DIR)))
532532
resources.add_files_to_type(FileType.OBJECT, objects)
533533

534534
# Link Program

tools/resources/__init__.py

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
from collections import namedtuple, defaultdict
3838
from copy import copy
3939
from itertools import chain
40-
from os import walk
40+
from os import walk, sep
4141
from os.path import (join, splitext, dirname, relpath, basename, split, normcase,
4242
abspath, exists)
4343

@@ -131,7 +131,7 @@ def __init__(self, notify, collect_ignores=False):
131131
self._collect_ignores = collect_ignores
132132

133133
# Storage for file references, indexed by file type
134-
self._file_refs = defaultdict(list)
134+
self._file_refs = defaultdict(set)
135135

136136
# Incremental scan related
137137
self._label_paths = []
@@ -266,17 +266,35 @@ def add_file_ref(self, file_type, file_name, file_path):
266266
ref = FileRef(file_name.replace("\\", "/"), file_path)
267267
else:
268268
ref = FileRef(file_name, file_path)
269-
self._file_refs[file_type].append(ref)
269+
self._file_refs[file_type].add(ref)
270270

271271
def get_file_refs(self, file_type):
272272
"""Return a list of FileRef for every file of the given type"""
273-
return self._file_refs[file_type]
273+
return list(self._file_refs[file_type])
274+
275+
@staticmethod
276+
def _all_parents(files):
277+
for name in files:
278+
components = name.split(sep)
279+
for n in range(1, len(components)):
280+
parent = join(*components[:n])
281+
yield parent
282+
283+
def _get_from_refs(self, file_type, key):
284+
if file_type is FileType.INC_DIR:
285+
parents = set(self._all_parents(self._get_from_refs(
286+
FileType.HEADER, key)))
287+
parents.add(".")
288+
else:
289+
parents = set()
290+
return list(parents) + [key(f) for f in self.get_file_refs(file_type)]
291+
274292

275293
def get_file_names(self, file_type):
276-
return [f.name for f in self.get_file_refs(file_type)]
294+
return self._get_from_refs(file_type, lambda f: f.name)
277295

278296
def get_file_paths(self, file_type):
279-
return [f.path for f in self.get_file_refs(file_type)]
297+
return self._get_from_refs(file_type, lambda f: f.path)
280298

281299
def add_files_to_type(self, file_type, files):
282300
for f in files:
@@ -406,8 +424,6 @@ def add_directory(
406424

407425
# Add root to include paths
408426
root = root.rstrip("/")
409-
fake_root = join(into_path, relpath(root, base_path))
410-
self.add_file_ref(FileType.INC_DIR, fake_root, root)
411427

412428
for file in files:
413429
file_path = join(root, file)

0 commit comments

Comments
 (0)