From 8db33fbe434267d385e637a14f38d444c72254fa Mon Sep 17 00:00:00 2001 From: Chris Johns Date: Fri, 12 Jul 2019 08:25:15 +1000 Subject: rtems: Add kernel, libbsd and BSP building as packages. --- rtems/config/5/bsps/beagleboneblack.bset | 19 +++ rtems/config/5/rtems-default.bset | 1 - rtems/config/5/rtems-kernel.bset | 15 ++ rtems/config/5/rtems-libbsd.bset | 8 + rtems/config/rtems-base.bset | 9 ++ rtems/config/rtems-bsp.cfg | 42 +++-- rtems/config/tools/rtems-kernel-4-1.cfg | 179 +--------------------- rtems/config/tools/rtems-kernel-5.cfg | 7 +- rtems/config/tools/rtems-kernel-common.cfg | 229 ++++++++++++++++++++++++++++ rtems/config/tools/rtems-libbsd-5.cfg | 13 ++ rtems/config/tools/rtems-libbsd-common.cfg | 79 ++++++++++ rtems/config/tools/rtems-tools-common-1.cfg | 15 +- source-builder/defaults.mc | 12 +- source-builder/sb/build.py | 21 ++- source-builder/sb/config.py | 74 ++++----- 15 files changed, 474 insertions(+), 249 deletions(-) create mode 100644 rtems/config/5/bsps/beagleboneblack.bset create mode 100644 rtems/config/5/rtems-kernel.bset create mode 100644 rtems/config/5/rtems-libbsd.bset create mode 100644 rtems/config/tools/rtems-kernel-common.cfg create mode 100644 rtems/config/tools/rtems-libbsd-5.cfg create mode 100644 rtems/config/tools/rtems-libbsd-common.cfg diff --git a/rtems/config/5/bsps/beagleboneblack.bset b/rtems/config/5/bsps/beagleboneblack.bset new file mode 100644 index 0000000..68b590a --- /dev/null +++ b/rtems/config/5/bsps/beagleboneblack.bset @@ -0,0 +1,19 @@ +# +# BeagleBone Black +# +# Build into the prefix path: +# +# - ARM tools +# - RTEMS Kernel and BSP +# - LibBSD +# - Packages +# + +%define rtems_target arm-rtems5 +%define rtems_host arm-rtems5 +%define with_rtems_bsp beagleboneblack + + +5/rtems-arm +5/rtems-kernel +5/rtems-libbsd diff --git a/rtems/config/5/rtems-default.bset b/rtems/config/5/rtems-default.bset index d57388f..47780e7 100644 --- a/rtems/config/5/rtems-default.bset +++ b/rtems/config/5/rtems-default.bset @@ -20,4 +20,3 @@ tools/rtems-gdb-8.2.1-1 tools/rtems-binutils-2.32 tools/rtems-gcc-fb371a33fa6-newlib-5c2a3661c tools/rtems-tools-5-1 -tools/rtems-kernel-5 diff --git a/rtems/config/5/rtems-kernel.bset b/rtems/config/5/rtems-kernel.bset new file mode 100644 index 0000000..080af0b --- /dev/null +++ b/rtems/config/5/rtems-kernel.bset @@ -0,0 +1,15 @@ +# +# RTEMS Kernel configuration. +# +%define release 1 + +# +# The RTEMS version and URLs +# +%include rtems-version.bset +%include rtems-urls.bset + +# +# Build the kernel. +# +tools/rtems-kernel-5 diff --git a/rtems/config/5/rtems-libbsd.bset b/rtems/config/5/rtems-libbsd.bset new file mode 100644 index 0000000..ff9c2e7 --- /dev/null +++ b/rtems/config/5/rtems-libbsd.bset @@ -0,0 +1,8 @@ +# +# RTEMS LibBSD configuration. +# + +# +# Build the kernel. +# +tools/rtems-libbsd-5 diff --git a/rtems/config/rtems-base.bset b/rtems/config/rtems-base.bset index 5a7cc98..6749ce4 100644 --- a/rtems/config/rtems-base.bset +++ b/rtems/config/rtems-base.bset @@ -27,3 +27,12 @@ package: rtems-%{rtems_version}-%{_target}-%{_host}-%{release} # Pick up the RTEMS URLs. # %include rtems-urls.bset + +# +# Handle the Waf install root. +# +%ifos win32 mingw ming32 + %define rtems_waf_build_root_suffix %{waf_build_root_suffix} +%else + %define rtems_waf_build_root_suffix %{nil} +%endif diff --git a/rtems/config/rtems-bsp.cfg b/rtems/config/rtems-bsp.cfg index 8e1c12a..404ad6a 100644 --- a/rtems/config/rtems-bsp.cfg +++ b/rtems/config/rtems-bsp.cfg @@ -31,19 +31,17 @@ %define rtems_bsp_error 1 %endif -# -# The target is used by compilers or Cxc builds. -# -%if %{_target} != %{nil} - %error RTEMS BSP builds use --host and not --target -%endif - # # We need a host from the user to specifiy the RTEMS architecture and major -# version. +# version. It can be defined in rtems_host. # -%if %{_host} == %{nil} && %{rtems_bsp_error} - %error No RTEMS host or BSP specified: --host=-rtems +%if %{defined rtems_host} + %define _host %{rtems_host} +%endif +%if %{rtems_bsp_error} + %if %{_host} == %{nil} || %{_host} == %{_build} + %error No RTEMS host or BSP specified: --host=-rtems + %endif %endif # @@ -51,7 +49,7 @@ # %ifn %{defined with_rtems_bsp} %if %{rtems_bsp_error} - %error No RTEMS BSP specified: --rtems-bsp=arch/bsp (or --with-rtems-bsp=bsp) + %error No RTEMS BSP specified: --with-rtems-bsp=bsp %endif %define with_rtems_bsp sparc/erc32 %endif @@ -61,10 +59,16 @@ # %ifn %{defined with_tools} %define with_tools %{_prefix} + %define rtems_waf_tools %{nil} +%else + %define rtems_waf_tools --rtems-tools=%{with_tools} %endif %ifn %{defined with_rtems} %define with_rtems %{_prefix} + %define rtems_waf_rtems %{nil} +%else + %define rtems_waf_rtems --rtems=%{with_rtems} %endif # @@ -91,13 +95,18 @@ %define rtems_bsp_libs %{pkgconfig libs %{_host}-%{rtems_bsp}} %if %{rtems_bsp_cflags} == %{nil} && %{rtems_bsp_error} - %error No RTEMS BSP CFLAGS found; Please check the --rtems-bsp option. + %error No RTEMS BSP CFLAGS found; Please check the --with-rtems-bsp option. %endif %if %{rtems_bsp_ccflags} == %{nil} %define rtems_bsp_ccflags %{rtems_bsp_cflags} %endif +# +# The RTEMS BSP architecture/bsp. +# +%define rtems_bsp_arch_bsp %{_host_arch}/%{rtems_bsp} + # # RTEMS BSP paths # @@ -156,3 +165,12 @@ %define host_cxxflags %{rtems_bsp_ccflags} %define host_ldflags %{rtems_bsp_ldflags} %define host_libs %{rtems_bsp_libs} + +# +# Handle the Waf install root. +# +%ifos win32 mingw ming32 + %define rtems_waf_build_root_suffix %{waf_build_root_suffix} +%else + %define rtems_waf_build_root_suffix %{nil} +%endif diff --git a/rtems/config/tools/rtems-kernel-4-1.cfg b/rtems/config/tools/rtems-kernel-4-1.cfg index 8c725a5..26e7d9c 100644 --- a/rtems/config/tools/rtems-kernel-4-1.cfg +++ b/rtems/config/tools/rtems-kernel-4-1.cfg @@ -3,181 +3,4 @@ # # This configuration file configure's, make's and install's RTEMS. # - -%if %{rsb_released} - %define rtems_kernel_version %{rsb_version} -%else - %define rtems_kernel_version %{rtems_version} -%endif - -# -# Package details. -# -Name: %{_target}-kernel-%{rtems_kernel_version}-%{release} -Summary: RTEMS v%{rtems_kernel_version} for target %{_target} on host %{_host} -Version: %{rtems_kernel_version} -Release: %{release} -URL: http://www.rtems.org/ - -# -# Build if the RSB is released or optionally enable/disable building the RTEMS -# kernel via the command line. -# -%if %{rsb_released} || %{defined with_rtems} - %define rtems_kernel_build 1 -%else - %define rtems_kernel_build 0 -%endif -%if %{defined without_rtems} - %define rtems_kernel_build 0 -%endif - -%if %{rtems_kernel_build} - %include %{_configdir}/checks.cfg - %include %{_configdir}/base.cfg - %include %{_configdir}/versions.cfg - - # - # A magic internal path that would break if changes in the defaults.mc - # macro file are made. - # - %define _internal_autotools_path %{_tmppath}/sb-%{_uid}/${SB_PREFIX_CLEAN} - - # - # Check the version of autoconf. Check autoreconf as it is used. - # - %if %{__autoreconf_ver} <= 2.68 - %if %{__autoreconf_bindir_ver} <= 2.68 - %if %{__autoreconf_path_ver} <= 2.68 - %error Autoconf (autoreconf) version 2.69 or higher is needed. - %endif - %endif - %endif - - # - # Source - # - %if %{rsb_released} - %if ! %{defined rtems_kernel_compression} - %define rtems_kernel_compression xz - %endif - %define rtems_kernel_version %{rtems_version} - %define rtems_bootstrap 0 - %else - # - # The code in git needs to be bootstrapped. Do each build because we have - # no way to change what changes may have happened in the code. - # - %define rtems_bootstrap 1 - %endif - - %if ! %{defined rtems_kernel_version} - %define rtems_kernel_version HEAD - %endif - %if %{defined rtems_kernel_git_commit_hash} - %define rtems_kernel_git_checkout ?checkout=%{defined rtems_kernel_git_commit_hash} - %else - %define rtems_kernel_git_checkout %{nil} - %endif - - %source set rtems git://git.rtems.org/rtems.git?reset=hard?branch=%{rtems_kernel_version}?pull%{rtems_kernel_git_checkout} # - # 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. - # - %ifn %{defined rtems_posix} - %define rtems_posix 1 - %endif - %ifn %{defined rtems_networking} - %define rtems_networking 1 - %endif - %ifn %{defined rtems_cxx} - %define rtems_cxx 1 - %endif - %ifn %{defined rtems_tests} - %define rtems_tests samples - %endif - - %if %{rtems_tests} == disable - %define rtems_tests_opt --disable-tests - %else - %define rtems_tests_opt --enable-tests=%{rtems_tests} - %endif - - # - # Check the various --with/--without options we support. - # - # --with-rtemsbsp : Supported, list of BSPs - # --without-rtemsbsp: Not supported - # --with-tests : Supported, samples/yes/no - # --without-tests : Not supported - # --with-smp : Supported - # --without-smp : Not care - # - # - %if %{defined without_rtemsbsp} - %error Option --without-rtemsbsp is not supported. - %endif - %if %{defined without_rtems_tests} - %define with_rtems_tests no - %endif - - # - # Prepare the source code. - # - %prep - source_dir_rtems="rtems-%{rtems_kernel_version}" - %source setup rtems -q -c -n %{name}-%{version} - cd ${source_dir_rtems} - %patch setup rtems -p1 - %if %{rtems_bootstrap} - %if %{defined _internal_autotools_path} - export PATH="%{_internal_autotools_path}/bin:${PATH}" - %endif - ./bootstrap -c - %{_sbdir}/sb-bootstrap --preinstall - %{_sbdir}/sb-bootstrap - %endif - cd .. - - %build - # Build directory support. - if test "%{_build}" != "%{_host}" ; then - build_dir="build-cxc" - else - build_dir="build" - fi - mkdir -p ${build_dir} - cd ${build_dir} - - ../${source_dir_rtems}/configure \ - --build=%{_build} --host=%{_host} \ - --target=%{_target} \ - %{?rtems_posix:--enable-posix}%{!?rtems_posix:--disable-posix} \ - %{?rtems_networking:--enable-networking}%{!?rtems_networking:--disable-networking} \ - %{?rtems_cxx:--enable-cxx}%{!?rtems_cxx:--disable-cxx} \ - %{?with_rtems_tests:--enable-tests=%{with_rtems_tests}} \ - %{?with_rtemsbsp:--enable-rtemsbsp="%{with_rtemsbsp}"} \ - %{?with_rtems_smp:--enable-smp} \ - --prefix=%{_prefix} --bindir=%{_bindir} \ - --exec-prefix=%{_exec_prefix} \ - --includedir=%{_includedir} --libdir=%{_libdir} \ - --mandir=%{_mandir} --infodir=%{_infodir} - - %{__make} %{?_smp_mflags} all - cd .. - - %install - %{__rmdir} $SB_BUILD_ROOT - - cd ${build_dir} - %{__make} DESTDIR=$SB_BUILD_ROOT install - - cd .. - -%endif +%include tools/rtems-kernel-common.cfg diff --git a/rtems/config/tools/rtems-kernel-5.cfg b/rtems/config/tools/rtems-kernel-5.cfg index 5d5d654..7f23635 100644 --- a/rtems/config/tools/rtems-kernel-5.cfg +++ b/rtems/config/tools/rtems-kernel-5.cfg @@ -2,7 +2,10 @@ # RTEMS 5 # +%define rtems_kernel_version c4d89deaa66f9878ea5499cae7210d5815afc4fe +%hash sha512 rtems-kernel-%{rtems_kernel_version}.tar.bz2 fa4cbcfd9d10be737b91805f1fbaccb7289f3d300a2a7aafef1713d265dd97242d00aba5f1c63ead5a889cfb2148fd9d62c79dcb6f16e61f9fa1290067159b43 + # -# The RTEMS build instructions. We use 4.xx Release 1. +# The RTEMS build instructions. # -%include tools/rtems-kernel-4-1.cfg +%include tools/rtems-kernel-common.cfg diff --git a/rtems/config/tools/rtems-kernel-common.cfg b/rtems/config/tools/rtems-kernel-common.cfg new file mode 100644 index 0000000..5a79340 --- /dev/null +++ b/rtems/config/tools/rtems-kernel-common.cfg @@ -0,0 +1,229 @@ +# +# RTEMS Kernel. +# +# This configuration file configure's, make's and install's RTEMS. +# + +# +# If a dry-run and with download ignore errors and correct setting for tools +# and BSPs. Only after the source to download. +# +%if %{_dry_run} && %{defined with_download} + %log Kenrel configuration errors ignored + %define rtems_kernel_error 0 +%else + %define rtems_kernel_error 1 +%endif + +%if %{rsb_released} + %define rtems_kernel_version %{rsb_version} +%endif + +# +# The target. It could be set in rtems_target. +# +%if %{defined rtems_target} + %define _target %{rtems_target} +%endif +%if %{_target} == %{nil} && %{rtems_kernel_error} + %error No RTEMS target specified: --target=-rtems. +%endif + +# +# The BSP. +# +%if !%{defined with_rtems_bsp} && %{rtems_kernel_error} + %error No RTEMS BSP specified: --with-rtems-bsp=bsp +%endif +%define rtems_bsp %{with_rtems_bsp} + +# +# If no tools are provided use the prefix. +# +%ifn %{defined with_tools} + %define with_tools %{_prefix} +%endif + +# +# Set the path to the tools. +# +%{path prepend %{with_tools}/bin} + +# +# Define the package. +# +package: rtems-%{rtems_version}-%{_target}-%{rtems_bsp}-%{_host}-%{release} + +# +# Package details. +# +Name: %{_target}-kernel-%{rtems_bsp}-%{release} +Summary: RTEMS v%{rtems_kernel_version} for target %{_target} BSP %{rtems_bsp} +Version: %{rtems_kernel_version} +Release: %{release} +URL: https://www.rtems.org/ + +%include %{_configdir}/checks.cfg +%include %{_configdir}/base.cfg +%include %{_configdir}/versions.cfg + +# +# A magic internal path that would break if changes in the defaults.mc +# macro file are made. +# +%define _internal_autotools_path %{_tmppath}/sb-%{_uid}/${SB_PREFIX_CLEAN} + +# +# Check the version of autoconf. Check autoreconf as it is used. +# +%if %{__autoreconf_ver} <= 2.68 + %if %{__autoreconf_bindir_ver} <= 2.68 + %if %{__autoreconf_path_ver} <= 2.68 + %error Autoconf (autoreconf) version 2.69 or higher is needed. + %endif + %endif +%endif + +# +# If no tools provided use the prefix. +# +%ifn %{defined with_tools} + %define with_tools %{_prefix} +%endif + +# +# Check options. +# +%if %{defined without_rtems_posix} + %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 + +# +# Source +# +%if %{rsb_released} + %if ! %{defined rtems_kernel_compression} + %define rtems_kernel_compression xz + %endif + %define rtems_kernel_version %{rtems_version} + %define rtems_bootstrap 0 +%else + # + # The code in git needs to be bootstrapped. Do each build because we have + # no way to change what changes may have happened in the code. + # + %define rtems_bootstrap 1 +%endif + +%if ! %{defined rtems_kernel_version} + %error No RTEMS kernel version defined +%endif + +%source set rtems_kernel --rsb-file=rtems-kernel-%{rtems_kernel_version}.tar.bz2 https://git.rtems.org/rtems/snapshot/rtems-%{rtems_kernel_version}.tar.bz2 + +# 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. +# +%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 0 +%endif +%ifn %{defined rtems_tests} + %define rtems_tests samples +%endif + +%if %{rtems_tests} == disable + %define rtems_tests_opt --disable-tests +%else + %define rtems_tests_opt --enable-tests=%{rtems_tests} +%endif + +# +# Check the various --with/--without options we support. +# +# --target : The architecture +# --with-rtems-bsp : The BSP +# --with-tests : Supported, samples/yes/no +# --without-tests : Not supported +# --with-smp : Supported +# --without-smp : Not care +# +# +%if %{defined without_rtemsbsp} + %error Option --without-rtemsbsp is not supported. +%endif +%if %{defined without_rtems_tests} + %define with_rtems_tests no +%endif + +# +# Prepare the source code. +# +%prep + source_dir_rtems="rtems-%{rtems_kernel_version}" + %source setup rtems_kernel -q -c -n %{name}-%{version} + cd ${source_dir_rtems} + %patch setup rtems -p1 +%if %{rtems_bootstrap} + %if %{defined _internal_autotools_path} + export PATH="%{_internal_autotools_path}/bin:${PATH}" + %endif + ./bootstrap -c + %{_sbdir}/sb-bootstrap --preinstall + %{_sbdir}/sb-bootstrap +%endif + cd .. + +%build + # Build directory support. + if test "%{_build}" != "%{_host}" ; then + build_dir="build-cxc" + else + build_dir="build" + fi + mkdir -p ${build_dir} + cd ${build_dir} + + ../${source_dir_rtems}/configure \ + --build=%{_build} --host=%{_host} \ + --target=%{_target} \ + --enable-rtemsbsp="%{rtems_bsp}" \ + %{?rtems_posix:--enable-posix}%{!?rtems_posix:--disable-posix} \ + %{?rtems_networking:--enable-networking}%{!?rtems_networking:--disable-networking} \ + %{?rtems_cxx:--enable-cxx}%{!?rtems_cxx:--disable-cxx} \ + %{?with_rtems_tests:--enable-tests=%{with_rtems_tests}} \ + %{?with_rtems_smp:--enable-smp} \ + --prefix=%{_prefix} --bindir=%{_bindir} \ + --exec-prefix=%{_exec_prefix} \ + --includedir=%{_includedir} --libdir=%{_libdir} \ + --mandir=%{_mandir} --infodir=%{_infodir} + + %{__make} %{?_smp_mflags} all + cd .. + +%install + %{__rmdir} $SB_BUILD_ROOT + + cd ${build_dir} + %{__make} DESTDIR=$SB_BUILD_ROOT install + + cd .. diff --git a/rtems/config/tools/rtems-libbsd-5.cfg b/rtems/config/tools/rtems-libbsd-5.cfg new file mode 100644 index 0000000..8f0141b --- /dev/null +++ b/rtems/config/tools/rtems-libbsd-5.cfg @@ -0,0 +1,13 @@ +# +# RTEMS 5 LibBSD +# + +%define rtems_libbsd_version 313e1d5f1c8c7cd8e3d458628b040ce1c264d23c +%hash sha512 rtems-libbsd-%{rtems_libbsd_version}.tar.bz2 1282b46eacbda01fc3eb3d3fc67c5a0d02d07f3d097b381133ad823bdbdd920c95e9faabb5430f1634ac3f1b4c797850d3a0d6a4b2aa523e677d65fe82a036a3 +%define rtems_waf_version ad6c6e8771b95dffa73a7dc1167d98d208f17cb0 +%hash sha512 rtems-waf-%{rtems_waf_version}.tar.bz2 9866ab0772cbd3aa4e641a14fad2c85acf79d8e6e08de05c32e985bb76b9f04a0a615093320b406ff4660ec1964f2c0778453b44a8b1358c6f04ccd7561cad1c + +# +# The RTEMS LibBSD build instructions. +# +%include tools/rtems-libbsd-common.cfg diff --git a/rtems/config/tools/rtems-libbsd-common.cfg b/rtems/config/tools/rtems-libbsd-common.cfg new file mode 100644 index 0000000..4503e1b --- /dev/null +++ b/rtems/config/tools/rtems-libbsd-common.cfg @@ -0,0 +1,79 @@ +# +# RTEMS LibBSD +# +# This configuration file configure's, build's and install's libbsd.a. +# + +%if %{release} == %{nil} +%define release 1 +%endif + +Name: rtems-libbsd-v%{rtems_libbsd_version}-%{_host}-%{release} +Summary: RTEMS LibBSD provides libbsd, a FreeBSD kernel set of + services for RTEMS. +Version: %{rtems_libbsd_version} +Release: %{release} +URL: https://git.rtems.org/rtems-libbsd.git/ + +# +# LibBSD is packaged as the release version when released. +# +%if %{rsb_released} + %define rtems_libbsd_version %{rsb_version} +%endif + +# +# RTEMS BSP support. +# +%include rtems-bsp.cfg + +# +# LibBSD Source. +# +# Collect and install rtems_waf as cgit snapshots to not caputre submodules, +# which is a good thing because we would collect the entire FreeBSD source + +# +%source set rtems_libbsd https://git.rtems.org/rtems-libbsd/snapshot/rtems-libbsd-%{rtems_libbsd_version}.tar.bz2 +%source set rtems_waf https://git.rtems.org/rtems_waf/snapshot/rtems_waf-%{rtems_waf_version}.tar.bz2 + +# +# Prepare the source code. +# +%prep + build_top=$(pwd) + + source_dir_libbsd="rtems-libbsd-%{rtems_libbsd_version}" + %source setup rtems_libbsd -q -n rtems-libbsd-%{rtems_libbsd_version} + %source setup rtems_waf -q -s 1 -c -a -n rtems-libbsd-%{rtems_libbsd_version}/rtems_waf + + cd ${build_top} + +# +# Build the source code. +# +%build + build_top=$(pwd) + + %{host_build_flags} + + cd ${source_dir_libbsd} + + ./waf distclean configure \ + --prefix=%{_prefix} \ + %{rtems_waf_tools} \ + %{rtems_waf_rtems} + --rtems-bsp=%{rtems_bsp_arch_bsp} + + ./waf build + + cd ${build_top} + +%install + build_top=$(pwd) + + %{__rmdir} ${SB_BUILD_ROOT} + + cd ${source_dir_libbsd} + ./waf --destdir=$SB_BUILD_ROOT%{rtems_waf_build_root_suffix} install + cd ${build_top} diff --git a/rtems/config/tools/rtems-tools-common-1.cfg b/rtems/config/tools/rtems-tools-common-1.cfg index b15fbce..c15f514 100644 --- a/rtems/config/tools/rtems-tools-common-1.cfg +++ b/rtems/config/tools/rtems-tools-common-1.cfg @@ -58,19 +58,6 @@ License: BSD-2-Clause + GPL-2.0 %{__rmdir} $SB_BUILD_ROOT - # - # If on Windows we need to add the driver prefix to the built root as waf - # strips the driver prefix from the prefix path when joining it to the - # destdir path. Waf is correct in doing this and the RSB is design to match - # the configure behaviour which treats the whole path including the drive - # prefix as part of the path as just a path. - # - %ifos win32 mingw ming32 - SB_BUILD_ROOT_WAF=$SB_BUILD_ROOT$(echo %{_prefix} | cut -c 1-2) - %else - SB_BUILD_ROOT_WAF=$SB_BUILD_ROOT - %endif - cd ${source_dir_rtems_tools} - ./waf --destdir=$SB_BUILD_ROOT_WAF install + ./waf --destdir=$SB_BUILD_ROOT%{rtems_waf_build_root_suffix} install cd ${build_top} diff --git a/source-builder/defaults.mc b/source-builder/defaults.mc index 646be78..1feaca1 100644 --- a/source-builder/defaults.mc +++ b/source-builder/defaults.mc @@ -184,7 +184,7 @@ __sed: exe, required, '/usr/bin/sed' __setup_post: exe, none, '%{__chmod} -R a+rX,g-w,o-w .' __sh: exe, required, '/bin/sh' __tar: exe, required, '/usr/bin/tar' -__tar_extract: exe, none, '%{__tar} -xvvf' +__tar_extract: exe, none, '%{__tar} -xvv' __touch: exe, required, '/usr/bin/touch' __unzip: exe, required, '/usr/bin/unzip' __xz: exe, required, '/usr/bin/xz' @@ -390,3 +390,13 @@ iso_ir_111,koi8_r,koi8_ru,koi8_u,koi8_uni,ucs_2,ucs_2_internal,\ ucs_2be,ucs_2le,ucs_4,ucs_4_internal,ucs_4be,ucs_4le,us_ascii,\ utf_16,utf_16be,utf_16le,utf_8,win_1250,win_1251,win_1252,\ win_1253,win_1254,win_1255,win_1256,win_1257,win_1258''' + +# Waf build root suffix, only use for win32 mingw ming32 OSs +# +# If on Windows we need to add the driver prefix to the built root as waf +# strips the driver prefix from the prefix path when joining it to the +# destdir path. Waf is correct in doing this and the RSB is design to match +# the configure behaviour which treats the whole path including the drive +# prefix as part of the path as just a path. +# +waf_build_root_suffix: none, none, ' %(echo %{_prefix} | cut -c 1-2)' diff --git a/source-builder/sb/build.py b/source-builder/sb/build.py index faa11cc..abc50c0 100644 --- a/source-builder/sb/build.py +++ b/source-builder/sb/build.py @@ -203,7 +203,7 @@ class build: not _disable_installing and \ not _canadian_cross - def source(self, name): + def source(self, name, strip_components): # # Return the list of sources. Merge in any macro defined sources as # these may be overridden by user loaded macros. @@ -246,6 +246,10 @@ class build: url = self.config.expand(' '.join(url)) src = download.parse_url(url, '_sourcedir', self.config, self.opts, file_override) download.get_file(src['url'], src['local'], self.opts, self.config) + if strip_components > 0: + tar_extract = '%%{__tar_extract} --strip-components %d' % (strip_components) + else: + tar_extract = '%{__tar_extract}' if 'symlink' in src: sname = name.replace('-', '_') src['script'] = '%%{__ln_s} %s ${source_dir_%s}' % (src['symlink'], sname) @@ -255,9 +259,9 @@ class build: # src['script'] = '%s %s' % (src['compressed'], src['local']) if src['compressed-type'] != 'zip': - src['script'] += ' | %{__tar_extract} -' + src['script'] += ' | %s -f -' % (tar_extract) else: - src['script'] = '%%{__tar_extract} %s' % (src['local']) + src['script'] = '%s -f %s' % (tar_extract, src['local']) srcs += [src] return srcs @@ -266,7 +270,7 @@ class build: setup_name = args[1] args = args[1:] try: - opts, args = getopt.getopt(args[1:], 'qDcn:ba') + opts, args = getopt.getopt(args[1:], 'qDcn:bas:') except getopt.GetoptError as ge: raise error.general('source setup error: %s' % str(ge)) quiet = False @@ -276,6 +280,7 @@ class build: deleted_dir = False created_dir = False changed_dir = False + strip_components = 0 opt_name = None for o in opts: if o[0] == '-q': @@ -290,8 +295,12 @@ class build: unpack_before_chdir = True elif o[0] == '-a': unpack_before_chdir = False + elif o[0] == '-s': + if not o[1].isdigit(): + raise error.general('source setup error: invalid strip count: %s' % (o[1])) + strip_components = int(o[1]) name = None - for source in self.source(setup_name): + for source in self.source(setup_name, strip_components): if name is None: if opt_name is None: if source: @@ -301,7 +310,7 @@ class build: else: name = opt_name self.script_build.append(self.config.expand('cd %{_builddir}')) - if not deleted_dir and delete_before_unpack: + if not deleted_dir and delete_before_unpack: self.script_build.append(self.config.expand('%{__rm} -rf ' + name)) deleted_dir = True if not created_dir and create_dir: diff --git a/source-builder/sb/config.py b/source-builder/sb/config.py index 93a74f3..2c3a13e 100644 --- a/source-builder/sb/config.py +++ b/source-builder/sb/config.py @@ -504,9 +504,9 @@ class file: if not f.startswith('-W'): fflags += [f] pkg_flags = ' '.join(fflags) - log.trace('pkgconfig: %s: %s' % (flags, pkg_flags)) + log.trace('pkgconfig: %s: %s' % (flags, pkg_flags)) except pkgconfig.error as pe: - self._error('pkgconfig: %s: %s' % (flags, pe)) + self._error('pkgconfig: %s: %s' % (flags, pe)) except: raise error.internal('pkgconfig failure') if pkg_flags is None: @@ -719,7 +719,7 @@ class file: else: if ls[1] == 'select': self.macros.lock_read_map() - log.trace('config: %s: %3d: _disable_select: %s' % (self.name, self.lc, + log.trace('config: %s: %3d: _disable_select: %s' % (self.name, self.lc, ls[1])) else: log.warning(self._name_line_msg('invalid disable statement: %s' % (ls[1]))) @@ -729,7 +729,7 @@ class file: log.warning(self._name_line_msg('invalid select statement')) else: r = self.macros.set_read_map(ls[1]) - log.trace('config: %s: %3d: _select: %s %s %r' % \ + log.trace('config: %s: %3d: _select: %s %s %r' % \ (self.name, self.lc, r, ls[1], self.macros.maps())) @@ -768,7 +768,7 @@ class file: del self.macros[mn] def _ifs(self, config, ls, label, iftrue, isvalid, dir, info): - log.trace('config: %s: %3d: _ifs[%i]: dir=%s %i %r' % \ + log.trace('config: %s: %3d: _ifs[%i]: dir=%s %i %r' % \ (self.name, self.lc, self.if_depth, str(dir), len(ls), ls)) in_dir = dir in_iftrue = True @@ -788,7 +788,7 @@ class file: self._error(label + ' without %endif') raise error.general('terminating build') if r[1] == '%endif': - log.trace('config: %s: %3d: _ifs[%i]: %%endif: dir=%s %s %s %r' % \ + log.trace('config: %s: %3d: _ifs[%i]: %%endif: dir=%s %s %s %r' % \ (self.name, self.lc, self.if_depth, str(dir), r[1], this_isvalid, data)) if in_dir is None: @@ -824,7 +824,7 @@ class file: sls = reduce(add, ls[1:], '').split() cls = sls - log.trace('config: %s: %3d: _if[%i]: %s' % (self.name, self.lc, + log.trace('config: %s: %3d: _if[%i]: %s' % (self.name, self.lc, self.if_depth, sls)) self.if_depth += 1 @@ -839,22 +839,22 @@ class file: elif cls[0] == '&&': join_op = 'and' cls = cls[1:] - log.trace('config: %s: %3d: _if[%i]: joining: %s' % (self.name, self.lc, - self.if_depth, - join_op)) + log.trace('config: %s: %3d: _if[%i]: joining: %s' % (self.name, self.lc, + self.if_depth, + join_op)) ori = 0 andi = 0 i = len(cls) if '||' in cls: ori = cls.index('||') - log.trace('config: %s: %3d: _if[%i}: OR found at %i' % (self.name, self.lc, - self.if_depth, - ori)) + log.trace('config: %s: %3d: _if[%i}: OR found at %i' % (self.name, self.lc, + self.if_depth, + ori)) if '&&' in cls: andi = cls.index('&&') - log.trace('config: %s: %3d: _if[%i]: AND found at %i' % (self.name, self.lc, - self.if_depth, - andi)) + log.trace('config: %s: %3d: _if[%i]: AND found at %i' % (self.name, self.lc, + self.if_depth, + andi)) if ori > 0 or andi > 0: if ori == 0: i = andi @@ -864,9 +864,9 @@ class file: i = andi else: i = andi - log.trace('config: %s: %3d: _if[%i]: next OP found at %i' % (self.name, self.lc, - self.if_depth, - i)) + log.trace('config: %s: %3d: _if[%i]: next OP found at %i' % (self.name, self.lc, + self.if_depth, + i)) ls = cls[:i] if len(ls) == 0: self._error('invalid if expression: ' + reduce(add, sls, '')) @@ -963,10 +963,10 @@ class file: else: cistrue = istrue - log.trace('config: %s: %3d: _if[%i]: %s %s %s %s' % (self.name, self.lc, - self.if_depth, - ifls, str(cistrue), - join_op, str(istrue))) + log.trace('config: %s: %3d: _if[%i]: %s %s %s %s' % (self.name, self.lc, + self.if_depth, + ifls, str(cistrue), + join_op, str(istrue))) if invert: cistrue = not cistrue @@ -975,8 +975,8 @@ class file: self.if_depth -= 1 - log.trace('config: %s: %3d: _if[%i]: %r' % (self.name, self.lc, - self.if_depth, ifs_return)) + log.trace('config: %s: %3d: _if[%i]: %r' % (self.name, self.lc, + self.if_depth, ifs_return)) return ifs_return @@ -1036,8 +1036,12 @@ class file: l = _clean(l) if len(l) == 0: continue - log.trace('config: %s: %0d: %s %s' % \ - (self.name, self.lc, str(isvalid), l)) + if isvalid: + indicator = '>' + else: + indicator = ' ' + log.trace('config: %s: %3d:%s%s [%s]' % \ + (self.name, self.lc, indicator, l, str(isvalid))) lo = l if isvalid: l = self._expand(l) @@ -1090,12 +1094,12 @@ class file: elif ls[0] == '%if': d = self._if(config, ls, isvalid, dir, info) if len(d): - log.trace('config: %s: %3d: %%if: %s' % (self.name, self.lc, d)) + log.trace('config: %s: %3d: %%if: %s' % (self.name, self.lc, d)) return ('data', d) elif ls[0] == '%ifn': d = self._if(config, ls, isvalid, dir, info, True) if len(d): - log.trace('config: %s: %3d: %%ifn: %s' % (self.name, self.lc, d)) + log.trace('config: %s: %3d: %%ifn: %s' % (self.name, self.lc, d)) return ('data', d) elif ls[0] == '%ifos': d = self._ifos(config, ls, isvalid, dir, info) @@ -1142,7 +1146,7 @@ class file: if isvalid: for d in self._directive: if ls[0].strip() == d: - log.trace('config: %s: %0d: _parse: directive: %s' % \ + log.trace('config: %s: %3d: _parse: directive: %s' % \ (self.name, self.lc, ls[0].strip())) return ('directive', ls[0].strip(), ls[1:]) log.warning(self._name_line_msg("unknown directive: '" + ls[0] + "'")) @@ -1176,7 +1180,7 @@ class file: return (directive, info, data) def _process_data(self, results, directive, info, data): - log.trace('config: %s: %3d: _process_data: result=#%r# directive=#%s# info=#%r# data=#%r#' % \ + log.trace('config: %s: %3d: _process_data: result=#%r# directive=#%s# info=#%r# data=#%r#' % \ (self.name, self.lc, results, directive, info, data)) new_data = [] for l in results[1]: @@ -1192,7 +1196,7 @@ class file: if not directive: l = self._expand(l) ls = self.tags.split(l, 1) - log.trace('config: %s: %3d: _tag: %s %s' % (self.name, self.lc, l, ls)) + log.trace('config: %s: %3d: _tag: %s %s' % (self.name, self.lc, l, ls)) if len(ls) > 1: info = ls[0].lower() if info[-1] == ':': @@ -1206,7 +1210,7 @@ class file: log.warning(self._name_line_msg("invalid format: '%s'" % (info_data[:-1]))) else: l = self._expand(l) - log.trace('config: %s: %3d: _data: %s %s' % (self.name, self.lc, l, new_data)) + log.trace('config: %s: %3d: _data: %s %s' % (self.name, self.lc, l, new_data)) new_data.append(l) return (directive, info, data + new_data) @@ -1222,7 +1226,7 @@ class file: self.package = _package def _directive_extend(self, dir, data): - log.trace('config: %s: %3d: _directive_extend: %s: %r' % (self.name, self.lc, dir, data)) + log.trace('config: %s: %3d: _directive_extend: %s: %r' % (self.name, self.lc, dir, data)) self._packages[self.package].directive_extend(dir, data) def _info_append(self, info, data): @@ -1295,7 +1299,7 @@ class file: raise error.general('no config file found: %s' % (cfgname)) try: - log.trace('config: %s: _open: %s' % (self.name, path.host(configname))) + log.trace('config: %s: _open: %s' % (self.name, path.host(configname))) config = open(path.host(configname), 'r') except IOError as err: raise error.general('error opening config file: %s' % (path.host(configname))) -- cgit v1.2.3