8.2.4. How to Use Generated Sources from HALCoGen

Note

A documentation of the tool HALCoGen can be found in HALCoGen tool documentation, the waf-tool wrapper for this project in HALCoGen and information on configuring HALCoGen in the context of the toolchain of this project in HALCoGen.

The following steps need to be applied:

  1. Removing the HALCoGen dependency in the compiler tool:

    • remove loading the the f_hcg tool in the configure step.

    • in the class search_swi(Task.Task) the class attribute after needs to be modified. Remove the entry hcg_compiler from the list.

  2. Adding the sources:

    • The generated HAL files need to be copied into the src/hal directory

    • The wscript in src/hal needs to be modified:

      Listing 8.43 Building the HAL library without using HALCoGen on the fly
       1
       2def build(bld):
       3    """Build the HAL library"""
       4    source = [
       5        # list sources here, most likely something like 'source/abc.c',
       6        # 'source/abc.asm' etc.
       7    ]
       8    includes = [
       9        # list include directories here, most likely 'include'
      10    ]
      11    target = f"{bld.env.APPNAME.lower()}-hal"
      12    cflags = bld.env.CFLAGS_HAL
      13
      14    bld.stlib(
      15        source=source,
      16        includes=includes,
      17        cflags=cflags,
      18        target=target,
      19    )
      
    • Add the include directory in all wscript-files where needed. This will affect most wscript-files. This looks e.g., like this for a FreeRTOS and LTC6806 configuration:

      Listing 8.44 The diff of includes
       1diff --git a/src/app/application/algorithm/wscript b/src/app/application/algorithm/wscript
       2index c4d837c4..2d1580fa 100644
       3--- a/src/app/application/algorithm/wscript
       4+++ b/src/app/application/algorithm/wscript
       5@@ -77,6 +77,7 @@ def build(bld):
       6         os.path.join("..", "..", "main", "include"),
       7         os.path.join("..", "..", "task", "config"),
       8         os.path.join("..", "..", "task", "os"),
       9+        os.path.join("..", "..", "..", "hal", "include"),
      10     ]
      11     includes.extend(bld.env.INCLUDES_RTOS)
      12     cflags = bld.env.CFLAGS_FOXBMS
      13diff --git a/src/app/application/wscript b/src/app/application/wscript
      14index a9462e21..1fdb5850 100644
      15--- a/src/app/application/wscript
      16+++ b/src/app/application/wscript
      17@@ -88,6 +88,7 @@ def build(bld):
      18         os.path.join("..", "main", "include"),
      19         os.path.join("..", "task", "config"),
      20         os.path.join("..", "task", "os"),
      21+        os.path.join("..", "..", "hal", "include"),
      22     ]
      23     includes.extend(bld.env.INCLUDES_RTOS + bld.env.INCLUDES_AFE)
      24     cflags = bld.env.CFLAGS_FOXBMS
      25diff --git a/src/app/driver/afe/ltc/6806/wscript b/src/app/driver/afe/ltc/6806/wscript
      26index d7ca3af9..0cc6c777 100644
      27--- a/src/app/driver/afe/ltc/6806/wscript
      28+++ b/src/app/driver/afe/ltc/6806/wscript
      29@@ -71,6 +71,7 @@ def build(bld):
      30         os.path.join("..", "..", "..", "..", "engine", "diag"),
      31         os.path.join("..", "..", "..", "..", "main", "include"),
      32         os.path.join("..", "..", "..", "..", "task", "os"),
      33+        os.path.join("..", "..", "..", "..", "..", "hal", "include"),
      34     ]
      35     includes.extend(bld.env.INCLUDES_RTOS)
      36     cflags = bld.env.CFLAGS_FOXBMS
      37diff --git a/src/app/driver/wscript b/src/app/driver/wscript
      38index c6b42f89..26369502 100644
      39--- a/src/app/driver/wscript
      40+++ b/src/app/driver/wscript
      41@@ -122,6 +122,7 @@ def build(bld):
      42         os.path.join("..", "main", "include"),
      43         os.path.join("..", "task", "config"),
      44         os.path.join("..", "task", "os"),
      45+        os.path.join("..", "..", "hal", "include"),
      46     ]
      47     includes.extend(bld.env.INCLUDES_RTOS + bld.env.INCLUDES_AFE)
      48     cflags = bld.env.CFLAGS_FOXBMS
      49diff --git a/src/app/engine/wscript b/src/app/engine/wscript
      50index 03873567..118c66b6 100644
      51--- a/src/app/engine/wscript
      52+++ b/src/app/engine/wscript
      53@@ -83,6 +83,7 @@ def build(bld):
      54         os.path.join("..", "main", "include"),
      55         os.path.join("..", "task", "os"),
      56         os.path.join("..", "task", "config"),
      57+        os.path.join("..", "..", "hal", "include"),
      58     ]
      59     includes.extend(bld.env.INCLUDES_RTOS + bld.env.INCLUDES_AFE)
      60     target = f"{bld.env.APPNAME.lower()}-engine"
      61diff --git a/src/app/main/wscript b/src/app/main/wscript
      62index 1945b079..a47c3e20 100644
      63--- a/src/app/main/wscript
      64+++ b/src/app/main/wscript
      65@@ -69,6 +69,7 @@ def build(bld):
      66         os.path.join("..", "engine", "hwinfo"),
      67         os.path.join("..", "task", "os"),
      68         os.path.join("..", "task", "config"),
      69+        os.path.join("..", "..", "hal", "include"),
      70     ]
      71     includes.extend(bld.env.INCLUDES_RTOS + bld.env.INCLUDES_AFE)
      72     cflags = bld.env.CFLAGS_FOXBMS
      73diff --git a/src/app/task/wscript b/src/app/task/wscript
      74index d2479891..1b584c01 100644
      75--- a/src/app/task/wscript
      76+++ b/src/app/task/wscript
      77@@ -85,6 +85,7 @@ def build(bld):
      78         os.path.join("..", "engine", "sys_mon"),
      79         os.path.join("..", "engine", "sys"),
      80         os.path.join("..", "main", "include"),
      81+        os.path.join("..", "..", "hal", "include"),
      82     ]
      83     includes.extend(bld.env.INCLUDES_RTOS + bld.env.INCLUDES_AFE)
      84     cflags = bld.env.CFLAGS_FOXBMS
      85diff --git a/src/os/freertos/wscript b/src/os/freertos/wscript
      86index 2d91582e..c32227aa 100644
      87--- a/src/os/freertos/wscript
      88+++ b/src/os/freertos/wscript
      89@@ -66,6 +66,7 @@ def build(bld):
      90         os.path.join("..", "..", "app", "main", "include"),
      91         os.path.join("..", "..", "app", "task"),
      92         os.path.join("..", "..", "app", "task", "config"),
      93+        os.path.join("..", "..", "hal", "include"),
      94     ]
      95     target = f"{bld.env.APPNAME.lower()}-os"
      96     cflags = bld.env.CFLAGS_OS