3
3
import sys
4
4
import subprocess
5
5
import time
6
- from multiprocessing import Process
6
+ from multiprocessing import Pool
7
7
8
8
import build_utils
9
9
10
10
SUCCEEDED = "\033 [32msucceeded\033 [0m"
11
11
FAILED = "\033 [31mfailed\033 [0m"
12
12
SKIPPED = "\033 [33mskipped\033 [0m"
13
13
14
- success_count = 0
15
- fail_count = 0
16
- skip_count = 0
17
- exit_status = 0
18
-
19
- total_time = time .monotonic ()
20
-
21
14
build_format = '| {:29} | {:30} | {:18} | {:7} | {:6} | {:6} |'
22
15
build_separator = '-' * 106
23
16
@@ -54,46 +47,45 @@ def build_family(example, family):
54
47
filter_with_input (all_boards )
55
48
all_boards .sort ()
56
49
57
- plist = []
58
- for board in all_boards :
59
- p = Process (target = build_board , args = (example , board ))
60
- plist .append (p )
61
- p .start ()
62
-
63
- for p in plist :
64
- p .join ()
50
+ with Pool (processes = len (all_boards )) as pool :
51
+ pool_args = list ((map (lambda b , e = example : [e , b ], all_boards )))
52
+ result = pool .starmap (build_board , pool_args )
53
+ return list (map (sum , list (zip (* result ))))
65
54
66
55
def build_board (example , board ):
67
- global success_count , fail_count , skip_count , exit_status
68
56
start_time = time .monotonic ()
69
57
flash_size = "-"
70
58
sram_size = "-"
71
59
60
+ # succeeded, failed, skipped
61
+ ret = [0 , 0 , 0 ]
62
+
72
63
# Check if board is skipped
73
64
if build_utils .skip_example (example , board ):
74
- success = SKIPPED
75
- skip_count + = 1
76
- print (build_format .format (example , board , success , '-' , flash_size , sram_size ))
65
+ status = SKIPPED
66
+ ret [ 2 ] = 1
67
+ print (build_format .format (example , board , status , '-' , flash_size , sram_size ))
77
68
else :
78
69
#subprocess.run("make -C examples/{} BOARD={} clean".format(example, board), shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
79
70
build_result = subprocess .run ("make -j -C examples/{} BOARD={} all" .format (example , board ), shell = True , stdout = subprocess .PIPE , stderr = subprocess .STDOUT )
80
71
81
72
if build_result .returncode == 0 :
82
- success = SUCCEEDED
83
- success_count + = 1
73
+ status = SUCCEEDED
74
+ ret [ 0 ] = 1
84
75
(flash_size , sram_size ) = build_size (example , board )
85
76
subprocess .run ("make -j -C examples/{} BOARD={} copy-artifact" .format (example , board ), shell = True , stdout = subprocess .PIPE , stderr = subprocess .STDOUT )
86
77
else :
87
- exit_status = build_result .returncode
88
- success = FAILED
89
- fail_count += 1
78
+ status = FAILED
79
+ ret [1 ] = 1
90
80
91
81
build_duration = time .monotonic () - start_time
92
- print (build_format .format (example , board , success , "{:.2f}s" .format (build_duration ), flash_size , sram_size ))
82
+ print (build_format .format (example , board , status , "{:.2f}s" .format (build_duration ), flash_size , sram_size ))
93
83
94
84
if build_result .returncode != 0 :
95
85
print (build_result .stdout .decode ("utf-8" ))
96
86
87
+ return ret
88
+
97
89
def build_size (example , board ):
98
90
elf_file = 'examples/{}/_build/{}/*.elf' .format (example , board )
99
91
size_output = subprocess .run ('size {}' .format (elf_file ), shell = True , stdout = subprocess .PIPE ).stdout .decode ("utf-8" )
@@ -103,17 +95,22 @@ def build_size(example, board):
103
95
return (flash_size , sram_size )
104
96
105
97
if __name__ == '__main__' :
98
+ # succeeded, failed, skipped
99
+ total_result = [0 , 0 , 0 ]
100
+
106
101
print (build_separator )
107
102
print (build_format .format ('Example' , 'Board' , '\033 [39mResult\033 [0m' , 'Time' , 'Flash' , 'SRAM' ))
103
+ total_time = time .monotonic ()
108
104
109
105
for example in all_examples :
110
106
print (build_separator )
111
107
for family in all_families :
112
- build_family (example , family )
108
+ fret = build_family (example , family )
109
+ total_result = list (map (lambda x , y : x + y , total_result , fret ))
113
110
114
111
total_time = time .monotonic () - total_time
115
112
print (build_separator )
116
- print ("Build Summary: {} {}, {} {}, {} {} and took {:.2f}s" .format (success_count , SUCCEEDED , fail_count , FAILED , skip_count , SKIPPED , total_time ))
113
+ print ("Build Summary: {} {}, {} {}, {} {} and took {:.2f}s" .format (total_result [ 0 ] , SUCCEEDED , total_result [ 1 ] , FAILED , total_result [ 2 ] , SKIPPED , total_time ))
117
114
print (build_separator )
118
115
119
- sys .exit (exit_status )
116
+ sys .exit (total_result [ 1 ] )
0 commit comments