From c86e628a4c199a39f8317a0d4b5dd96e9692e544 Mon Sep 17 00:00:00 2001
From: hathach <thach@tinyusb.org>
Date: Tue, 17 Jan 2023 23:37:00 +0700
Subject: [PATCH] update build script to support iar with CC=iccarm option

---
 .github/workflows/build_iar_arm.yml |  2 +-
 tools/build_board.py                |  2 +-
 tools/build_family.py               | 11 ++++++++---
 tools/build_utils.py                |  6 +++---
 4 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/.github/workflows/build_iar_arm.yml b/.github/workflows/build_iar_arm.yml
index ed75eca5b..bcf560024 100644
--- a/.github/workflows/build_iar_arm.yml
+++ b/.github/workflows/build_iar_arm.yml
@@ -1,4 +1,4 @@
-name: Build IAR for ARM
+name: Build ARM with IAR
 
 on:
   push:
diff --git a/tools/build_board.py b/tools/build_board.py
index 8d10ef820..4593dafa5 100644
--- a/tools/build_board.py
+++ b/tools/build_board.py
@@ -52,7 +52,7 @@ if __name__ == '__main__':
     for example in all_examples:
         print(build_separator)
         with Pool(processes=os.cpu_count()) as pool:
-            pool_args = list((map(lambda b, e=example: [e, b], all_boards)))
+            pool_args = list((map(lambda b, e=example, o='': [e, b, o], all_boards)))
             result = pool.starmap(build_utils.build_example, pool_args)
             # sum all element of same index (column sum)
             result = list(map(sum, list(zip(*result))))
diff --git a/tools/build_family.py b/tools/build_family.py
index c6c64d2b3..cdc099691 100644
--- a/tools/build_family.py
+++ b/tools/build_family.py
@@ -11,6 +11,7 @@ SKIPPED = "\033[33mskipped\033[0m"
 
 build_separator = '-' * 106
 
+make_iar_option = 'CC=iccarm'
 
 def filter_with_input(mylist):
     if len(sys.argv) > 1:
@@ -19,7 +20,7 @@ def filter_with_input(mylist):
             mylist[:] = input_args
 
 
-def build_family(example, family):
+def build_family(example, family, make_option):
     all_boards = []
     for entry in os.scandir("hw/bsp/{}/boards".format(family)):
         if entry.is_dir() and entry.name != 'pico_sdk':
@@ -28,13 +29,17 @@ def build_family(example, family):
     all_boards.sort()
 
     with Pool(processes=os.cpu_count()) as pool:
-        pool_args = list((map(lambda b, e=example: [e, b], all_boards)))
+        pool_args = list((map(lambda b, e=example, o=make_option: [e, b, o], all_boards)))
         result = pool.starmap(build_utils.build_example, pool_args)
         # sum all element of same index (column sum)
         return list(map(sum, list(zip(*result))))
 
 
 if __name__ == '__main__':
+    # IAR CC
+    if make_iar_option not in sys.argv:
+        make_iar_option = ''
+
     # If examples are not specified in arguments, build all
     all_examples = []
     for dir1 in os.scandir("examples"):
@@ -62,7 +67,7 @@ if __name__ == '__main__':
     for example in all_examples:
         print(build_separator)
         for family in all_families:
-            fret = build_family(example, family)
+            fret = build_family(example, family, make_iar_option)
             total_result = list(map(lambda x, y: x + y, total_result, fret))
 
     total_time = time.monotonic() - total_time
diff --git a/tools/build_utils.py b/tools/build_utils.py
index f457c7986..ad1daf8c7 100644
--- a/tools/build_utils.py
+++ b/tools/build_utils.py
@@ -77,7 +77,7 @@ def skip_example(example, board):
     return False
 
 
-def build_example(example, board):
+def build_example(example, board, make_option):
     start_time = time.monotonic()
     flash_size = "-"
     sram_size = "-"
@@ -91,14 +91,14 @@ def build_example(example, board):
         ret[2] = 1
         print(build_format.format(example, board, status, '-', flash_size, sram_size))
     else:
-        build_result = subprocess.run("make -j -C examples/{} BOARD={} all".format(example, board), shell=True,
+        build_result = subprocess.run("make -j -C examples/{} BOARD={} {} all".format(example, board, make_option), shell=True,
                                       stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
 
         if build_result.returncode == 0:
             status = SUCCEEDED
             ret[0] = 1
             (flash_size, sram_size) = build_size(example, board)
-            subprocess.run("make -j -C examples/{} BOARD={} copy-artifact".format(example, board), shell=True,
+            subprocess.run("make -j -C examples/{} BOARD={} {} copy-artifact".format(example, board, make_option), shell=True,
                            stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
         else:
             status = FAILED