20
20
https://github.com/espressif/esp-idf
21
21
"""
22
22
23
- from os import listdir
24
- from os .path import isdir , join
23
+ from os import listdir , walk
24
+ from os .path import basename , isdir , isfile , join
25
25
26
26
from SCons .Script import DefaultEnvironment
27
27
35
35
"framework-espidf" )
36
36
37
37
38
+ def parse_mk (path ):
39
+ result = {}
40
+ variable = None
41
+ multi = False
42
+ with open (path ) as fp :
43
+ for line in fp .readlines ():
44
+ line = line .strip ()
45
+ if not line or line .startswith ("#" ):
46
+ continue
47
+ # remove inline comments
48
+ if " # " in line :
49
+ line = line [:line .index (" # " )]
50
+ if not multi and "=" in line :
51
+ variable , line = line .split ("=" , 1 )
52
+ if variable .endswith ((":" , "+" )):
53
+ variable = variable [:- 1 ]
54
+ variable = variable .strip ()
55
+ line = line .strip ()
56
+ if not variable or not line :
57
+ continue
58
+ multi = line .endswith ('\\ ' )
59
+ if multi :
60
+ line = line [:- 1 ].strip ()
61
+ if variable not in result :
62
+ result [variable ] = []
63
+ result [variable ].extend ([l .strip () for l in line .split ()])
64
+ if not multi :
65
+ variable = None
66
+ return result
67
+
68
+
69
+ def build_component (path ):
70
+ envsafe = env .Clone ()
71
+ src_filter = "+<*> -<test> -<tests>"
72
+ if isfile (join (path , "component.mk" )):
73
+ params = parse_mk (join (path , "component.mk" ))
74
+ if params .get ("COMPONENT_PRIV_INCLUDEDIRS" ):
75
+ inc_dirs = params .get ("COMPONENT_PRIV_INCLUDEDIRS" )
76
+ envsafe .Prepend (
77
+ CPPPATH = [join (path , d ) for d in inc_dirs ])
78
+ if params .get ("CFLAGS" ):
79
+ envsafe .Append (CCFLAGS = params .get ("CFLAGS" ))
80
+ if params .get ("COMPONENT_OBJS" ):
81
+ src_filter = "-<*>"
82
+ for f in params .get ("COMPONENT_OBJS" ):
83
+ src_filter += " +<%s>" % f .replace (".o" , ".c" )
84
+ elif params .get ("COMPONENT_SRCDIRS" ):
85
+ src_filter = "-<*>"
86
+ src_dirs = params .get ("COMPONENT_SRCDIRS" )
87
+ if "." in src_dirs :
88
+ src_dirs .remove ("." )
89
+ src_filter += " +<*.c*>"
90
+ for f in src_dirs :
91
+ src_filter += " +<%s/*.c*>" % f
92
+
93
+ return envsafe .BuildLibrary (
94
+ join ("$BUILD_DIR" , "%s" % basename (path )), path ,
95
+ src_filter = src_filter
96
+ )
97
+
98
+
38
99
def build_espidf_bootloader ():
39
100
envsafe = env .Clone ()
101
+ envsafe .Append (CPPDEFINES = [("BOOTLOADER_BUILD" , 1 )])
40
102
envsafe .Replace (
41
- CPPDEFINES = ["ESP_PLATFORM" , ("BOOTLOADER_BUILD" , 1 )],
42
-
43
103
LIBPATH = [
44
104
join (FRAMEWORK_DIR , "components" , "esp32" , "ld" ),
105
+ join (FRAMEWORK_DIR , "components" , "esp32" , "lib" ),
45
106
join (FRAMEWORK_DIR , "components" , "bootloader" , "src" , "main" )
46
107
],
47
108
48
109
LINKFLAGS = [
49
- "-Os" ,
50
110
"-nostdlib" ,
51
111
"-Wl,-static" ,
52
112
"-u" , "call_user_start_cpu0" ,
53
- "-Wl,-static" ,
54
113
"-Wl,--gc-sections" ,
55
114
"-T" , "esp32.bootloader.ld" ,
56
- "-T" , "esp32.rom.ld"
115
+ "-T" , "esp32.rom.ld" ,
116
+ "-T" , "esp32.bootloader.rom.ld"
57
117
]
58
118
),
59
119
60
- envsafe .Append (CCFLAGS = ["-fstrict-volatile-bitfields" ])
120
+ envsafe .Append (
121
+ CPPPATH = [
122
+ join (FRAMEWORK_DIR , "components" , "esp32" )
123
+ ]
124
+ )
61
125
62
126
envsafe .Replace (
63
127
LIBS = [
128
+ envsafe .BuildLibrary (
129
+ join ("$BUILD_DIR" , "bootloaderSupport" ),
130
+ join (FRAMEWORK_DIR , "components" , "bootloader_support" )
131
+ ),
64
132
envsafe .BuildLibrary (
65
133
join ("$BUILD_DIR" , "bootloaderLog" ),
66
134
join (FRAMEWORK_DIR , "components" , "log" )
67
- ), "gcc"
135
+ ),
136
+ envsafe .BuildLibrary (
137
+ join ("$BUILD_DIR" , "bootloaderSPIFlash" ),
138
+ join (FRAMEWORK_DIR , "components" , "spi_flash" ),
139
+ src_filter = "-<*> +<spi_flash_rom_patch.c>"
140
+ ),
141
+ envsafe .BuildLibrary (
142
+ join ("$BUILD_DIR" , "bootloaderMicroEcc" ),
143
+ join (FRAMEWORK_DIR , "components" , "micro-ecc" ),
144
+ src_filter = "+<*> -<micro-ecc/test>"
145
+ ),
146
+ "rtc" , "gcc" , "stdc++"
68
147
]
69
148
)
70
149
@@ -80,27 +159,53 @@ def build_espidf_bootloader():
80
159
env .Prepend (
81
160
CPPPATH = [
82
161
join ("$PROJECTSRC_DIR" ),
83
- join (FRAMEWORK_DIR , "components" , "nghttp" , "include" ),
84
- join (FRAMEWORK_DIR , "components" , "nghttp" , "port" , "include" ),
162
+ join (FRAMEWORK_DIR , "components" , "xtensa-debug-module" , "include" ),
163
+ join (FRAMEWORK_DIR , "components" , "app_update" , "include" ),
164
+ join (FRAMEWORK_DIR , "components" , "bootloader_support" , "include" ),
165
+ join (FRAMEWORK_DIR , "components" ,
166
+ "bootloader_support" , "include_priv" ),
85
167
join (FRAMEWORK_DIR , "components" , "bt" , "include" ),
168
+ join (FRAMEWORK_DIR , "components" , "coap" , "port" , "include" ),
169
+ join (FRAMEWORK_DIR , "components" , "coap" , "port" , "include" , "coap" ),
170
+ join (FRAMEWORK_DIR , "components" , "coap" , "libcoap" , "include" ),
171
+ join (FRAMEWORK_DIR , "components" , "coap" ,
172
+ "libcoap" , "include" , "coap" ),
173
+ join (FRAMEWORK_DIR , "components" , "cxx" , "include" ),
86
174
join (FRAMEWORK_DIR , "components" , "driver" , "include" ),
175
+ join (FRAMEWORK_DIR , "components" , "driver" , "include" , "driver" ),
87
176
join (FRAMEWORK_DIR , "components" , "esp32" , "include" ),
177
+ join (FRAMEWORK_DIR , "components" , "ethernet" , "include" ),
178
+ join (FRAMEWORK_DIR , "components" , "expat" , "include" , "expat" ),
179
+ join (FRAMEWORK_DIR , "components" , "expat" , "port" , "include" ),
180
+ join (FRAMEWORK_DIR , "components" , "fatfs" , "src" ),
88
181
join (FRAMEWORK_DIR , "components" , "freertos" , "include" ),
89
- join (FRAMEWORK_DIR , "components" , "freertos" , "include" , "freertos" ),
182
+ join (FRAMEWORK_DIR , "components" , "json" , "include" ),
183
+ join (FRAMEWORK_DIR , "components" , "json" , "port" , "include" ),
90
184
join (FRAMEWORK_DIR , "components" , "log" , "include" ),
91
- join (FRAMEWORK_DIR , "components" , "newlib" , "include" ),
92
- join (FRAMEWORK_DIR , "components" , "nvs_flash" , "include" ),
93
- join (FRAMEWORK_DIR , "components" , "spi_flash" , "include" ),
94
- join (FRAMEWORK_DIR , "components" , "tcpip_adapter" , "include" ),
95
185
join (FRAMEWORK_DIR , "components" , "lwip" , "include" , "lwip" ),
96
186
join (FRAMEWORK_DIR , "components" , "lwip" , "include" , "lwip" , "port" ),
97
187
join (FRAMEWORK_DIR , "components" , "lwip" , "include" , "lwip" , "posix" ),
98
- join (FRAMEWORK_DIR , "components" , "expat" , "include" , "expat" ),
99
- join (FRAMEWORK_DIR , "components" , "expat" , "port" , "include" ),
100
- join (FRAMEWORK_DIR , "components" , "json" , "include" ),
101
- join (FRAMEWORK_DIR , "components" , "json" , "port" , "include" ),
188
+ join (FRAMEWORK_DIR , "components" , "lwip" , "apps" , "ping" ),
189
+ join (FRAMEWORK_DIR , "components" , "mbedtls" , "port" , "include" ),
102
190
join (FRAMEWORK_DIR , "components" , "mbedtls" , "include" ),
103
- join (FRAMEWORK_DIR , "components" , "mbedtls" , "port" , "include" )
191
+ join (FRAMEWORK_DIR , "components" , "mdns" , "include" ),
192
+ join (FRAMEWORK_DIR , "components" , "micro-ecc" , "micro-ecc" ),
193
+ join (FRAMEWORK_DIR , "components" , "newlib" , "include" ),
194
+ join (FRAMEWORK_DIR , "components" , "newlib" , "platform_include" ),
195
+ join (FRAMEWORK_DIR , "components" , "nghttp" , "include" ),
196
+ join (FRAMEWORK_DIR , "components" , "nghttp" , "port" , "include" ),
197
+ join (FRAMEWORK_DIR , "components" , "nvs_flash" , "include" ),
198
+ join (FRAMEWORK_DIR , "components" , "openssl" , "include" ),
199
+ join (FRAMEWORK_DIR , "components" , "openssl" , "include" , "internal" ),
200
+ join (FRAMEWORK_DIR , "components" , "openssl" , "include" , "platform" ),
201
+ join (FRAMEWORK_DIR , "components" , "openssl" , "include" , "openssl" ),
202
+ join (FRAMEWORK_DIR , "components" , "sdmmc" , "include" ),
203
+ join (FRAMEWORK_DIR , "components" , "spi_flash" , "include" ),
204
+ join (FRAMEWORK_DIR , "components" , "tcpip_adapter" , "include" ),
205
+ join (FRAMEWORK_DIR , "components" , "ulp" , "include" ),
206
+ join (FRAMEWORK_DIR , "components" , "vfs" , "include" ),
207
+ join (FRAMEWORK_DIR , "components" , "wpa_supplicant" , "include" ),
208
+ join (FRAMEWORK_DIR , "components" , "wpa_supplicant" , "port" , "include" )
104
209
],
105
210
106
211
LIBPATH = [
@@ -113,25 +218,51 @@ def build_espidf_bootloader():
113
218
],
114
219
115
220
LIBS = [
116
- "hal" , "crypto " , "core" , "net80211" , "phy" , "rtc" , "pp" , "wpa " ,
117
- "smartconfig " , "btdm_app " , "m" , "c" , "gcc"
221
+ "btdm_app" , " hal" , "coexist " , "core" , "net80211" , "phy" , "rtc" , "pp" ,
222
+ "wpa " , "wpa2 " , "wps" , "smartconfig" , " m" , "c" , "gcc" , "stdc++ "
118
223
]
119
224
)
120
225
121
- env .Append (
122
- LIBSOURCE_DIRS = [
123
- join (FRAMEWORK_DIR , "libraries" )
226
+ for root , dirs , _ in walk (join (
227
+ FRAMEWORK_DIR , "components" , "bt" , "bluedroid" )):
228
+ for d in dirs :
229
+ if (d == "include" ):
230
+ env .Append (CPPPATH = [join (root , d )])
231
+
232
+
233
+ env .Prepend (
234
+ CFLAGS = ["-Wno-old-style-declaration" ],
235
+
236
+ CPPDEFINES = [
237
+ "WITH_POSIX" ,
238
+ ("IDF_VER" , '\\ "%s\\ "' %
239
+ platform .get_package_version ("framework-espidf" ))
124
240
],
125
241
242
+ CCFLAGS = [
243
+ "-Wall" ,
244
+ "-Werror=all" ,
245
+ "-Wno-error=deprecated-declarations" ,
246
+ "-Wextra" ,
247
+ "-Wno-unused-parameter" ,
248
+ "-Wno-sign-compare" ,
249
+ "-Wno-error=unused-function"
250
+ ],
251
+
252
+ LIBSOURCE_DIRS = [join (FRAMEWORK_DIR , "libraries" )]
253
+ )
254
+
255
+ env .Append (
126
256
LINKFLAGS = [
257
+ "-u" , "__cxa_guard_dummy" ,
127
258
"-T" , "esp32.common.ld" ,
128
259
"-T" , "esp32.rom.ld" ,
129
260
"-T" , "esp32.peripherals.ld"
130
261
],
131
262
132
263
UPLOADERFLAGS = [
133
264
"0x1000" , join ("$BUILD_DIR" , "bootloader.bin" ),
134
- "0x4000 " , join ("$BUILD_DIR" , "partitions_table.bin" ),
265
+ "0x8000 " , join ("$BUILD_DIR" , "partitions_table.bin" ),
135
266
"0x10000"
136
267
]
137
268
)
@@ -142,14 +273,14 @@ def build_espidf_bootloader():
142
273
143
274
partition_table = env .Command (
144
275
join ("$BUILD_DIR" , "partitions_table.bin" ),
145
- join (FRAMEWORK_DIR , "components" ,
146
- "partition_table" , " partitions_singleapp.csv" ),
147
- '"$PYTHONEXE" "%s" -q $SOURCE $TARGET' % join (
148
- FRAMEWORK_DIR , "components" , "partition_table" , "gen_esp32part.py" )
149
- )
276
+ join (FRAMEWORK_DIR , "components" , "partition_table" ,
277
+ "partitions_singleapp.csv" ),
278
+ env . VerboseAction ( '"$PYTHONEXE" "%s" -q $SOURCE $TARGET' % join (
279
+ FRAMEWORK_DIR , "components" , "partition_table" , "gen_esp32part.py" ),
280
+ "Generating partitions $TARGET" ) )
150
281
151
- env .Depends ("$BUILD_DIR/$PROGNAME$PROGSUFFIX" , partition_table )
152
282
283
+ env .Depends ("$BUILD_DIR/$PROGNAME$PROGSUFFIX" , partition_table )
153
284
154
285
#
155
286
# Generate linker script
@@ -158,8 +289,9 @@ def build_espidf_bootloader():
158
289
linker_script = env .Command (
159
290
join ("$BUILD_DIR" , "esp32_out.ld" ),
160
291
join (FRAMEWORK_DIR , "components" , "esp32" , "ld" , "esp32.ld" ),
161
- "$CC -I$PROJECTSRC_DIR -C -P -x c -E $SOURCE -o $TARGET"
162
- )
292
+ env .VerboseAction (
293
+ "$CC -I$PROJECTSRC_DIR -C -P -x c -E $SOURCE -o $TARGET" ,
294
+ "Generating LD script $TARGET" ))
163
295
164
296
env .Depends ("$BUILD_DIR/$PROGNAME$PROGSUFFIX" , linker_script )
165
297
@@ -177,16 +309,27 @@ def build_espidf_bootloader():
177
309
libs = []
178
310
179
311
ignore_dirs = (
180
- "bootloader" , "esptool_py" , "idf_test" , "newlib" , "partition_table" )
312
+ "bootloader" ,
313
+ "bootloader_support" ,
314
+ "esptool_py" ,
315
+ "idf_test" ,
316
+ "partition_table" ,
317
+ "nghttp" ,
318
+ "spi_flash"
319
+ )
181
320
182
321
for d in listdir (join (FRAMEWORK_DIR , "components" )):
183
322
if d in ignore_dirs :
184
323
continue
185
- if isdir (join (FRAMEWORK_DIR , "components" , d )):
186
- libs .append (env .BuildLibrary (
187
- join ("$BUILD_DIR" , "%s" % d ),
188
- join (FRAMEWORK_DIR , "components" , d ),
189
- src_filter = "+<*> -<test>"
190
- ))
324
+ component_dir = join (FRAMEWORK_DIR , "components" , d )
325
+ if isdir (component_dir ):
326
+ libs .append (build_component (component_dir ))
327
+
328
+
329
+ libs .append (env .BuildLibrary (
330
+ join ("$BUILD_DIR" , "spi_flash" ),
331
+ join (FRAMEWORK_DIR , "components" , "spi_flash" ),
332
+ src_filter = "+<*> -<test>"
333
+ ))
191
334
192
335
env .Prepend (LIBS = libs )
0 commit comments