[PATCH RSB v3] rtems-kernel: Implement kernel recipe using waf

Chris Johns chrisj at rtems.org
Mon Nov 8 04:12:32 UTC 2021


OK and thanks

Chris

On 5/11/21 1:31 am, Ryan Long wrote:
> Closes #4145
> ---
>  rtems/config/tools/rtems-kernel-6.cfg       |   6 +-
>  rtems/config/tools/rtems-kernel-common.cfg  | 125 +++++++++++------------
>  source-builder/sb/rtems-kernel-config-check | 147 ++++++++++++++++++++++++++++
>  3 files changed, 215 insertions(+), 63 deletions(-)
>  create mode 100755 source-builder/sb/rtems-kernel-config-check
> 
> diff --git a/rtems/config/tools/rtems-kernel-6.cfg b/rtems/config/tools/rtems-kernel-6.cfg
> index f1d0990..9120862 100644
> --- a/rtems/config/tools/rtems-kernel-6.cfg
> +++ b/rtems/config/tools/rtems-kernel-6.cfg
> @@ -2,10 +2,10 @@
>  # RTEMS 5
>  #
>  
> -%define rtems_kernel_version 3ec5f20484cc4201e1d7b87844505644533b6148
> -%hash sha512 rtems-kernel-%{rtems_kernel_version}.tar.bz2 \
> -              BjMKrf5n1YR6IpiZrY5TUEzKATPRJxA2/6m6f833DdRu+RyLxccXqA4gHRdVUqFelFNQ3o0XdG4o1naBKYfhkQ==
> +%define rtems_kernel_version 3bb97a30b17b6c138dead3e3a6b329c3b301cdb3
>  
> +%hash sha512 rtems-kernel-%{rtems_kernel_version}.tar.gz \
> +              m/ogwrJj4X60ewDIbV6WRj1MJa/22gQHQd56XiNMfvCr0nsvcXdkXKAObLIGYIGYfUyEwlVk3SRjjRFkFalDGQ==
>  #
>  # The RTEMS build instructions.
>  #
> diff --git a/rtems/config/tools/rtems-kernel-common.cfg b/rtems/config/tools/rtems-kernel-common.cfg
> index 157c7a4..431fc1d 100644
> --- a/rtems/config/tools/rtems-kernel-common.cfg
> +++ b/rtems/config/tools/rtems-kernel-common.cfg
> @@ -9,7 +9,7 @@
>  # and BSPs. Only after the source to download.
>  #
>  %if %{_dry_run} && %{defined with_download}
> - %log Kenrel configuration errors ignored
> + %log Kernel configuration errors ignored
>   %define rtems_kernel_error 0
>  %else
>   %define rtems_kernel_error 1
> @@ -19,10 +19,15 @@
>   %define rtems_kernel_version %{rsb_version}
>  %endif
>  
> +%if %{defined with_rtems_bsp_config}
> + %define _target %(%{_sbdir}/sb/rtems-kernel-config-check -v %{rtems_version} -t %{with_rtems_bsp_config})
> + %define rtems_bsp %(%{_sbdir}/sb/rtems-kernel-config-check -b %{with_rtems_bsp_config})
> +%endif
> +
>  #
>  # The target. It could be set in rtems_target.
>  #
> -%if %{defined rtems_target}
> +%if %{defined rtems_target} && !%{defined with_rtems_bsp_config}
>   %define _target %{rtems_target}
>  %endif
>  %if %{_target} == %{nil} && %{rtems_kernel_error}
> @@ -32,10 +37,21 @@
>  #
>  # The BSP.
>  #
> -%if !%{defined with_rtems_bsp} && %{rtems_kernel_error}
> +%if !%{defined with_rtems_bsp} && %{rtems_kernel_error} && !%{defined with_rtems_bsp_config}
>   %error No RTEMS BSP specified: --with-rtems-bsp=bsp
>  %endif
> -%define rtems_bsp %{with_rtems_bsp}
> +%if !%{defined with_rtems_bsp_config}
> + %define rtems_bsp %{with_rtems_bsp}
> +%endif
> +
> +#
> +# Configuration file used with waf
> +#
> +%ifn %{defined with_rtems_bsp_config}
> + %define config_file config-%{_target}-%{rtems_bsp}.ini
> +%else
> + %define config_file %{with_rtems_bsp_config}
> +%endif
>  
>  #
>  # If no tools are provided use the prefix.
> @@ -98,14 +114,6 @@ URL: 	 https://www.rtems.org/
>   %define rtems_posix 0
>  %endif
>  
> -%if %{defined with_rtems_legacy_network}
> - %define rtems_networking 1
> -%endif
> -
> -%if %{defined with_rtems_cxx}
> - %define rtems_cxx 1
> -%endif
> -
>  %if %{defined with_rtems_bspopts}
>   %define bspopts %{with_rtems_bspopts}
>  %endif
> @@ -143,43 +151,43 @@ URL: 	 https://www.rtems.org/
>  # --without-rtems-tests          : Supported, forced to no
>  # --with-rtems-smp               : Supported
>  # --without-rtems-smp            : Don't care
> -# --with-rtems-legacy-network    : Supported
> +# --with-rtems-legacy-network    : Unsupported
>  # --without-rtems-legacy-network : Don't care
> -# --with-rtems-bspopts           : Supported, quote for a list
> -# --without-rtems-bspopts        : Don't care
> -#
>  %if %{defined without_rtemsbsp}
>   %error Option --without-rtemsbsp is not supported.
>  %endif
> +%if %{defined with_rtems_legacy_network}
> + echo "RTEMS legacy network has been removed."
> + echo "Please review and update your configuration."
> + exit 1
> +%endif
> +%if %{defined enable_cxx}
> + echo CXX has been removed."
> + echo "Please review and update your configuration."
> + exit 1
> +%endif
> +
>  %if %{defined without_rtems_tests}
> - %define with_rtems_tests no
> + %define rtems_tests False
> + %define rtems_sample_tests False
>  %endif
>  %if %{defined with_rtems_tests}
>   %if %{with_rtems_tests} == 1
> -  %define with_rtems_tests yes
> +   %define rtems_tests True
> +   %define rtems_sample_tests True
>   %endif
> - %if %{with_rtems_tests} == yes || \
> -     %{with_rtems_tests} == no || \
> -     %{with_rtems_tests} == samples
> -  %define rtems_tests %{with_rtems_tests}
> +  %if %{with_rtems_tests} == samples
> +      %define rtems_tests False
> +      %define rtems_sample_tests True
>   %endif
>  %endif
>  %if %{defined with_rtems_smp}
>   %define rtems_smp 1
>  %endif
> -%if %{defined with_rtems_legacy_network}
> - %define rtems_networking 1
> -%endif
>  %if %{defined with_rtems_bspopts}
>   %define rtems_bspopts %{with_rtems_bspopts}
>  %endif
>  
> -#
> -# If C++ defined for the tool set use it to control RTEMS's setting..
> -#
> -%if %{defined enable_cxx}
> - %define rtems_cxx %{enable_cxx}
> -%endif
>  
>  #
>  # Default set up. Override these in a BSP if you want a
> @@ -188,14 +196,9 @@ URL: 	 https://www.rtems.org/
>  %ifn %{defined rtems_posix}
>   %define rtems_posix 1
>  %endif
> -%ifn %{defined rtems_networking}
> - %define rtems_networking 0
> -%endif
> -%ifn %{defined rtems_cxx}
> - %define rtems_cxx 1
> -%endif
>  %ifn %{defined rtems_tests}
> - %define rtems_tests samples
> + %define rtems_tests False
> + %define rtems_sample_tests True
>  %endif
>  %ifn %{defined rtems_bspopts}
>   %define rtems_bspopts %{nil}
> @@ -213,8 +216,6 @@ URL: 	 https://www.rtems.org/
>      %if %{defined _internal_autotools_path}
>        export PATH="%{_internal_autotools_path}/bin:${PATH}"
>      %endif
> -    ./bootstrap -c
> -    ./rtems-bootstrap
>    %endif
>    cd ..
>  
> @@ -225,38 +226,42 @@ URL: 	 https://www.rtems.org/
>    else
>      build_dir="build"
>    fi
> +
> +  cd ${source_dir_rtems}
> +
> +  %if %{defined without_rtems_bsp_config}
> +    cpu=`echo %{_target} | cut -d- -f1`
> +    echo "[${cpu}/%{rtems_bsp}]" > %{config_file}
> +    echo "RTEMS_POSIX_API = %{?rtems_posix:True}%{!?rtems_posix:False}" >> %{config_file}
> +    echo "RTEMS_SMP = %{?rtems_smp:True}%{!?rtems_smp:False}" >> %{config_file}
> +    echo "BUILD_TESTS = %{rtems_tests}" >> %{config_file}
> +    echo "BUILD_SAMPLES = %{rtems_sample_tests}" >> %{config_file}
> +  %endif
> +
>    mkdir -p ${build_dir}
> -  cd ${build_dir}
> -
> -  ../${source_dir_rtems}/configure \
> -    --build=%{_build} --host=%{_host} \
> -    --target=%{_target} \
> -    --enable-rtemsbsp="%{rtems_bsp}" \
> -    %{?rtems_cxx:--enable-cxx}%{!?rtems_cxx:--disable-cxx} \
> -    %{?rtems_posix:--enable-posix}%{!?rtems_posix:--disable-posix} \
> -    %{?rtems_networking:--enable-networking}%{!?rtems_networking:--disable-networking} \
> -    %{?rtems_tests:--enable-tests=%{rtems_tests}} \
> -    %{?rtems_smp:--enable-smp} \
> +
> +  ./waf configure \
> +    --rtems-bsps=%{_target}/%{rtems_bsp} \
>      --prefix=%{_prefix} --bindir=%{_bindir} \
> -    --exec-prefix=%{_exec_prefix} \
> -    --includedir=%{_includedir} --libdir=%{_libdir} \
> -    --mandir=%{_mandir} --infodir=%{_infodir} \
> -    %{rtems_bspopts}
> +    --rtems-config=%{config_file}
> +
> +  ./waf %{?_smp_mflags}
>  
> -  %{__make} %{?_smp_mflags} all
>    cd ..
>  
>  %install
>    %{__rmdir} $SB_BUILD_ROOT
>  
> -  cd ${build_dir}
> -  %{__make} DESTDIR=$SB_BUILD_ROOT install
> +  cd ${source_dir_rtems}
> +  ./waf --destdir=$SB_BUILD_ROOT install
> +
> +  echo "rtems_tests: %{rtems_tests}"
>  
> -  %if %{rtems_tests} != no
> +  %if %{rtems_tests} != False
>     %define rtems_test_install %{_target}/%{rtems_bsp}/tests
>     mkdir -p $SB_BUILD_ROOT/%{_prefix}/%{rtems_test_install}
>     find . -name \*.exe -and -not -name \*.norun.exe \
>        -exec cp -v \{\} $SB_BUILD_ROOT/%{_prefix}/%{rtems_test_install}/ \;
>    %endif
>  
> -  cd ..
> +  cd -
> diff --git a/source-builder/sb/rtems-kernel-config-check b/source-builder/sb/rtems-kernel-config-check
> new file mode 100755
> index 0000000..9bdff22
> --- /dev/null
> +++ b/source-builder/sb/rtems-kernel-config-check
> @@ -0,0 +1,147 @@
> +#! /usr/bin/env python
> +
> +"""
> +SPDX-License-Identifier: BSD-2-Clause
> +
> +COPYRIGHT (C) 2021 On-Line Applications Research Corporation (OAR).
> +
> +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.
> +"""
> +
> +from __future__ import print_function
> +
> +import sys
> +import argparse
> +
> +from os.path import exists
> +
> +try:
> +    import ConfigParser
> +    configparser = ConfigParser # used for python2
> +except ImportError:
> +    try:
> +        import configparser # used for python3
> +    except ImportError:
> +        print("Could not import configparser. Exiting...", file = sys.stderr)
> +        sys.exit(1)
> +
> +def run():
> +    parser = argparse.ArgumentParser()
> +    parser.add_argument("config", help="path to config file")
> +    parser.add_argument(
> +        "-a",
> +        "--arch",
> +        help="return target architecture specified in the config",
> +        action="store_true"
> +    )
> +    parser.add_argument(
> +        "-b",
> +        "--bsp",
> +        help="return BSP specified in the config",
> +        action="store_true"
> +    )
> +    parser.add_argument(
> +        "-c",
> +        "--arch-bsp",
> +        help="return target architecture and BSP specified in the config",
> +        action="store_true"
> +    )
> +    parser.add_argument(
> +        "-v",
> +        "--rtems-version",
> +        help="version of RTEMS",
> +        type=int,
> +        default=6
> +    )
> +    parser.add_argument(
> +        "-t",
> +        "--target",
> +        help="return target (<arch-rtems<rtems-version>)",
> +        action="store_true"
> +    )
> +    args = parser.parse_args()
> +    config = configparser.ConfigParser()
> +
> +    if args.config[-4:] != ".ini":
> +        print(
> +            "The config file is missing an *.ini extension.",
> +            file = sys.stderr
> +        )
> +        sys.exit(1)
> +
> +    try:
> +        config.read(args.config)
> +    except configparser.MissingSectionHeaderError:
> +        print(
> +            "There is no section header in the config file",
> +            file = sys.stderr
> +        )
> +        sys.exit(1)
> +    except configparser.ParsingError:
> +        print(
> +            "An exception occured when parsing the config file",
> +            file = sys.stderr
> +        )
> +        sys.exit(1)
> +    except:
> +        print(
> +            "An unknown exception occured",
> +            file = sys.stderr
> +        )
> +
> +    if len(config.sections()) != 1:
> +        print(
> +            "You can only have one arch/bsp section in your config.",
> +            file = sys.stderr
> +        )
> +        sys.exit(1)
> +
> +    arch_bsp_str = config.sections()[0]
> +    if arch_bsp_str.find("/") == -1:
> +        print(
> +            "arch/bsp section in config is missing '/'",
> +            file = sys.stderr
> +        )
> +        sys.exit(1)
> +
> +    if ( args.arch or args.bsp) and args.arch_bsp:
> +        args.arch = False
> +
> +    if args.arch:
> +        print(arch_bsp_str.split("/")[0])
> +        return
> +
> +    if args.bsp:
> +        print(arch_bsp_str.split("/")[1])
> +        return
> +
> +    if args.arch_bsp:
> +        print(arch_bsp_str.replace("/", " "))
> +        return
> +
> +    if args.target:
> +        arch = arch_bsp_str.split("/")[0]
> +        print(arch + "-rtems" + str(args.rtems_version))
> +        return
> +
> +if __name__ == "__main__":
> +    run()
> 


More information about the devel mailing list