[PATCH rtems-lwip v2] lwip.py: Move bsp-specific information out

Vijay Kumar Banerjee vijay at rtems.org
Thu Nov 10 20:21:11 UTC 2022


Thanks for the patch. The v2 looks good. Tested the build with beagleboneblack

On Wed, Nov 9, 2022 at 9:33 PM Kinsey Moore <kinsey.moore at oarcorp.com> wrote:
>
> This moves all BSP-specific information out of lwip.py and into JSON
> descriptions of the files required to compile the drivers for each BSP.
>
> Note that file-import.json is kept separate because it is used to manage
> updating from upstream.
> ---
>  COPYING.defs                                  |  23 ++++
>  ORIGIN.defs                                   |   1 +
>  defs/bsps/aarch64/xilinx_zynqmp_base.json     |  30 ++++
>  .../aarch64/xilinx_zynqmp_ilp32_qemu.json     |  11 ++
>  .../aarch64/xilinx_zynqmp_ilp32_zu3eg.json    |  11 ++
>  .../bsps/aarch64/xilinx_zynqmp_lp64_qemu.json |  11 ++
>  .../aarch64/xilinx_zynqmp_lp64_zu3eg.json     |  11 ++
>  defs/bsps/arm/beaglebone_bw_base.json         |  10 ++
>  defs/bsps/arm/beagleboneblack.json            |   5 +
>  defs/bsps/arm/beaglebonewhite.json            |   5 +
>  defs/bsps/arm/tms570_base.json                |   9 ++
>  defs/bsps/arm/tms570ls3137_hdk.json           |   5 +
>  defs/bsps/arm/tms570ls3137_hdk_intram.json    |   5 +
>  defs/bsps/arm/tms570ls3137_hdk_sdram.json     |   5 +
>  .../arm/tms570ls3137_hdk_with_loader.json     |   5 +
>  defs/common/lwip.json                         |  17 +++
>  lwip.py                                       | 129 ++++--------------
>  17 files changed, 194 insertions(+), 99 deletions(-)
>  create mode 100644 COPYING.defs
>  create mode 100644 ORIGIN.defs
>  create mode 100644 defs/bsps/aarch64/xilinx_zynqmp_base.json
>  create mode 100644 defs/bsps/aarch64/xilinx_zynqmp_ilp32_qemu.json
>  create mode 100644 defs/bsps/aarch64/xilinx_zynqmp_ilp32_zu3eg.json
>  create mode 100644 defs/bsps/aarch64/xilinx_zynqmp_lp64_qemu.json
>  create mode 100644 defs/bsps/aarch64/xilinx_zynqmp_lp64_zu3eg.json
>  create mode 100644 defs/bsps/arm/beaglebone_bw_base.json
>  create mode 100644 defs/bsps/arm/beagleboneblack.json
>  create mode 100644 defs/bsps/arm/beaglebonewhite.json
>  create mode 100644 defs/bsps/arm/tms570_base.json
>  create mode 100644 defs/bsps/arm/tms570ls3137_hdk.json
>  create mode 100644 defs/bsps/arm/tms570ls3137_hdk_intram.json
>  create mode 100644 defs/bsps/arm/tms570ls3137_hdk_sdram.json
>  create mode 100644 defs/bsps/arm/tms570ls3137_hdk_with_loader.json
>  create mode 100644 defs/common/lwip.json
>
> diff --git a/COPYING.defs b/COPYING.defs
> new file mode 100644
> index 0000000..d971823
> --- /dev/null
> +++ b/COPYING.defs
> @@ -0,0 +1,23 @@
> +/*
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
> + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
> + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
> + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
> + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
> + * POSSIBILITY OF SUCH DAMAGE.
> + */
> +
> diff --git a/ORIGIN.defs b/ORIGIN.defs
> new file mode 100644
> index 0000000..33c421c
> --- /dev/null
> +++ b/ORIGIN.defs
> @@ -0,0 +1 @@
> +The files under the defs/ directory are written specifically for this project.
> diff --git a/defs/bsps/aarch64/xilinx_zynqmp_base.json b/defs/bsps/aarch64/xilinx_zynqmp_base.json
> new file mode 100644
> index 0000000..515ad6e
> --- /dev/null
> +++ b/defs/bsps/aarch64/xilinx_zynqmp_base.json
> @@ -0,0 +1,30 @@
> +{
> +       "header-paths-to-import": [
> +               "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/include",
> +               "embeddedsw/lib/bsp/standalone/src/common",
> +               "embeddedsw/XilinxProcessorIPLib/drivers/common/src/",
> +               "embeddedsw/XilinxProcessorIPLib/drivers/scugic/src",
> +               "embeddedsw/XilinxProcessorIPLib/drivers/emacps/src",
> +               "rtemslwip/xilinx",
> +               "rtemslwip/zynqmp",
> +               "embeddedsw/lib/bsp/standalone/src/arm/ARMv8/64bit",
> +               "embeddedsw/lib/bsp/standalone/src/arm/common/gcc",
> +               "embeddedsw/lib/bsp/standalone/src/arm/common"
> +       ],
> +       "source-paths-to-import": [
> +               "rtemslwip/zynqmp"
> +       ],
> +       "source-files-to-import": [
> +               "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xadapter.c",
> +               "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xpqueue.c",
> +               "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif.c",
> +               "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif_dma.c",
> +               "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif_hw.c",
> +               "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif_physpeed.c",
> +               "embeddedsw/XilinxProcessorIPLib/drivers/emacps/src/xemacps_bdring.c",
> +               "embeddedsw/XilinxProcessorIPLib/drivers/emacps/src/xemacps.c",
> +               "embeddedsw/XilinxProcessorIPLib/drivers/emacps/src/xemacps_control.c",
> +               "embeddedsw/XilinxProcessorIPLib/drivers/emacps/src/xemacps_intr.c",
> +               "embeddedsw/lib/bsp/standalone/src/common/xil_assert.c"
> +       ]
> +}
> diff --git a/defs/bsps/aarch64/xilinx_zynqmp_ilp32_qemu.json b/defs/bsps/aarch64/xilinx_zynqmp_ilp32_qemu.json
> new file mode 100644
> index 0000000..ed8667d
> --- /dev/null
> +++ b/defs/bsps/aarch64/xilinx_zynqmp_ilp32_qemu.json
> @@ -0,0 +1,11 @@
> +{
> +       "includes": [
> +               "xilinx_zynqmp_base"
> +       ],
> +       "header-paths-to-import": [
> +               "rtemslwip/zynqmp_qemu"
> +       ],
> +       "source-paths-to-import": [
> +               "rtemslwip/zynqmp_qemu"
> +       ]
> +}
> diff --git a/defs/bsps/aarch64/xilinx_zynqmp_ilp32_zu3eg.json b/defs/bsps/aarch64/xilinx_zynqmp_ilp32_zu3eg.json
> new file mode 100644
> index 0000000..4438ed2
> --- /dev/null
> +++ b/defs/bsps/aarch64/xilinx_zynqmp_ilp32_zu3eg.json
> @@ -0,0 +1,11 @@
> +{
> +       "includes": [
> +               "xilinx_zynqmp_base"
> +       ],
> +       "header-paths-to-import": [
> +               "rtemslwip/zynqmp_hardware"
> +       ],
> +       "source-paths-to-import": [
> +               "rtemslwip/zynqmp_hardware"
> +       ]
> +}
> diff --git a/defs/bsps/aarch64/xilinx_zynqmp_lp64_qemu.json b/defs/bsps/aarch64/xilinx_zynqmp_lp64_qemu.json
> new file mode 100644
> index 0000000..ed8667d
> --- /dev/null
> +++ b/defs/bsps/aarch64/xilinx_zynqmp_lp64_qemu.json
> @@ -0,0 +1,11 @@
> +{
> +       "includes": [
> +               "xilinx_zynqmp_base"
> +       ],
> +       "header-paths-to-import": [
> +               "rtemslwip/zynqmp_qemu"
> +       ],
> +       "source-paths-to-import": [
> +               "rtemslwip/zynqmp_qemu"
> +       ]
> +}
> diff --git a/defs/bsps/aarch64/xilinx_zynqmp_lp64_zu3eg.json b/defs/bsps/aarch64/xilinx_zynqmp_lp64_zu3eg.json
> new file mode 100644
> index 0000000..4438ed2
> --- /dev/null
> +++ b/defs/bsps/aarch64/xilinx_zynqmp_lp64_zu3eg.json
> @@ -0,0 +1,11 @@
> +{
> +       "includes": [
> +               "xilinx_zynqmp_base"
> +       ],
> +       "header-paths-to-import": [
> +               "rtemslwip/zynqmp_hardware"
> +       ],
> +       "source-paths-to-import": [
> +               "rtemslwip/zynqmp_hardware"
> +       ]
> +}
> diff --git a/defs/bsps/arm/beaglebone_bw_base.json b/defs/bsps/arm/beaglebone_bw_base.json
> new file mode 100644
> index 0000000..9d25a67
> --- /dev/null
> +++ b/defs/bsps/arm/beaglebone_bw_base.json
> @@ -0,0 +1,10 @@
> +{
> +       "header-paths-to-import": [
> +               "rtemslwip/beaglebone",
> +               "cpsw/src/include"
> +       ],
> +       "source-paths-to-import": [
> +               "rtemslwip/beaglebone",
> +               "cpsw/src"
> +       ]
> +}
> diff --git a/defs/bsps/arm/beagleboneblack.json b/defs/bsps/arm/beagleboneblack.json
> new file mode 100644
> index 0000000..d197631
> --- /dev/null
> +++ b/defs/bsps/arm/beagleboneblack.json
> @@ -0,0 +1,5 @@
> +{
> +       "includes": [
> +               "beaglebone_bw_base"
> +       ]
> +}
> diff --git a/defs/bsps/arm/beaglebonewhite.json b/defs/bsps/arm/beaglebonewhite.json
> new file mode 100644
> index 0000000..d197631
> --- /dev/null
> +++ b/defs/bsps/arm/beaglebonewhite.json
> @@ -0,0 +1,5 @@
> +{
> +       "includes": [
> +               "beaglebone_bw_base"
> +       ]
> +}
> diff --git a/defs/bsps/arm/tms570_base.json b/defs/bsps/arm/tms570_base.json
> new file mode 100644
> index 0000000..33cd969
> --- /dev/null
> +++ b/defs/bsps/arm/tms570_base.json
> @@ -0,0 +1,9 @@
> +{
> +       "header-paths-to-import": [
> +               "uLan/ports/driver/tms570_emac",
> +               "uLan/ports/os"
> +       ],
> +       "source-paths-to-import": [
> +               "uLan/ports/driver/tms570_emac"
> +       ]
> +}
> diff --git a/defs/bsps/arm/tms570ls3137_hdk.json b/defs/bsps/arm/tms570ls3137_hdk.json
> new file mode 100644
> index 0000000..3b6210f
> --- /dev/null
> +++ b/defs/bsps/arm/tms570ls3137_hdk.json
> @@ -0,0 +1,5 @@
> +{
> +       "includes": [
> +               "tms570_base"
> +       ]
> +}
> diff --git a/defs/bsps/arm/tms570ls3137_hdk_intram.json b/defs/bsps/arm/tms570ls3137_hdk_intram.json
> new file mode 100644
> index 0000000..3b6210f
> --- /dev/null
> +++ b/defs/bsps/arm/tms570ls3137_hdk_intram.json
> @@ -0,0 +1,5 @@
> +{
> +       "includes": [
> +               "tms570_base"
> +       ]
> +}
> diff --git a/defs/bsps/arm/tms570ls3137_hdk_sdram.json b/defs/bsps/arm/tms570ls3137_hdk_sdram.json
> new file mode 100644
> index 0000000..3b6210f
> --- /dev/null
> +++ b/defs/bsps/arm/tms570ls3137_hdk_sdram.json
> @@ -0,0 +1,5 @@
> +{
> +       "includes": [
> +               "tms570_base"
> +       ]
> +}
> diff --git a/defs/bsps/arm/tms570ls3137_hdk_with_loader.json b/defs/bsps/arm/tms570ls3137_hdk_with_loader.json
> new file mode 100644
> index 0000000..3b6210f
> --- /dev/null
> +++ b/defs/bsps/arm/tms570ls3137_hdk_with_loader.json
> @@ -0,0 +1,5 @@
> +{
> +       "includes": [
> +               "tms570_base"
> +       ]
> +}
> diff --git a/defs/common/lwip.json b/defs/common/lwip.json
> new file mode 100644
> index 0000000..a637c45
> --- /dev/null
> +++ b/defs/common/lwip.json
> @@ -0,0 +1,17 @@
> +{
> +       "header-paths-to-import": [
> +               "rtemslwip/bsd_compat_include",
> +               "lwip/src/include",
> +               "uLan/ports/os/rtems",
> +               "rtemslwip/include"
> +       ],
> +       "source-files-to-import" : [
> +               "uLan/ports/os/rtems/arch/sys_arch.c",
> +               "rtemslwip/common/syslog.c",
> +               "rtemslwip/common/rtems_lwip_io.c",
> +               "rtemslwip/common/network_compat.c",
> +               "rtemslwip/bsd_compat/netdb.c",
> +               "rtemslwip/bsd_compat/ifaddrs.c",
> +               "rtemslwip/bsd_compat/rtems-kernel-program.c"
> +       ]
> +}
> diff --git a/lwip.py b/lwip.py
> index 23ffccf..bcd898f 100644
> --- a/lwip.py
> +++ b/lwip.py
> @@ -36,63 +36,6 @@ def removeprefix(data, prefix):
>      return data
>
>
> -xilinx_lwip_prefix = 'embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/'
> -xilinx_standalone_prefix = 'embeddedsw/lib/bsp/standalone/src/'
> -
> -xilinx_drv_incl = [
> -    xilinx_lwip_prefix + 'ports/xilinx/include',
> -    xilinx_standalone_prefix + 'common',
> -    'embeddedsw/XilinxProcessorIPLib/drivers/common/src/',
> -    'embeddedsw/XilinxProcessorIPLib/drivers/scugic/src',
> -    'embeddedsw/XilinxProcessorIPLib/drivers/emacps/src',
> -    'rtemslwip/xilinx'
> -]
> -
> -xilinx_aarch64_drv_incl = [
> -    'rtemslwip/zynqmp',
> -    xilinx_standalone_prefix + 'arm/ARMv8/64bit',
> -    xilinx_standalone_prefix + 'arm/common/gcc',
> -    xilinx_standalone_prefix + 'arm/common'
> -]
> -
> -# These sources are explicitly listed instead of using walk_sources below
> -# because multiple BSPs of varying architecture are expected to use code from
> -# the embeddedsw repository.
> -xilinx_aarch64_driver_source = [
> -    xilinx_lwip_prefix + 'ports/xilinx/netif/xadapter.c',
> -    xilinx_lwip_prefix + 'ports/xilinx/netif/xpqueue.c',
> -    xilinx_lwip_prefix + 'ports/xilinx/netif/xemacpsif.c',
> -    xilinx_lwip_prefix + 'ports/xilinx/netif/xemacpsif_dma.c',
> -    xilinx_lwip_prefix + 'ports/xilinx/netif/xemacpsif_hw.c',
> -    xilinx_lwip_prefix + 'ports/xilinx/netif/xemacpsif_physpeed.c',
> -    'embeddedsw/XilinxProcessorIPLib/drivers/emacps/src/xemacps_bdring.c',
> -    'embeddedsw/XilinxProcessorIPLib/drivers/emacps/src/xemacps.c',
> -    'embeddedsw/XilinxProcessorIPLib/drivers/emacps/src/xemacps_control.c',
> -    'embeddedsw/XilinxProcessorIPLib/drivers/emacps/src/xemacps_intr.c',
> -    xilinx_standalone_prefix + 'common/xil_assert.c'
> -]
> -
> -common_includes = [
> -    'lwip/src/include',
> -    'uLan/ports/os/rtems',
> -    'rtemslwip/include'
> -]
> -
> -bsd_compat_incl = [
> -    'rtemslwip/bsd_compat_include'
> -]
> -
> -common_source_files = [
> -    'uLan/ports/os/rtems/arch/sys_arch.c',
> -    'rtemslwip/common/syslog.c',
> -    'rtemslwip/common/rtems_lwip_io.c',
> -    'rtemslwip/common/network_compat.c',
> -    'rtemslwip/bsd_compat/netdb.c',
> -    'rtemslwip/bsd_compat/ifaddrs.c',
> -    'rtemslwip/bsd_compat/rtems-kernel-program.c'
> -]
> -
> -
>  def build(bld):
>      source_files = []
>      driver_source = []
> @@ -101,59 +44,48 @@ def build(bld):
>                                              bld.env.RTEMS_ARCH_BSP)
>      arch = rtems.arch(bld.env.RTEMS_ARCH_BSP)
>      bsp = rtems.bsp(bld.env.RTEMS_ARCH_BSP)
> +
> +    # file-import.json is kept separate from the rest of the defs because it
> +    # describes which files are imported from upstream lwip
>      with open('file-import.json', 'r') as cf:
>          files = json.load(cf)
>          for f in files['files-to-import']:
>              if f[-2:] == '.c':
>                  source_files.append(os.path.join('lwip', f))
>
> -    source_files.extend(common_source_files)
> -
>      def walk_sources(path):
>          return bld.path.ant_glob([path + '/**/*.c', path + '/**/*.S'])
>
> -    if arch == 'arm':
> -        # These files will not compile for BSPs other than TMS570
> -        if bsp in ['tms570ls3137_hdk', 'tms570ls3137_hdk_intram',
> -                   'tms570ls3137_hdk_sdram', 'tms570ls3137_hdk_with_loader']:
> -            drv_incl.append('uLan/ports/driver/tms570_emac')
> -            drv_incl.append('uLan/ports/os')
> -            driver_source.extend(walk_sources('uLan/ports/driver/tms570_emac'))
> -
> -        # These files will only compile for BeagleBone BSPs
> -        if bsp in ['beagleboneblack', 'beaglebonewhite']:
> -            driver_source.extend(walk_sources('rtemslwip/beaglebone'))
> -            drv_incl.append('rtemslwip/beaglebone')
> -            drv_incl.append('cpsw/src/include')
> -            driver_source.extend(walk_sources('cpsw/src'))
> -
> -
> -    # These files will only compile for BSPs on Xilinx hardware
> -    is_xilinx_bsp = False
> -    is_aarch64_bsp = False
> -    is_qemu = False
> -    if arch == 'aarch64' and bsp in ['xilinx_zynqmp_lp64_qemu',
> -                                     'xilinx_zynqmp_lp64_zu3eg',
> -                                     'xilinx_zynqmp_ilp32_qemu',
> -                                     'xilinx_zynqmp_ilp32_zu3eg']:
> -        is_xilinx_bsp = True
> -        is_aarch64_bsp = True
> -    if bsp in ['xilinx_zynqmp_lp64_qemu', 'xilinx_zynqmp_ilp32_qemu']:
> -        is_qemu = True
> -    if is_xilinx_bsp:
> -        drv_incl.extend(xilinx_drv_incl)
> -        if is_aarch64_bsp:
> -            driver_source.extend(walk_sources('rtemslwip/zynqmp'))
> -            if is_qemu:
> -                driver_source.extend(walk_sources('rtemslwip/zynqmp_qemu'))
> -            else:
> -                driver_source.extend(walk_sources('rtemslwip/zynqmp_hardware'))
> -            driver_source.extend(xilinx_aarch64_driver_source)
> -            drv_incl.extend(xilinx_aarch64_drv_incl)
> +    def import_json_definition(prefix, path):
> +        sources = []
> +        includes = []
> +        with open(os.path.join(prefix, path), 'r') as bspconfig:
> +            files = json.load(bspconfig)
> +            if 'includes' in files:
> +                for f in files['includes']:
> +                    tmpsrc, tmpincl = import_json_definition(prefix, f+'.json')
> +                    sources.extend(tmpsrc)
> +                    includes.extend(tmpincl)
> +            if 'source-files-to-import' in files:
> +                sources.extend(files['source-files-to-import'])
> +            if 'source-paths-to-import' in files:
> +                for f in files['source-paths-to-import']:
> +                    sources.extend(walk_sources(f))
> +            if 'header-paths-to-import' in files:
> +                includes.extend(files['header-paths-to-import'])
> +        return (sources, includes)
> +
> +    # import additional lwip source
> +    more_lwip_sources, common_includes = import_json_definition(
> +        'defs/common', 'lwip.json')
> +    source_files.extend(more_lwip_sources)
> +
> +    # import bsp files
> +    driver_source, drv_incl = import_json_definition(
> +        os.path.join('defs/bsps', arch), bsp+'.json')
>
>      lwip_obj_incl = []
>      lwip_obj_incl.extend(drv_incl)
> -    lwip_obj_incl.extend(bsd_compat_incl)
>      lwip_obj_incl.extend(common_includes)
>
>      bld(features='c',
> @@ -194,7 +126,6 @@ def build(bld):
>
>      [install_headers(path) for path in common_includes]
>      [install_headers(path) for path in drv_incl]
> -    [install_headers(path) for path in bsd_compat_incl]
>
>      test_app_incl = []
>      test_app_incl.extend(drv_incl)
> --
> 2.30.2
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list