1
1
# Copyright (C) Ivan Kravets <[email protected] >
2
2
# See LICENSE for details.
3
3
4
- from os import walk
5
- from os .path import isfile , join
4
+ import re
5
+ from os import listdir , walk
6
+ from os .path import isdir , isfile , join
6
7
from time import sleep
7
8
8
9
from serial import Serial
@@ -17,10 +18,34 @@ def BuildLibrary(env, variant_dir, library_dir):
17
18
)
18
19
19
20
21
+ def BuildDependentLibraries (env , src_dir ):
22
+ libs = []
23
+ for deplibfile in env .GetDependentLibraries (src_dir ):
24
+ for lsd_dir in env ['LIBSOURCE_DIRS' ]:
25
+ lsd_dir = env .subst (lsd_dir )
26
+ if not isdir (lsd_dir ):
27
+ continue
28
+ for libname in listdir (lsd_dir ):
29
+ if not isfile (join (lsd_dir , libname , deplibfile )):
30
+ continue
31
+ _libbuild_dir = join ("$BUILD_DIR" , libname )
32
+ env .Append (CPPPATH = [_libbuild_dir ])
33
+ libs .append (
34
+ env .BuildLibrary (_libbuild_dir , join (lsd_dir , libname )))
35
+ return libs
36
+
37
+
20
38
def BuildFirmware (env , libslist ):
21
39
src = env .Clone ()
22
- vdirs = src .VariantDirRecursive (join ("$BUILD_DIR" , "src" ),
23
- join ("$PROJECT_DIR" , "src" ))
40
+ vdirs = src .VariantDirRecursive (
41
+ join ("$BUILD_DIR" , "src" ), join ("$PROJECT_DIR" , "src" ))
42
+
43
+ # build source's dependent libs
44
+ for vdir in vdirs :
45
+ _libs = src .BuildDependentLibraries (vdir )
46
+ if _libs :
47
+ libslist += _libs
48
+
24
49
return src .Program (
25
50
join ("$BUILD_DIR" , "firmware" ),
26
51
[src .GlobCXXFiles (vdir ) for vdir in vdirs ],
@@ -38,6 +63,14 @@ def GlobCXXFiles(env, path):
38
63
return files
39
64
40
65
66
+ def GetDependentLibraries (env , src_dir ):
67
+ deplibs = []
68
+ regexp = re .compile (r"^#include\s+<([^>]+)>" , re .M )
69
+ for node in env .GlobCXXFiles (src_dir ):
70
+ deplibs += regexp .findall (node .get_text_contents ())
71
+ return deplibs
72
+
73
+
41
74
def VariantDirRecursive (env , variant_dir , src_dir , duplicate = True ):
42
75
# add root dir by default
43
76
variants = [variant_dir ]
@@ -101,8 +134,10 @@ def exists(_):
101
134
102
135
def generate (env ):
103
136
env .AddMethod (BuildLibrary )
137
+ env .AddMethod (BuildDependentLibraries )
104
138
env .AddMethod (BuildFirmware )
105
139
env .AddMethod (GlobCXXFiles )
140
+ env .AddMethod (GetDependentLibraries )
106
141
env .AddMethod (VariantDirRecursive )
107
142
env .AddMethod (ParseBoardOptions )
108
143
env .AddMethod (ResetDevice )
0 commit comments