From b8e21f644d4c54c8c880bcad5b24a726ba60ee1b Mon Sep 17 00:00:00 2001 From: marvell Date: Wed, 30 Jun 2021 17:26:48 +0530 Subject: [PATCH 01/30] Ported Marvell armhf build on x86 for debian buster to use cross-compilation instead of qemu emulation Signed-off-by: marvell --- Makefile.work | 13 +- README.md | 12 ++ build_debian.sh | 4 + dockers/docker-base-buster/Dockerfile.j2 | 4 +- .../docker-config-engine-buster/Dockerfile.j2 | 8 ++ dockers/docker-platform-monitor/Dockerfile.j2 | 8 ++ .../docker-sonic-mgmt-framework/Dockerfile.j2 | 7 + .../build_templates/sonic_debian_extension.j2 | 6 +- platform/marvell-armhf/prestera/debian/rules | 4 + scripts/build_debian_base_system.sh | 2 +- scripts/prepare_docker_buildinfo.sh | 10 ++ slave.mk | 68 ++++++++-- sonic-slave-buster/Dockerfile.j2 | 128 ++++++++++++++++-- sonic-slave-buster/Dockerfile.user.j2 | 2 +- .../cross-build-arm-python-reqirements.sh | 37 +++++ src/bash/Makefile | 5 +- src/ethtool/Makefile | 2 + src/hiredis/Makefile | 4 + src/ifupdown2/Makefile | 4 + src/initramfs-tools/Makefile | 4 + src/iproute2/Makefile | 5 + src/iptables/Makefile | 4 + src/isc-dhcp/Makefile | 4 + src/kdump-tools/Makefile | 4 + src/libnl3/Makefile | 5 + src/libteam/Makefile | 4 + src/libyang/Makefile | 12 ++ src/libyang1/Makefile | 4 + src/lldpd/Makefile | 4 + src/lm-sensors/Makefile | 4 + src/monit/Makefile | 13 ++ src/mpdecimal/Makefile | 4 + src/ntp/Makefile | 12 ++ src/openssh/Makefile | 6 + src/radius/nss/Makefile | 4 + src/radius/pam/Makefile | 8 ++ src/redis/Makefile | 4 + src/sflow/hsflowd/Makefile | 6 + src/sflow/psample/Makefile | 4 + src/sflow/psample/debian/rules | 4 + src/sflow/sflowtool/Makefile | 4 + src/smartmontools/Makefile | 4 + src/snmpd/Makefile | 17 +++ src/socat/Makefile | 4 + src/sonic-device-data/Makefile | 4 + src/sonic-frr/Makefile | 16 +++ src/swig/Makefile | 4 + src/systemd-sonic-generator/Makefile | 4 + src/systemd-sonic-generator/debian/rules | 9 ++ src/tacacs/nss/Makefile | 4 + src/tacacs/pam/Makefile | 4 + src/thrift/Makefile | 4 + src/wpasupplicant/Makefile | 4 + 53 files changed, 502 insertions(+), 27 deletions(-) create mode 100755 sonic-slave-buster/cross-build-arm-python-reqirements.sh diff --git a/Makefile.work b/Makefile.work index ccaacf749a0..f85e7fd4a4c 100644 --- a/Makefile.work +++ b/Makefile.work @@ -127,10 +127,16 @@ ifeq ($(CONFIGURED_ARCH), $(COMPILE_HOST_ARCH)) SLAVE_BASE_IMAGE = $(SLAVE_DIR) MULTIARCH_QEMU_ENVIRON = n else ifneq ($(CONFIGURED_ARCH),) +ifneq ($(CROSS_BLDENV),) +SLAVE_BASE_IMAGE = $(SLAVE_DIR)-march-$(CONFIGURED_ARCH) +MULTIARCH_QEMU_ENVIRON = n +CROSS_BUILD_ENVIRON = y +else SLAVE_BASE_IMAGE = $(SLAVE_DIR)-march-$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON = y endif endif +endif SLAVE_IMAGE = $(SLAVE_BASE_IMAGE)-$(USER_LC) # Generate the version control build info @@ -139,8 +145,8 @@ $(shell SONIC_VERSION_CONTROL_COMPONENTS=$(SONIC_VERSION_CONTROL_COMPONENTS) \ scripts/generate_buildinfo_config.sh) # Generate the slave Dockerfile, and prepare build info for it -$(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) DOCKER_EXTRA_OPTS=$(DOCKER_EXTRA_OPTS) j2 $(SLAVE_DIR)/Dockerfile.j2 > $(SLAVE_DIR)/Dockerfile) -$(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) j2 $(SLAVE_DIR)/Dockerfile.user.j2 > $(SLAVE_DIR)/Dockerfile.user) +$(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) DOCKER_EXTRA_OPTS=$(DOCKER_EXTRA_OPTS) j2 $(SLAVE_DIR)/Dockerfile.j2 > $(SLAVE_DIR)/Dockerfile) +$(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) j2 $(SLAVE_DIR)/Dockerfile.user.j2 > $(SLAVE_DIR)/Dockerfile.user) $(shell BUILD_SLAVE=y scripts/prepare_docker_buildinfo.sh $(SLAVE_BASE_IMAGE) $(SLAVE_DIR)/Dockerfile $(CONFIGURED_ARCH) "" $(BLDENV)) # Add the versions in the tag, if the version change, need to rebuild the slave @@ -188,7 +194,7 @@ ifeq ($(SONIC_CONFIG_USE_NATIVE_DOCKERD_FOR_BUILD), y) DOCKER_RUN += -v /var/run/docker.sock:/var/run/docker.sock endif -ifeq ($(MULTIARCH_QEMU_ENVIRON), y) +ifneq ($(filter y, $(MULTIARCH_QEMU_ENVIRON) $(CROSS_BUILD_ENVIRON)),) ifeq ($(DOCKER_DATA_ROOT_FOR_MULTIARCH),) DOCKER_DATA_ROOT_FOR_MULTIARCH := /var/lib/march/docker endif @@ -249,6 +255,7 @@ SONIC_BUILD_INSTRUCTION := make \ PLATFORM=$(PLATFORM) \ PLATFORM_ARCH=$(PLATFORM_ARCH) \ MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) \ + CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) \ BUILD_NUMBER=$(BUILD_NUMBER) \ BUILD_TIMESTAMP=$(BUILD_TIMESTAMP) \ SONIC_IMAGE_VERSION=$(SONIC_IMAGE_VERSION) \ diff --git a/README.md b/README.md index aada8a53084..fe4b989e757 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,18 @@ To build Arm32 bit for (ARMHF) platform make target/sonic-marvell-armhf.bin +To build Arm32 bit for (ARMHF) Marvell platform on amd64 host for debian buster using cross-compilation run the + following commands: + + # Execute make configure once to configure ASIC and ARCH for cross-compilation build + + NOJESSIE=1 NOSTRETCH=1 BLDENV=buster CROSS_BLDENV=1 make configure PLATFORM=marvell-armhf PLATFORM_ARCH=armhf + + # Execute Arm32 build using cross-compilation environment + + NOJESSIE=1 NOSTRETCH=1 BLDENV=buster CROSS_BLDENV=1 make target/sonic-marvell-armhf.bin + +Running the above Arm32 build using cross-compilation instead of qemu emulator drastically reduces the build time. To build Arm64 bit for platform diff --git a/build_debian.sh b/build_debian.sh index e609a08783f..87cdd20c513 100755 --- a/build_debian.sh +++ b/build_debian.sh @@ -113,6 +113,10 @@ sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y upgrade echo '[INFO] Install packages for building image' sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install makedev psmisc +if [[ $CROSS_BUILD_ENVIRON == y ]]; then +sudo LANG=C chroot $FILESYSTEM_ROOT dpkg --add-architecture $CONFIGURED_ARCH +fi + ## Create device files echo '[INFO] MAKEDEV' if [[ $CONFIGURED_ARCH == armhf || $CONFIGURED_ARCH == arm64 ]]; then diff --git a/dockers/docker-base-buster/Dockerfile.j2 b/dockers/docker-base-buster/Dockerfile.j2 index ac3fd7743e7..efd874520dc 100644 --- a/dockers/docker-base-buster/Dockerfile.j2 +++ b/dockers/docker-base-buster/Dockerfile.j2 @@ -1,7 +1,7 @@ {% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} -{% if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} +{% if CONFIGURED_ARCH == "armhf" and (MULTIARCH_QEMU_ENVIRON == "y" or CROSS_BUILD_ENVIRON == "y") %} FROM multiarch/debian-debootstrap:armhf-buster -{% elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} +{% elif CONFIGURED_ARCH == "arm64" and (MULTIARCH_QEMU_ENVIRON == "y" or CROSS_BUILD_ENVIRON == "y") %} FROM multiarch/debian-debootstrap:arm64-buster {% else %} FROM {{DOCKER_BASE_ARCH}}/debian:buster diff --git a/dockers/docker-config-engine-buster/Dockerfile.j2 b/dockers/docker-config-engine-buster/Dockerfile.j2 index 3022546a068..9437ecada1b 100644 --- a/dockers/docker-config-engine-buster/Dockerfile.j2 +++ b/dockers/docker-config-engine-buster/Dockerfile.j2 @@ -16,6 +16,14 @@ RUN apt-get install -y \ libz-dev {%- endif %} +{%- if CROSS_BUILD_ENVIRON == "y" %} +RUN mkdir prebuilt-python-wheels +COPY prebuilt-python-wheels/* prebuilt-python-wheels/ +RUN pip3 install prebuilt-python-wheels/lxml*cp37*.whl +RUN pip3 install prebuilt-python-wheels/bitarray*cp37*.whl +RUN rm -rf prebuilt-python-wheels +{%- endif %} + # For sonic-config-engine Python 3 package # Explicitly install pyangbind here, as pyangbind causes enum34 to be installed. # enum34 causes Python 're' package to not work properly as it redefines an incompatible enum.py module diff --git a/dockers/docker-platform-monitor/Dockerfile.j2 b/dockers/docker-platform-monitor/Dockerfile.j2 index 21536f43c01..80242ed0b18 100755 --- a/dockers/docker-platform-monitor/Dockerfile.j2 +++ b/dockers/docker-platform-monitor/Dockerfile.j2 @@ -34,6 +34,14 @@ RUN pip2 install --upgrade 'pip<21' RUN apt-get purge -y python-pip RUN pip2 install 'setuptools==40.8.0' +{%- if CROSS_BUILD_ENVIRON == "y" %} +RUN mkdir prebuilt-python-wheels +COPY prebuilt-python-wheels/* prebuilt-python-wheels/ +RUN pip2 install prebuilt-python-wheels/lxml*cp27*.whl +RUN pip3 install prebuilt-python-wheels/lxml*cp37*.whl +RUN rm -rf prebuilt-python-wheels +{%- endif %} + # On Arista devices, the sonic_platform wheel is not installed in the container. # Instead, the installation directory is mounted from the host OS. However, this method # doesn't ensure all dependencies are installed in the container. So here we diff --git a/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 b/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 index 50854949c89..71d27485aca 100644 --- a/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 +++ b/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 @@ -9,6 +9,13 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ apt-get install -y g++ python3-dev libxml2 libcurl3-gnutls libcjson-dev +{%- if CROSS_BUILD_ENVIRON == "y" %} +RUN mkdir prebuilt-python-wheels +COPY prebuilt-python-wheels/* prebuilt-python-wheels/ +RUN pip3 install prebuilt-python-wheels/grpcio*cp37*.whl +RUN rm -rf prebuilt-python-wheels +{%- endif %} + RUN pip3 install connexion==2.7.0 \ setuptools==21.0.0 \ grpcio-tools==1.20.0 \ diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index ea1015d7ed9..f84e1cd76ae 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -68,7 +68,7 @@ sudo bash -c "echo \"DOCKER_OPTS=\"--storage-driver=overlay2\"\" >> $FILESYSTEM_ # Copy docker start script to be able to start docker in chroot sudo mkdir -p "$FILESYSTEM_ROOT/$DOCKER_CTL_DIR" sudo cp $DOCKER_SCRIPTS_DIR/docker "$FILESYSTEM_ROOT/$DOCKER_CTL_SCRIPT" -if [ $MULTIARCH_QEMU_ENVIRON == y ]; then +if [[ $MULTIARCH_QEMU_ENVIRON == y || $CROSS_BUILD_ENVIRON == y ]]; then DOCKER_HOST="unix:///dockerfs/var/run/docker.sock" SONIC_NATIVE_DOCKERD_FOR_DOCKERFS_PID="cat `pwd`/dockerfs/var/run/docker.pid" else @@ -628,7 +628,7 @@ EOF {% endif %} ## Bind docker path -if [ $MULTIARCH_QEMU_ENVIRON == y ]; then +if [[ $MULTIARCH_QEMU_ENVIRON == y || $CROSS_BUILD_ENVIRON == y ]]; then sudo mkdir -p $FILESYSTEM_ROOT/dockerfs sudo mount --bind dockerfs $FILESYSTEM_ROOT/dockerfs fi @@ -711,7 +711,7 @@ sudo LANG=C DOCKER_HOST="$DOCKER_HOST" chroot $FILESYSTEM_ROOT sonic-package-man sudo umount $FILESYSTEM_ROOT/target sudo rm -r $FILESYSTEM_ROOT/target -if [ $MULTIARCH_QEMU_ENVIRON == y ]; then +if [[ $MULTIARCH_QEMU_ENVIRON == y || $CROSS_BUILD_ENVIRON == y ]]; then sudo umount $FILESYSTEM_ROOT/dockerfs sudo rm -fr $FILESYSTEM_ROOT/dockerfs sudo kill -9 `sudo $SONIC_NATIVE_DOCKERD_FOR_DOCKERFS_PID` || true diff --git a/platform/marvell-armhf/prestera/debian/rules b/platform/marvell-armhf/prestera/debian/rules index d3895c2f769..c4822064d9f 100755 --- a/platform/marvell-armhf/prestera/debian/rules +++ b/platform/marvell-armhf/prestera/debian/rules @@ -3,7 +3,11 @@ include /usr/share/dpkg/pkg-info.mk PACKAGE_PRE_NAME := mrvlprestera +ifeq ($(CROSS_BUILD_ENVIRON), y) +KVERSION ?= $(KVERSION) +else KVERSION ?= $(shell uname -r) +endif KERNEL_SRC := /lib/modules/$(KVERSION) MOD_SRC_DIR:= $(shell pwd) MODULE_DIR := mrvl-prestera/cpssEnabler/linuxNoKernelModule/drivers diff --git a/scripts/build_debian_base_system.sh b/scripts/build_debian_base_system.sh index fc3e71290f0..57644366eb4 100755 --- a/scripts/build_debian_base_system.sh +++ b/scripts/build_debian_base_system.sh @@ -20,7 +20,7 @@ generate_version_file() if [ "$ENABLE_VERSION_CONTROL_DEB" != "y" ]; then if [[ $CONFIGURED_ARCH == armhf || $CONFIGURED_ARCH == arm64 ]]; then - if [ $MULTIARCH_QEMU_ENVIRON == "y" ]; then + if [[ $MULTIARCH_QEMU_ENVIRON == y || $CROSS_BUILD_ENVIRON == y ]]; then # qemu arm bin executable for cross-building sudo mkdir -p $FILESYSTEM_ROOT/usr/bin sudo cp /usr/bin/qemu*static $FILESYSTEM_ROOT/usr/bin || true diff --git a/scripts/prepare_docker_buildinfo.sh b/scripts/prepare_docker_buildinfo.sh index d2b2c57185d..c4257500dff 100755 --- a/scripts/prepare_docker_buildinfo.sh +++ b/scripts/prepare_docker_buildinfo.sh @@ -11,10 +11,20 @@ DISTRO=$5 DOCKERFILE_PATH=$(dirname "$DOCKERFILE_TARGE") BUILDINFO_PATH="${DOCKERFILE_PATH}/buildinfo" BUILDINFO_VERSION_PATH="${BUILDINFO_PATH}/versions" +if [[ $CROSS_BUILD_ENVIRON == y ]]; then + PREBUILT_PYTHON_WHEELS_PATH="${DOCKERFILE_PATH}/prebuilt-python-wheels" +fi [ -d $BUILDINFO_PATH ] && rm -rf $BUILDINFO_PATH mkdir -p $BUILDINFO_VERSION_PATH +if [[ $CROSS_BUILD_ENVIRON == y ]]; then + # Copy pre-compiled (cross-compiled) python wheels used in dockers + [ -d $PREBUILT_PYTHON_WHEELS_PATH ] && rm -rf $PREBUILT_PYTHON_WHEELS_PATH + mkdir -p $PREBUILT_PYTHON_WHEELS_PATH + cp -rf /PRE_BUILT_TARGET/* $PREBUILT_PYTHON_WHEELS_PATH +fi + # Get the debian distribution from the docker base image if [ -z "$DISTRO" ]; then DOCKER_BASE_IMAGE=$(grep "^FROM" $DOCKERFILE | head -n 1 | awk '{print $2}') diff --git a/slave.mk b/slave.mk index 830d6fd8c08..7a1583d89eb 100644 --- a/slave.mk +++ b/slave.mk @@ -80,6 +80,7 @@ export IMAGE_DISTRO export IMAGE_DISTRO_DEBS_PATH export MULTIARCH_QEMU_ENVIRON export DOCKER_BASE_ARCH +export CROSS_BUILD_ENVIRON ############################################################################### ## Utility rules @@ -233,6 +234,41 @@ ifeq ($(CONFIGURED_PLATFORM),vs) export BUILD_MULTIASIC_KVM=$(BUILD_MULTIASIC_KVM) endif +ifeq ($(CROSS_BUILD_ENVIRON),y) +DEB_BUILD_OPTIONS_GENERIC += nocheck +export $(dpkg-architecture -a$(CONFIGURED_ARCH)) +ANT_DEB_CROSS_OPT := -a$(CONFIGURED_ARCH) -Pcross,nocheck +ANT_DEB_CONFIG := CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) + +VIRTENV_BASE_CROSS_PYTHON2 = /python_virtualenv/env2/ +VIRTENV_BASE_CROSS_PYTHON3 = /python_virtualenv/env3/ +VIRTENV_BIN_CROSS_PYTHON2 = $(VIRTENV_BASE_CROSS_PYTHON2)/bin/ +VIRTENV_BIN_CROSS_PYTHON3 = $(VIRTENV_BASE_CROSS_PYTHON3)/bin/ +VIRTENV_LIB_CROSS_PYTHON2 = $(VIRTENV_BASE_CROSS_PYTHON2)/lib/ +VIRTENV_LIB_CROSS_PYTHON3 = $(VIRTENV_BASE_CROSS_PYTHON3)/lib/ + +ifeq ($(CONFIGURED_ARCH),armhf) +CROSS_HOST_TYPE = arm-linux-gnueabihf +GOARCH=arm +else ifeq ($(CONFIGURED_ARCH),arm64) +CROSS_HOST_TYPE = aarch64-linux-gnu +GOARCH=arm64 +endif + +CROSS_COMPILE = $(CROSS_HOST_TYPE)- +CROSS_CC = $(CROSS_COMPILE)gcc +CROSS_CXX = $(CROSS_COMPILE)g++ +CROSS_AR = $(CROSS_COMPILE)ar +CROSS_LIB_PATH = /usr/$(CROSS_HOST_TYPE)/lib/ +CROSS_BIN_PATH = /usr/$(CROSS_HOST_TYPE)/bin/ +CROSS_PKGS_LIB_PATH = /usr/lib/$(CROSS_HOST_TYPE) + +CROSS_LIBPERL_VERSION = $(shell dpkg -s libperl-dev:armhf|grep Version|awk '{split($$2,v,"-"); print v[1];}') +CROSS_PERL_CORE_PATH = $(CROSS_PKGS_LIB_PATH)/perl/$(CROSS_LIBPERL_VERSION)/CORE/ + +CROSS_COMPILE_FLAGS := CGO_ENABLED=1 GOOS=linux GOARCH=$(GOARCH) CROSS_COMPILE=$(CROSS_COMPILE) OVERRIDE_HOST_TYPE=$(CROSS_HOST_TYPE) CROSS_CC=$(CROSS_CC) CROSS_CXX=$(CROSS_CXX) CROSS_LIB_PATH=$(CROSS_LIB_PATH) CROSS_BIN_PATH=$(CROSS_BIN_PATH) CROSS_HOST_TYPE=$(CROSS_HOST_TYPE) CROSS_PKGS_LIB_PATH=$(CROSS_PKGS_LIB_PATH) CROSS_PERL_CORE_PATH=$(CROSS_PERL_CORE_PATH) +endif + ############################################################################### ## Routing stack related exports ############################################################################### @@ -301,6 +337,7 @@ $(info "SONIC_VERSION_CONTROL_COMPONENTS": "$(SONIC_VERSION_CONTROL_COMPONENTS)" ifeq ($(CONFIGURED_PLATFORM),vs) $(info "BUILD_MULTIASIC_KVM" : "$(BUILD_MULTIASIC_KVM)") endif +$(info "CROSS_BUILD_ENVIRON" : "$(CROSS_BUILD_ENVIRON)") $(info ) else $(info SONiC Build System for $(CONFIGURED_PLATFORM):$(CONFIGURED_ARCH)) @@ -469,7 +506,7 @@ $(addprefix $(DEBS_PATH)/, $(SONIC_MAKE_DEBS)) : $(DEBS_PATH)/% : .platform $$(a if [ -f $($*_SRC_PATH).patch/series ]; then pushd $($*_SRC_PATH) && QUILT_PATCHES=../$(notdir $($*_SRC_PATH)).patch quilt push -a; popd; fi # Build project and take package $(SETUP_OVERLAYFS_FOR_DPKG_ADMINDIR) - DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC}" make -j$(SONIC_CONFIG_MAKE_JOBS) DEST=$(shell pwd)/$(DEBS_PATH) -C $($*_SRC_PATH) $(shell pwd)/$(DEBS_PATH)/$* $(LOG) + DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC}" $(ANT_DEB_CONFIG) $(CROSS_COMPILE_FLAGS) make -j$(SONIC_CONFIG_MAKE_JOBS) DEST=$(shell pwd)/$(DEBS_PATH) -C $($*_SRC_PATH) $(shell pwd)/$(DEBS_PATH)/$* $(LOG) # Clean up if [ -f $($*_SRC_PATH).patch/series ]; then pushd $($*_SRC_PATH) && quilt pop -a -f; [ -d .pc ] && rm -rf .pc; popd; fi @@ -511,9 +548,9 @@ $(addprefix $(DEBS_PATH)/, $(SONIC_DPKG_DEBS)) : $(DEBS_PATH)/% : .platform $$(a if [ -f ./autogen.sh ]; then ./autogen.sh $(LOG); fi $(SETUP_OVERLAYFS_FOR_DPKG_ADMINDIR) $(if $($*_DPKG_TARGET), - ${$*_BUILD_ENV} DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC} ${$*_DEB_BUILD_OPTIONS}" dpkg-buildpackage -rfakeroot -b -us -uc -tc -j$(SONIC_CONFIG_MAKE_JOBS) --as-root -T$($*_DPKG_TARGET) --admindir $$mergedir $(LOG), - ${$*_BUILD_ENV} DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC} ${$*_DEB_BUILD_OPTIONS}" dpkg-buildpackage -rfakeroot -b -us -uc -tc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $$mergedir $(LOG) - ) + ${$*_BUILD_ENV} DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC} ${$*_DEB_BUILD_OPTIONS}" $(ANT_DEB_CONFIG) $(CROSS_COMPILE_FLAGS) dpkg-buildpackage -rfakeroot -b $(ANT_DEB_CROSS_OPT) -us -uc -tc -j$(SONIC_CONFIG_MAKE_JOBS) --as-root -T$($*_DPKG_TARGET) --admindir $$mergedir $(LOG), + ${$*_BUILD_ENV} DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC} ${$*_DEB_BUILD_OPTIONS}" $(ANT_DEB_CONFIG) $(CROSS_COMPILE_FLAGS) dpkg-buildpackage -rfakeroot -b $(ANT_DEB_CROSS_OPT) -us -uc -tc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $$mergedir $(LOG) + ) popd $(LOG_SIMPLE) # Clean up if [ -f $($*_SRC_PATH).patch/series ]; then pushd $($*_SRC_PATH) && quilt pop -a -f; [ -d .pc ] && rm -rf .pc; popd; fi @@ -579,7 +616,12 @@ $(SONIC_INSTALL_DEBS) : $(DEBS_PATH)/%-install : .platform $$(addsuffix -install { while dpkg -s $(firstword $(subst _, ,$(basename $(deb)))) | grep "^Version: $(word 2, $(subst _, ,$(basename $(deb))))" &> /dev/null; do echo "waiting for $(deb) to be uninstalled" $(LOG); sleep 1; done } ) # put a lock here because dpkg does not allow installing packages in parallel if mkdir $(DEBS_PATH)/dpkg_lock &> /dev/null; then +ifneq ($(CROSS_BUILD_ENVIRON),y) { sudo DEBIAN_FRONTEND=noninteractive dpkg -i $(DEBS_PATH)/$* $(LOG) && rm -d $(DEBS_PATH)/dpkg_lock && break; } || { rm -d $(DEBS_PATH)/dpkg_lock && sudo lsof /var/lib/dpkg/lock-frontend && ps aux && exit 1 ; } +else + # Relocate debian packages python libraries to the cross python virtual env location + { sudo DEBIAN_FRONTEND=noninteractive dpkg -i $(if $(findstring $(LINUX_HEADERS),$*),--force-depends) $(DEBS_PATH)/$* $(LOG) && rm -rf tmp && mkdir tmp && dpkg -x $(DEBS_PATH)/$* tmp && (sudo cp -rf tmp/usr/lib/python2.7/dist-packages/* /python_virtualenv/env2/lib/python2.7/site-packages/ 2>/dev/null || true) && (sudo cp -rf tmp/usr/lib/python3/dist-packages/* /python_virtualenv/env3/lib/python3.7/site-packages/ 2>/dev/null || true) && rm -d $(DEBS_PATH)/dpkg_lock && break; } || { rm -d $(DEBS_PATH)/dpkg_lock && sudo lsof /var/lib/dpkg/lock-frontend && ps aux && exit 1 ; } +endif fi done $(FOOTER) @@ -651,9 +693,14 @@ $(addprefix $(PYTHON_WHEELS_PATH)/, $(SONIC_PYTHON_WHEELS)) : $(PYTHON_WHEELS_PA pushd $($*_SRC_PATH) $(LOG_SIMPLE) # apply series of patches if exist if [ -f ../$(notdir $($*_SRC_PATH)).patch/series ]; then QUILT_PATCHES=../$(notdir $($*_SRC_PATH)).patch quilt push -a; fi + if [ ! "$($*_TEST)" = "n" ]; then +ifneq ($(CROSS_BUILD_ENVIRON),y) # Use pip instead of later setup.py to install dependencies into user home, but uninstall self - pip$($*_PYTHON_VERSION) install . && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name` - if [ ! "$($*_TEST)" = "n" ]; then python$($*_PYTHON_VERSION) setup.py test $(LOG); fi + pip$($*_PYTHON_VERSION) install . && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name + python$($*_PYTHON_VERSION) setup.py test $(LOG); fi +else + PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py test $(LOG); fi +endif python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) # clean up if [ -f ../$(notdir $($*_SRC_PATH)).patch/series ]; then quilt pop -a -f; [ -d .pc ] && rm -rf .pc; fi @@ -680,7 +727,12 @@ $(SONIC_INSTALL_WHEELS) : $(PYTHON_WHEELS_PATH)/%-install : .platform $$(addsuff # put a lock here to avoid race conditions while true; do if mkdir $(PYTHON_WHEELS_PATH)/pip_lock &> /dev/null; then +ifneq ($(CROSS_BUILD_ENVIRON),y) { sudo -E pip$($*_PYTHON_VERSION) install $(PYTHON_WHEELS_PATH)/$* $(LOG) && rm -d $(PYTHON_WHEELS_PATH)/pip_lock && break; } || { rm -d $(PYTHON_WHEELS_PATH)/pip_lock && exit 1 ; } +else + # Link python script and data expected location to the cross python virtual env istallation locations + { PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} sudo -E $(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION))/pip$($*_PYTHON_VERSION) install --no-deps $(PYTHON_WHEELS_PATH)/$* $(LOG) && $(if $(findstring $(SONIC_CONFIG_ENGINE_PY3),$*),(sudo ln -s $(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION))/sonic-cfggen /usr/local/bin/sonic-cfggen 2>/dev/null || true), true ) && $(if $(findstring $(SONIC_YANG_MODELS_PY3),$*),(sudo ln -s $(VIRTENV_BASE_CROSS_PYTHON3)/yang-models /usr/local/yang-models 2>/dev/null || true), true ) && rm -d $(PYTHON_WHEELS_PATH)/pip_lock && break; } || { rm -d $(PYTHON_WHEELS_PATH)/pip_lock && exit 1 ; } +endif fi done $(FOOTER) @@ -803,7 +855,7 @@ $(addprefix $(TARGET_PATH)/, $(DOCKER_IMAGES)) : $(TARGET_PATH)/%.gz : .platform $(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_whls=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_PYTHON_WHEELS)))\n" | awk '!a[$$0]++')) $(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_dbgs=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_DBG_PACKAGES)))\n" | awk '!a[$$0]++')) $(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_pkgs=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_APT_PACKAGES)))\n" | awk '!a[$$0]++')) - if [ -d $($*.gz_PATH)/cli-plugin-tests/ ]; then pushd $($*.gz_PATH)/cli-plugin-tests; pytest-$($(SONIC_UTILITIES_PY3)_PYTHON_VERSION) -v $(LOG); popd; fi + if [ -d $($*.gz_PATH)/cli-plugin-tests/ ]; then pushd $($*.gz_PATH)/cli-plugin-tests; PATH=$(VIRTENV_BIN_CROSS_PYTHON$($(SONIC_UTILITIES_PY3)_PYTHON_VERSION)):${PATH} pytest-$($(SONIC_UTILITIES_PY3)_PYTHON_VERSION) -v $(LOG); popd; fi # Label docker image with componenets versions $(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_labels=$(foreach component,\ $(call expand,$($*.gz_DEPENDS),RDEPENDS) \ @@ -1086,7 +1138,6 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ ) ) - # Exported variables are used by sonic_debian_extension.sh export installer_start_scripts="$(foreach docker, $($*_DOCKERS),$(addsuffix .sh, $($(docker:-dbg.gz=.gz)_CONTAINER_NAME)))" export feature_vs_image_names="$(foreach docker, $($*_DOCKERS), $(addsuffix :, $($(docker:-dbg.gz=.gz)_CONTAINER_NAME):$(docker:-dbg.gz=.gz)))" @@ -1136,6 +1187,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) \ PACKAGE_URL_PREFIX=$(PACKAGE_URL_PREFIX) \ MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) \ + CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) \ ./build_debian.sh $(LOG) USERNAME="$(USERNAME)" \ diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index 3ac1709d20d..e215d5f5160 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -1,9 +1,18 @@ {%- if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} -FROM multiarch/qemu-user-static:x86_64-arm-5.0.0-2 as qemu +FROM multiarch/qemu-user-static:x86_64-arm as qemu FROM multiarch/debian-debootstrap:armhf-buster COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin {%- elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} +FROM multiarch/qemu-user-static:x86_64-aarch64 as qemu FROM multiarch/debian-debootstrap:arm64-buster +{%- elif CONFIGURED_ARCH == "armhf" and CROSS_BUILD_ENVIRON == "y" %} +FROM multiarch/qemu-user-static:x86_64-arm as qemu +FROM debian:buster +COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin +{%- elif CONFIGURED_ARCH == "arm64" and CROSS_BUILD_ENVIRON == "y" %} +FROM multiarch/qemu-user-static:x86_64-aarch64 as qemu +FROM debian:buster +COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin {%- else -%} FROM debian:buster {%- endif %} @@ -20,7 +29,7 @@ RUN echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bust echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian buster main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian buster-updates main contrib non-free" >> /etc/apt/sources.list -{%- if CONFIGURED_ARCH == "armhf" %} +{%- if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} RUN echo "deb [arch=armhf] http://deb.debian.org/debian buster main contrib non-free" > /etc/apt/sources.list && \ echo "deb-src [arch=armhf] http://deb.debian.org/debian buster main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=armhf] http://deb.debian.org/debian buster-updates main contrib non-free" >> /etc/apt/sources.list && \ @@ -30,7 +39,7 @@ RUN echo "deb [arch=armhf] http://deb.debian.org/debian buster main contrib non- echo 'deb [arch=armhf] http://ftp.debian.org/debian buster-backports main' >> /etc/apt/sources.list && \ echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian buster main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian buster-updates main contrib non-free" >> /etc/apt/sources.list -{%- elif CONFIGURED_ARCH == "arm64" %} +{%- elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} RUN echo "deb [arch=arm64] http://deb.debian.org/debian buster main contrib non-free" > /etc/apt/sources.list && \ echo "deb-src [arch=arm64] http://deb.debian.org/debian buster main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=arm64] http://deb.debian.org/debian buster-updates main contrib non-free" >> /etc/apt/sources.list && \ @@ -40,11 +49,78 @@ RUN echo "deb [arch=arm64] http://deb.debian.org/debian buster main contrib non- echo 'deb [arch=arm64] http://ftp.debian.org/debian buster-backports main' >> /etc/apt/sources.list && \ echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian buster main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian buster-updates main contrib non-free" >> /etc/apt/sources.list +{%- elif CROSS_BUILD_ENVIRON == "y" %} +{%- if CONFIGURED_ARCH == "armhf" %} +ARG arch=armhf +ARG gcc_arch=arm-linux-gnueabihf +ARG PYTHON_CROSS_PLATFORM=linux_armv7l +{%- elif CONFIGURED_ARCH == "arm64" %} +ARG arch=arm64 +ARG gcc_arch=aarch64-linux-gnu +ARG PYTHON_CROSS_PLATFORM=linux_aarch64 +{%- endif %} + +RUN dpkg --add-architecture $arch +RUN apt-get update +RUN apt-get install -y crossbuild-essential-$arch +RUN apt-get install -y gcc-$gcc_arch +ENV $(dpkg-architecture -a$arch + +RUN apt-mark hold g++-$gcc_arch +RUN apt-mark hold g++-8-$gcc_arch +RUN apt-mark hold gcc-$gcc_arch +RUN apt-mark hold gcc-8-$gcc_arch + +ARG CROSS_CC=${gcc_arch}-gcc +ARG CROSS_CXX=${gcc_arch}-g++ {%- endif %} ## Make apt-get non-interactive ENV DEBIAN_FRONTEND=noninteractive +{%- if CROSS_BUILD_ENVIRON == "y" %} +RUN apt-get install -y python3 python3-pip +RUN PYTHON3_DEPS="`apt-cache depends python3:$arch |grep Depends|awk {'print \$2;'}|tr "\n" " "`" && apt-get install -y \ + python:$arch $PYTHON3_DEPS python3:$arch python-setuptools:$arch +RUN apt-get download python3-distutils && dpkg --force-all -i python3-distutils* +RUN apt-get download python3-pip && dpkg --force-all -i python3-pip* +RUN which pip3 && pip3 install enum34 +RUN pip3 install virtualenv + +RUN file /usr/bin/python2* && file /usr/bin/python3* + +# Create target arm python2/3 virtual environments with all required packages installed +RUN mkdir /python_virtualenv +RUN cd /python_virtualenv && python3 -m virtualenv -p /usr/bin/python env2 +RUN cd /python_virtualenv && python3 -m virtualenv --copies -p /usr/bin/python3 env3 + +RUN PATH=/python_virtualenv/env2/bin/:$PATH pip2 install setuptools==40.8.0 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==4.4 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 j2cli==0.3.10 PyYAML==5.4.1 pexpect==4.6.0 Pympler==0.8 ctypesgen==1.0.2 natsort redis +RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install setuptools==49.6.00 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==5.2 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 PyYAML==5.4.1 redis pexpect==4.8.0 Pympler==0.8 parameterized natsort Jinja2==2.10 && ln -s /python_virtualenv/env3/bin/pytest /python_virtualenv/env3/bin/pytest-3 + +RUN apt-get --fix-broken install -y +RUN LIBPYTHON3_DEPS="`apt-cache depends libpython3-dev:$arch |grep Depends|awk {'print \$2;'}|tr "\n" " "`" && apt-get install -y libpython2.7-dev:$arch $LIBPYTHON3_DEPS libxml2-dev:$arch libxslt-dev:$arch libssl-dev:$arch libz-dev:$arch + +RUN file /python_virtualenv/env3/bin/python3 && file /python_virtualenv/env2/bin/python + +RUN apt-get install -y swig libssl-dev + +COPY ./cross-build-arm-python-reqirements.sh ./ +# Cross-compile the heaviest python packages for arm +ARG pre_built_target_dir=PRE_BUILT_TARGET +RUN PATH=/python_virtualenv/env2/bin/:/python_virtualenv/env3/bin/:$PATH CC=$CROSS_CC PY_PLAT=$PYTHON_CROSS_PLATFORM ./cross-build-arm-python-reqirements.sh $pre_built_target_dir && ls -l $pre_built_target_dir +RUN rm ./cross-build-arm-python-reqirements.sh +RUN PATH=/python_virtualenv/env2/bin/:$PATH pip install $pre_built_target_dir/*cp27*.whl +RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install $pre_built_target_dir/*cp37*.whl + +RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip list + +# Depend on cross-compiled lxml +RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip install pyang==2.4.0 +RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip install pyangbind==0.8.1 +RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip uninstall -y enum34 +RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install --force-reinstall --no-cache-dir coverage +{%- endif %} + RUN apt-get update && apt-get install -y \ apt-utils \ default-jre-headless \ @@ -100,8 +176,10 @@ RUN apt-get update && apt-get install -y \ libsystemd-dev \ python-ipaddr \ libcmocka-dev \ +{%- if CROSS_BUILD_ENVIRON != "y" %} python3-all-dev \ python3-all-dbg \ +{%- endif %} install-info \ logrotate \ # For libnl3 (local) build @@ -168,7 +246,7 @@ RUN apt-get update && apt-get install -y \ {%- if CONFIGURED_ARCH == "amd64" %} linux-compiler-gcc-8-x86 \ {%- endif %} -{%- if CONFIGURED_ARCH == "armhf" %} +{%- if CONFIGURED_ARCH == "armhf" and CROSS_BUILD_ENVIRON != "y" %} linux-compiler-gcc-8-arm \ {%- endif %} linux-kbuild-4.19 \ @@ -315,6 +393,9 @@ RUN apt-get update && apt-get install -y \ # For WPA supplication qtbase5-dev \ aspell-en \ +{%- if CROSS_BUILD_ENVIRON != "y" %} + libhiredis-dev \ +{%- endif %} swig3.0 \ libpython2.7-dev \ libssl-dev \ @@ -356,14 +437,19 @@ RUN apt-get update && apt-get install -y \ libsystemd-dev \ pkg-config +{%- if CROSS_BUILD_ENVIRON == "y" %} +# Arm vs. amd64 versions conflict - remove amd64 packages +RUN apt-get remove -y libnl-3-200 libsnmp30 +RUN apt-get install -y libpcre3:$arch +{%- endif %} + RUN apt-get -y build-dep openssh # Build fix for ARMHF buster libsairedis -{%- if CONFIGURED_ARCH == "armhf" %} +{%- if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} # Install doxygen build dependency packages RUN apt install -y libxapian-dev yui-compressor libclang-3.9-dev texlive-extra-utils \ texlive-font-utils rdfind llvm-6.0-dev libclang-6.0-dev sassc - # Update doxygen with 64bit file offset patch RUN dget -u http://deb.debian.org/debian/pool/main/d/doxygen/doxygen_1.8.13-10.dsc && \ cd doxygen-1.8.13 && \ @@ -389,15 +475,19 @@ RUN sudo augtool --autosave "set /files/etc/dpkg/dpkg.cfg/force-confdef" ## do not modify the current configuration file, the new version is installed with a .dpkg-dist suffix RUN sudo augtool --autosave "set /files/etc/dpkg/dpkg.cfg/force-confold" +{%- if CROSS_BUILD_ENVIRON != "y" %} # For linux build RUN apt-get -y build-dep linux +{%- else %} +RUN apt-get source kernel-wedge && sudo apt-get build-dep -a$arch kernel-wedge && cd kernel-wedge-2.99/ && CONFIG_SITE=/etc/dpkg-cross/cross-config.$arch DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -a$arch -Pcross,nocheck && cd .. && sudo dpkg -i kernel-wedge_2.99_all.deb +{%- endif %} # For gobgp and telemetry build RUN export VERSION=1.14.2 \ -{%- if CONFIGURED_ARCH == "armhf" %} +{%- if CONFIGURED_ARCH == "armhf" and CROSS_BUILD_ENVIRON != "y" %} && wget https://storage.googleapis.com/golang/go$VERSION.linux-armv6l.tar.gz \ && tar -C /usr/local -xzf go$VERSION.linux-armv6l.tar.gz \ -{%- elif CONFIGURED_ARCH == "arm64" %} +{%- elif CONFIGURED_ARCH == "arm64" and CROSS_BUILD_ENVIRON != "y" %} && wget https://storage.googleapis.com/golang/go$VERSION.linux-arm64.tar.gz \ && tar -C /usr/local -xzf go$VERSION.linux-arm64.tar.gz \ {%- else %} @@ -453,8 +543,10 @@ RUN pip2 install j2cli==0.3.10 # For sonic-mgmt-framework RUN pip2 install "PyYAML==5.4.1" RUN pip3 install "PyYAML==5.4.1" +{%- if CROSS_BUILD_ENVIRON != "y" %} RUN pip2 install "lxml==4.6.2" RUN pip3 install "lxml==4.6.2" +{%- endif %} # For sonic-platform-common testing RUN pip3 install redis @@ -485,7 +577,11 @@ RUN apt-get install -y vim # Install rsyslog RUN apt-get install -y rsyslog +{%- if CROSS_BUILD_ENVIRON == "y" %} +RUN cd /usr/src/gtest && CXX=$CROSS_CXX CC=$CROSS_CC cmake . && make -C /usr/src/gtest +{%- else %} RUN cd /usr/src/gtest && cmake . && make -C /usr/src/gtest +{%- endif %} RUN mkdir /var/run/sshd EXPOSE 22 @@ -511,7 +607,11 @@ RUN apt-get install -y \ {%- endif %} RUN curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - RUN add-apt-repository \ +{%- if CROSS_BUILD_ENVIRON == "y" %} + "deb https://download.docker.com/linux/debian \ +{%- else %} "deb [arch={{ CONFIGURED_ARCH }}] https://download.docker.com/linux/debian \ +{%- endif %} $(lsb_release -cs) \ stable" RUN apt-get update @@ -530,6 +630,18 @@ RUN pip3 install git+https://github.com/aristanetworks/swi-tools.git@bead66bf261 RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - RUN apt-get install -y nodejs +{%- if CROSS_BUILD_ENVIRON == "y" %} +RUN apt-get install -y rsync dh-python + +RUN apt-get update && apt-get install -y libelf-dev:$arch libdw-dev:$arch libbz2-dev:$arch liblzo2-dev:$arch libedit-dev:$arch libevent-dev:$arch libopts25-dev:$arch libssl-dev:$arch pps-tools:$arch libpam-cap:$arch libcap-dev:$arch libpam0g-dev:$arch libaudit-dev:$arch libgtk-3-dev:$arch libkrb5-dev:$arch libsystemd-dev:$arch libwrap0-dev:$arch libkrb5-dev:$arch libboost1.67-dev:$arch libboost-dev:$arch libzmq5:$arch libzmq3-dev:$arch libdaemon-dev:$arch libjansson-dev:$arch libmnl-dev:$arch libsensors5:$arch libsensors4-dev:$arch libperl-dev:$arch libmariadb-dev:$arch libmariadb-dev-compat:$arch libpci-dev:$arch libjson-c3:$arch libjson-c-dev:$arch libreadline-dev:$arch librtr-dev:$arch librrd-dev:$arch libnetfilter-conntrack-dev:$arch libnetfilter-conntrack3:$arch libnfnetlink-dev:$arch libnftnl-dev:$arch libldap2-dev:$arch libbind-export-dev:$arch check:$arch libboost-atomic-dev:$arch libboost-test-dev:$arch libglib2.0-dev:$arch qt5-default:$arch libexplain-dev:$arch libc-ares-dev:$arch libip4tc0:$arch libip6tc0:$arch libiptc0:$arch libxtables12:$arch iptables-dev:$arch libatm1-dev:$arch libdb-dev:$arch pkg-config:$arch libnghttp2-14:$arch librtmp1:$arch libssh2-1:$arch libcjson1:$arch libcjson-dev:$arch libcurl3-gnutls:$arch libcurl3-nss-dev:$arch libboost-thread1.67-dev:$arch libboost-thread-dev:$arch libboost-system1.67-dev:$arch libboost-system-dev:$arch + +RUN apt-get download libgirepository1.0-dev:$arch && dpkg --force-all -i libgirepository1.0-dev* +RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install pycairo + +# Install libpcsclite-dev for wpasupplicant using download because regular install removes amd64 python package +RUN apt-get download libpcsclite1:$arch && dpkg --force-all -i libpcsclite1* && apt-get download libpcsclite-dev:$arch && dpkg --force-all -i libpcsclite-dev* +{% endif %} + # Tell azure pipeline to use node.js in the docker LABEL "com.azure.dev.pipelines.agent.handler.node.path"="/usr/bin/node" {% endif -%} diff --git a/sonic-slave-buster/Dockerfile.user.j2 b/sonic-slave-buster/Dockerfile.user.j2 index 8b17e482356..377bf2c8322 100644 --- a/sonic-slave-buster/Dockerfile.user.j2 +++ b/sonic-slave-buster/Dockerfile.user.j2 @@ -1,5 +1,5 @@ ARG slave_base_tag_ref=latest -{%- if MULTIARCH_QEMU_ENVIRON != "y" %} +{%- if MULTIARCH_QEMU_ENVIRON != "y" and CROSS_BUILD_ENVIRON != "y" %} FROM sonic-slave-buster:${slave_base_tag_ref} {%- else %} FROM sonic-slave-buster-march-{{ CONFIGURED_ARCH }}:${slave_base_tag_ref} diff --git a/sonic-slave-buster/cross-build-arm-python-reqirements.sh b/sonic-slave-buster/cross-build-arm-python-reqirements.sh new file mode 100755 index 00000000000..fa92d38d250 --- /dev/null +++ b/sonic-slave-buster/cross-build-arm-python-reqirements.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +PRE_BUILT_TARGET_DIR=$1 + +declare -a pkgs=("grpcio==1.38.0" "grpcio-tools==1.20.0" "m2crypto==0.36.0" "bitarray==1.5.3" "lxml==4.6.3") + +rm -rf $PRE_BUILT_TARGET_DIR && mkdir $PRE_BUILT_TARGET_DIR + +for pkg in "${pkgs[@]}" +do + rm -rf wheel-download + mkdir -p wheel-download/sources && pip3 download --platform linux_armv7l --no-deps --dest wheel-download $pkg + count=`ls -1 wheel-download/*.gz 2>/dev/null | wc -l` + if [ $count != 0 ] + then + tar xvf wheel-download/*.gz -C wheel-download/sources + pushd wheel-download/sources/* && CC=$CC LDSHARED="$CC -shared" python3 -u -c "import setuptools, tokenize;__file__='setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\ri\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" --verbose bdist_wheel --plat-name linux_armv7l -d ../../../$PRE_BUILT_TARGET_DIR && popd + else + cp wheel-download/*.whl $PRE_BUILT_TARGET_DIR + fi + + rm -rf wheel-download + + mkdir -p wheel-download/sources && pip download --platform linux_armv7l --no-deps --dest wheel-download $pkg + count=`ls -1 wheel-download/*.gz 2>/dev/null | wc -l` + if [ $count != 0 ] + then + tar xvf wheel-download/*.gz -C wheel-download/sources + pushd wheel-download/sources/* && CC=$CC LDSHARED="$CC -shared" python -u -c "import setuptools, tokenize;__file__='setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\ri\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" --verbose bdist_wheel --plat-name linux_armv7l -d ../../../$PRE_BUILT_TARGET_DIR && popd + else + cp wheel-download/*.whl $PRE_BUILT_TARGET_DIR/ + fi + + rm -rf wheel-download + +done + diff --git a/src/bash/Makefile b/src/bash/Makefile index 0d1b3817134..a72cbc17035 100644 --- a/src/bash/Makefile +++ b/src/bash/Makefile @@ -17,6 +17,9 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : pushd bash-$(BASH_VERSION_MAJOR) # build package +ifeq ($(CROSS_BUILD_ENVIRON), y) + dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) # copy UT code. @@ -30,7 +33,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # run UT after config.h ready. make -C unittest && make test -C unittest - +endif popd mv $* $(DEST)/ diff --git a/src/ethtool/Makefile b/src/ethtool/Makefile index 779a3b9e40f..d87c2f1ef58 100644 --- a/src/ethtool/Makefile +++ b/src/ethtool/Makefile @@ -14,6 +14,8 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build package ifeq ($(MULTIARCH_QEMU_ENVIRON), y) DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/hiredis/Makefile b/src/hiredis/Makefile index 4935a039e0a..dde8ec885a9 100644 --- a/src/hiredis/Makefile +++ b/src/hiredis/Makefile @@ -14,7 +14,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : dpkg-source -x hiredis_$(HIREDIS_VERSION_FULL).dsc pushd hiredis-$(HIREDIS_VERSION) +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -d -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -d -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $* $(DERIVED_TARGETS) $(DEST)/ diff --git a/src/ifupdown2/Makefile b/src/ifupdown2/Makefile index ed6f6b54999..6a72c062f24 100644 --- a/src/ifupdown2/Makefile +++ b/src/ifupdown2/Makefile @@ -22,7 +22,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg import -s ../patch/series # Build source and Debian packages +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -d -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd # Move the newly-built .deb packages to the destination directory diff --git a/src/initramfs-tools/Makefile b/src/initramfs-tools/Makefile index 27832cabca3..e45b584f232 100644 --- a/src/initramfs-tools/Makefile +++ b/src/initramfs-tools/Makefile @@ -19,7 +19,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build the package rm -f debian/*.debhelper.log +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $(DERIVED_TARGETS) $* $(DEST)/ diff --git a/src/iproute2/Makefile b/src/iproute2/Makefile index 5b354ce8b01..a6ced6d0075 100644 --- a/src/iproute2/Makefile +++ b/src/iproute2/Makefile @@ -17,7 +17,12 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : dpkg-source -x iproute2_$(IPROUTE2_VERSION_FULL).dsc pushd iproute2-$(IPROUTE2_VERSION) +ifeq ($(CROSS_BUILD_ENVIRON), y) + sed -i 's/#include /#include \n#include /' tc/tc_core.c + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $* $(DEST)/ diff --git a/src/iptables/Makefile b/src/iptables/Makefile index 681ef5d2dcc..4c3631bed9a 100644 --- a/src/iptables/Makefile +++ b/src/iptables/Makefile @@ -38,7 +38,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg import -s ../patch/series # Build source and Debian packages +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd # Move the newly-built .deb packages to the destination directory diff --git a/src/isc-dhcp/Makefile b/src/isc-dhcp/Makefile index 2adf6bba2aa..2e398d767ba 100644 --- a/src/isc-dhcp/Makefile +++ b/src/isc-dhcp/Makefile @@ -23,7 +23,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg import -s ../patch/series # Build source and Debian packages +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd # Move the newly-built .deb packages to the destination directory diff --git a/src/kdump-tools/Makefile b/src/kdump-tools/Makefile index 6c66c37c084..ccc0ba98219 100644 --- a/src/kdump-tools/Makefile +++ b/src/kdump-tools/Makefile @@ -21,7 +21,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg import -s ../patch/series # Build source and Debian packages +ifeq ($(CROSS_BUILD_ENVIRON), y) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd # Move the newly-built .deb packages to the destination directory diff --git a/src/libnl3/Makefile b/src/libnl3/Makefile index b81f294c30c..eb451f893ce 100644 --- a/src/libnl3/Makefile +++ b/src/libnl3/Makefile @@ -25,7 +25,12 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg import -s ../patch/series ln -s ../debian debian +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif + popd mv $(DERIVED_TARGETS) $* $(DEST)/ diff --git a/src/libteam/Makefile b/src/libteam/Makefile index 47f9d1dd21b..a31da67869b 100644 --- a/src/libteam/Makefile +++ b/src/libteam/Makefile @@ -31,7 +31,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : mv tmp/debian libteam/ rm -rf tmp pushd ./libteam +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $(DERIVED_TARGETS) $* $(DEST)/ diff --git a/src/libyang/Makefile b/src/libyang/Makefile index 357908ebc37..fe57b862cee 100644 --- a/src/libyang/Makefile +++ b/src/libyang/Makefile @@ -14,11 +14,23 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Apply patch series stg init stg import -s ../patch/series + +ifeq ($(CROSS_BUILD_ENVIRON), y) + sed -i "s/cmake/CC=$$CROSS_CC CXX=$$CROSS_CXX cmake/g" packages/debian.rules.in + sed -i "2 i set(CMAKE_OBJCOPY $$CROSS_BIN_PATH/objcopy CACHE PATH \"\" FORCE)" CMakeLists.txt + sed -i "/Architecture/ s/any/$$CONFIGURED_ARCH/; /Build-Depends/ s/gcc//" packages/debian.control.in + sed -i "/debuild/ s/\-uc/\-uc -a $$CONFIGURED_ARCH/" packages/local-deb.sh.in +endif mkdir build pushd build +ifeq ($(CROSS_BUILD_ENVIRON), y) + CC=$(CROSS_CC) CXX=$(CROSS_CXX) cmake .. + make CC=$(CROSS_CC) CXX=$(CROSS_CXX) build-deb +else cmake .. make build-deb +endif pushd debs mv $* $(DEST)/ diff --git a/src/libyang1/Makefile b/src/libyang1/Makefile index 834893eb0bb..c181f35ae94 100644 --- a/src/libyang1/Makefile +++ b/src/libyang1/Makefile @@ -31,7 +31,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Enable large file support for 32-bit arch echo 'add_definitions(-D_FILE_OFFSET_BITS=64)' >> CMakeLists.txt +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd # Move the newly-built .deb packages to the destination directory diff --git a/src/lldpd/Makefile b/src/lldpd/Makefile index a336f1e989a..edf49faea80 100644 --- a/src/lldpd/Makefile +++ b/src/lldpd/Makefile @@ -35,7 +35,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg import -s ../patch/series # Build source and Debian packages +ifeq ($(CROSS_BUILD_ENVIRON), y) + env "with_netlink_receive_bufsize=1024*1024" CFLAGS="-I $$CROSS_PERL_CORE_PATH" CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else env "with_netlink_receive_bufsize=1024*1024" dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd # Move the newly-built .deb packages to the destination directory diff --git a/src/lm-sensors/Makefile b/src/lm-sensors/Makefile index a5aa3ba7d88..857106a6602 100644 --- a/src/lm-sensors/Makefile +++ b/src/lm-sensors/Makefile @@ -25,7 +25,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg init stg import -s ../patch/series +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) PROG_EXTRA=sensord dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else DEB_BUILD_OPTIONS=nocheck PROG_EXTRA=sensord dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $(DERIVED_TARGETS) $* $(DEST)/ diff --git a/src/monit/Makefile b/src/monit/Makefile index 570f30cf60f..bed51a98be6 100644 --- a/src/monit/Makefile +++ b/src/monit/Makefile @@ -23,8 +23,21 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg init stg import -s ../patch/series +ifeq ($(CROSS_BUILD_ENVIRON), y) + # Copy monit configure settings for arm, add missing settings + cp /etc/dpkg-cross/cross-config.cache ./cross-config.cache + echo "libmonit_cv_setjmp_available=yes" >> ./cross-config.cache + echo "libmonit_cv_vsnprintf_c99_conformant=yes" >> ./cross-config.cache + sudo cp ./cross-config.cache /etc/dpkg-cross/cross-config.cache + rm ./cross-config.cache +endif + # Build source and Debian packages +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc --host-arch $(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd # Move the newly-built .deb packages to the destination directory diff --git a/src/mpdecimal/Makefile b/src/mpdecimal/Makefile index b7f82ba702e..43fa4a640a9 100644 --- a/src/mpdecimal/Makefile +++ b/src/mpdecimal/Makefile @@ -14,7 +14,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : dpkg-source -x mpdecimal_$(MPDECIMAL_VERSION_FULL).dsc pushd mpdecimal-$(MPDECIMAL_VERSION) +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $* $(DERIVED_TARGETS) $(DEST)/ diff --git a/src/ntp/Makefile b/src/ntp/Makefile index 0a821ad6ca5..a9c05341a84 100644 --- a/src/ntp/Makefile +++ b/src/ntp/Makefile @@ -38,8 +38,20 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # and go into learning mode. sed -i 's/\/usr\/sbin\/ntpd {/\/usr\/sbin\/ntpd flags=(attach_disconnected complain) {/' debian/apparmor-profile +ifeq ($(CROSS_BUILD_ENVIRON), y) + sed -i 's/dh_auto_configure \--/dh_auto_configure -- --with-yielding-select=yes /g' debian/rules + # Remove nfp openssl variables = yes from cross-config.cache + sudo awk '!/openssl/{print}' /etc/dpkg-cross/cross-config.cache > ./cross-config.cache + sudo cp ./cross-config.cache /etc/dpkg-cross/cross-config.cache + rm ./cross-config.cache +endif + # Build source and Debian packages with the symbols +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd diff --git a/src/openssh/Makefile b/src/openssh/Makefile index 91d4fd52bcf..06aca5ae293 100644 --- a/src/openssh/Makefile +++ b/src/openssh/Makefile @@ -19,7 +19,13 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg import -s ../patch/series # Build package +ifeq ($(CROSS_BUILD_ENVIRON), y) + sed -i "s#\-\-with-kerberos5=\/usr#--with-kerberos5-libdir=$$CROSS_PKGS_LIB_PATH#g" debian/rules + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else + sudo http_proxy=$(http_proxy) apt-get -y build-dep openssh dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $(DERIVED_TARGETS) $* $(DEST)/ diff --git a/src/radius/nss/Makefile b/src/radius/nss/Makefile index 09526a04961..509d62855ac 100644 --- a/src/radius/nss/Makefile +++ b/src/radius/nss/Makefile @@ -15,7 +15,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Apply patch (if any) +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -us -uc +else dpkg-buildpackage -rfakeroot -b -us -uc +endif popd mv $(DERIVED_TARGETS) $* $(DEST)/ diff --git a/src/radius/pam/Makefile b/src/radius/pam/Makefile index 9e10773b9bf..e140911bcd8 100644 --- a/src/radius/pam/Makefile +++ b/src/radius/pam/Makefile @@ -18,7 +18,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : patch -p1 < ../patches/freeradius_libeap_deprecated_openssl_1_0.patch cp ../patches/config.sub . cp ../patches/config.guess . +ifeq ($(CROSS_BUILD_ENVIRON), y) + ./configure --disable-static --enable-libtool-lock --libdir=$(CROSS_PKGS_LIB_PATH) --libexecdir=$(CROSS_PKGS_LIB_PATH) --host=$(CROSS_HOST_TYPE) +else ./configure --disable-static --enable-libtool-lock +endif make popd @@ -31,7 +35,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : cp -r ../debian . +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -us -uc -nc +else dpkg-buildpackage -rfakeroot -b -us -uc -nc +endif popd mv $(DERIVED_TARGETS) $* $(DEST)/ diff --git a/src/redis/Makefile b/src/redis/Makefile index 3a4fe3f4844..be741214bac 100644 --- a/src/redis/Makefile +++ b/src/redis/Makefile @@ -22,7 +22,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : pushd redis-$(REDIS_VERSION) export ARCH="" +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $(DERIVED_TARGETS) $* $(DEST)/ diff --git a/src/sflow/hsflowd/Makefile b/src/sflow/hsflowd/Makefile index e29dbcc199b..2c9124c31e0 100644 --- a/src/sflow/hsflowd/Makefile +++ b/src/sflow/hsflowd/Makefile @@ -21,7 +21,13 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : chmod u+x debian/rules sed -i -e s/_VERSION_/$(HSFLOWD_VERSION)-$(HSFLOWD_SUBVERSION)/g debian/changelog +ifeq ($(CROSS_BUILD_ENVIRON), y) + sed -i "s/gcc/$$CROSS_CC/g" src/sflow/Makefile + sed -i "s/gcc/$$CROSS_CC/g" src/Linux/Makefile + CC=$(CROSS_CC) CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) --buildinfo-option=-u. --changes-option=-u. +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) --buildinfo-option=-u. --changes-option=-u. +endif mv $(DERIVED_TARGET) $* $(DEST)/ popd diff --git a/src/sflow/psample/Makefile b/src/sflow/psample/Makefile index bbdefde2289..229b00979c5 100644 --- a/src/sflow/psample/Makefile +++ b/src/sflow/psample/Makefile @@ -13,7 +13,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : pushd ./libpsample git checkout -b libpsample -f e48fad2 +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $* $(DEST)/ diff --git a/src/sflow/psample/debian/rules b/src/sflow/psample/debian/rules index 73f484d3258..652a6f1cc4b 100755 --- a/src/sflow/psample/debian/rules +++ b/src/sflow/psample/debian/rules @@ -5,7 +5,11 @@ dh $@ override_dh_auto_build: +ifeq ($(CROSS_BUILD_ENVIRON), y) + CC=$(CROSS_CC) cmake . && make CROSS_COMPILE=$(CROSS_COMPILE) CC=$(CROSS_CC) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) +else cmake . && make +endif override_dh_auto_install: diff --git a/src/sflow/sflowtool/Makefile b/src/sflow/sflowtool/Makefile index 5f2ad995a58..ea8564ecef3 100644 --- a/src/sflow/sflowtool/Makefile +++ b/src/sflow/sflowtool/Makefile @@ -12,7 +12,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : pushd ./sflowtool git checkout -b sflowtool -f 6c2963b +ifeq ($(CROSS_BUILD_ENVIRON), y) + CC=$(CROSS_CC) CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $* $(DEST)/ diff --git a/src/smartmontools/Makefile b/src/smartmontools/Makefile index 8f0f0695659..49f9a4022e5 100644 --- a/src/smartmontools/Makefile +++ b/src/smartmontools/Makefile @@ -13,7 +13,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : dpkg-source -x smartmontools_$(SMARTMONTOOLS_VERSION_FULL).dsc pushd smartmontools-$(SMARTMONTOOLS_VERSION_MAJOR) +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $* $(DEST)/ diff --git a/src/snmpd/Makefile b/src/snmpd/Makefile index 35fc1d38ce9..1a3f18e7ab2 100644 --- a/src/snmpd/Makefile +++ b/src/snmpd/Makefile @@ -56,7 +56,24 @@ endif stg init stg import -s ../patch-$(SNMPD_VERSION)/series +ifeq ($(MULTIARCH_QEMU_ENVIRON), y) dpkg-buildpackage -rfakeroot -b -d -us -uc -j1 --admindir $(SONIC_DPKG_ADMINDIR) +else +ifeq ($(CROSS_BUILD_ENVIRON), y) + sed -i "s/python setup.py/CC=$$CROSS_CC LDSHARED=\"$$CROSS_CC -shared\" python setup.py/g" debian/rules + sed -i "/opts = NetSNMPGetOpts(\".\/\");/a \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/Makefile.PL + sed -i "/Params{'LDDLFLAGS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/default_store/Makefile.PL + sed -i "/Params{'LDDLFLAGS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/ASN/Makefile.PL + sed -i "/Params{'LDDLFLAGS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/OID/Makefile.PL + sed -i "/Params{'LDDLFLAGS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/SNMP/Makefile.PL + sed -i "/Params{'LIBS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/agent/default_store/Makefile.PL + sed -i "/Params{'LDDLFLAGS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/agent/Makefile.PL + sed -i "/Params{'LDDLFLAGS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/TrapReceiver/Makefile.PL + CFLAGS="-I $$CROSS_PERL_CORE_PATH" LDFLAGS=" -L$$CROSS_PKGS_LIB_PATH" dpkg-buildpackage -rfakeroot -b -d -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else + dpkg-buildpackage -rfakeroot -b -d -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif +endif popd mv $(DERIVED_TARGETS) $* $(DEST)/ diff --git a/src/socat/Makefile b/src/socat/Makefile index cc2cd723868..d6eda367592 100644 --- a/src/socat/Makefile +++ b/src/socat/Makefile @@ -18,7 +18,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build source and Debian packages pushd socat-1.7.3.1 patch -p0 < ../enable_readline.patch +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd # Move the newly-built .deb packages to the destination directory diff --git a/src/sonic-device-data/Makefile b/src/sonic-device-data/Makefile index 2077e98f3e9..28cd30aad81 100644 --- a/src/sonic-device-data/Makefile +++ b/src/sonic-device-data/Makefile @@ -26,7 +26,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : done; # Build the package +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd diff --git a/src/sonic-frr/Makefile b/src/sonic-frr/Makefile index 45f37e52781..f626b7a5ccd 100644 --- a/src/sonic-frr/Makefile +++ b/src/sonic-frr/Makefile @@ -14,12 +14,28 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg branch --create $(STG_BRANCH) $(FRR_TAG) stg import -s ../patch/series tools/tarsource.sh -V -e '-sonic' + +ifeq ($(CROSS_BUILD_ENVIRON), y) + sed -i "s/dh_auto_configure \-\-/mkdir -p build \&\& dh_auto_configure --builddirectory=build --/g" debian/rules + sed -i "s/dh_auto_build \-\-/cd build \&\& ln -s ..\/debian debian \&\& dh_auto_build --/g" debian/rules + sed -i "s/\tdh_auto_install/\tcd build \&\& dh_auto_install/g" debian/rules + sed -i "s/tools\/frrinit.sh/build\/tools\/frrinit.sh/g" debian/rules + sed -i "s/doc\/user\/_build\/texinfo/build\/doc\/user\/_build\/texinfo/g" debian/frr-doc.install + sed -i "s/doc\/manpages/build\/doc\/manpages/g" debian/frr.manpages + sed -i "s/doc\/user\/_build\/texinfo/build\/doc\/user\/_build\/texinfo/g" debian/frr-doc.info + + CFLAGS="-I $$CROSS_PERL_CORE_PATH" LDFLAGS=" -L $$CROSS_PKGS_LIB_PATH" CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -d -us -uc -Ppkg.frr.nortrlib -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -Ppkg.frr.nortrlib -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif stg undo || true git clean -xfdf git checkout $(FRR_BRANCH) stg branch --delete $(STG_BRANCH) git rev-parse --short HEAD | xargs git checkout +ifeq ($(CROSS_BUILD_ENVIRON), y) + git reset --hard +endif git checkout master git branch -D $(FRR_BRANCH) popd diff --git a/src/swig/Makefile b/src/swig/Makefile index 2d3388eba13..19b8fc74a60 100644 --- a/src/swig/Makefile +++ b/src/swig/Makefile @@ -13,7 +13,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : dpkg-source -x swig_$(SWIG_VERSION).dsc pushd ./swig-$(SWIG_VERSION) +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $(DERIVED_TARGETS) $* $(DEST)/ diff --git a/src/systemd-sonic-generator/Makefile b/src/systemd-sonic-generator/Makefile index 565fcb8030a..3b62d8da6a2 100644 --- a/src/systemd-sonic-generator/Makefile +++ b/src/systemd-sonic-generator/Makefile @@ -9,7 +9,11 @@ BINARY = systemd-sonic-generator MAIN_TARGET = $(BINARY)_1.0.0_$(CONFIGURED_ARCH).deb $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif mv ../$(MAIN_TARGET) $(DEST)/ rm ../$(BINARY)-* ../$(BINARY)_* diff --git a/src/systemd-sonic-generator/debian/rules b/src/systemd-sonic-generator/debian/rules index 212fdda16b1..6adbc22d24d 100755 --- a/src/systemd-sonic-generator/debian/rules +++ b/src/systemd-sonic-generator/debian/rules @@ -10,9 +10,18 @@ PACKAGEVERSION = $(VERSION) override_dh_auto_clean: override_dh_auto_build: override_dh_auto_install: +ifeq ($(CROSS_BUILD_ENVIRON), y) + make CROSS_COMPILE=$(CROSS_COMPILE) CC=$(CROSS_CC) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) systemd-sonic-generator +else make systemd-sonic-generator +endif make install DESTDIR=debian/systemd-sonic-generator +ifeq ($(CROSS_BUILD_ENVIRON), y) +override_dh_shlibdeps: + dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info -l$(CROSS_LIB_PATH) +endif + override_dh_gencontrol: dh_gencontrol -- -v$(PACKAGEVERSION) diff --git a/src/tacacs/nss/Makefile b/src/tacacs/nss/Makefile index 0c8f25f44ea..723cace4610 100644 --- a/src/tacacs/nss/Makefile +++ b/src/tacacs/nss/Makefile @@ -15,7 +15,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg init stg import -s ../patch/series +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $(DERIVED_TARGETS) $* $(DEST)/ diff --git a/src/tacacs/pam/Makefile b/src/tacacs/pam/Makefile index eac4840b2af..ff12f7f3f9c 100644 --- a/src/tacacs/pam/Makefile +++ b/src/tacacs/pam/Makefile @@ -25,7 +25,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : git apply ../0009-Add-setting-flag-for-authorization-and-accounting.patch git apply ../0010-handle-bad-password-set-by-sshd.patch +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $(DERIVED_TARGETS) $* $(DEST)/ diff --git a/src/thrift/Makefile b/src/thrift/Makefile index 2580002fd45..dfa8556a18a 100644 --- a/src/thrift/Makefile +++ b/src/thrift/Makefile @@ -27,7 +27,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # (https://jira.apache.org/jira/browse/THRIFT-3650) patch -p1 < ../patch/0001-Revert-THRIFT-3650-incorrect-union-serialization.patch patch -p1 < ../patch/0002-cve-2017-1000487.patch +ifeq ($(CROSS_BUILD_ENVIRON), y) + CC=$(CROSS_CC) LDSHARED=$(CROSS_CC) CXXFLAGS="-DFORCE_BOOST_SMART_PTR -DSIGNED_RIGHT_SHIFT_IS=1 -DARITHMETIC_RIGHT_SHIFT=1" CFLAGS="-DSIGNED_RIGHT_SHIFT_IS=1 -DARITHMETIC_RIGHT_SHIFT=1" CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -d -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else CXXFLAGS="-DFORCE_BOOST_SMART_PTR" DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -d -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $(DERIVED_TARGETS) $* $(DEST)/ diff --git a/src/wpasupplicant/Makefile b/src/wpasupplicant/Makefile index 8d098bdc8b8..8b520060793 100644 --- a/src/wpasupplicant/Makefile +++ b/src/wpasupplicant/Makefile @@ -8,7 +8,11 @@ DERIVED_TARGETS = wpasupplicant-dbgsym_$(WPASUPPLICANT_VERSION)_$(CONFIGURED_ARC $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Clone wpa repo pushd ./sonic-wpa-supplicant +ifeq ($(CROSS_BUILD_ENVIRON), y) + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -d -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd # Move the newly-built .deb packages to the destination directory From c090db1f32612c0c2201046598390ab470f46181 Mon Sep 17 00:00:00 2001 From: marvell Date: Sun, 15 Aug 2021 13:37:48 +0530 Subject: [PATCH 02/30] Fixed final Sonic image build with dockers inside --- build_debian.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_debian.sh b/build_debian.sh index 87cdd20c513..131d66adf69 100755 --- a/build_debian.sh +++ b/build_debian.sh @@ -596,7 +596,7 @@ fi # ALERT: This bit of logic tears down the qemu based build environment used to # perform builds for the ARM architecture. This must be the last step in this # script before creating the Sonic installer payload zip file. -if [ $MULTIARCH_QEMU_ENVIRON == y ]; then +if [[ $MULTIARCH_QEMU_ENVIRON == y || $CROSS_BUILD_ENVIRON == y ]]; then # Remove qemu arm bin executable used for cross-building sudo rm -f $FILESYSTEM_ROOT/usr/bin/qemu*static || true DOCKERFS_PATH=../dockerfs/ From 05750542cc40a62c7c4d76e87ee73820560ce0ed Mon Sep 17 00:00:00 2001 From: gregshpit Date: Thu, 26 Aug 2021 12:59:46 +0300 Subject: [PATCH 03/30] Update Dockerfile.j2 Fixed qemu-user-static:x86_64-aarch64-5.0.0-2 . --- slave.mk | 3 ++- src/dhcp6relay/Makefile | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/slave.mk b/slave.mk index 7a1583d89eb..2eefb90b00d 100644 --- a/slave.mk +++ b/slave.mk @@ -59,6 +59,7 @@ ifeq ($(CONFIGURED_ARCH),arm64) override DOCKER_BASE_ARCH = arm64v8 endif endif + IMAGE_DISTRO := bullseye IMAGE_DISTRO_DEBS_PATH = $(TARGET_PATH)/debs/$(IMAGE_DISTRO) IMAGE_DISTRO_FILES_PATH = $(TARGET_PATH)/files/$(IMAGE_DISTRO) @@ -550,7 +551,7 @@ $(addprefix $(DEBS_PATH)/, $(SONIC_DPKG_DEBS)) : $(DEBS_PATH)/% : .platform $$(a $(if $($*_DPKG_TARGET), ${$*_BUILD_ENV} DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC} ${$*_DEB_BUILD_OPTIONS}" $(ANT_DEB_CONFIG) $(CROSS_COMPILE_FLAGS) dpkg-buildpackage -rfakeroot -b $(ANT_DEB_CROSS_OPT) -us -uc -tc -j$(SONIC_CONFIG_MAKE_JOBS) --as-root -T$($*_DPKG_TARGET) --admindir $$mergedir $(LOG), ${$*_BUILD_ENV} DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC} ${$*_DEB_BUILD_OPTIONS}" $(ANT_DEB_CONFIG) $(CROSS_COMPILE_FLAGS) dpkg-buildpackage -rfakeroot -b $(ANT_DEB_CROSS_OPT) -us -uc -tc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $$mergedir $(LOG) - ) + ) popd $(LOG_SIMPLE) # Clean up if [ -f $($*_SRC_PATH).patch/series ]; then pushd $($*_SRC_PATH) && quilt pop -a -f; [ -d .pc ] && rm -rf .pc; popd; fi diff --git a/src/dhcp6relay/Makefile b/src/dhcp6relay/Makefile index 4d2eedd042e..407ee397b62 100644 --- a/src/dhcp6relay/Makefile +++ b/src/dhcp6relay/Makefile @@ -2,7 +2,7 @@ RM := rm -rf DHCP6RELAY_TARGET := dhcp6relay CP := cp MKDIR := mkdir -CC := g++ +CXX := g++ MV := mv LIBS := -levent -lhiredis -lswsscommon -pthread -lboost_thread -lboost_system CFLAGS = -g -Wall -std=c++17 -fPIC -I $(PWD)/../sonic-swss-common/common @@ -21,7 +21,7 @@ all: sonic-dhcp6relay sonic-dhcp6relay: $(OBJS) @echo 'Building target: $@' @echo 'Invoking: G++ Linker' - $(CC) -o $(DHCP6RELAY_TARGET) $(OBJS) $(LIBS) + $(CXX) -o $(DHCP6RELAY_TARGET) $(OBJS) $(LIBS) @echo 'Finished building target: $@' @echo ' ' From eba55b6409a944f1987e114aaa8a5fe50fe40558 Mon Sep 17 00:00:00 2001 From: gregshpit Date: Sun, 12 Sep 2021 10:48:43 +0300 Subject: [PATCH 04/30] Update cross-build-arm-python-reqirements.sh Added support for both armhf and arm64 cross-build platform using $PY_PLAT environment variable. --- sonic-slave-buster/cross-build-arm-python-reqirements.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sonic-slave-buster/cross-build-arm-python-reqirements.sh b/sonic-slave-buster/cross-build-arm-python-reqirements.sh index fa92d38d250..dae3f8f536a 100755 --- a/sonic-slave-buster/cross-build-arm-python-reqirements.sh +++ b/sonic-slave-buster/cross-build-arm-python-reqirements.sh @@ -9,24 +9,24 @@ rm -rf $PRE_BUILT_TARGET_DIR && mkdir $PRE_BUILT_TARGET_DIR for pkg in "${pkgs[@]}" do rm -rf wheel-download - mkdir -p wheel-download/sources && pip3 download --platform linux_armv7l --no-deps --dest wheel-download $pkg + mkdir -p wheel-download/sources && pip3 download --platform $PY_PLAT --no-deps --dest wheel-download $pkg count=`ls -1 wheel-download/*.gz 2>/dev/null | wc -l` if [ $count != 0 ] then tar xvf wheel-download/*.gz -C wheel-download/sources - pushd wheel-download/sources/* && CC=$CC LDSHARED="$CC -shared" python3 -u -c "import setuptools, tokenize;__file__='setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\ri\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" --verbose bdist_wheel --plat-name linux_armv7l -d ../../../$PRE_BUILT_TARGET_DIR && popd + pushd wheel-download/sources/* && CC=$CC LDSHARED="$CC -shared" python3 -u -c "import setuptools, tokenize;__file__='setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\ri\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" --verbose bdist_wheel --plat-name $PY_PLAT -d ../../../$PRE_BUILT_TARGET_DIR && popd else cp wheel-download/*.whl $PRE_BUILT_TARGET_DIR fi rm -rf wheel-download - mkdir -p wheel-download/sources && pip download --platform linux_armv7l --no-deps --dest wheel-download $pkg + mkdir -p wheel-download/sources && pip download --platform $PY_PLAT --no-deps --dest wheel-download $pkg count=`ls -1 wheel-download/*.gz 2>/dev/null | wc -l` if [ $count != 0 ] then tar xvf wheel-download/*.gz -C wheel-download/sources - pushd wheel-download/sources/* && CC=$CC LDSHARED="$CC -shared" python -u -c "import setuptools, tokenize;__file__='setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\ri\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" --verbose bdist_wheel --plat-name linux_armv7l -d ../../../$PRE_BUILT_TARGET_DIR && popd + pushd wheel-download/sources/* && CC=$CC LDSHARED="$CC -shared" python -u -c "import setuptools, tokenize;__file__='setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\ri\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" --verbose bdist_wheel --plat-name $PY_PLAT -d ../../../$PRE_BUILT_TARGET_DIR && popd else cp wheel-download/*.whl $PRE_BUILT_TARGET_DIR/ fi From 1acb98012524c73056b733a9861156e083721256 Mon Sep 17 00:00:00 2001 From: gregshpit Date: Tue, 14 Sep 2021 11:53:09 +0300 Subject: [PATCH 05/30] Update Makefile Added TARGET= for armhf/arm64 cross-compilation. --- src/kdump-tools/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/kdump-tools/Makefile b/src/kdump-tools/Makefile index ccc0ba98219..2f667c655fc 100644 --- a/src/kdump-tools/Makefile +++ b/src/kdump-tools/Makefile @@ -22,7 +22,8 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build source and Debian packages ifeq ($(CROSS_BUILD_ENVIRON), y) - dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) + sed -i "s/dh_auto_build \-\-/dh_auto_build -- TARGET=$(CONFIGURED_ARCH)/" debian/rules + CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -Tbinary-indep -j$(SONIC_CONFIG_MAKE_JOBS) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif From 3da08d957bd637f8114b7cf06a0b619162650920 Mon Sep 17 00:00:00 2001 From: marvell Date: Wed, 17 Nov 2021 14:52:47 +0530 Subject: [PATCH 06/30] Reviewer's @qiluo-msft requests done Signed-off-by: marvell --- Makefile.work | 5 ++--- build_debian.sh | 2 +- platform/marvell-armhf/prestera/debian/rules | 4 +--- src/ethtool/Makefile | 2 +- src/hiredis/Makefile | 2 +- src/ifupdown2/Makefile | 2 +- src/initramfs-tools/Makefile | 2 +- src/iproute2/Makefile | 2 +- src/iptables/Makefile | 2 +- src/isc-dhcp/Makefile | 2 +- src/kdump-tools/Makefile | 2 +- src/libnl3/Makefile | 2 +- src/libteam/Makefile | 2 +- src/libyang1/Makefile | 2 +- src/lldpd/Makefile | 2 +- src/lm-sensors/Makefile | 2 +- src/monit/Makefile | 2 +- src/mpdecimal/Makefile | 2 +- src/ntp/Makefile | 2 +- src/radius/nss/Makefile | 2 +- src/radius/pam/Makefile | 3 ++- src/redis/Makefile | 2 +- src/sflow/hsflowd/Makefile | 2 +- src/sflow/psample/Makefile | 2 +- src/sflow/sflowtool/Makefile | 2 +- src/smartmontools/Makefile | 2 +- src/socat/Makefile | 2 +- src/sonic-device-data/Makefile | 2 +- src/sonic-frr/Makefile | 2 +- src/swig/Makefile | 2 +- src/systemd-sonic-generator/Makefile | 2 +- src/tacacs/nss/Makefile | 2 +- src/tacacs/pam/Makefile | 2 +- src/thrift/Makefile | 2 +- src/wpasupplicant/Makefile | 2 +- 35 files changed, 37 insertions(+), 39 deletions(-) diff --git a/Makefile.work b/Makefile.work index f85e7fd4a4c..9381541a635 100644 --- a/Makefile.work +++ b/Makefile.work @@ -127,12 +127,11 @@ ifeq ($(CONFIGURED_ARCH), $(COMPILE_HOST_ARCH)) SLAVE_BASE_IMAGE = $(SLAVE_DIR) MULTIARCH_QEMU_ENVIRON = n else ifneq ($(CONFIGURED_ARCH),) -ifneq ($(CROSS_BLDENV),) SLAVE_BASE_IMAGE = $(SLAVE_DIR)-march-$(CONFIGURED_ARCH) +ifneq ($(CROSS_BLDENV),) MULTIARCH_QEMU_ENVIRON = n CROSS_BUILD_ENVIRON = y else -SLAVE_BASE_IMAGE = $(SLAVE_DIR)-march-$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON = y endif endif @@ -301,7 +300,7 @@ SONIC_BUILD_INSTRUCTION := make \ .DEFAULT_GOAL := all %:: -ifeq ($(MULTIARCH_QEMU_ENVIRON), y) +ifneq ($(filter y, $(MULTIARCH_QEMU_ENVIRON) $(CROSS_BUILD_ENVIRON)),) @$(DOCKER_MULTIARCH_CHECK) ifneq ($(BLDENV), ) @$(DOCKER_SERVICE_MULTIARCH_CHECK) diff --git a/build_debian.sh b/build_debian.sh index 131d66adf69..08e1ae69110 100755 --- a/build_debian.sh +++ b/build_debian.sh @@ -114,7 +114,7 @@ echo '[INFO] Install packages for building image' sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install makedev psmisc if [[ $CROSS_BUILD_ENVIRON == y ]]; then -sudo LANG=C chroot $FILESYSTEM_ROOT dpkg --add-architecture $CONFIGURED_ARCH + sudo LANG=C chroot $FILESYSTEM_ROOT dpkg --add-architecture $CONFIGURED_ARCH fi ## Create device files diff --git a/platform/marvell-armhf/prestera/debian/rules b/platform/marvell-armhf/prestera/debian/rules index c4822064d9f..069ff0a1191 100755 --- a/platform/marvell-armhf/prestera/debian/rules +++ b/platform/marvell-armhf/prestera/debian/rules @@ -3,9 +3,7 @@ include /usr/share/dpkg/pkg-info.mk PACKAGE_PRE_NAME := mrvlprestera -ifeq ($(CROSS_BUILD_ENVIRON), y) -KVERSION ?= $(KVERSION) -else +ifneq ($(CROSS_BUILD_ENVIRON), y) KVERSION ?= $(shell uname -r) endif KERNEL_SRC := /lib/modules/$(KVERSION) diff --git a/src/ethtool/Makefile b/src/ethtool/Makefile index d87c2f1ef58..d122b6f4c8b 100644 --- a/src/ethtool/Makefile +++ b/src/ethtool/Makefile @@ -15,7 +15,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : ifeq ($(MULTIARCH_QEMU_ENVIRON), y) DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/hiredis/Makefile b/src/hiredis/Makefile index dde8ec885a9..ab257e5e084 100644 --- a/src/hiredis/Makefile +++ b/src/hiredis/Makefile @@ -15,7 +15,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : dpkg-source -x hiredis_$(HIREDIS_VERSION_FULL).dsc pushd hiredis-$(HIREDIS_VERSION) ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -d -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -d -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -d -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/ifupdown2/Makefile b/src/ifupdown2/Makefile index 6a72c062f24..77008afb9ac 100644 --- a/src/ifupdown2/Makefile +++ b/src/ifupdown2/Makefile @@ -23,7 +23,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build source and Debian packages ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -d -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) + dpkg-buildpackage -rfakeroot -d -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/initramfs-tools/Makefile b/src/initramfs-tools/Makefile index e45b584f232..4800c161604 100644 --- a/src/initramfs-tools/Makefile +++ b/src/initramfs-tools/Makefile @@ -20,7 +20,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build the package rm -f debian/*.debhelper.log ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/iproute2/Makefile b/src/iproute2/Makefile index a6ced6d0075..9274c5ba082 100644 --- a/src/iproute2/Makefile +++ b/src/iproute2/Makefile @@ -19,7 +19,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : pushd iproute2-$(IPROUTE2_VERSION) ifeq ($(CROSS_BUILD_ENVIRON), y) sed -i 's/#include /#include \n#include /' tc/tc_core.c - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/iptables/Makefile b/src/iptables/Makefile index 4c3631bed9a..07a8fea2265 100644 --- a/src/iptables/Makefile +++ b/src/iptables/Makefile @@ -39,7 +39,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build source and Debian packages ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/isc-dhcp/Makefile b/src/isc-dhcp/Makefile index 2e398d767ba..2f98f23ccb9 100644 --- a/src/isc-dhcp/Makefile +++ b/src/isc-dhcp/Makefile @@ -24,7 +24,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build source and Debian packages ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/kdump-tools/Makefile b/src/kdump-tools/Makefile index 2f667c655fc..2d3e0594ebf 100644 --- a/src/kdump-tools/Makefile +++ b/src/kdump-tools/Makefile @@ -23,7 +23,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build source and Debian packages ifeq ($(CROSS_BUILD_ENVIRON), y) sed -i "s/dh_auto_build \-\-/dh_auto_build -- TARGET=$(CONFIGURED_ARCH)/" debian/rules - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -Tbinary-indep -j$(SONIC_CONFIG_MAKE_JOBS) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -Tbinary-indep -j$(SONIC_CONFIG_MAKE_JOBS) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/libnl3/Makefile b/src/libnl3/Makefile index eb451f893ce..0d48ffc1e1a 100644 --- a/src/libnl3/Makefile +++ b/src/libnl3/Makefile @@ -26,7 +26,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : ln -s ../debian debian ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/libteam/Makefile b/src/libteam/Makefile index a31da67869b..0c98c0ce489 100644 --- a/src/libteam/Makefile +++ b/src/libteam/Makefile @@ -32,7 +32,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : rm -rf tmp pushd ./libteam ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/libyang1/Makefile b/src/libyang1/Makefile index c181f35ae94..a87f03bf638 100644 --- a/src/libyang1/Makefile +++ b/src/libyang1/Makefile @@ -32,7 +32,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : echo 'add_definitions(-D_FILE_OFFSET_BITS=64)' >> CMakeLists.txt ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/lldpd/Makefile b/src/lldpd/Makefile index edf49faea80..349724d77ec 100644 --- a/src/lldpd/Makefile +++ b/src/lldpd/Makefile @@ -36,7 +36,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build source and Debian packages ifeq ($(CROSS_BUILD_ENVIRON), y) - env "with_netlink_receive_bufsize=1024*1024" CFLAGS="-I $$CROSS_PERL_CORE_PATH" CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + env "with_netlink_receive_bufsize=1024*1024" CFLAGS="-I $$CROSS_PERL_CORE_PATH" dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else env "with_netlink_receive_bufsize=1024*1024" dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/lm-sensors/Makefile b/src/lm-sensors/Makefile index 857106a6602..fbeee8c2610 100644 --- a/src/lm-sensors/Makefile +++ b/src/lm-sensors/Makefile @@ -26,7 +26,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg import -s ../patch/series ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) PROG_EXTRA=sensord dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + PROG_EXTRA=sensord dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else DEB_BUILD_OPTIONS=nocheck PROG_EXTRA=sensord dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/monit/Makefile b/src/monit/Makefile index bed51a98be6..f691f2c7e8b 100644 --- a/src/monit/Makefile +++ b/src/monit/Makefile @@ -34,7 +34,7 @@ endif # Build source and Debian packages ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc --host-arch $(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc --host-arch $(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/mpdecimal/Makefile b/src/mpdecimal/Makefile index 43fa4a640a9..dbd0569e15e 100644 --- a/src/mpdecimal/Makefile +++ b/src/mpdecimal/Makefile @@ -15,7 +15,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : dpkg-source -x mpdecimal_$(MPDECIMAL_VERSION_FULL).dsc pushd mpdecimal-$(MPDECIMAL_VERSION) ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/ntp/Makefile b/src/ntp/Makefile index a9c05341a84..91a6f1d96fb 100644 --- a/src/ntp/Makefile +++ b/src/ntp/Makefile @@ -48,7 +48,7 @@ endif # Build source and Debian packages with the symbols ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/radius/nss/Makefile b/src/radius/nss/Makefile index 509d62855ac..96389ed3cc2 100644 --- a/src/radius/nss/Makefile +++ b/src/radius/nss/Makefile @@ -16,7 +16,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Apply patch (if any) ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -us -uc + dpkg-buildpackage -rfakeroot -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -us -uc else dpkg-buildpackage -rfakeroot -b -us -uc endif diff --git a/src/radius/pam/Makefile b/src/radius/pam/Makefile index e140911bcd8..61c403c0b50 100644 --- a/src/radius/pam/Makefile +++ b/src/radius/pam/Makefile @@ -16,6 +16,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : patch -p1 < ../patches/freeradius_configure.patch patch -p1 < ../patches/freeradius_2007-04-06.patch patch -p1 < ../patches/freeradius_libeap_deprecated_openssl_1_0.patch + patch -p1 < ../patches/libltdl_config_sub.patch cp ../patches/config.sub . cp ../patches/config.guess . ifeq ($(CROSS_BUILD_ENVIRON), y) @@ -36,7 +37,7 @@ endif cp -r ../debian . ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -us -uc -nc + dpkg-buildpackage -rfakeroot -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -us -uc -nc else dpkg-buildpackage -rfakeroot -b -us -uc -nc endif diff --git a/src/redis/Makefile b/src/redis/Makefile index be741214bac..f7014d68a35 100644 --- a/src/redis/Makefile +++ b/src/redis/Makefile @@ -23,7 +23,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : pushd redis-$(REDIS_VERSION) export ARCH="" ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/sflow/hsflowd/Makefile b/src/sflow/hsflowd/Makefile index 2c9124c31e0..ffea2894c38 100644 --- a/src/sflow/hsflowd/Makefile +++ b/src/sflow/hsflowd/Makefile @@ -24,7 +24,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : ifeq ($(CROSS_BUILD_ENVIRON), y) sed -i "s/gcc/$$CROSS_CC/g" src/sflow/Makefile sed -i "s/gcc/$$CROSS_CC/g" src/Linux/Makefile - CC=$(CROSS_CC) CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) --buildinfo-option=-u. --changes-option=-u. + CC=$(CROSS_CC) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) --buildinfo-option=-u. --changes-option=-u. else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) --buildinfo-option=-u. --changes-option=-u. endif diff --git a/src/sflow/psample/Makefile b/src/sflow/psample/Makefile index 229b00979c5..12981d8ebff 100644 --- a/src/sflow/psample/Makefile +++ b/src/sflow/psample/Makefile @@ -14,7 +14,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : git checkout -b libpsample -f e48fad2 ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/sflow/sflowtool/Makefile b/src/sflow/sflowtool/Makefile index ea8564ecef3..ecb0a4bb290 100644 --- a/src/sflow/sflowtool/Makefile +++ b/src/sflow/sflowtool/Makefile @@ -13,7 +13,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : pushd ./sflowtool git checkout -b sflowtool -f 6c2963b ifeq ($(CROSS_BUILD_ENVIRON), y) - CC=$(CROSS_CC) CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + CC=$(CROSS_CC) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/smartmontools/Makefile b/src/smartmontools/Makefile index 49f9a4022e5..1197ecce763 100644 --- a/src/smartmontools/Makefile +++ b/src/smartmontools/Makefile @@ -14,7 +14,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : pushd smartmontools-$(SMARTMONTOOLS_VERSION_MAJOR) ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/socat/Makefile b/src/socat/Makefile index d6eda367592..e559390d7b6 100644 --- a/src/socat/Makefile +++ b/src/socat/Makefile @@ -19,7 +19,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : pushd socat-1.7.3.1 patch -p0 < ../enable_readline.patch ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/sonic-device-data/Makefile b/src/sonic-device-data/Makefile index 28cd30aad81..7993564ea30 100644 --- a/src/sonic-device-data/Makefile +++ b/src/sonic-device-data/Makefile @@ -27,7 +27,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build the package ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/sonic-frr/Makefile b/src/sonic-frr/Makefile index f626b7a5ccd..ec26c1d02f8 100644 --- a/src/sonic-frr/Makefile +++ b/src/sonic-frr/Makefile @@ -24,7 +24,7 @@ ifeq ($(CROSS_BUILD_ENVIRON), y) sed -i "s/doc\/manpages/build\/doc\/manpages/g" debian/frr.manpages sed -i "s/doc\/user\/_build\/texinfo/build\/doc\/user\/_build\/texinfo/g" debian/frr-doc.info - CFLAGS="-I $$CROSS_PERL_CORE_PATH" LDFLAGS=" -L $$CROSS_PKGS_LIB_PATH" CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -d -us -uc -Ppkg.frr.nortrlib -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + CFLAGS="-I $$CROSS_PERL_CORE_PATH" LDFLAGS=" -L $$CROSS_PKGS_LIB_PATH" dpkg-buildpackage -rfakeroot -b -d -us -uc -Ppkg.frr.nortrlib -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -Ppkg.frr.nortrlib -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/swig/Makefile b/src/swig/Makefile index 19b8fc74a60..f00d8652180 100644 --- a/src/swig/Makefile +++ b/src/swig/Makefile @@ -14,7 +14,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : pushd ./swig-$(SWIG_VERSION) ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/systemd-sonic-generator/Makefile b/src/systemd-sonic-generator/Makefile index 3b62d8da6a2..afcdb711e9d 100644 --- a/src/systemd-sonic-generator/Makefile +++ b/src/systemd-sonic-generator/Makefile @@ -10,7 +10,7 @@ MAIN_TARGET = $(BINARY)_1.0.0_$(CONFIGURED_ARCH).deb $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/tacacs/nss/Makefile b/src/tacacs/nss/Makefile index 723cace4610..f958e5625f0 100644 --- a/src/tacacs/nss/Makefile +++ b/src/tacacs/nss/Makefile @@ -16,7 +16,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg import -s ../patch/series ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/tacacs/pam/Makefile b/src/tacacs/pam/Makefile index ff12f7f3f9c..6c213d53dff 100644 --- a/src/tacacs/pam/Makefile +++ b/src/tacacs/pam/Makefile @@ -26,7 +26,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : git apply ../0010-handle-bad-password-set-by-sshd.patch ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/thrift/Makefile b/src/thrift/Makefile index dfa8556a18a..643cc61faf4 100644 --- a/src/thrift/Makefile +++ b/src/thrift/Makefile @@ -28,7 +28,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : patch -p1 < ../patch/0001-Revert-THRIFT-3650-incorrect-union-serialization.patch patch -p1 < ../patch/0002-cve-2017-1000487.patch ifeq ($(CROSS_BUILD_ENVIRON), y) - CC=$(CROSS_CC) LDSHARED=$(CROSS_CC) CXXFLAGS="-DFORCE_BOOST_SMART_PTR -DSIGNED_RIGHT_SHIFT_IS=1 -DARITHMETIC_RIGHT_SHIFT=1" CFLAGS="-DSIGNED_RIGHT_SHIFT_IS=1 -DARITHMETIC_RIGHT_SHIFT=1" CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -d -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + CC=$(CROSS_CC) LDSHARED=$(CROSS_CC) CXXFLAGS="-DFORCE_BOOST_SMART_PTR -DSIGNED_RIGHT_SHIFT_IS=1 -DARITHMETIC_RIGHT_SHIFT=1" CFLAGS="-DSIGNED_RIGHT_SHIFT_IS=1 -DARITHMETIC_RIGHT_SHIFT=1" dpkg-buildpackage -d -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else CXXFLAGS="-DFORCE_BOOST_SMART_PTR" DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -d -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/wpasupplicant/Makefile b/src/wpasupplicant/Makefile index 8b520060793..5e834eaa1e1 100644 --- a/src/wpasupplicant/Makefile +++ b/src/wpasupplicant/Makefile @@ -9,7 +9,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Clone wpa repo pushd ./sonic-wpa-supplicant ifeq ($(CROSS_BUILD_ENVIRON), y) - CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) dpkg-buildpackage -rfakeroot -b -us -uc -d -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -d -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif From fcb2b8b06a77652f6da5e372bf350ae0a6c38bb6 Mon Sep 17 00:00:00 2001 From: marvell Date: Sun, 21 Nov 2021 21:46:55 +0530 Subject: [PATCH 07/30] Added new radius/pam patch for arm64 support --- .../patches/libltdl_config_sub.patch | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/radius/pam/freeradius/patches/libltdl_config_sub.patch diff --git a/src/radius/pam/freeradius/patches/libltdl_config_sub.patch b/src/radius/pam/freeradius/patches/libltdl_config_sub.patch new file mode 100644 index 00000000000..37ad68edb48 --- /dev/null +++ b/src/radius/pam/freeradius/patches/libltdl_config_sub.patch @@ -0,0 +1,20 @@ +diff --git a/libltdl/config.sub b/libltdl/config.sub +index 2851647..63c6366 100755 +--- a/libltdl/config.sub ++++ b/libltdl/config.sub +@@ -241,6 +241,7 @@ case $basic_machine in + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ ++ | aarch64 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ +@@ -317,6 +318,7 @@ case $basic_machine in + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ ++ | aarch64-* \ + | avr-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ From 1e079dc86e5cfd23423ac3b2d32cbbe81c3d80b8 Mon Sep 17 00:00:00 2001 From: gregshpit Date: Sun, 21 Nov 2021 18:38:32 +0200 Subject: [PATCH 08/30] Update slave.mk Added missing back tick. --- slave.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slave.mk b/slave.mk index 2eefb90b00d..97f6a5ea0f6 100644 --- a/slave.mk +++ b/slave.mk @@ -697,7 +697,7 @@ $(addprefix $(PYTHON_WHEELS_PATH)/, $(SONIC_PYTHON_WHEELS)) : $(PYTHON_WHEELS_PA if [ ! "$($*_TEST)" = "n" ]; then ifneq ($(CROSS_BUILD_ENVIRON),y) # Use pip instead of later setup.py to install dependencies into user home, but uninstall self - pip$($*_PYTHON_VERSION) install . && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name + pip$($*_PYTHON_VERSION) install . && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name` python$($*_PYTHON_VERSION) setup.py test $(LOG); fi else PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py test $(LOG); fi From c66756d99e0960939b1ef3cd4e3c1c5d471e9172 Mon Sep 17 00:00:00 2001 From: marvell Date: Thu, 2 Dec 2021 16:10:47 +0530 Subject: [PATCH 09/30] Added libgtest-dev: libgmock-dev: to the buster Dockerfile.j2. Fixed arm perl version to be generic --- slave.mk | 2 +- sonic-slave-buster/Dockerfile.j2 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/slave.mk b/slave.mk index 97f6a5ea0f6..cdb711468ea 100644 --- a/slave.mk +++ b/slave.mk @@ -264,7 +264,7 @@ CROSS_LIB_PATH = /usr/$(CROSS_HOST_TYPE)/lib/ CROSS_BIN_PATH = /usr/$(CROSS_HOST_TYPE)/bin/ CROSS_PKGS_LIB_PATH = /usr/lib/$(CROSS_HOST_TYPE) -CROSS_LIBPERL_VERSION = $(shell dpkg -s libperl-dev:armhf|grep Version|awk '{split($$2,v,"-"); print v[1];}') +CROSS_LIBPERL_VERSION = $(shell dpkg -s libperl-dev:$(CONFIGURED_ARCH)|grep Version|awk '{split($$2,v,"-"); print v[1];}') CROSS_PERL_CORE_PATH = $(CROSS_PKGS_LIB_PATH)/perl/$(CROSS_LIBPERL_VERSION)/CORE/ CROSS_COMPILE_FLAGS := CGO_ENABLED=1 GOOS=linux GOARCH=$(GOARCH) CROSS_COMPILE=$(CROSS_COMPILE) OVERRIDE_HOST_TYPE=$(CROSS_HOST_TYPE) CROSS_CC=$(CROSS_CC) CROSS_CXX=$(CROSS_CXX) CROSS_LIB_PATH=$(CROSS_LIB_PATH) CROSS_BIN_PATH=$(CROSS_BIN_PATH) CROSS_HOST_TYPE=$(CROSS_HOST_TYPE) CROSS_PKGS_LIB_PATH=$(CROSS_PKGS_LIB_PATH) CROSS_PERL_CORE_PATH=$(CROSS_PERL_CORE_PATH) diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index e215d5f5160..a01cac4ab30 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -633,7 +633,7 @@ RUN apt-get install -y nodejs {%- if CROSS_BUILD_ENVIRON == "y" %} RUN apt-get install -y rsync dh-python -RUN apt-get update && apt-get install -y libelf-dev:$arch libdw-dev:$arch libbz2-dev:$arch liblzo2-dev:$arch libedit-dev:$arch libevent-dev:$arch libopts25-dev:$arch libssl-dev:$arch pps-tools:$arch libpam-cap:$arch libcap-dev:$arch libpam0g-dev:$arch libaudit-dev:$arch libgtk-3-dev:$arch libkrb5-dev:$arch libsystemd-dev:$arch libwrap0-dev:$arch libkrb5-dev:$arch libboost1.67-dev:$arch libboost-dev:$arch libzmq5:$arch libzmq3-dev:$arch libdaemon-dev:$arch libjansson-dev:$arch libmnl-dev:$arch libsensors5:$arch libsensors4-dev:$arch libperl-dev:$arch libmariadb-dev:$arch libmariadb-dev-compat:$arch libpci-dev:$arch libjson-c3:$arch libjson-c-dev:$arch libreadline-dev:$arch librtr-dev:$arch librrd-dev:$arch libnetfilter-conntrack-dev:$arch libnetfilter-conntrack3:$arch libnfnetlink-dev:$arch libnftnl-dev:$arch libldap2-dev:$arch libbind-export-dev:$arch check:$arch libboost-atomic-dev:$arch libboost-test-dev:$arch libglib2.0-dev:$arch qt5-default:$arch libexplain-dev:$arch libc-ares-dev:$arch libip4tc0:$arch libip6tc0:$arch libiptc0:$arch libxtables12:$arch iptables-dev:$arch libatm1-dev:$arch libdb-dev:$arch pkg-config:$arch libnghttp2-14:$arch librtmp1:$arch libssh2-1:$arch libcjson1:$arch libcjson-dev:$arch libcurl3-gnutls:$arch libcurl3-nss-dev:$arch libboost-thread1.67-dev:$arch libboost-thread-dev:$arch libboost-system1.67-dev:$arch libboost-system-dev:$arch +RUN apt-get update && apt-get install -y libelf-dev:$arch libdw-dev:$arch libbz2-dev:$arch liblzo2-dev:$arch libedit-dev:$arch libevent-dev:$arch libopts25-dev:$arch libssl-dev:$arch pps-tools:$arch libpam-cap:$arch libcap-dev:$arch libpam0g-dev:$arch libaudit-dev:$arch libgtk-3-dev:$arch libkrb5-dev:$arch libsystemd-dev:$arch libwrap0-dev:$arch libkrb5-dev:$arch libboost1.67-dev:$arch libboost-dev:$arch libzmq5:$arch libzmq3-dev:$arch libdaemon-dev:$arch libjansson-dev:$arch libmnl-dev:$arch libsensors5:$arch libsensors4-dev:$arch libperl-dev:$arch libmariadb-dev:$arch libmariadb-dev-compat:$arch libpci-dev:$arch libjson-c3:$arch libjson-c-dev:$arch libreadline-dev:$arch librtr-dev:$arch librrd-dev:$arch libnetfilter-conntrack-dev:$arch libnetfilter-conntrack3:$arch libnfnetlink-dev:$arch libnftnl-dev:$arch libldap2-dev:$arch libbind-export-dev:$arch check:$arch libboost-atomic-dev:$arch libboost-test-dev:$arch libglib2.0-dev:$arch qt5-default:$arch libexplain-dev:$arch libc-ares-dev:$arch libip4tc0:$arch libip6tc0:$arch libiptc0:$arch libxtables12:$arch iptables-dev:$arch libatm1-dev:$arch libdb-dev:$arch pkg-config:$arch libnghttp2-14:$arch librtmp1:$arch libssh2-1:$arch libcjson1:$arch libcjson-dev:$arch libcurl3-gnutls:$arch libcurl3-nss-dev:$arch libboost-thread1.67-dev:$arch libboost-thread-dev:$arch libboost-system1.67-dev:$arch libboost-system-dev:$arch libgtest-dev:$arch libgmock-dev:$arch RUN apt-get download libgirepository1.0-dev:$arch && dpkg --force-all -i libgirepository1.0-dev* RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install pycairo From a8e69e5db393176d5c81367f9b3b7cbf76c71ee9 Mon Sep 17 00:00:00 2001 From: marvell Date: Mon, 6 Dec 2021 21:24:40 +0530 Subject: [PATCH 10/30] Added missing armhf/arm64 entries in /etc/apt/sources.list --- sonic-slave-buster/Dockerfile.j2 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index b1f750f522f..e4e55b2d6be 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -29,7 +29,7 @@ RUN echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bust echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian buster main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian buster-updates main contrib non-free" >> /etc/apt/sources.list -{%- if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} +{%- if CONFIGURED_ARCH == "armhf" and CROSS_BUILD_ENVIRON != "y" %} RUN echo "deb [arch=armhf] http://deb.debian.org/debian buster main contrib non-free" > /etc/apt/sources.list && \ echo "deb-src [arch=armhf] http://deb.debian.org/debian buster main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=armhf] http://deb.debian.org/debian buster-updates main contrib non-free" >> /etc/apt/sources.list && \ @@ -39,7 +39,7 @@ RUN echo "deb [arch=armhf] http://deb.debian.org/debian buster main contrib non- echo 'deb [arch=armhf] http://ftp.debian.org/debian buster-backports main' >> /etc/apt/sources.list && \ echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian buster main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian buster-updates main contrib non-free" >> /etc/apt/sources.list -{%- elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} +{%- elif CONFIGURED_ARCH == "arm64" and CROSS_BUILD_ENVIRON != "y" %} RUN echo "deb [arch=arm64] http://deb.debian.org/debian buster main contrib non-free" > /etc/apt/sources.list && \ echo "deb-src [arch=arm64] http://deb.debian.org/debian buster main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=arm64] http://deb.debian.org/debian buster-updates main contrib non-free" >> /etc/apt/sources.list && \ From 6a912bbfd3ac5b13f6f30b7156224914b6376fd6 Mon Sep 17 00:00:00 2001 From: marvell Date: Thu, 16 Dec 2021 22:34:14 +0530 Subject: [PATCH 11/30] fix libc-bin core dump issue from xumia:fix-libc-bin-install-issue commit --- sonic-slave-bullseye/Dockerfile.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonic-slave-bullseye/Dockerfile.j2 b/sonic-slave-bullseye/Dockerfile.j2 index c13837fd3e4..979a4bd69f3 100644 --- a/sonic-slave-bullseye/Dockerfile.j2 +++ b/sonic-slave-bullseye/Dockerfile.j2 @@ -358,7 +358,7 @@ RUN apt-get -y build-dep openssh # Build fix for ARM64 and ARMHF /etc/debian_version {%- if CONFIGURED_ARCH == "armhf" or CONFIGURED_ARCH == "arm64" %} -RUN apt upgrade -y base-files +RUN apt upgrade -y base-files libc-bin=$(dpkg-query -W -f '${Version}' libc-bin) {%- endif %} # Build fix for ARMHF bullseye libsairedis From a5c6ba3fadb190f5674284af9e9f79afdd10c966 Mon Sep 17 00:00:00 2001 From: marvell Date: Sun, 19 Dec 2021 22:53:31 +0530 Subject: [PATCH 12/30] Removed unnecessary 'apt-get update' from sonic-slave-buster/Dockerfile.j2 --- sonic-slave-buster/Dockerfile.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index b297ead05d4..07018311bc7 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -643,7 +643,7 @@ RUN apt-get install -y nodejs {%- if CROSS_BUILD_ENVIRON == "y" %} RUN apt-get install -y rsync dh-python -RUN apt-get update && apt-get install -y libelf-dev:$arch libdw-dev:$arch libbz2-dev:$arch liblzo2-dev:$arch libedit-dev:$arch libevent-dev:$arch libopts25-dev:$arch libssl-dev:$arch pps-tools:$arch libpam-cap:$arch libcap-dev:$arch libpam0g-dev:$arch libaudit-dev:$arch libgtk-3-dev:$arch libkrb5-dev:$arch libsystemd-dev:$arch libwrap0-dev:$arch libkrb5-dev:$arch libboost1.67-dev:$arch libboost-dev:$arch libzmq5:$arch libzmq3-dev:$arch libdaemon-dev:$arch libjansson-dev:$arch libmnl-dev:$arch libsensors5:$arch libsensors4-dev:$arch libperl-dev:$arch libmariadb-dev:$arch libmariadb-dev-compat:$arch libpci-dev:$arch libjson-c3:$arch libjson-c-dev:$arch libreadline-dev:$arch librtr-dev:$arch librrd-dev:$arch libnetfilter-conntrack-dev:$arch libnetfilter-conntrack3:$arch libnfnetlink-dev:$arch libnftnl-dev:$arch libldap2-dev:$arch libbind-export-dev:$arch check:$arch libboost-atomic-dev:$arch libboost-test-dev:$arch libglib2.0-dev:$arch qt5-default:$arch libexplain-dev:$arch libc-ares-dev:$arch libip4tc0:$arch libip6tc0:$arch libiptc0:$arch libxtables12:$arch iptables-dev:$arch libatm1-dev:$arch libdb-dev:$arch pkg-config:$arch libnghttp2-14:$arch librtmp1:$arch libssh2-1:$arch libcjson1:$arch libcjson-dev:$arch libcurl3-gnutls:$arch libcurl3-nss-dev:$arch libboost-thread1.67-dev:$arch libboost-thread-dev:$arch libboost-system1.67-dev:$arch libboost-system-dev:$arch libgtest-dev:$arch libgmock-dev:$arch +RUN apt-get install -y libelf-dev:$arch libdw-dev:$arch libbz2-dev:$arch liblzo2-dev:$arch libedit-dev:$arch libevent-dev:$arch libopts25-dev:$arch libssl-dev:$arch pps-tools:$arch libpam-cap:$arch libcap-dev:$arch libpam0g-dev:$arch libaudit-dev:$arch libgtk-3-dev:$arch libkrb5-dev:$arch libsystemd-dev:$arch libwrap0-dev:$arch libkrb5-dev:$arch libboost1.67-dev:$arch libboost-dev:$arch libzmq5:$arch libzmq3-dev:$arch libdaemon-dev:$arch libjansson-dev:$arch libmnl-dev:$arch libsensors5:$arch libsensors4-dev:$arch libperl-dev:$arch libmariadb-dev:$arch libmariadb-dev-compat:$arch libpci-dev:$arch libjson-c3:$arch libjson-c-dev:$arch libreadline-dev:$arch librtr-dev:$arch librrd-dev:$arch libnetfilter-conntrack-dev:$arch libnetfilter-conntrack3:$arch libnfnetlink-dev:$arch libnftnl-dev:$arch libldap2-dev:$arch libbind-export-dev:$arch check:$arch libboost-atomic-dev:$arch libboost-test-dev:$arch libglib2.0-dev:$arch qt5-default:$arch libexplain-dev:$arch libc-ares-dev:$arch libip4tc0:$arch libip6tc0:$arch libiptc0:$arch libxtables12:$arch iptables-dev:$arch libatm1-dev:$arch libdb-dev:$arch pkg-config:$arch libnghttp2-14:$arch librtmp1:$arch libssh2-1:$arch libcjson1:$arch libcjson-dev:$arch libcurl3-gnutls:$arch libcurl3-nss-dev:$arch libboost-thread1.67-dev:$arch libboost-thread-dev:$arch libboost-system1.67-dev:$arch libboost-system-dev:$arch libgtest-dev:$arch libgmock-dev:$arch RUN apt-get download libgirepository1.0-dev:$arch && dpkg --force-all -i libgirepository1.0-dev* RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install pycairo From cedf62cb2e175ac9f6a9c76560edde1d5f94eac0 Mon Sep 17 00:00:00 2001 From: marvell Date: Mon, 7 Mar 2022 16:20:10 +0530 Subject: [PATCH 13/30] Fixed saiarcot895 reviewer's requests --- sonic-slave-buster/Dockerfile.j2 | 6 +- src/monit/Makefile | 8 +- src/snmpd/Makefile | 10 +- .../cross-compile-changes.patch | 122 ++++++++++++++++++ 4 files changed, 127 insertions(+), 19 deletions(-) create mode 100644 src/snmpd/patch-5.7.3+dfsg/cross-compile-changes.patch diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index 07018311bc7..83a152204bb 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -64,7 +64,6 @@ RUN dpkg --add-architecture $arch RUN apt-get update RUN apt-get install -y crossbuild-essential-$arch RUN apt-get install -y gcc-$gcc_arch -ENV $(dpkg-architecture -a$arch RUN apt-mark hold g++-$gcc_arch RUN apt-mark hold g++-8-$gcc_arch @@ -80,8 +79,7 @@ ENV DEBIAN_FRONTEND=noninteractive {%- if CROSS_BUILD_ENVIRON == "y" %} RUN apt-get install -y python3 python3-pip -RUN PYTHON3_DEPS="`apt-cache depends python3:$arch |grep Depends|awk {'print \$2;'}|tr "\n" " "`" && apt-get install -y \ - python:$arch $PYTHON3_DEPS python3:$arch python-setuptools:$arch +RUN apt-get install -y python:$arch python3-minimal:$arch python3:$arch python-setuptools:$arch RUN apt-get download python3-distutils && dpkg --force-all -i python3-distutils* RUN apt-get download python3-pip && dpkg --force-all -i python3-pip* RUN which pip3 && pip3 install enum34 @@ -488,7 +486,7 @@ RUN sudo augtool --autosave "set /files/etc/dpkg/dpkg.cfg/force-confold" # For linux build RUN apt-get -y build-dep linux {%- else %} -RUN apt-get source kernel-wedge && sudo apt-get build-dep -a$arch kernel-wedge && cd kernel-wedge-2.99/ && CONFIG_SITE=/etc/dpkg-cross/cross-config.$arch DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -a$arch -Pcross,nocheck && cd .. && sudo dpkg -i kernel-wedge_2.99_all.deb +RUN apt-get install -y kernel-wedge {%- endif %} # For gobgp and telemetry build diff --git a/src/monit/Makefile b/src/monit/Makefile index f691f2c7e8b..ab9b1129458 100644 --- a/src/monit/Makefile +++ b/src/monit/Makefile @@ -24,12 +24,8 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg import -s ../patch/series ifeq ($(CROSS_BUILD_ENVIRON), y) - # Copy monit configure settings for arm, add missing settings - cp /etc/dpkg-cross/cross-config.cache ./cross-config.cache - echo "libmonit_cv_setjmp_available=yes" >> ./cross-config.cache - echo "libmonit_cv_vsnprintf_c99_conformant=yes" >> ./cross-config.cache - sudo cp ./cross-config.cache /etc/dpkg-cross/cross-config.cache - rm ./cross-config.cache + # Add monit configure settings + sed -i "s/dh_auto_configure \-\-/dh_auto_configure -- libmonit_cv_setjmp_available=yes libmonit_cv_vsnprintf_c99_conformant=yes/g" debian/rules endif # Build source and Debian packages diff --git a/src/snmpd/Makefile b/src/snmpd/Makefile index 1a3f18e7ab2..cd7c93aa16f 100644 --- a/src/snmpd/Makefile +++ b/src/snmpd/Makefile @@ -60,15 +60,7 @@ ifeq ($(MULTIARCH_QEMU_ENVIRON), y) dpkg-buildpackage -rfakeroot -b -d -us -uc -j1 --admindir $(SONIC_DPKG_ADMINDIR) else ifeq ($(CROSS_BUILD_ENVIRON), y) - sed -i "s/python setup.py/CC=$$CROSS_CC LDSHARED=\"$$CROSS_CC -shared\" python setup.py/g" debian/rules - sed -i "/opts = NetSNMPGetOpts(\".\/\");/a \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/Makefile.PL - sed -i "/Params{'LDDLFLAGS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/default_store/Makefile.PL - sed -i "/Params{'LDDLFLAGS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/ASN/Makefile.PL - sed -i "/Params{'LDDLFLAGS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/OID/Makefile.PL - sed -i "/Params{'LDDLFLAGS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/SNMP/Makefile.PL - sed -i "/Params{'LIBS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/agent/default_store/Makefile.PL - sed -i "/Params{'LDDLFLAGS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/agent/Makefile.PL - sed -i "/Params{'LDDLFLAGS'} =/i \$$Params{'CC'} = \"$$CROSS_CC\";\n\$$Params{'LD'} = \"$$CROSS_CC\";" perl/TrapReceiver/Makefile.PL + patch -p1 < ../patch-$(SNMPD_VERSION)/cross-compile-changes.patch CFLAGS="-I $$CROSS_PERL_CORE_PATH" LDFLAGS=" -L$$CROSS_PKGS_LIB_PATH" dpkg-buildpackage -rfakeroot -b -d -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -d -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) diff --git a/src/snmpd/patch-5.7.3+dfsg/cross-compile-changes.patch b/src/snmpd/patch-5.7.3+dfsg/cross-compile-changes.patch new file mode 100644 index 00000000000..682296ef1b3 --- /dev/null +++ b/src/snmpd/patch-5.7.3+dfsg/cross-compile-changes.patch @@ -0,0 +1,122 @@ +Index: net-snmp-5.7.3+dfsg/debian/rules +=================================================================== +--- net-snmp-5.7.3+dfsg.orig/debian/rules ++++ net-snmp-5.7.3+dfsg/debian/rules +@@ -59,11 +59,11 @@ override_dh_auto_configure: + + override_dh_auto_build: + dh_auto_build +- cd python; python setup.py build --basedir=$(CURDIR) ++ cd python; CC=$(CROSS_CC) LDSHARED="$(CROSS_CC) -shared" python setup.py build --basedir=$(CURDIR) + + override_dh_auto_install: + dh_auto_install +- cd python; python setup.py install --root=$(CURDIR)/debian/tmp \ ++ cd python; CC=$(CROSS_CC) LDSHARED="$(CROSS_CC) -shared" python setup.py install --root=$(CURDIR)/debian/tmp \ + --install-layout=deb --basedir=$(CURDIR) ; \ + find $(CURDIR) -name *.pyc -delete + +Index: net-snmp-5.7.3+dfsg/perl/ASN/Makefile.PL +=================================================================== +--- net-snmp-5.7.3+dfsg.orig/perl/ASN/Makefile.PL ++++ net-snmp-5.7.3+dfsg/perl/ASN/Makefile.PL +@@ -72,6 +72,8 @@ sub InitMakeParams { + else + { + $opts = NetSNMPGetOpts(); ++$Params{'CC'} = "$ENV{'CROSS_CC'}"; ++$Params{'LD'} = "$ENV{'CROSS_CC'}"; + $Params{'LDDLFLAGS'} = "$Config{lddlflags} " . `$opts->{'nsconfig'} --ldflags`; + $Params{'LIBS'} = `$opts->{'nsconfig'} --libs`; + chomp($Params{'LIBS'}); +Index: net-snmp-5.7.3+dfsg/perl/Makefile.PL +=================================================================== +--- net-snmp-5.7.3+dfsg.orig/perl/Makefile.PL ++++ net-snmp-5.7.3+dfsg/perl/Makefile.PL +@@ -14,6 +14,8 @@ sub InitMakeParams { + + # bogus, but these options need to be passed to the lower levels + $opts = NetSNMPGetOpts("./"); ++$Params{'CC'} = "$ENV{'CROSS_CC'}"; ++$Params{'LD'} = "$ENV{'CROSS_CC'}"; + + return(%Params); + } +Index: net-snmp-5.7.3+dfsg/perl/OID/Makefile.PL +=================================================================== +--- net-snmp-5.7.3+dfsg.orig/perl/OID/Makefile.PL ++++ net-snmp-5.7.3+dfsg/perl/OID/Makefile.PL +@@ -70,6 +70,8 @@ sub InitMakeParams { + } + else { + $opts = NetSNMPGetOpts(); ++$Params{'CC'} = "$ENV{'CROSS_CC'}"; ++$Params{'LD'} = "$ENV{'CROSS_CC'}"; + $Params{'LDDLFLAGS'} = "$Config{lddlflags} " . `$opts->{'nsconfig'} --ldflags`; + $Params{'LIBS'} = `$opts->{'nsconfig'} --libs`; + chomp($Params{'LIBS'}); +Index: net-snmp-5.7.3+dfsg/perl/SNMP/Makefile.PL +=================================================================== +--- net-snmp-5.7.3+dfsg.orig/perl/SNMP/Makefile.PL ++++ net-snmp-5.7.3+dfsg/perl/SNMP/Makefile.PL +@@ -74,6 +74,8 @@ sub InitMakeParams { + } + else { + $opts = NetSNMPGetOpts(); ++$Params{'CC'} = "$ENV{'CROSS_CC'}"; ++$Params{'LD'} = "$ENV{'CROSS_CC'}"; + $Params{'LDDLFLAGS'} = "$Config{lddlflags} " . `$opts->{'nsconfig'} --ldflags`; + if (!$ENV{'NETSNMP_LIBS'}) { + $Params{'LIBS'} = `$opts->{'nsconfig'} --libs`; +Index: net-snmp-5.7.3+dfsg/perl/TrapReceiver/Makefile.PL +=================================================================== +--- net-snmp-5.7.3+dfsg.orig/perl/TrapReceiver/Makefile.PL ++++ net-snmp-5.7.3+dfsg/perl/TrapReceiver/Makefile.PL +@@ -103,6 +103,8 @@ sub InitMakeParams { + } + else { + $opts = NetSNMPGetOpts(); ++$Params{'CC'} = "$ENV{'CROSS_CC'}"; ++$Params{'LD'} = "$ENV{'CROSS_CC'}"; + $Params{'LDDLFLAGS'} = "$Config{lddlflags} " . `$opts->{'nsconfig'} --ldflags`; + $Params{'LIBS'} = '-lnetsnmptrapd ' . `$opts->{'nsconfig'} --base-agent-libs`; + chomp($Params{'LIBS'}); +Index: net-snmp-5.7.3+dfsg/perl/agent/Makefile.PL +=================================================================== +--- net-snmp-5.7.3+dfsg.orig/perl/agent/Makefile.PL ++++ net-snmp-5.7.3+dfsg/perl/agent/Makefile.PL +@@ -75,6 +75,8 @@ sub InitMakeParams { + } + else { + $opts = NetSNMPGetOpts(); ++$Params{'CC'} = "$ENV{'CROSS_CC'}"; ++$Params{'LD'} = "$ENV{'CROSS_CC'}"; + $Params{'LDDLFLAGS'} = "$Config{lddlflags} " . `$opts->{'nsconfig'} --ldflags`; + $Params{'LIBS'} = `$opts->{'nsconfig'} --base-agent-libs`; + chomp($Params{'LIBS'}); +Index: net-snmp-5.7.3+dfsg/perl/agent/default_store/Makefile.PL +=================================================================== +--- net-snmp-5.7.3+dfsg.orig/perl/agent/default_store/Makefile.PL ++++ net-snmp-5.7.3+dfsg/perl/agent/default_store/Makefile.PL +@@ -66,6 +66,8 @@ sub InitMakeParams { + } + else { + $opts = NetSNMPGetOpts("../../"); ++$Params{'CC'} = "$ENV{'CROSS_CC'}"; ++$Params{'LD'} = "$ENV{'CROSS_CC'}"; + $Params{'LIBS'} = `$opts->{'nsconfig'} --libs`; + chomp($Params{'LIBS'}); + $Params{'CCFLAGS'} = `$opts->{'nsconfig'} --cflags`; +Index: net-snmp-5.7.3+dfsg/perl/default_store/Makefile.PL +=================================================================== +--- net-snmp-5.7.3+dfsg.orig/perl/default_store/Makefile.PL ++++ net-snmp-5.7.3+dfsg/perl/default_store/Makefile.PL +@@ -64,6 +64,8 @@ sub InitMakeParams { + } + else { + $opts = NetSNMPGetOpts(); ++$Params{'CC'} = "$ENV{'CROSS_CC'}"; ++$Params{'LD'} = "$ENV{'CROSS_CC'}"; + $Params{'LDDLFLAGS'} = "$Config{lddlflags} " . `$opts->{'nsconfig'} --ldflags`; + $Params{'LIBS'} = `$opts->{'nsconfig'} --libs`; + chomp($Params{'LIBS'}); From 3ef6968fde94115a1b9516c262a8b2e5c0235373 Mon Sep 17 00:00:00 2001 From: marvell Date: Thu, 17 Mar 2022 21:40:31 +0530 Subject: [PATCH 14/30] Fixed README and replaced 'sed/awk' with patches --- README.md | 3 +- sonic-slave-buster/Dockerfile.j2 | 2 +- src/iproute2/Makefile | 2 +- .../patch/cross-compile-changes.patch | 12 +++ src/kdump-tools/Makefile | 3 +- .../patch/cross-compile-changes.patch | 14 ++++ src/libyang/Makefile | 3 +- src/libyang/patch/cross-compile-changes.patch | 22 +++++ src/monit/Makefile | 3 +- src/monit/patch/cross-compile-changes.patch | 13 +++ src/ntp/Makefile | 6 +- src/openssh/Makefile | 2 +- src/openssh/patch/cross-compile-changes.patch | 13 +++ src/sonic-frr/Makefile | 14 ++-- .../patch/cross-compile-changes.patch | 84 +++++++++++++++++++ 15 files changed, 171 insertions(+), 25 deletions(-) create mode 100644 src/iproute2/patch/cross-compile-changes.patch create mode 100644 src/kdump-tools/patch/cross-compile-changes.patch create mode 100644 src/libyang/patch/cross-compile-changes.patch create mode 100644 src/monit/patch/cross-compile-changes.patch create mode 100644 src/openssh/patch/cross-compile-changes.patch create mode 100644 src/sonic-frr/patch/cross-compile-changes.patch diff --git a/README.md b/README.md index fe4b989e757..c149c277bc5 100644 --- a/README.md +++ b/README.md @@ -149,8 +149,7 @@ To build Arm32 bit for (ARMHF) platform make target/sonic-marvell-armhf.bin -To build Arm32 bit for (ARMHF) Marvell platform on amd64 host for debian buster using cross-compilation run the - following commands: +To build Arm32 bit for (ARMHF) Marvell platform on amd64 host for debian buster using cross-compilation run the following commands: # Execute make configure once to configure ASIC and ARCH for cross-compilation build diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index 83a152204bb..8be22af88b5 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -79,7 +79,7 @@ ENV DEBIAN_FRONTEND=noninteractive {%- if CROSS_BUILD_ENVIRON == "y" %} RUN apt-get install -y python3 python3-pip -RUN apt-get install -y python:$arch python3-minimal:$arch python3:$arch python-setuptools:$arch +RUN apt-get install -y python:$arch python3-minimal:$arch python3.7:$arch python3:$arch python-setuptools:$arch RUN apt-get download python3-distutils && dpkg --force-all -i python3-distutils* RUN apt-get download python3-pip && dpkg --force-all -i python3-pip* RUN which pip3 && pip3 install enum34 diff --git a/src/iproute2/Makefile b/src/iproute2/Makefile index b38c2e7f826..fe5cf17a292 100644 --- a/src/iproute2/Makefile +++ b/src/iproute2/Makefile @@ -18,7 +18,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : patch -p1 < ../patch/0001-patch-macsec-xpn-support.patch ifeq ($(CROSS_BUILD_ENVIRON), y) - sed -i 's/#include /#include \n#include /' tc/tc_core.c + patch -p1 < ../patch/cross-compile-changes.patch dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) diff --git a/src/iproute2/patch/cross-compile-changes.patch b/src/iproute2/patch/cross-compile-changes.patch new file mode 100644 index 00000000000..a38df063068 --- /dev/null +++ b/src/iproute2/patch/cross-compile-changes.patch @@ -0,0 +1,12 @@ +Index: iproute2-5.10.0/tc/tc_core.c +=================================================================== +--- iproute2-5.10.0.orig/tc/tc_core.c ++++ iproute2-5.10.0/tc/tc_core.c +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + + #include "utils.h" + #include "tc_core.h" diff --git a/src/kdump-tools/Makefile b/src/kdump-tools/Makefile index 2d3e0594ebf..aad9eb99ec7 100644 --- a/src/kdump-tools/Makefile +++ b/src/kdump-tools/Makefile @@ -22,8 +22,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build source and Debian packages ifeq ($(CROSS_BUILD_ENVIRON), y) - sed -i "s/dh_auto_build \-\-/dh_auto_build -- TARGET=$(CONFIGURED_ARCH)/" debian/rules - dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -Tbinary-indep -j$(SONIC_CONFIG_MAKE_JOBS) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/kdump-tools/patch/cross-compile-changes.patch b/src/kdump-tools/patch/cross-compile-changes.patch new file mode 100644 index 00000000000..87a8a4b81c4 --- /dev/null +++ b/src/kdump-tools/patch/cross-compile-changes.patch @@ -0,0 +1,14 @@ +Index: kdump-tools-1.6.8.4/debian/rules +=================================================================== +--- kdump-tools-1.6.8.4.orig/debian/rules ++++ kdump-tools-1.6.8.4/debian/rules +@@ -20,6 +20,9 @@ endif + %: + dh $@ + ++override_dh_auto_build: ++ dh_auto_build TARGET=$(CONFIGURED_ARCH) ++ + override_dh_gencontrol: + dh_gencontrol -- $(SUBSTVARS) + diff --git a/src/libyang/Makefile b/src/libyang/Makefile index fe57b862cee..0d80c78d4c5 100644 --- a/src/libyang/Makefile +++ b/src/libyang/Makefile @@ -16,10 +16,9 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg import -s ../patch/series ifeq ($(CROSS_BUILD_ENVIRON), y) + patch -p1 < ../patch/cross-compile-changes.patch sed -i "s/cmake/CC=$$CROSS_CC CXX=$$CROSS_CXX cmake/g" packages/debian.rules.in - sed -i "2 i set(CMAKE_OBJCOPY $$CROSS_BIN_PATH/objcopy CACHE PATH \"\" FORCE)" CMakeLists.txt sed -i "/Architecture/ s/any/$$CONFIGURED_ARCH/; /Build-Depends/ s/gcc//" packages/debian.control.in - sed -i "/debuild/ s/\-uc/\-uc -a $$CONFIGURED_ARCH/" packages/local-deb.sh.in endif mkdir build diff --git a/src/libyang/patch/cross-compile-changes.patch b/src/libyang/patch/cross-compile-changes.patch new file mode 100644 index 00000000000..5f003cb78c3 --- /dev/null +++ b/src/libyang/patch/cross-compile-changes.patch @@ -0,0 +1,22 @@ +Index: libyang-1.0.73/CMakeLists.txt +=================================================================== +--- libyang-1.0.73.orig/CMakeLists.txt ++++ libyang-1.0.73/CMakeLists.txt +@@ -1,4 +1,5 @@ + cmake_minimum_required(VERSION 2.8.12) ++set(CMAKE_OBJCOPY $(CROSS_BIN_PATH)/objcopy CACHE PATH "" FORCE) + + # force out-of-source build + if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) +Index: libyang-1.0.73/packages/local-deb.sh.in +=================================================================== +--- libyang-1.0.73.orig/packages/local-deb.sh.in ++++ libyang-1.0.73/packages/local-deb.sh.in +@@ -22,6 +22,6 @@ cp "@PROJECT_SOURCE_DIR@/packages/debian + echo -e "@PACKAGE_NAME@ (@LIBYANG_VERSION@) stable; urgency=low\n" >debian/changelog + git log -10 --pretty=format:' * %s (%aN)%n' 2>/dev/null >>debian/changelog || echo -e " * unknown changes \n" >>debian/changelog + git log -1 --pretty=format:'%n -- %aN <%aE> %aD%n' >>debian/changelog 2>/dev/null || echo " -- ${USER} <${USER}@`hostname`> `date -R`" >>debian/changelog +-debuild --no-lintian -i -b -us -uc ++debuild --no-lintian -i -b -us -uc -a ${CONFIGURED_ARCH} + mv ../*.deb debs + export LC_TIME=$LOCAL_LC_TIME diff --git a/src/monit/Makefile b/src/monit/Makefile index ab9b1129458..308daac8a2e 100644 --- a/src/monit/Makefile +++ b/src/monit/Makefile @@ -24,8 +24,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg import -s ../patch/series ifeq ($(CROSS_BUILD_ENVIRON), y) - # Add monit configure settings - sed -i "s/dh_auto_configure \-\-/dh_auto_configure -- libmonit_cv_setjmp_available=yes libmonit_cv_vsnprintf_c99_conformant=yes/g" debian/rules + patch -p1 < ../patch/cross-compile-changes.patch endif # Build source and Debian packages diff --git a/src/monit/patch/cross-compile-changes.patch b/src/monit/patch/cross-compile-changes.patch new file mode 100644 index 00000000000..2affa602d48 --- /dev/null +++ b/src/monit/patch/cross-compile-changes.patch @@ -0,0 +1,13 @@ +Index: monit/debian/rules +=================================================================== +--- monit.orig/debian/rules ++++ monit/debian/rules +@@ -4,7 +4,7 @@ + dh $@ --with autoreconf + + override_dh_auto_configure: +- dh_auto_configure -- \ ++ dh_auto_configure -- libmonit_cv_setjmp_available=yes libmonit_cv_vsnprintf_c99_conformant=yes \ + --sysconfdir=/etc/monit + + override_dh_fixperms: diff --git a/src/ntp/Makefile b/src/ntp/Makefile index 91a6f1d96fb..fe0363fb267 100644 --- a/src/ntp/Makefile +++ b/src/ntp/Makefile @@ -39,11 +39,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : sed -i 's/\/usr\/sbin\/ntpd {/\/usr\/sbin\/ntpd flags=(attach_disconnected complain) {/' debian/apparmor-profile ifeq ($(CROSS_BUILD_ENVIRON), y) - sed -i 's/dh_auto_configure \--/dh_auto_configure -- --with-yielding-select=yes /g' debian/rules - # Remove nfp openssl variables = yes from cross-config.cache - sudo awk '!/openssl/{print}' /etc/dpkg-cross/cross-config.cache > ./cross-config.cache - sudo cp ./cross-config.cache /etc/dpkg-cross/cross-config.cache - rm ./cross-config.cache + sed -i 's/dh_auto_configure \--/dh_auto_configure -- --with-yielding-select=yes --with-openssl-incdir=no /g' debian/rules endif # Build source and Debian packages with the symbols diff --git a/src/openssh/Makefile b/src/openssh/Makefile index 06aca5ae293..ec7942fe7e5 100644 --- a/src/openssh/Makefile +++ b/src/openssh/Makefile @@ -20,7 +20,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build package ifeq ($(CROSS_BUILD_ENVIRON), y) - sed -i "s#\-\-with-kerberos5=\/usr#--with-kerberos5-libdir=$$CROSS_PKGS_LIB_PATH#g" debian/rules + patch -p1 < ../patch/cross-compile-changes.patch dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else sudo http_proxy=$(http_proxy) apt-get -y build-dep openssh diff --git a/src/openssh/patch/cross-compile-changes.patch b/src/openssh/patch/cross-compile-changes.patch new file mode 100644 index 00000000000..511c8c68438 --- /dev/null +++ b/src/openssh/patch/cross-compile-changes.patch @@ -0,0 +1,13 @@ +Index: openssh-server/debian/rules +=================================================================== +--- openssh-server.orig/debian/rules ++++ openssh-server/debian/rules +@@ -77,7 +77,7 @@ confflags_udeb := $(confflags) + confflags += --with-tcp-wrappers + confflags += --with-pam + confflags += --with-libedit +-confflags += --with-kerberos5=/usr ++confflags += --with-kerberos5-libdir=$(CROSS_PKGS_LIB_PATH) + confflags += --with-ssl-engine + ifeq ($(DEB_HOST_ARCH_OS),linux) + confflags += --with-selinux diff --git a/src/sonic-frr/Makefile b/src/sonic-frr/Makefile index ec26c1d02f8..ccc070fcd02 100644 --- a/src/sonic-frr/Makefile +++ b/src/sonic-frr/Makefile @@ -11,19 +11,15 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Build the package pushd ./frr git checkout -b $(FRR_BRANCH) origin/$(FRR_BRANCH) || git checkout $(FRR_BRANCH) +ifeq ($(CROSS_BUILD_ENVIRON), y) + git reset --hard +endif stg branch --create $(STG_BRANCH) $(FRR_TAG) stg import -s ../patch/series tools/tarsource.sh -V -e '-sonic' ifeq ($(CROSS_BUILD_ENVIRON), y) - sed -i "s/dh_auto_configure \-\-/mkdir -p build \&\& dh_auto_configure --builddirectory=build --/g" debian/rules - sed -i "s/dh_auto_build \-\-/cd build \&\& ln -s ..\/debian debian \&\& dh_auto_build --/g" debian/rules - sed -i "s/\tdh_auto_install/\tcd build \&\& dh_auto_install/g" debian/rules - sed -i "s/tools\/frrinit.sh/build\/tools\/frrinit.sh/g" debian/rules - sed -i "s/doc\/user\/_build\/texinfo/build\/doc\/user\/_build\/texinfo/g" debian/frr-doc.install - sed -i "s/doc\/manpages/build\/doc\/manpages/g" debian/frr.manpages - sed -i "s/doc\/user\/_build\/texinfo/build\/doc\/user\/_build\/texinfo/g" debian/frr-doc.info - + patch -p1 < ../patch/cross-compile-changes.patch CFLAGS="-I $$CROSS_PERL_CORE_PATH" LDFLAGS=" -L $$CROSS_PKGS_LIB_PATH" dpkg-buildpackage -rfakeroot -b -d -us -uc -Ppkg.frr.nortrlib -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -Ppkg.frr.nortrlib -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) @@ -31,7 +27,7 @@ endif stg undo || true git clean -xfdf git checkout $(FRR_BRANCH) - stg branch --delete $(STG_BRANCH) + stg branch --delete --force $(STG_BRANCH) git rev-parse --short HEAD | xargs git checkout ifeq ($(CROSS_BUILD_ENVIRON), y) git reset --hard diff --git a/src/sonic-frr/patch/cross-compile-changes.patch b/src/sonic-frr/patch/cross-compile-changes.patch new file mode 100644 index 00000000000..1aad9e3b44f --- /dev/null +++ b/src/sonic-frr/patch/cross-compile-changes.patch @@ -0,0 +1,84 @@ +Index: frr/debian/frr-doc.info +=================================================================== +--- frr.orig/debian/frr-doc.info ++++ frr/debian/frr-doc.info +@@ -1 +1 @@ +-doc/user/_build/texinfo/frr.info ++build/doc/user/_build/texinfo/frr.info +Index: frr/debian/frr.manpages +=================================================================== +--- frr.orig/debian/frr.manpages ++++ frr/debian/frr.manpages +@@ -1,16 +1,16 @@ +-doc/manpages/_build/man/frr-bgpd.8 +-doc/manpages/_build/man/frr-eigrpd.8 +-doc/manpages/_build/man/frr-fabricd.8 +-doc/manpages/_build/man/frr-isisd.8 +-doc/manpages/_build/man/frr-ldpd.8 +-doc/manpages/_build/man/frr-nhrpd.8 +-doc/manpages/_build/man/frr-ospf6d.8 +-doc/manpages/_build/man/frr-ospfd.8 +-doc/manpages/_build/man/frr-pimd.8 +-doc/manpages/_build/man/frr-ripd.8 +-doc/manpages/_build/man/frr-ripngd.8 +-doc/manpages/_build/man/frr-watchfrr.8 +-doc/manpages/_build/man/frr-zebra.8 +-doc/manpages/_build/man/frr.1 +-doc/manpages/_build/man/mtracebis.8 +-doc/manpages/_build/man/vtysh.1 ++build/doc/manpages/_build/man/frr-bgpd.8 ++build/doc/manpages/_build/man/frr-eigrpd.8 ++build/doc/manpages/_build/man/frr-fabricd.8 ++build/doc/manpages/_build/man/frr-isisd.8 ++build/doc/manpages/_build/man/frr-ldpd.8 ++build/doc/manpages/_build/man/frr-nhrpd.8 ++build/doc/manpages/_build/man/frr-ospf6d.8 ++build/doc/manpages/_build/man/frr-ospfd.8 ++build/doc/manpages/_build/man/frr-pimd.8 ++build/doc/manpages/_build/man/frr-ripd.8 ++build/doc/manpages/_build/man/frr-ripngd.8 ++build/doc/manpages/_build/man/frr-watchfrr.8 ++build/doc/manpages/_build/man/frr-zebra.8 ++build/doc/manpages/_build/man/frr.1 ++build/doc/manpages/_build/man/mtracebis.8 ++build/doc/manpages/_build/man/vtysh.1 +Index: frr/debian/rules +=================================================================== +--- frr.orig/debian/rules ++++ frr/debian/rules +@@ -36,7 +36,7 @@ export PYTHON=python3 + + override_dh_auto_configure: + $(shell dpkg-buildflags --export=sh); \ +- dh_auto_configure -- \ ++ mkdir -p build && dh_auto_configure --builddirectory=build -- \ + --enable-exampledir=/usr/share/doc/frr/examples/ \ + --localstatedir=/var/run/frr \ + --sbindir=/usr/lib/frr \ +@@ -68,7 +68,7 @@ override_dh_auto_configure: + # end + + override_dh_auto_install: +- dh_auto_install ++ cd build && dh_auto_install + + sed -e '1c #!/usr/bin/python3' -i debian/tmp/usr/lib/frr/frr-reload.py + sed -e '1c #!/usr/bin/python3' -i debian/tmp/usr/lib/frr/generate_support_bundle.py +@@ -77,7 +77,7 @@ override_dh_auto_install: + ifeq ($(filter pkg.frr.nosystemd,$(DEB_BUILD_PROFILES)),) + cp tools/frr.service debian/frr.service + endif +- cp tools/frrinit.sh debian/frr.init ++ cp build/tools/frrinit.sh debian/frr.init + -rm -f debian/tmp/usr/lib/frr/frr + + # install config files +@@ -99,7 +99,7 @@ endif + ln -s /usr/share/javascript/underscore/underscore.js debian/tmp/usr/share/doc/frr/html/_static/underscore.js + + override_dh_auto_build: +- dh_auto_build -- $(MAKE_SILENT) ++ cd build && ln -s ../debian debian && dh_auto_build -- $(MAKE_SILENT) + + override_dh_installinit: + dh_installinit -r From 4f69553a8b8b3c3ed2cb9a9b28b2101c044c85a8 Mon Sep 17 00:00:00 2001 From: marvell Date: Sun, 27 Mar 2022 12:57:19 +0530 Subject: [PATCH 15/30] Fixed ntp build to use openssl --- src/ntp/Makefile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ntp/Makefile b/src/ntp/Makefile index fe0363fb267..c0103ba7810 100644 --- a/src/ntp/Makefile +++ b/src/ntp/Makefile @@ -39,12 +39,17 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : sed -i 's/\/usr\/sbin\/ntpd {/\/usr\/sbin\/ntpd flags=(attach_disconnected complain) {/' debian/apparmor-profile ifeq ($(CROSS_BUILD_ENVIRON), y) - sed -i 's/dh_auto_configure \--/dh_auto_configure -- --with-yielding-select=yes --with-openssl-incdir=no /g' debian/rules + sed -i 's/dh_auto_configure \--/dh_auto_configure -- --with-yielding-select=yes /g' debian/rules + echo ". $(CONFIG_SITE)" > fix.ntp.cross-config.$(CONFIGURED_ARCH) + echo "unset with_openssl_libdir" >> fix.ntp.cross-config.$(CONFIGURED_ARCH) + echo "unset with_openssl_incdir" >> fix.ntp.cross-config.$(CONFIGURED_ARCH) + rm -f cross-config.cache + ln -s /etc/dpkg-cross/cross-config.cache cross-config.cache endif # Build source and Debian packages with the symbols ifeq ($(CROSS_BUILD_ENVIRON), y) - dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + CONFIG_SITE=`pwd`/fix.ntp.cross-config.$(CONFIGURED_ARCH) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif From 80446dd3483f9e86e171251e984373ebc57e0008 Mon Sep 17 00:00:00 2001 From: marvell Date: Tue, 5 Apr 2022 21:51:05 +0530 Subject: [PATCH 16/30] Unuse sonic-slave-buster/cross-build-arm-python-reqirements.sh script (put all prebuilt python packages cross-compilation/install inside Dockerfile.j2). Fixed src/snmpd/Makefile to use -j1 in all cases --- sonic-slave-buster/Dockerfile.j2 | 17 ++++++----------- src/snmpd/Makefile | 8 ++------ 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index 8be22af88b5..78cff3253e3 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -85,30 +85,25 @@ RUN apt-get download python3-pip && dpkg --force-all -i python3-pip* RUN which pip3 && pip3 install enum34 RUN pip3 install virtualenv -RUN file /usr/bin/python2* && file /usr/bin/python3* - # Create target arm python2/3 virtual environments with all required packages installed RUN mkdir /python_virtualenv RUN cd /python_virtualenv && python3 -m virtualenv -p /usr/bin/python env2 RUN cd /python_virtualenv && python3 -m virtualenv --copies -p /usr/bin/python3 env3 -RUN PATH=/python_virtualenv/env2/bin/:$PATH pip2 install setuptools==40.8.0 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==4.4 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 j2cli==0.3.10 PyYAML==5.4.1 pexpect==4.6.0 Pympler==0.8 ctypesgen==1.0.2 natsort redis -RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install setuptools==49.6.00 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==5.2 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 PyYAML==5.4.1 redis pexpect==4.8.0 Pympler==0.8 parameterized natsort Jinja2==2.10 && ln -s /python_virtualenv/env3/bin/pytest /python_virtualenv/env3/bin/pytest-3 +RUN PATH=/python_virtualenv/env2/bin/:$PATH pip2 install setuptools==40.8.0 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==4.4 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 j2cli==0.3.10 PyYAML==5.4.1 pexpect==4.6.0 Pympler==0.8 ctypesgen==1.0.2 natsort==6.2.1 redis==3.5.3 +RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install setuptools==49.6.00 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==5.2 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 PyYAML==5.4.1 redis==3.5.3 pexpect==4.8.0 Pympler==0.8 parameterized natsort==6.2.1 Jinja2==2.10 && ln -s /python_virtualenv/env3/bin/pytest /python_virtualenv/env3/bin/pytest-3 RUN apt-get --fix-broken install -y RUN LIBPYTHON3_DEPS="`apt-cache depends libpython3-dev:$arch |grep Depends|awk {'print \$2;'}|tr "\n" " "`" && apt-get install -y libpython2.7-dev:$arch $LIBPYTHON3_DEPS libxml2-dev:$arch libxslt-dev:$arch libssl-dev:$arch libz-dev:$arch -RUN file /python_virtualenv/env3/bin/python3 && file /python_virtualenv/env2/bin/python - RUN apt-get install -y swig libssl-dev -COPY ./cross-build-arm-python-reqirements.sh ./ # Cross-compile the heaviest python packages for arm ARG pre_built_target_dir=PRE_BUILT_TARGET -RUN PATH=/python_virtualenv/env2/bin/:/python_virtualenv/env3/bin/:$PATH CC=$CROSS_CC PY_PLAT=$PYTHON_CROSS_PLATFORM ./cross-build-arm-python-reqirements.sh $pre_built_target_dir && ls -l $pre_built_target_dir -RUN rm ./cross-build-arm-python-reqirements.sh -RUN PATH=/python_virtualenv/env2/bin/:$PATH pip install $pre_built_target_dir/*cp27*.whl -RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install $pre_built_target_dir/*cp37*.whl +RUN rm -rf $pre_built_target_dir && mkdir $pre_built_target_dir && rm -rf python-cache && mkdir python-cache +RUN PATH=/python_virtualenv/env2/bin/:$PATH CC=$CROSS_CC pip2 install --cache-dir python-cache grpcio==1.38.0 grpcio-tools==1.20.0 m2crypto==0.36.0 bitarray==1.5.3 lxml==4.6.3 +RUN PATH=/python_virtualenv/env3/bin/:$PATH CC=$CROSS_CC pip3 install --cache-dir python-cache grpcio==1.38.0 grpcio-tools==1.20.0 m2crypto==0.36.0 bitarray==1.5.3 lxml==4.6.3 +RUN find python-cache -name "*.whl" -exec cp {} $PRE_BUILT_TARGET_DIR \; RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip list diff --git a/src/snmpd/Makefile b/src/snmpd/Makefile index cd7c93aa16f..1a08feb539c 100644 --- a/src/snmpd/Makefile +++ b/src/snmpd/Makefile @@ -56,15 +56,11 @@ endif stg init stg import -s ../patch-$(SNMPD_VERSION)/series -ifeq ($(MULTIARCH_QEMU_ENVIRON), y) +ifneq ($(CROSS_BUILD_ENVIRON), y) dpkg-buildpackage -rfakeroot -b -d -us -uc -j1 --admindir $(SONIC_DPKG_ADMINDIR) else -ifeq ($(CROSS_BUILD_ENVIRON), y) patch -p1 < ../patch-$(SNMPD_VERSION)/cross-compile-changes.patch - CFLAGS="-I $$CROSS_PERL_CORE_PATH" LDFLAGS=" -L$$CROSS_PKGS_LIB_PATH" dpkg-buildpackage -rfakeroot -b -d -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) -else - dpkg-buildpackage -rfakeroot -b -d -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) -endif + CFLAGS="-I $$CROSS_PERL_CORE_PATH" LDFLAGS=" -L$$CROSS_PKGS_LIB_PATH" dpkg-buildpackage -rfakeroot -b -d -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j1 --admindir $(SONIC_DPKG_ADMINDIR) endif popd From e44472ed80e8219c31dcafdd144995b30b209d1f Mon Sep 17 00:00:00 2001 From: marvell Date: Tue, 3 May 2022 18:59:25 +0530 Subject: [PATCH 17/30] Clean armhf cross-compilation build fixes --- slave.mk | 4 +++- sonic-slave-buster/Dockerfile.j2 | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/slave.mk b/slave.mk index 100aacde9cd..0f0be6024d4 100644 --- a/slave.mk +++ b/slave.mk @@ -737,10 +737,12 @@ ifneq ($(CROSS_BUILD_ENVIRON),y) # Use pip instead of later setup.py to install dependencies into user home, but uninstall self pip$($*_PYTHON_VERSION) install . && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name` python$($*_PYTHON_VERSION) setup.py test $(LOG); fi + python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) else + pip$($*_PYTHON_VERSION) install . && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name` PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py test $(LOG); fi + PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) endif - python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) # clean up if [ -f ../$(notdir $($*_SRC_PATH)).patch/series ]; then quilt pop -a -f; [ -d .pc ] && rm -rf .pc; fi popd $(LOG_SIMPLE) diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index 2f4f21f0922..d5f0207fb79 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -92,7 +92,7 @@ RUN cd /python_virtualenv && python3 -m virtualenv -p /usr/bin/python env2 RUN cd /python_virtualenv && python3 -m virtualenv --copies -p /usr/bin/python3 env3 RUN PATH=/python_virtualenv/env2/bin/:$PATH pip2 install setuptools==40.8.0 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==4.4 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 j2cli==0.3.10 PyYAML==5.4.1 pexpect==4.6.0 Pympler==0.8 ctypesgen==1.0.2 natsort==6.2.1 redis==3.5.3 -RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install setuptools==49.6.00 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==5.2 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 PyYAML==5.4.1 redis==3.5.3 pexpect==4.8.0 Pympler==0.8 parameterized natsort==6.2.1 Jinja2==2.10 && ln -s /python_virtualenv/env3/bin/pytest /python_virtualenv/env3/bin/pytest-3 +RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install setuptools==49.6.00 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==5.2 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 PyYAML==5.4.1 redis==3.5.3 pexpect==4.8.0 Pympler==0.8 parameterized natsort==6.2.1 MarkupSafe==2.0.1 Jinja2==3.0.3 && ln -s /python_virtualenv/env3/bin/pytest /python_virtualenv/env3/bin/pytest-3 RUN apt-get --fix-broken install -y RUN LIBPYTHON3_DEPS="`apt-cache depends libpython3-dev:$arch |grep Depends|awk {'print \$2;'}|tr "\n" " "`" && apt-get install -y libpython2.7-dev:$arch $LIBPYTHON3_DEPS libxml2-dev:$arch libxslt-dev:$arch libssl-dev:$arch libz-dev:$arch @@ -102,9 +102,9 @@ RUN apt-get install -y swig libssl-dev # Cross-compile the heaviest python packages for arm ARG pre_built_target_dir=PRE_BUILT_TARGET RUN rm -rf $pre_built_target_dir && mkdir $pre_built_target_dir && rm -rf python-cache && mkdir python-cache -RUN PATH=/python_virtualenv/env2/bin/:$PATH CC=$CROSS_CC pip2 install --cache-dir python-cache grpcio==1.38.0 grpcio-tools==1.20.0 m2crypto==0.36.0 bitarray==1.5.3 lxml==4.6.3 -RUN PATH=/python_virtualenv/env3/bin/:$PATH CC=$CROSS_CC pip3 install --cache-dir python-cache grpcio==1.38.0 grpcio-tools==1.20.0 m2crypto==0.36.0 bitarray==1.5.3 lxml==4.6.3 -RUN find python-cache -name "*.whl" -exec cp {} $PRE_BUILT_TARGET_DIR \; +RUN PATH=/python_virtualenv/env2/bin/:$PATH CC=$CROSS_CC pip2 install --cache-dir python-cache grpcio==1.38.0 grpcio-tools==1.20.0 m2crypto==0.36.0 bitarray==1.5.3 lxml==4.6.5 +RUN PATH=/python_virtualenv/env3/bin/:$PATH CC=$CROSS_CC pip3 install --cache-dir python-cache grpcio==1.38.0 grpcio-tools==1.20.0 m2crypto==0.36.0 bitarray==1.5.3 lxml==4.6.5 +RUN find python-cache -name "*.whl" -exec cp {} $pre_built_target_dir \; RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip list From bdc6c4778104a8ff0fd0fa4e240f08342adc460d Mon Sep 17 00:00:00 2001 From: marvell Date: Thu, 16 Jun 2022 13:05:51 +0530 Subject: [PATCH 18/30] Ported cross-compilation armhf build to bullseye --- dockers/docker-base-bullseye/Dockerfile.j2 | 4 +- .../Dockerfile.j2 | 8 ++ .../docker-config-engine-buster/Dockerfile.j2 | 4 +- dockers/docker-platform-monitor/Dockerfile.j2 | 4 +- .../docker-sonic-mgmt-framework/Dockerfile.j2 | 2 +- slave.mk | 12 +- sonic-slave-bullseye/Dockerfile.j2 | 117 +++++++++++++++++- sonic-slave-bullseye/Dockerfile.user.j2 | 2 +- sonic-slave-buster/Dockerfile.j2 | 4 +- src/snmpd/Makefile | 4 + .../patch/cross-compile-changes.patch | 23 +++- src/tacacs/audisp/Makefile | 6 +- 12 files changed, 164 insertions(+), 26 deletions(-) diff --git a/dockers/docker-base-bullseye/Dockerfile.j2 b/dockers/docker-base-bullseye/Dockerfile.j2 index cae55517417..d12e49e51e1 100644 --- a/dockers/docker-base-bullseye/Dockerfile.j2 +++ b/dockers/docker-base-bullseye/Dockerfile.j2 @@ -1,8 +1,8 @@ {% set prefix = DEFAULT_CONTAINER_REGISTRY %} {% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} -{% if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} +{% if CONFIGURED_ARCH == "armhf" and (MULTIARCH_QEMU_ENVIRON == "y" or CROSS_BUILD_ENVIRON == "y") %} FROM {{ prefix }}multiarch/debian-debootstrap:armhf-bullseye -{% elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} +{% elif CONFIGURED_ARCH == "arm64" and (MULTIARCH_QEMU_ENVIRON == "y" or CROSS_BUILD_ENVIRON == "y") %} FROM {{ prefix }}multiarch/debian-debootstrap:arm64-bullseye {% else %} FROM {{ prefix }}{{DOCKER_BASE_ARCH}}/debian:bullseye diff --git a/dockers/docker-config-engine-bullseye/Dockerfile.j2 b/dockers/docker-config-engine-bullseye/Dockerfile.j2 index 9d0ca97c760..f40843bdfdd 100644 --- a/dockers/docker-config-engine-bullseye/Dockerfile.j2 +++ b/dockers/docker-config-engine-bullseye/Dockerfile.j2 @@ -16,6 +16,14 @@ RUN apt-get install -y \ libz-dev {%- endif %} +{%- if CROSS_BUILD_ENVIRON == "y" %} +RUN mkdir prebuilt-python-wheels +COPY prebuilt-python-wheels/* prebuilt-python-wheels/ +RUN pip3 install prebuilt-python-wheels/lxml*cp3*.whl +RUN pip3 install prebuilt-python-wheels/bitarray*cp3*.whl +RUN rm -rf prebuilt-python-wheels +{%- endif %} + # For sonic-config-engine Python 3 package # Explicitly install pyangbind here, as pyangbind causes enum34 to be installed. # enum34 causes Python 're' package to not work properly as it redefines an incompatible enum.py module diff --git a/dockers/docker-config-engine-buster/Dockerfile.j2 b/dockers/docker-config-engine-buster/Dockerfile.j2 index 5a2c70f9480..1bbe2cb76b8 100644 --- a/dockers/docker-config-engine-buster/Dockerfile.j2 +++ b/dockers/docker-config-engine-buster/Dockerfile.j2 @@ -19,8 +19,8 @@ RUN apt-get install -y \ {%- if CROSS_BUILD_ENVIRON == "y" %} RUN mkdir prebuilt-python-wheels COPY prebuilt-python-wheels/* prebuilt-python-wheels/ -RUN pip3 install prebuilt-python-wheels/lxml*cp37*.whl -RUN pip3 install prebuilt-python-wheels/bitarray*cp37*.whl +RUN pip3 install prebuilt-python-wheels/lxml*cp3*.whl +RUN pip3 install prebuilt-python-wheels/bitarray*cp3*.whl RUN rm -rf prebuilt-python-wheels {%- endif %} diff --git a/dockers/docker-platform-monitor/Dockerfile.j2 b/dockers/docker-platform-monitor/Dockerfile.j2 index 788a3376010..54f6c93d7ef 100755 --- a/dockers/docker-platform-monitor/Dockerfile.j2 +++ b/dockers/docker-platform-monitor/Dockerfile.j2 @@ -36,8 +36,8 @@ RUN pip2 install 'setuptools==40.8.0' {%- if CROSS_BUILD_ENVIRON == "y" %} RUN mkdir prebuilt-python-wheels COPY prebuilt-python-wheels/* prebuilt-python-wheels/ -RUN pip2 install prebuilt-python-wheels/lxml*cp27*.whl -RUN pip3 install prebuilt-python-wheels/lxml*cp37*.whl +RUN pip2 install prebuilt-python-wheels/lxml*cp2*.whl +RUN pip3 install prebuilt-python-wheels/lxml*cp3*.whl RUN rm -rf prebuilt-python-wheels {%- endif %} diff --git a/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 b/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 index c9e16fcb1c7..30329daa3ae 100644 --- a/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 +++ b/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 @@ -12,7 +12,7 @@ RUN apt-get update && \ {%- if CROSS_BUILD_ENVIRON == "y" %} RUN mkdir prebuilt-python-wheels COPY prebuilt-python-wheels/* prebuilt-python-wheels/ -RUN pip3 install prebuilt-python-wheels/grpcio*cp37*.whl +RUN pip3 install prebuilt-python-wheels/grpcio*cp3*.whl RUN rm -rf prebuilt-python-wheels {%- endif %} diff --git a/slave.mk b/slave.mk index 0f0be6024d4..7a0b5d78e18 100644 --- a/slave.mk +++ b/slave.mk @@ -265,7 +265,10 @@ endif ifeq ($(CROSS_BUILD_ENVIRON),y) DEB_BUILD_OPTIONS_GENERIC += nocheck export $(dpkg-architecture -a$(CONFIGURED_ARCH)) -ANT_DEB_CROSS_OPT := -a$(CONFIGURED_ARCH) -Pcross,nocheck +ifeq ($(ENABLE_PY2_MODULES),n) +ANT_DEB_CROSS_PROFILES=nopython2 +endif +ANT_DEB_CROSS_OPT := -a$(CONFIGURED_ARCH) -Pcross,nocheck,$(ANT_DEB_CROSS_PROFILES) ANT_DEB_CONFIG := CONFIG_SITE=/etc/dpkg-cross/cross-config.$(CONFIGURED_ARCH) VIRTENV_BASE_CROSS_PYTHON2 = /python_virtualenv/env2/ @@ -658,7 +661,10 @@ ifneq ($(CROSS_BUILD_ENVIRON),y) { sudo DEBIAN_FRONTEND=noninteractive dpkg -i $(DEBS_PATH)/$* $(LOG) && rm -d $(DEBS_PATH)/dpkg_lock && break; } || { rm -d $(DEBS_PATH)/dpkg_lock && sudo lsof /var/lib/dpkg/lock-frontend && ps aux && exit 1 ; } else # Relocate debian packages python libraries to the cross python virtual env location - { sudo DEBIAN_FRONTEND=noninteractive dpkg -i $(if $(findstring $(LINUX_HEADERS),$*),--force-depends) $(DEBS_PATH)/$* $(LOG) && rm -rf tmp && mkdir tmp && dpkg -x $(DEBS_PATH)/$* tmp && (sudo cp -rf tmp/usr/lib/python2.7/dist-packages/* /python_virtualenv/env2/lib/python2.7/site-packages/ 2>/dev/null || true) && (sudo cp -rf tmp/usr/lib/python3/dist-packages/* /python_virtualenv/env3/lib/python3.7/site-packages/ 2>/dev/null || true) && rm -d $(DEBS_PATH)/dpkg_lock && break; } || { rm -d $(DEBS_PATH)/dpkg_lock && sudo lsof /var/lib/dpkg/lock-frontend && ps aux && exit 1 ; } + { sudo DEBIAN_FRONTEND=noninteractive dpkg -i $(if $(findstring $(LINUX_HEADERS),$*),--force-depends) $(DEBS_PATH)/$* $(LOG) && \ + rm -rf tmp && mkdir tmp && dpkg -x $(DEBS_PATH)/$* tmp && (sudo cp -rf tmp/usr/lib/python2*/dist-packages/* $(VIRTENV_LIB_CROSS_PYTHON2)/python2*/site-packages/ 2>/dev/null || true) && \ + (sudo cp -rf tmp/usr/lib/python3/dist-packages/* $(VIRTENV_LIB_CROSS_PYTHON3)/python3.*/site-packages/ 2>/dev/null || true) && \ + rm -d $(DEBS_PATH)/dpkg_lock && break; } || { rm -d $(DEBS_PATH)/dpkg_lock && sudo lsof /var/lib/dpkg/lock-frontend && ps aux && exit 1 ; } endif fi sleep 10 @@ -739,7 +745,7 @@ ifneq ($(CROSS_BUILD_ENVIRON),y) python$($*_PYTHON_VERSION) setup.py test $(LOG); fi python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) else - pip$($*_PYTHON_VERSION) install . && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name` + PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} sudo -E $(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION))/pip$($*_PYTHON_VERSION) install . && sudo -E $(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION))/pip$($*_PYTHON_VERSION) uninstall --yes `$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION))/python$($*_PYTHON_VERSION) setup.py --name` PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py test $(LOG); fi PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) endif diff --git a/sonic-slave-bullseye/Dockerfile.j2 b/sonic-slave-bullseye/Dockerfile.j2 index 5e972330e27..46777d9b797 100644 --- a/sonic-slave-bullseye/Dockerfile.j2 +++ b/sonic-slave-bullseye/Dockerfile.j2 @@ -7,6 +7,14 @@ COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin FROM {{ prefix }}multiarch/qemu-user-static:x86_64-aarch64-6.1.0-8 as qemu FROM {{ prefix }}multiarch/debian-debootstrap:arm64-bullseye COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin +{%- elif CONFIGURED_ARCH == "armhf" and CROSS_BUILD_ENVIRON == "y" %} +FROM {{ prefix }}multiarch/qemu-user-static:x86_64-arm as qemu +FROM {{ prefix }}debian:bullseye +COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin +{%- elif CONFIGURED_ARCH == "arm64" and CROSS_BUILD_ENVIRON == "y" %} +FROM {{ prefix }}multiarch/qemu-user-static:x86_64-aarch64 as qemu +FROM {{ prefix }}debian:bullseye +COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin {%- else -%} FROM {{ prefix }}debian:bullseye {%- endif %} @@ -24,7 +32,7 @@ RUN echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ bull echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=amd64] http://packages.trafficmanager.net/debian/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list -{%- if CONFIGURED_ARCH == "armhf" %} +{%- if CONFIGURED_ARCH == "armhf" and CROSS_BUILD_ENVIRON != "y" %} RUN echo "deb [arch=armhf] http://deb.debian.org/debian bullseye main contrib non-free" > /etc/apt/sources.list && \ echo "deb-src [arch=armhf] http://deb.debian.org/debian bullseye main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=armhf] http://deb.debian.org/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list && \ @@ -34,7 +42,7 @@ RUN echo "deb [arch=armhf] http://deb.debian.org/debian bullseye main contrib no echo 'deb [arch=armhf] http://ftp.debian.org/debian bullseye-backports main' >> /etc/apt/sources.list && \ echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=armhf] http://packages.trafficmanager.net/debian/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list -{%- elif CONFIGURED_ARCH == "arm64" %} +{%- elif CONFIGURED_ARCH == "arm64" and CROSS_BUILD_ENVIRON != "y" %} RUN echo "deb [arch=arm64] http://deb.debian.org/debian bullseye main contrib non-free" > /etc/apt/sources.list && \ echo "deb-src [arch=arm64] http://deb.debian.org/debian bullseye main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=arm64] http://deb.debian.org/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list && \ @@ -44,11 +52,68 @@ RUN echo "deb [arch=arm64] http://deb.debian.org/debian bullseye main contrib no echo 'deb [arch=arm64] http://ftp.debian.org/debian bullseye-backports main' >> /etc/apt/sources.list && \ echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian bullseye main contrib non-free" >> /etc/apt/sources.list && \ echo "deb [arch=arm64] http://packages.trafficmanager.net/debian/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list +{%- elif CROSS_BUILD_ENVIRON == "y" %} +{%- if CONFIGURED_ARCH == "armhf" %} +ARG arch=armhf +ARG gcc_arch=arm-linux-gnueabihf +ARG PYTHON_CROSS_PLATFORM=linux_armv7l +{%- elif CONFIGURED_ARCH == "arm64" %} +ARG arch=arm64 +ARG gcc_arch=aarch64-linux-gnu +ARG PYTHON_CROSS_PLATFORM=linux_aarch64 +{%- endif %} + +RUN dpkg --add-architecture $arch +RUN apt-get update +RUN apt-get install -y crossbuild-essential-$arch +RUN apt-get install -y gcc-$gcc_arch + +RUN apt-mark hold g++-$gcc_arch +RUN apt-mark hold g++-10-$gcc_arch +RUN apt-mark hold gcc-$gcc_arch +RUN apt-mark hold gcc-10-$gcc_arch + +ARG CROSS_CC=${gcc_arch}-gcc +ARG CROSS_CXX=${gcc_arch}-g++ {%- endif %} ## Make apt-get non-interactive ENV DEBIAN_FRONTEND=noninteractive +{%- if CROSS_BUILD_ENVIRON == "y" %} +RUN apt-get install -y python3 python3-pip +RUN apt-get install -y python3-minimal:$arch python3.9:$arch python3:$arch python3-dev:$arch python3-setuptools:$arch +RUN apt-get download python3-distutils && dpkg --force-all -i python3-distutils* +RUN apt-get download python3-pip && dpkg --force-all -i python3-pip* +RUN which pip3 && pip3 install enum34 +RUN pip3 install virtualenv + +# Create target arm python3 virtual environments with all required packages installed +RUN mkdir /python_virtualenv +RUN cd /python_virtualenv && python3 -m virtualenv --copies -p /usr/bin/python3 env3 + +RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install setuptools==49.6.00 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==5.2 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 PyYAML==5.4.1 redis==3.5.3 pexpect==4.8.0 Pympler==0.8 parameterized natsort==6.2.1 MarkupSafe==2.0.1 Jinja2==3.0.3 click tabulate netaddr netifaces pyroute2 pyfakefs sphinx && ln -s /python_virtualenv/env3/bin/pytest /python_virtualenv/env3/bin/pytest-3 + +RUN apt-get --fix-broken install -y +RUN LIBPYTHON3_DEPS="`apt-cache depends libpython3-dev:$arch |grep Depends|awk {'print \$2;'}|tr "\n" " "`" && apt-get install -y libpython2.7-dev:$arch $LIBPYTHON3_DEPS libxml2-dev:$arch libxslt-dev:$arch libssl-dev:$arch libz-dev:$arch + +RUN apt-get install -y swig libssl-dev + +# Cross-compile the heaviest python packages for arm +ARG pre_built_target_dir=PRE_BUILT_TARGET +RUN rm -rf $pre_built_target_dir && mkdir $pre_built_target_dir && rm -rf python-cache && mkdir python-cache +RUN PATH=/python_virtualenv/env3/bin/:$PATH CC=$CROSS_CC pip3 install --cache-dir python-cache grpcio==1.38.0 grpcio-tools==1.20.0 m2crypto==0.36.0 bitarray==1.5.3 lxml==4.6.5 +RUN find python-cache -name "*.whl" -exec cp {} $pre_built_target_dir \; + +RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip list + +# Depend on cross-compiled lxml +RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip install pyang==2.4.0 +RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip install pyangbind==0.8.1 +RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip uninstall -y enum34 +RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install --force-reinstall --no-cache-dir coverage +{%- endif %} + RUN apt-get update && apt-get install -y \ apt-utils \ default-jre-headless \ @@ -100,8 +165,10 @@ RUN apt-get update && apt-get install -y \ libsystemd-dev \ python3-ipaddr \ libcmocka-dev \ +#{%- if CROSS_BUILD_ENVIRON != "y" %} python3-all-dev \ python3-all-dbg \ +#{%- endif %} install-info \ logrotate \ # For libnl3 (local) build @@ -124,7 +191,9 @@ RUN apt-get update && apt-get install -y \ gem2deb \ libevent-dev \ libglib2.0-dev \ +#{%- if CROSS_BUILD_ENVIRON != "y" %} python3-all-dev \ +#{%- endif %} python3-twisted \ phpunit \ libbit-vector-perl \ @@ -167,7 +236,7 @@ RUN apt-get update && apt-get install -y \ {%- if CONFIGURED_ARCH == "amd64" %} linux-compiler-gcc-10-x86 \ {%- endif %} -{%- if CONFIGURED_ARCH == "armhf" %} +{%- if CONFIGURED_ARCH == "armhf" and CROSS_BUILD_ENVIRON != "y" %} linux-compiler-gcc-10-arm \ {%- endif %} linux-kbuild-5.10 \ @@ -233,7 +302,9 @@ RUN apt-get update && apt-get install -y \ sphinx-common \ python3-sphinx \ # For sonic config engine testing +{%- if CROSS_BUILD_ENVIRON != "y" %} python3-dev \ +{%- endif %} {%- if CONFIGURED_ARCH == "armhf" or CONFIGURED_ARCH == "arm64" %} libxslt-dev \ {%- endif %} @@ -354,6 +425,12 @@ RUN apt-get update && apt-get install -y \ libauparse-dev \ auditd +{%- if CROSS_BUILD_ENVIRON == "y" %} +# Arm vs. amd64 versions conflict - remove amd64 packages +RUN apt-get remove -y libnl-3-200 +RUN apt-get install -y libpcre3:$arch +{%- endif %} + RUN apt-get -y build-dep openssh # Build fix for ARM64 and ARMHF /etc/debian_version @@ -362,7 +439,7 @@ RUN apt upgrade -y base-files libc-bin=$(dpkg-query -W -f '${Version}' libc-bin) {%- endif %} # Build fix for ARMHF bullseye libsairedis -{%- if CONFIGURED_ARCH == "armhf" %} +{%- if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} # Install doxygen build dependency packages RUN apt install -y libxapian-dev yui-compressor texlive-extra-utils \ texlive-font-utils rdfind llvm-11-dev libclang-11-dev sassc faketime mat2 @@ -393,15 +470,19 @@ RUN sudo augtool --autosave "set /files/etc/dpkg/dpkg.cfg/force-confdef" ## do not modify the current configuration file, the new version is installed with a .dpkg-dist suffix RUN sudo augtool --autosave "set /files/etc/dpkg/dpkg.cfg/force-confold" +{%- if CROSS_BUILD_ENVIRON != "y" %} # For linux build RUN apt-get -y build-dep linux +{%- else %} +RUN apt-get install -y kernel-wedge +{%- endif %} # For gobgp and telemetry build RUN export VERSION=1.14.2 \ -{%- if CONFIGURED_ARCH == "armhf" %} +{%- if CONFIGURED_ARCH == "armhf" and CROSS_BUILD_ENVIRON != "y" %} && wget https://storage.googleapis.com/golang/go$VERSION.linux-armv6l.tar.gz \ && tar -C /usr/local -xzf go$VERSION.linux-armv6l.tar.gz \ -{%- elif CONFIGURED_ARCH == "arm64" %} +{%- elif CONFIGURED_ARCH == "arm64" and CROSS_BUILD_ENVIRON != "y" %} && wget https://storage.googleapis.com/golang/go$VERSION.linux-arm64.tar.gz \ && tar -C /usr/local -xzf go$VERSION.linux-arm64.tar.gz \ {%- else %} @@ -444,7 +525,9 @@ RUN pip3 install j2cli==0.3.10 # For sonic-mgmt-framework RUN pip3 install "PyYAML==5.4.1" +{%- if CROSS_BUILD_ENVIRON != "y" %} RUN pip3 install "lxml==4.6.2" +{%- endif %} # For sonic-platform-common testing RUN pip3 install redis @@ -474,7 +557,11 @@ RUN apt-get install -y vim # Install rsyslog RUN apt-get install -y rsyslog +{%- if CROSS_BUILD_ENVIRON == "y" %} +RUN cd /usr/src/gtest && CXX=$CROSS_CXX CC=$CROSS_CC cmake . && make -C /usr/src/gtest +{%- else %} RUN cd /usr/src/gtest && cmake . && make -C /usr/src/gtest +{%- endif %} RUN mkdir /var/run/sshd EXPOSE 22 @@ -500,7 +587,11 @@ RUN apt-get install -y \ {%- endif %} RUN curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - RUN add-apt-repository \ +{%- if CROSS_BUILD_ENVIRON == "y" %} + "deb https://download.docker.com/linux/debian \ +{%- else %} "deb [arch={{ CONFIGURED_ARCH }}] https://download.docker.com/linux/debian \ +{%- endif %} $(lsb_release -cs) \ stable" RUN apt-get update @@ -519,6 +610,20 @@ RUN pip3 install git+https://github.com/aristanetworks/swi-tools.git@bead66bf261 RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - RUN apt-get install -y nodejs +{%- if CROSS_BUILD_ENVIRON == "y" %} +RUN apt-get install -y rsync dh-python + +RUN apt-get install -y libelf-dev:$arch libdw-dev:$arch libbz2-dev:$arch liblzo2-dev:$arch libedit-dev:$arch libevent-dev:$arch libopts25-dev:$arch libssl-dev:$arch pps-tools:$arch libpam-cap:$arch libcap-dev:$arch libpam0g-dev:$arch libaudit-dev:$arch libgtk-3-dev:$arch libkrb5-dev:$arch libsystemd-dev:$arch libwrap0-dev:$arch libkrb5-dev:$arch libboost1.74-dev:$arch libboost-dev:$arch libzmq5:$arch libzmq3-dev:$arch libdaemon-dev:$arch libjansson-dev:$arch libmnl-dev:$arch libsensors5:$arch libsensors4-dev:$arch libperl-dev:$arch libmariadb-dev:$arch libmariadb-dev-compat:$arch libpci-dev:$arch libjson-c-dev:$arch libreadline-dev:$arch librtr-dev:$arch librrd-dev:$arch libnetfilter-conntrack-dev:$arch libnetfilter-conntrack3:$arch libnfnetlink-dev:$arch libnftnl-dev:$arch libldap2-dev:$arch libbind-export-dev:$arch check:$arch libboost-atomic-dev:$arch libboost-test-dev:$arch libglib2.0-dev:$arch libexplain-dev:$arch libc-ares-dev:$arch libiptc0:$arch libxtables12:$arch libatm1-dev:$arch libdb-dev:$arch pkg-config:$arch libnghttp2-14:$arch librtmp1:$arch libssh2-1:$arch libcjson1:$arch libcjson-dev:$arch libcurl3-gnutls:$arch libcurl3-nss-dev:$arch libboost-thread1.74-dev:$arch libboost-thread-dev:$arch libboost-system1.74-dev:$arch libboost-system-dev:$arch libgtest-dev:$arch libgmock-dev:$arch libfido2-dev:$arch libcunit1:$arch libcunit1-dev:$arch libauparse-dev:$arch libnetsnmptrapd40:$arch qtbase5-dev:$arch libboost-log-dev:$arch libboost-filesystem-dev:$arch libboost-program-options-dev:$arch + +RUN apt-get download libgirepository1.0-dev:$arch && dpkg --force-all -i libgirepository1.0-dev* +RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install pycairo + +# Install libpcsclite-dev for wpasupplicant using download because regular install removes amd64 python package +RUN apt-get download libpcsclite1:$arch && dpkg --force-all -i libpcsclite1* && apt-get download libpcsclite-dev:$arch && dpkg --force-all -i libpcsclite-dev* +# Install python3-dev for frr (/usr/bin/python3-config for $arch) using download because regular install removes amd64 python package +RUN apt-get download python3.9-dev:$arch && apt-get download python3-dev:$arch && dpkg --force-all -i python3*-dev* +{% endif %} + # Tell azure pipeline to use node.js in the docker LABEL "com.azure.dev.pipelines.agent.handler.node.path"="/usr/bin/node" {% endif -%} diff --git a/sonic-slave-bullseye/Dockerfile.user.j2 b/sonic-slave-bullseye/Dockerfile.user.j2 index 5bc747beb2f..2eb7ef18b6c 100644 --- a/sonic-slave-bullseye/Dockerfile.user.j2 +++ b/sonic-slave-bullseye/Dockerfile.user.j2 @@ -1,5 +1,5 @@ ARG slave_base_tag_ref=latest -{%- if MULTIARCH_QEMU_ENVIRON != "y" %} +{%- if MULTIARCH_QEMU_ENVIRON != "y" and CROSS_BUILD_ENVIRON != "y" %} FROM sonic-slave-bullseye:${slave_base_tag_ref} {%- else %} FROM sonic-slave-bullseye-march-{{ CONFIGURED_ARCH }}:${slave_base_tag_ref} diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index d5f0207fb79..6a7b1dd92e1 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -91,8 +91,8 @@ RUN mkdir /python_virtualenv RUN cd /python_virtualenv && python3 -m virtualenv -p /usr/bin/python env2 RUN cd /python_virtualenv && python3 -m virtualenv --copies -p /usr/bin/python3 env3 -RUN PATH=/python_virtualenv/env2/bin/:$PATH pip2 install setuptools==40.8.0 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==4.4 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 j2cli==0.3.10 PyYAML==5.4.1 pexpect==4.6.0 Pympler==0.8 ctypesgen==1.0.2 natsort==6.2.1 redis==3.5.3 -RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install setuptools==49.6.00 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==5.2 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 PyYAML==5.4.1 redis==3.5.3 pexpect==4.8.0 Pympler==0.8 parameterized natsort==6.2.1 MarkupSafe==2.0.1 Jinja2==3.0.3 && ln -s /python_virtualenv/env3/bin/pytest /python_virtualenv/env3/bin/pytest-3 +RUN PATH=/python_virtualenv/env2/bin/:$PATH pip2 install setuptools==40.8.0 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==4.4 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 j2cli==0.3.10 PyYAML==5.4.1 pexpect==4.6.0 Pympler==0.8 ctypesgen==1.0.2 natsort==6.2.1 redis==3.5.3 protobuf==3.17.3 +RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install setuptools==49.6.00 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==5.2 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 PyYAML==5.4.1 redis==3.5.3 pexpect==4.8.0 Pympler==0.8 parameterized natsort==6.2.1 MarkupSafe==2.0.1 Jinja2==3.0.3 sphinx && ln -s /python_virtualenv/env3/bin/pytest /python_virtualenv/env3/bin/pytest-3 RUN apt-get --fix-broken install -y RUN LIBPYTHON3_DEPS="`apt-cache depends libpython3-dev:$arch |grep Depends|awk {'print \$2;'}|tr "\n" " "`" && apt-get install -y libpython2.7-dev:$arch $LIBPYTHON3_DEPS libxml2-dev:$arch libxslt-dev:$arch libssl-dev:$arch libz-dev:$arch diff --git a/src/snmpd/Makefile b/src/snmpd/Makefile index 1a08feb539c..cfe94ffd7b8 100644 --- a/src/snmpd/Makefile +++ b/src/snmpd/Makefile @@ -59,7 +59,11 @@ endif ifneq ($(CROSS_BUILD_ENVIRON), y) dpkg-buildpackage -rfakeroot -b -d -us -uc -j1 --admindir $(SONIC_DPKG_ADMINDIR) else +ifeq (,$(findstring 5.9,$(SNMPD_VERSION))) patch -p1 < ../patch-$(SNMPD_VERSION)/cross-compile-changes.patch +else + find . -type f -name Makefile.PL|xargs sed -i "0, /WriteMakefile(/s//sub WriteMakefile_cross { push(@_, 'CC' => '$$CROSS_CC'); push(@_, 'LD' => '$$CROSS_CC'); WriteMakefile(@_); }\n\nWriteMakefile_cross(/" +endif CFLAGS="-I $$CROSS_PERL_CORE_PATH" LDFLAGS=" -L$$CROSS_PKGS_LIB_PATH" dpkg-buildpackage -rfakeroot -b -d -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j1 --admindir $(SONIC_DPKG_ADMINDIR) endif popd diff --git a/src/sonic-frr/patch/cross-compile-changes.patch b/src/sonic-frr/patch/cross-compile-changes.patch index 1aad9e3b44f..c4e6856bf23 100644 --- a/src/sonic-frr/patch/cross-compile-changes.patch +++ b/src/sonic-frr/patch/cross-compile-changes.patch @@ -46,25 +46,36 @@ Index: frr/debian/rules =================================================================== --- frr.orig/debian/rules +++ frr/debian/rules -@@ -36,7 +36,7 @@ export PYTHON=python3 +@@ -29,14 +29,14 @@ else + CONF_SYSTEMD=--enable-systemd=no + endif + +-export PYTHON=python3 ++export PYTHON=/python_virtualenv/env3/bin/python3 + + %: + dh $@ --with=$(DH_WITH_SYSTEMD)autoreconf --parallel override_dh_auto_configure: $(shell dpkg-buildflags --export=sh); \ - dh_auto_configure -- \ -+ mkdir -p build && dh_auto_configure --builddirectory=build -- \ ++ rm -rf build && mkdir -p build && dh_auto_configure --builddirectory=build -- \ --enable-exampledir=/usr/share/doc/frr/examples/ \ --localstatedir=/var/run/frr \ --sbindir=/usr/lib/frr \ -@@ -68,7 +68,7 @@ override_dh_auto_configure: +@@ -68,16 +68,16 @@ override_dh_auto_configure: # end override_dh_auto_install: - dh_auto_install + cd build && dh_auto_install - sed -e '1c #!/usr/bin/python3' -i debian/tmp/usr/lib/frr/frr-reload.py - sed -e '1c #!/usr/bin/python3' -i debian/tmp/usr/lib/frr/generate_support_bundle.py -@@ -77,7 +77,7 @@ override_dh_auto_install: +- sed -e '1c #!/usr/bin/python3' -i debian/tmp/usr/lib/frr/frr-reload.py +- sed -e '1c #!/usr/bin/python3' -i debian/tmp/usr/lib/frr/generate_support_bundle.py ++ sed -e '1c #!/python_virtualenv/env3/bin/python3' -i debian/tmp/usr/lib/frr/frr-reload.py ++ sed -e '1c #!/python_virtualenv/env3/bin/python3' -i debian/tmp/usr/lib/frr/generate_support_bundle.py + + # let dh_systemd_* and dh_installinit do their thing automatically ifeq ($(filter pkg.frr.nosystemd,$(DEB_BUILD_PROFILES)),) cp tools/frr.service debian/frr.service endif diff --git a/src/tacacs/audisp/Makefile b/src/tacacs/audisp/Makefile index 6bf80cc6771..ecfd692779b 100644 --- a/src/tacacs/audisp/Makefile +++ b/src/tacacs/audisp/Makefile @@ -21,10 +21,14 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # fix aclocal depency issue by run auto.sh ./auto.sh +ifeq ($(CROSS_BUILD_ENVIRON), y) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +else # build package dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif popd mv $(DERIVED_TARGETS) $* $(DEST)/ -$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) \ No newline at end of file +$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) From 6d37a0084a0a3e48308cade9cddf231666b1c559 Mon Sep 17 00:00:00 2001 From: marvell Date: Tue, 21 Jun 2022 13:03:56 +0530 Subject: [PATCH 19/30] Additional change for bullseye --- slave.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slave.mk b/slave.mk index 7a0b5d78e18..1a4ae1df8ed 100644 --- a/slave.mk +++ b/slave.mk @@ -745,7 +745,7 @@ ifneq ($(CROSS_BUILD_ENVIRON),y) python$($*_PYTHON_VERSION) setup.py test $(LOG); fi python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) else - PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} sudo -E $(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION))/pip$($*_PYTHON_VERSION) install . && sudo -E $(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION))/pip$($*_PYTHON_VERSION) uninstall --yes `$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION))/python$($*_PYTHON_VERSION) setup.py --name` + PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py build $(LOG); PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py test $(LOG); fi PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) endif From d10c8124467cc67579ef4b07cef2c1e2915c0fa8 Mon Sep 17 00:00:00 2001 From: marvell Date: Tue, 21 Jun 2022 22:12:00 +0530 Subject: [PATCH 20/30] Set CROSS_BUILD_ENVIRON default value n --- Makefile.work | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile.work b/Makefile.work index d1b5484141e..546190b2d41 100644 --- a/Makefile.work +++ b/Makefile.work @@ -127,10 +127,12 @@ endif ifeq ($(CONFIGURED_ARCH),amd64) SLAVE_BASE_IMAGE = $(SLAVE_DIR) MULTIARCH_QEMU_ENVIRON = n +CROSS_BUILD_ENVIRON = n else ifeq ($(CONFIGURED_ARCH), $(COMPILE_HOST_ARCH)) SLAVE_BASE_IMAGE = $(SLAVE_DIR) MULTIARCH_QEMU_ENVIRON = n +CROSS_BUILD_ENVIRON = n else ifneq ($(CONFIGURED_ARCH),) SLAVE_BASE_IMAGE = $(SLAVE_DIR)-march-$(CONFIGURED_ARCH) ifneq ($(CROSS_BLDENV),) @@ -138,6 +140,7 @@ MULTIARCH_QEMU_ENVIRON = n CROSS_BUILD_ENVIRON = y else MULTIARCH_QEMU_ENVIRON = y +CROSS_BUILD_ENVIRON = n endif endif endif From db50dbfd3c6145b8e8714e01d7951d6d524a7c75 Mon Sep 17 00:00:00 2001 From: marvell Date: Wed, 22 Jun 2022 13:54:21 +0530 Subject: [PATCH 21/30] Removed python2 references --- dockers/docker-platform-monitor/Dockerfile.j2 | 6 ------ 1 file changed, 6 deletions(-) diff --git a/dockers/docker-platform-monitor/Dockerfile.j2 b/dockers/docker-platform-monitor/Dockerfile.j2 index ca0bcbb58c2..bb65a1cfc60 100755 --- a/dockers/docker-platform-monitor/Dockerfile.j2 +++ b/dockers/docker-platform-monitor/Dockerfile.j2 @@ -27,12 +27,6 @@ RUN apt-get update && \ python3-jsonschema \ libpci3 -# TODO: Remove these lines once we no longer need Python 2 -RUN apt-get install -f -y python-dev python-pip -RUN pip2 install --upgrade 'pip<21' -RUN apt-get purge -y python-pip -RUN pip2 install 'setuptools==40.8.0' - {%- if CROSS_BUILD_ENVIRON == "y" %} RUN mkdir prebuilt-python-wheels COPY prebuilt-python-wheels/* prebuilt-python-wheels/ From ec639e8000968e2d0b13006aee5d15d9d6dcadba Mon Sep 17 00:00:00 2001 From: marvell Date: Sun, 26 Jun 2022 14:24:53 +0530 Subject: [PATCH 22/30] Fixes after merge with the upstream --- dockers/docker-platform-monitor/Dockerfile.j2 | 1 - sonic-slave-bullseye/Dockerfile.j2 | 2 +- sonic-slave-buster/Dockerfile.j2 | 2 +- src/libyang2/Makefile | 5 ++++ .../patch/cross-compile-changes.patch | 26 ++++++------------- 5 files changed, 15 insertions(+), 21 deletions(-) diff --git a/dockers/docker-platform-monitor/Dockerfile.j2 b/dockers/docker-platform-monitor/Dockerfile.j2 index bb65a1cfc60..30f18753c64 100755 --- a/dockers/docker-platform-monitor/Dockerfile.j2 +++ b/dockers/docker-platform-monitor/Dockerfile.j2 @@ -30,7 +30,6 @@ RUN apt-get update && \ {%- if CROSS_BUILD_ENVIRON == "y" %} RUN mkdir prebuilt-python-wheels COPY prebuilt-python-wheels/* prebuilt-python-wheels/ -RUN pip2 install prebuilt-python-wheels/lxml*cp2*.whl RUN pip3 install prebuilt-python-wheels/lxml*cp3*.whl RUN rm -rf prebuilt-python-wheels {%- endif %} diff --git a/sonic-slave-bullseye/Dockerfile.j2 b/sonic-slave-bullseye/Dockerfile.j2 index ec5e0e00dd8..b0c19fd0dad 100644 --- a/sonic-slave-bullseye/Dockerfile.j2 +++ b/sonic-slave-bullseye/Dockerfile.j2 @@ -102,7 +102,7 @@ RUN apt-get install -y swig libssl-dev # Cross-compile the heaviest python packages for arm ARG pre_built_target_dir=PRE_BUILT_TARGET RUN rm -rf $pre_built_target_dir && mkdir $pre_built_target_dir && rm -rf python-cache && mkdir python-cache -RUN PATH=/python_virtualenv/env3/bin/:$PATH CC=$CROSS_CC pip3 install --cache-dir python-cache grpcio==1.38.0 grpcio-tools==1.20.0 m2crypto==0.36.0 bitarray==1.5.3 lxml==4.6.5 +RUN PATH=/python_virtualenv/env3/bin/:$PATH CC=$CROSS_CC pip3 install --cache-dir python-cache grpcio==1.39.0 grpcio-tools==1.20.0 m2crypto==0.36.0 bitarray==1.5.3 lxml==4.6.5 RUN find python-cache -name "*.whl" -exec cp {} $pre_built_target_dir \; RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip list diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index 2e6464f0813..a4704c697bb 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -449,7 +449,7 @@ RUN apt-get install -y -t buster-backports \ {%- if CROSS_BUILD_ENVIRON == "y" %} # Arm vs. amd64 versions conflict - remove amd64 packages RUN apt-get remove -y libnl-3-200 libsnmp30 -RUN apt-get install -y libpcre3:$arch +RUN apt-get install -y libpcre2-dev:$arch libpcre3:$arch {%- endif %} RUN apt-get -y build-dep openssh diff --git a/src/libyang2/Makefile b/src/libyang2/Makefile index 62171752197..fab24590a34 100644 --- a/src/libyang2/Makefile +++ b/src/libyang2/Makefile @@ -31,7 +31,12 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Enable large file support for 32-bit arch echo 'add_definitions(-D_FILE_OFFSET_BITS=64)' >> CMakeLists.txt +ifeq ($(CROSS_BUILD_ENVIRON), y) + dpkg-buildpackage -rfakeroot -d -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) +else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) +endif + popd # Move the newly-built .deb packages to the destination directory diff --git a/src/sonic-frr/patch/cross-compile-changes.patch b/src/sonic-frr/patch/cross-compile-changes.patch index c4e6856bf23..a94ad436344 100644 --- a/src/sonic-frr/patch/cross-compile-changes.patch +++ b/src/sonic-frr/patch/cross-compile-changes.patch @@ -46,29 +46,29 @@ Index: frr/debian/rules =================================================================== --- frr.orig/debian/rules +++ frr/debian/rules -@@ -29,14 +29,14 @@ else - CONF_SYSTEMD=--enable-systemd=no +@@ -27,14 +27,14 @@ else + CONF_LUA=--enable-scripting endif -export PYTHON=python3 +export PYTHON=/python_virtualenv/env3/bin/python3 %: - dh $@ --with=$(DH_WITH_SYSTEMD)autoreconf --parallel + dh $@ override_dh_auto_configure: $(shell dpkg-buildflags --export=sh); \ - dh_auto_configure -- \ + rm -rf build && mkdir -p build && dh_auto_configure --builddirectory=build -- \ - --enable-exampledir=/usr/share/doc/frr/examples/ \ --localstatedir=/var/run/frr \ --sbindir=/usr/lib/frr \ -@@ -68,16 +68,16 @@ override_dh_auto_configure: + --sysconfdir=/etc/frr \ +@@ -65,14 +65,14 @@ override_dh_auto_configure: # end override_dh_auto_install: - dh_auto_install -+ cd build && dh_auto_install ++ cd build && ln -s ../debian debian && dh_auto_install - sed -e '1c #!/usr/bin/python3' -i debian/tmp/usr/lib/frr/frr-reload.py - sed -e '1c #!/usr/bin/python3' -i debian/tmp/usr/lib/frr/generate_support_bundle.py @@ -76,20 +76,10 @@ Index: frr/debian/rules + sed -e '1c #!/python_virtualenv/env3/bin/python3' -i debian/tmp/usr/lib/frr/generate_support_bundle.py # let dh_systemd_* and dh_installinit do their thing automatically - ifeq ($(filter pkg.frr.nosystemd,$(DEB_BUILD_PROFILES)),) - cp tools/frr.service debian/frr.service - endif +- cp tools/frr.service debian/frr.service - cp tools/frrinit.sh debian/frr.init ++ cp build/tools/frr.service debian/frr.service + cp build/tools/frrinit.sh debian/frr.init -rm -f debian/tmp/usr/lib/frr/frr # install config files -@@ -99,7 +99,7 @@ endif - ln -s /usr/share/javascript/underscore/underscore.js debian/tmp/usr/share/doc/frr/html/_static/underscore.js - - override_dh_auto_build: -- dh_auto_build -- $(MAKE_SILENT) -+ cd build && ln -s ../debian debian && dh_auto_build -- $(MAKE_SILENT) - - override_dh_installinit: - dh_installinit -r From 9d7ab8cd3c62de911892692c2f565720fd3638a0 Mon Sep 17 00:00:00 2001 From: marvell Date: Mon, 27 Jun 2022 14:10:18 +0530 Subject: [PATCH 23/30] Deleted unused sonic-slave-buster/cross-build-arm-python-reqirements.sh file --- .../cross-build-arm-python-reqirements.sh | 37 ------------------- 1 file changed, 37 deletions(-) delete mode 100755 sonic-slave-buster/cross-build-arm-python-reqirements.sh diff --git a/sonic-slave-buster/cross-build-arm-python-reqirements.sh b/sonic-slave-buster/cross-build-arm-python-reqirements.sh deleted file mode 100755 index dae3f8f536a..00000000000 --- a/sonic-slave-buster/cross-build-arm-python-reqirements.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash - -PRE_BUILT_TARGET_DIR=$1 - -declare -a pkgs=("grpcio==1.38.0" "grpcio-tools==1.20.0" "m2crypto==0.36.0" "bitarray==1.5.3" "lxml==4.6.3") - -rm -rf $PRE_BUILT_TARGET_DIR && mkdir $PRE_BUILT_TARGET_DIR - -for pkg in "${pkgs[@]}" -do - rm -rf wheel-download - mkdir -p wheel-download/sources && pip3 download --platform $PY_PLAT --no-deps --dest wheel-download $pkg - count=`ls -1 wheel-download/*.gz 2>/dev/null | wc -l` - if [ $count != 0 ] - then - tar xvf wheel-download/*.gz -C wheel-download/sources - pushd wheel-download/sources/* && CC=$CC LDSHARED="$CC -shared" python3 -u -c "import setuptools, tokenize;__file__='setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\ri\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" --verbose bdist_wheel --plat-name $PY_PLAT -d ../../../$PRE_BUILT_TARGET_DIR && popd - else - cp wheel-download/*.whl $PRE_BUILT_TARGET_DIR - fi - - rm -rf wheel-download - - mkdir -p wheel-download/sources && pip download --platform $PY_PLAT --no-deps --dest wheel-download $pkg - count=`ls -1 wheel-download/*.gz 2>/dev/null | wc -l` - if [ $count != 0 ] - then - tar xvf wheel-download/*.gz -C wheel-download/sources - pushd wheel-download/sources/* && CC=$CC LDSHARED="$CC -shared" python -u -c "import setuptools, tokenize;__file__='setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\ri\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" --verbose bdist_wheel --plat-name $PY_PLAT -d ../../../$PRE_BUILT_TARGET_DIR && popd - else - cp wheel-download/*.whl $PRE_BUILT_TARGET_DIR/ - fi - - rm -rf wheel-download - -done - From 544993dffd5339951b23f38470074374ca2e4119 Mon Sep 17 00:00:00 2001 From: marvell Date: Wed, 29 Jun 2022 17:18:50 +0530 Subject: [PATCH 24/30] Fixed 2 @saiarcot895 requests --- sonic-slave-bullseye/Dockerfile.j2 | 4 +-- src/libyang/Makefile | 2 -- src/libyang/patch/cross-compile-changes.patch | 28 ++++++++++++++++++- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/sonic-slave-bullseye/Dockerfile.j2 b/sonic-slave-bullseye/Dockerfile.j2 index b0c19fd0dad..eac13add941 100644 --- a/sonic-slave-bullseye/Dockerfile.j2 +++ b/sonic-slave-bullseye/Dockerfile.j2 @@ -8,11 +8,11 @@ FROM {{ prefix }}multiarch/qemu-user-static:x86_64-aarch64-6.1.0-8 as qemu FROM {{ prefix }}multiarch/debian-debootstrap:arm64-bullseye COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin {%- elif CONFIGURED_ARCH == "armhf" and CROSS_BUILD_ENVIRON == "y" %} -FROM {{ prefix }}multiarch/qemu-user-static:x86_64-arm as qemu +FROM {{ prefix }}multiarch/qemu-user-static:x86_64-arm-6.1.0-8 as qemu FROM {{ prefix }}debian:bullseye COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin {%- elif CONFIGURED_ARCH == "arm64" and CROSS_BUILD_ENVIRON == "y" %} -FROM {{ prefix }}multiarch/qemu-user-static:x86_64-aarch64 as qemu +FROM {{ prefix }}multiarch/qemu-user-static:x86_64-aarch64-6.1.0-8 as qemu FROM {{ prefix }}debian:bullseye COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin {%- else -%} diff --git a/src/libyang/Makefile b/src/libyang/Makefile index 0d80c78d4c5..64fe77d8fac 100644 --- a/src/libyang/Makefile +++ b/src/libyang/Makefile @@ -17,8 +17,6 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : ifeq ($(CROSS_BUILD_ENVIRON), y) patch -p1 < ../patch/cross-compile-changes.patch - sed -i "s/cmake/CC=$$CROSS_CC CXX=$$CROSS_CXX cmake/g" packages/debian.rules.in - sed -i "/Architecture/ s/any/$$CONFIGURED_ARCH/; /Build-Depends/ s/gcc//" packages/debian.control.in endif mkdir build diff --git a/src/libyang/patch/cross-compile-changes.patch b/src/libyang/patch/cross-compile-changes.patch index 5f003cb78c3..ece5c1c661b 100644 --- a/src/libyang/patch/cross-compile-changes.patch +++ b/src/libyang/patch/cross-compile-changes.patch @@ -8,6 +8,32 @@ Index: libyang-1.0.73/CMakeLists.txt # force out-of-source build if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) +Index: libyang-1.0.73/packages/debian.control.in +=================================================================== +--- libyang-1.0.73.orig/packages/debian.control.in ++++ libyang-1.0.73/packages/debian.control.in +@@ -2,7 +2,7 @@ Source: @PACKAGE_NAME@ + Maintainer: CESNET + Priority: extra + Standards-Version: 3.8.2 +-Build-Depends: debhelper (>= 9), gcc ++Build-Depends: debhelper (>= 9), + Homepage: https://github.com/CESNET/libyang + + Package: @PACKAGE_NAME@ +Index: libyang-1.0.73/packages/debian.rules.in +=================================================================== +--- libyang-1.0.73.orig/packages/debian.rules.in ++++ libyang-1.0.73/packages/debian.rules.in +@@ -13,7 +13,7 @@ override_dh_strip: + dh_strip -ppython3-yang@PACKAGE_PART_NAME@ --dbg-package=python3-yang@PACKAGE_PART_NAME@-dbg + + override_dh_auto_configure: +- cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE:String="@BUILD_TYPE@" -DENABLE_LYD_PRIV=ON -DGEN_LANGUAGE_BINDINGS=ON -DGEN_PYTHON_VERSION=2 . ++ CC=$(CROSS_CC) CXX=$(CROSS_CXX) cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE:String="@BUILD_TYPE@" -DENABLE_LYD_PRIV=ON -DGEN_LANGUAGE_BINDINGS=ON -DGEN_PYTHON_VERSION=2 . + + override_dh_makeshlibs: + dh_makeshlibs -Xextensions -Xuser_types Index: libyang-1.0.73/packages/local-deb.sh.in =================================================================== --- libyang-1.0.73.orig/packages/local-deb.sh.in @@ -17,6 +43,6 @@ Index: libyang-1.0.73/packages/local-deb.sh.in git log -10 --pretty=format:' * %s (%aN)%n' 2>/dev/null >>debian/changelog || echo -e " * unknown changes \n" >>debian/changelog git log -1 --pretty=format:'%n -- %aN <%aE> %aD%n' >>debian/changelog 2>/dev/null || echo " -- ${USER} <${USER}@`hostname`> `date -R`" >>debian/changelog -debuild --no-lintian -i -b -us -uc -+debuild --no-lintian -i -b -us -uc -a ${CONFIGURED_ARCH} ++debuild -e CROSS_CC -e CROSS_CXX --no-lintian -i -b -us -uc -a ${CONFIGURED_ARCH} mv ../*.deb debs export LC_TIME=$LOCAL_LC_TIME From e7d1fa57fc052cd5c8d67044b34e0fb957d6a5ce Mon Sep 17 00:00:00 2001 From: marvell Date: Thu, 30 Jun 2022 17:09:23 +0530 Subject: [PATCH 25/30] Fixed @saiarcot895 reviewer's requests --- slave.mk | 5 +- src/snmpd/Makefile | 4 - .../cross-compile-changes.patch | 165 ++++++++++++++++++ .../patch/cross-compile-changes.patch | 17 +- src/wpasupplicant/Makefile | 2 +- 5 files changed, 173 insertions(+), 20 deletions(-) create mode 100644 src/snmpd/patch-5.9+dfsg/cross-compile-changes.patch diff --git a/slave.mk b/slave.mk index 9613dfd1eaa..1ebb88c705e 100644 --- a/slave.mk +++ b/slave.mk @@ -801,15 +801,14 @@ $(addprefix $(PYTHON_WHEELS_PATH)/, $(SONIC_PYTHON_WHEELS)) : $(PYTHON_WHEELS_PA pushd $($*_SRC_PATH) $(LOG_SIMPLE) # apply series of patches if exist if [ -f ../$(notdir $($*_SRC_PATH)).patch/series ]; then QUILT_PATCHES=../$(notdir $($*_SRC_PATH)).patch quilt push -a; fi - if [ ! "$($*_TEST)" = "n" ]; then ifneq ($(CROSS_BUILD_ENVIRON),y) # Use pip instead of later setup.py to install dependencies into user home, but uninstall self pip$($*_PYTHON_VERSION) install . && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name` - python$($*_PYTHON_VERSION) setup.py test $(LOG); fi + if [ ! "$($*_TEST)" = "n" ]; then python$($*_PYTHON_VERSION) setup.py test $(LOG); fi python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) else PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py build $(LOG); - PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py test $(LOG); fi + if [ ! "$($*_TEST)" = "n" ]; then PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py test $(LOG); fi PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) endif # clean up diff --git a/src/snmpd/Makefile b/src/snmpd/Makefile index cfe94ffd7b8..1a08feb539c 100644 --- a/src/snmpd/Makefile +++ b/src/snmpd/Makefile @@ -59,11 +59,7 @@ endif ifneq ($(CROSS_BUILD_ENVIRON), y) dpkg-buildpackage -rfakeroot -b -d -us -uc -j1 --admindir $(SONIC_DPKG_ADMINDIR) else -ifeq (,$(findstring 5.9,$(SNMPD_VERSION))) patch -p1 < ../patch-$(SNMPD_VERSION)/cross-compile-changes.patch -else - find . -type f -name Makefile.PL|xargs sed -i "0, /WriteMakefile(/s//sub WriteMakefile_cross { push(@_, 'CC' => '$$CROSS_CC'); push(@_, 'LD' => '$$CROSS_CC'); WriteMakefile(@_); }\n\nWriteMakefile_cross(/" -endif CFLAGS="-I $$CROSS_PERL_CORE_PATH" LDFLAGS=" -L$$CROSS_PKGS_LIB_PATH" dpkg-buildpackage -rfakeroot -b -d -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j1 --admindir $(SONIC_DPKG_ADMINDIR) endif popd diff --git a/src/snmpd/patch-5.9+dfsg/cross-compile-changes.patch b/src/snmpd/patch-5.9+dfsg/cross-compile-changes.patch new file mode 100644 index 00000000000..95b036f8aec --- /dev/null +++ b/src/snmpd/patch-5.9+dfsg/cross-compile-changes.patch @@ -0,0 +1,165 @@ +Index: net-snmp-5.9+dfsg/perl/ASN/Makefile.PL +=================================================================== +--- net-snmp-5.9+dfsg.orig/perl/ASN/Makefile.PL ++++ net-snmp-5.9+dfsg/perl/ASN/Makefile.PL +@@ -13,7 +13,9 @@ my $lib_version; + # See lib/ExtUtils/MakeMaker.pm for details of how to influence + # the contents of the Makefile that is written. + +-WriteMakefile(AsnInitMakeParams()); ++sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } ++ ++WriteMakefile_cross(AsnInitMakeParams()); + + Check_Version($lib_version); + +Index: net-snmp-5.9+dfsg/perl/AnyData_SNMP/Makefile.PL +=================================================================== +--- net-snmp-5.9+dfsg.orig/perl/AnyData_SNMP/Makefile.PL ++++ net-snmp-5.9+dfsg/perl/AnyData_SNMP/Makefile.PL +@@ -1,7 +1,9 @@ + use ExtUtils::MakeMaker; + # See lib/ExtUtils/MakeMaker.pm for details of how to influence + # the contents of the Makefile that is written. +-WriteMakefile( ++sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } ++ ++WriteMakefile_cross( + 'NAME' => 'AnyData::SNMP', + 'VERSION_FROM' => 'Storage.pm', # finds $VERSION + 'PREREQ_PM' => {# SNMP => 5.0, +Index: net-snmp-5.9+dfsg/perl/Makefile.PL +=================================================================== +--- net-snmp-5.9+dfsg.orig/perl/Makefile.PL ++++ net-snmp-5.9+dfsg/perl/Makefile.PL +@@ -8,7 +8,9 @@ use MakefileSubs; + # Prevent that MakeMaker complains about unknown parameter names. + NetSNMPGetOpts(); + +-WriteMakefile( ++sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } ++ ++WriteMakefile_cross( + 'NAME' => 'Bundle::NetSNMP', + 'DIR' => [qw(default_store ASN OID agent SNMP TrapReceiver)], + ); +Index: net-snmp-5.9+dfsg/perl/OID/Makefile.PL +=================================================================== +--- net-snmp-5.9+dfsg.orig/perl/OID/Makefile.PL ++++ net-snmp-5.9+dfsg/perl/OID/Makefile.PL +@@ -10,7 +10,9 @@ use MakefileSubs; + + my $lib_version; + +-WriteMakefile(OidInitMakeParams()); ++sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } ++ ++WriteMakefile_cross(OidInitMakeParams()); + + Check_Version($lib_version); + +Index: net-snmp-5.9+dfsg/perl/SNMP/Makefile.PL +=================================================================== +--- net-snmp-5.9+dfsg.orig/perl/SNMP/Makefile.PL ++++ net-snmp-5.9+dfsg/perl/SNMP/Makefile.PL +@@ -14,7 +14,9 @@ my $prefix; + # See lib/ExtUtils/MakeMaker.pm for details of how to influence + # the contents of the Makefile that is written. + +-WriteMakefile(SnmpInitMakeParams()); ++sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } ++ ++WriteMakefile_cross(SnmpInitMakeParams()); + + Check_Version($lib_version); + +Index: net-snmp-5.9+dfsg/perl/TrapReceiver/Makefile.PL +=================================================================== +--- net-snmp-5.9+dfsg.orig/perl/TrapReceiver/Makefile.PL ++++ net-snmp-5.9+dfsg/perl/TrapReceiver/Makefile.PL +@@ -7,7 +7,9 @@ use MakefileSubs; + + my $lib_version; + +-WriteMakefile(TrapReceiverInitMakeParams()); ++sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } ++ ++WriteMakefile_cross(TrapReceiverInitMakeParams()); + + Check_Version($lib_version); + +Index: net-snmp-5.9+dfsg/perl/agent/Makefile.PL +=================================================================== +--- net-snmp-5.9+dfsg.orig/perl/agent/Makefile.PL ++++ net-snmp-5.9+dfsg/perl/agent/Makefile.PL +@@ -7,7 +7,9 @@ use MakefileSubs; + + my $lib_version; + +-WriteMakefile(AgentInitMakeParams()); ++sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } ++ ++WriteMakefile_cross(AgentInitMakeParams()); + + Check_Version($lib_version); + +Index: net-snmp-5.9+dfsg/perl/agent/Support/Makefile.PL +=================================================================== +--- net-snmp-5.9+dfsg.orig/perl/agent/Support/Makefile.PL ++++ net-snmp-5.9+dfsg/perl/agent/Support/Makefile.PL +@@ -10,7 +10,9 @@ my $lib_version; + # See lib/ExtUtils/MakeMaker.pm for details of how to influence + # the contents of the Makefile that is written. + +-WriteMakefile(SupportInitMakeParams()); ++sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } ++ ++WriteMakefile_cross(SupportInitMakeParams()); + + Check_Version($lib_version); + +Index: net-snmp-5.9+dfsg/perl/agent/default_store/Makefile.PL +=================================================================== +--- net-snmp-5.9+dfsg.orig/perl/agent/default_store/Makefile.PL ++++ net-snmp-5.9+dfsg/perl/agent/default_store/Makefile.PL +@@ -7,7 +7,9 @@ use MakefileSubs; + + my $lib_version; + +-WriteMakefile(AgentDefaultStoreInitMakeParams()); ++sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } ++ ++WriteMakefile_cross(AgentDefaultStoreInitMakeParams()); + + Check_Version($lib_version); + +Index: net-snmp-5.9+dfsg/perl/default_store/Makefile.PL +=================================================================== +--- net-snmp-5.9+dfsg.orig/perl/default_store/Makefile.PL ++++ net-snmp-5.9+dfsg/perl/default_store/Makefile.PL +@@ -8,7 +8,9 @@ use MakefileSubs; + + my $lib_version; + +-WriteMakefile(DefaultStoreInitMakeParams()); ++sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } ++ ++WriteMakefile_cross(DefaultStoreInitMakeParams()); + + sub DefaultStoreInitMakeParams { + my $opts; +Index: net-snmp-5.9+dfsg/perl/manager/Makefile.PL +=================================================================== +--- net-snmp-5.9+dfsg.orig/perl/manager/Makefile.PL ++++ net-snmp-5.9+dfsg/perl/manager/Makefile.PL +@@ -1,7 +1,9 @@ + use ExtUtils::MakeMaker; + # See lib/ExtUtils/MakeMaker.pm for details of how to influence + # the contents of the Makefile that is written. +-WriteMakefile( ++sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } ++ ++WriteMakefile_cross( + 'NAME' => 'NetSNMP::manager', + 'VERSION' => '', # finds $VERSION + 'PREREQ_PM' => {# SNMP => 4.0, diff --git a/src/sonic-frr/patch/cross-compile-changes.patch b/src/sonic-frr/patch/cross-compile-changes.patch index a94ad436344..9a44ed02fe0 100644 --- a/src/sonic-frr/patch/cross-compile-changes.patch +++ b/src/sonic-frr/patch/cross-compile-changes.patch @@ -46,7 +46,7 @@ Index: frr/debian/rules =================================================================== --- frr.orig/debian/rules +++ frr/debian/rules -@@ -27,14 +27,14 @@ else +@@ -27,10 +27,10 @@ else CONF_LUA=--enable-scripting endif @@ -54,21 +54,14 @@ Index: frr/debian/rules +export PYTHON=/python_virtualenv/env3/bin/python3 %: - dh $@ +- dh $@ ++ dh $@ --builddirectory=build override_dh_auto_configure: $(shell dpkg-buildflags --export=sh); \ -- dh_auto_configure -- \ -+ rm -rf build && mkdir -p build && dh_auto_configure --builddirectory=build -- \ - --localstatedir=/var/run/frr \ - --sbindir=/usr/lib/frr \ - --sysconfdir=/etc/frr \ -@@ -65,14 +65,14 @@ override_dh_auto_configure: - # end - +@@ -67,12 +67,12 @@ override_dh_auto_configure: override_dh_auto_install: -- dh_auto_install -+ cd build && ln -s ../debian debian && dh_auto_install + dh_auto_install - sed -e '1c #!/usr/bin/python3' -i debian/tmp/usr/lib/frr/frr-reload.py - sed -e '1c #!/usr/bin/python3' -i debian/tmp/usr/lib/frr/generate_support_bundle.py diff --git a/src/wpasupplicant/Makefile b/src/wpasupplicant/Makefile index 5e834eaa1e1..0ae72fef615 100644 --- a/src/wpasupplicant/Makefile +++ b/src/wpasupplicant/Makefile @@ -9,7 +9,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Clone wpa repo pushd ./sonic-wpa-supplicant ifeq ($(CROSS_BUILD_ENVIRON), y) - dpkg-buildpackage -rfakeroot -b -us -uc -d -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif From 844a2d95c72629507ea03c7d2831db3a30369bc7 Mon Sep 17 00:00:00 2001 From: marvell Date: Wed, 6 Jul 2022 20:41:15 +0530 Subject: [PATCH 26/30] Removed use of prebuilt python wheels --- dockers/docker-config-engine-bullseye/Dockerfile.j2 | 8 -------- dockers/docker-config-engine-buster/Dockerfile.j2 | 8 -------- dockers/docker-platform-monitor/Dockerfile.j2 | 7 ------- dockers/docker-sonic-mgmt-framework/Dockerfile.j2 | 7 ------- scripts/prepare_docker_buildinfo.sh | 10 ---------- sonic-slave-bullseye/Dockerfile.j2 | 9 --------- sonic-slave-buster/Dockerfile.j2 | 10 ---------- 7 files changed, 59 deletions(-) diff --git a/dockers/docker-config-engine-bullseye/Dockerfile.j2 b/dockers/docker-config-engine-bullseye/Dockerfile.j2 index 64d9b335835..f7e0de09b9f 100644 --- a/dockers/docker-config-engine-bullseye/Dockerfile.j2 +++ b/dockers/docker-config-engine-bullseye/Dockerfile.j2 @@ -16,14 +16,6 @@ RUN apt-get install -y \ libz-dev {%- endif %} -{%- if CROSS_BUILD_ENVIRON == "y" %} -RUN mkdir prebuilt-python-wheels -COPY prebuilt-python-wheels/* prebuilt-python-wheels/ -RUN pip3 install prebuilt-python-wheels/lxml*cp3*.whl -RUN pip3 install prebuilt-python-wheels/bitarray*cp3*.whl -RUN rm -rf prebuilt-python-wheels -{%- endif %} - # For sonic-config-engine Python 3 package # Explicitly install pyangbind here, as pyangbind causes enum34 to be installed. # enum34 causes Python 're' package to not work properly as it redefines an incompatible enum.py module diff --git a/dockers/docker-config-engine-buster/Dockerfile.j2 b/dockers/docker-config-engine-buster/Dockerfile.j2 index 36335039d4b..77ea27e00ee 100644 --- a/dockers/docker-config-engine-buster/Dockerfile.j2 +++ b/dockers/docker-config-engine-buster/Dockerfile.j2 @@ -16,14 +16,6 @@ RUN apt-get install -y \ libz-dev {%- endif %} -{%- if CROSS_BUILD_ENVIRON == "y" %} -RUN mkdir prebuilt-python-wheels -COPY prebuilt-python-wheels/* prebuilt-python-wheels/ -RUN pip3 install prebuilt-python-wheels/lxml*cp3*.whl -RUN pip3 install prebuilt-python-wheels/bitarray*cp3*.whl -RUN rm -rf prebuilt-python-wheels -{%- endif %} - # For sonic-config-engine Python 3 package # Explicitly install pyangbind here, as pyangbind causes enum34 to be installed. # enum34 causes Python 're' package to not work properly as it redefines an incompatible enum.py module diff --git a/dockers/docker-platform-monitor/Dockerfile.j2 b/dockers/docker-platform-monitor/Dockerfile.j2 index 30f18753c64..1e8c28b0682 100755 --- a/dockers/docker-platform-monitor/Dockerfile.j2 +++ b/dockers/docker-platform-monitor/Dockerfile.j2 @@ -27,13 +27,6 @@ RUN apt-get update && \ python3-jsonschema \ libpci3 -{%- if CROSS_BUILD_ENVIRON == "y" %} -RUN mkdir prebuilt-python-wheels -COPY prebuilt-python-wheels/* prebuilt-python-wheels/ -RUN pip3 install prebuilt-python-wheels/lxml*cp3*.whl -RUN rm -rf prebuilt-python-wheels -{%- endif %} - # On Arista devices, the sonic_platform wheel is not installed in the container. # Instead, the installation directory is mounted from the host OS. However, this method # doesn't ensure all dependencies are installed in the container. So here we diff --git a/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 b/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 index f986edc979e..823a2c7ff4b 100644 --- a/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 +++ b/dockers/docker-sonic-mgmt-framework/Dockerfile.j2 @@ -9,13 +9,6 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ apt-get install -y g++ python3-dev libxml2 libcurl3-gnutls libcjson-dev -{%- if CROSS_BUILD_ENVIRON == "y" %} -RUN mkdir prebuilt-python-wheels -COPY prebuilt-python-wheels/* prebuilt-python-wheels/ -RUN pip3 install prebuilt-python-wheels/grpcio*cp3*.whl -RUN rm -rf prebuilt-python-wheels -{%- endif %} - RUN pip3 install connexion==2.7.0 \ setuptools==21.0.0 \ grpcio-tools==1.20.0 \ diff --git a/scripts/prepare_docker_buildinfo.sh b/scripts/prepare_docker_buildinfo.sh index c4257500dff..d2b2c57185d 100755 --- a/scripts/prepare_docker_buildinfo.sh +++ b/scripts/prepare_docker_buildinfo.sh @@ -11,20 +11,10 @@ DISTRO=$5 DOCKERFILE_PATH=$(dirname "$DOCKERFILE_TARGE") BUILDINFO_PATH="${DOCKERFILE_PATH}/buildinfo" BUILDINFO_VERSION_PATH="${BUILDINFO_PATH}/versions" -if [[ $CROSS_BUILD_ENVIRON == y ]]; then - PREBUILT_PYTHON_WHEELS_PATH="${DOCKERFILE_PATH}/prebuilt-python-wheels" -fi [ -d $BUILDINFO_PATH ] && rm -rf $BUILDINFO_PATH mkdir -p $BUILDINFO_VERSION_PATH -if [[ $CROSS_BUILD_ENVIRON == y ]]; then - # Copy pre-compiled (cross-compiled) python wheels used in dockers - [ -d $PREBUILT_PYTHON_WHEELS_PATH ] && rm -rf $PREBUILT_PYTHON_WHEELS_PATH - mkdir -p $PREBUILT_PYTHON_WHEELS_PATH - cp -rf /PRE_BUILT_TARGET/* $PREBUILT_PYTHON_WHEELS_PATH -fi - # Get the debian distribution from the docker base image if [ -z "$DISTRO" ]; then DOCKER_BASE_IMAGE=$(grep "^FROM" $DOCKERFILE | head -n 1 | awk '{print $2}') diff --git a/sonic-slave-bullseye/Dockerfile.j2 b/sonic-slave-bullseye/Dockerfile.j2 index eac13add941..2efbe1c6757 100644 --- a/sonic-slave-bullseye/Dockerfile.j2 +++ b/sonic-slave-bullseye/Dockerfile.j2 @@ -99,15 +99,6 @@ RUN LIBPYTHON3_DEPS="`apt-cache depends libpython3-dev:$arch |grep Depends|awk { RUN apt-get install -y swig libssl-dev -# Cross-compile the heaviest python packages for arm -ARG pre_built_target_dir=PRE_BUILT_TARGET -RUN rm -rf $pre_built_target_dir && mkdir $pre_built_target_dir && rm -rf python-cache && mkdir python-cache -RUN PATH=/python_virtualenv/env3/bin/:$PATH CC=$CROSS_CC pip3 install --cache-dir python-cache grpcio==1.39.0 grpcio-tools==1.20.0 m2crypto==0.36.0 bitarray==1.5.3 lxml==4.6.5 -RUN find python-cache -name "*.whl" -exec cp {} $pre_built_target_dir \; - -RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip list - -# Depend on cross-compiled lxml RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip install pyang==2.4.0 RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip install pyangbind==0.8.1 RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip uninstall -y enum34 diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index a4704c697bb..a74b05fa392 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -99,16 +99,6 @@ RUN LIBPYTHON3_DEPS="`apt-cache depends libpython3-dev:$arch |grep Depends|awk { RUN apt-get install -y swig libssl-dev -# Cross-compile the heaviest python packages for arm -ARG pre_built_target_dir=PRE_BUILT_TARGET -RUN rm -rf $pre_built_target_dir && mkdir $pre_built_target_dir && rm -rf python-cache && mkdir python-cache -RUN PATH=/python_virtualenv/env2/bin/:$PATH CC=$CROSS_CC pip2 install --cache-dir python-cache grpcio==1.38.0 grpcio-tools==1.20.0 m2crypto==0.36.0 bitarray==1.5.3 lxml==4.6.5 -RUN PATH=/python_virtualenv/env3/bin/:$PATH CC=$CROSS_CC pip3 install --cache-dir python-cache grpcio==1.38.0 grpcio-tools==1.20.0 m2crypto==0.36.0 bitarray==1.5.3 lxml==4.6.5 -RUN find python-cache -name "*.whl" -exec cp {} $pre_built_target_dir \; - -RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip list - -# Depend on cross-compiled lxml RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip install pyang==2.4.0 RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip install pyangbind==0.8.1 RUN PATH=/python_virtualenv/env3/bin/:$PATH python3 -m pip uninstall -y enum34 From 5290e07b171f9c2516f61de3291cf5885119019f Mon Sep 17 00:00:00 2001 From: marvell Date: Wed, 13 Jul 2022 20:10:13 +0530 Subject: [PATCH 27/30] Incorporated saiarcot895 CC/CXX and other simplification/generalization changes Signed-off-by: marvell --- rules/libyang.mk | 6 +- rules/systemd-sonic-generator.mk | 2 +- slave.mk | 23 ++- sonic-slave-buster/Dockerfile.j2 | 5 + src/libyang/Makefile | 20 +- src/libyang/patch/cross-compile-changes.patch | 48 ----- src/libyang/patch/series | 1 + src/radius/pam/Makefile | 2 +- src/sflow/hsflowd/Makefile | 4 +- .../patch/0002-host_sflow_debian.patch | 2 +- src/sflow/psample/debian/psample.install | 4 - src/sflow/psample/debian/rules | 15 +- src/snmpd/Makefile | 3 +- .../cross-compile-changes.patch | 135 ++------------ src/snmpd/patch-5.7.3+dfsg/series | 1 + .../cross-compile-changes.patch | 174 ++---------------- src/snmpd/patch-5.9+dfsg/series | 1 + src/sonic-frr/Makefile | 3 +- .../patch/cross-compile-changes.patch | 80 ++++---- src/sonic-frr/patch/series | 1 + src/systemd-sonic-generator/Makefile | 20 +- src/systemd-sonic-generator/debian/control | 5 + src/systemd-sonic-generator/debian/rules | 23 +-- 23 files changed, 122 insertions(+), 456 deletions(-) delete mode 100644 src/libyang/patch/cross-compile-changes.patch delete mode 100644 src/sflow/psample/debian/psample.install diff --git a/rules/libyang.mk b/rules/libyang.mk index b361c9796b9..a8e6734459e 100644 --- a/rules/libyang.mk +++ b/rules/libyang.mk @@ -18,8 +18,8 @@ SONIC_MAKE_DEBS += $(LIBYANG) LIBYANG_DEV = libyang-dev_$(LIBYANG_VERSION)_$(CONFIGURED_ARCH).deb $(eval $(call add_derived_package,$(LIBYANG),$(LIBYANG_DEV))) -LIBYANG_DBG = libyang-dbg_$(LIBYANG_VERSION)_$(CONFIGURED_ARCH).deb -$(eval $(call add_derived_package,$(LIBYANG),$(LIBYANG_DBG))) +LIBYANG_DBGSYM = libyang-dbgsym_$(LIBYANG_VERSION)_$(CONFIGURED_ARCH).deb +$(eval $(call add_derived_package,$(LIBYANG),$(LIBYANG_DBGSYM))) LIBYANG_CPP = libyang-cpp_$(LIBYANG_VERSION)_$(CONFIGURED_ARCH).deb $(LIBYANG_CPP)_DEPENDS += $(LIBYANG) @@ -32,4 +32,4 @@ $(eval $(call add_derived_package,$(LIBYANG),$(LIBYANG_PY3))) $(eval $(call add_conflict_package,$(LIBYANG),$(LIBYANG1),$(LIBYANG2))) $(eval $(call add_conflict_package,$(LIBYANG_DEV),$(LIBYANG1_DEV),$(LIBYANG2_DEV))) -export LIBYANG LIBYANG_DBG LIBYANG_DEV LIBYANG_CPP LIBYANG_PY3 +export LIBYANG LIBYANG_DBGSYM LIBYANG_DEV LIBYANG_CPP LIBYANG_PY3 diff --git a/rules/systemd-sonic-generator.mk b/rules/systemd-sonic-generator.mk index cea08099177..80d9b65f5e0 100644 --- a/rules/systemd-sonic-generator.mk +++ b/rules/systemd-sonic-generator.mk @@ -1,3 +1,3 @@ SYSTEMD_SONIC_GENERATOR = systemd-sonic-generator_1.0.0_$(CONFIGURED_ARCH).deb $(SYSTEMD_SONIC_GENERATOR)_SRC_PATH = $(SRC_PATH)/systemd-sonic-generator -SONIC_MAKE_DEBS += $(SYSTEMD_SONIC_GENERATOR) +SONIC_DPKG_DEBS += $(SYSTEMD_SONIC_GENERATOR) diff --git a/slave.mk b/slave.mk index 36f2acabc40..5f6ac31c107 100644 --- a/slave.mk +++ b/slave.mk @@ -291,18 +291,19 @@ VIRTENV_BIN_CROSS_PYTHON3 = $(VIRTENV_BASE_CROSS_PYTHON3)/bin/ VIRTENV_LIB_CROSS_PYTHON2 = $(VIRTENV_BASE_CROSS_PYTHON2)/lib/ VIRTENV_LIB_CROSS_PYTHON3 = $(VIRTENV_BASE_CROSS_PYTHON3)/lib/ +CROSS_HOST_TYPE = $(shell dpkg-architecture -a $(CONFIGURED_ARCH) -q DEB_HOST_MULTIARCH) + ifeq ($(CONFIGURED_ARCH),armhf) -CROSS_HOST_TYPE = arm-linux-gnueabihf GOARCH=arm else ifeq ($(CONFIGURED_ARCH),arm64) -CROSS_HOST_TYPE = aarch64-linux-gnu GOARCH=arm64 endif CROSS_COMPILE = $(CROSS_HOST_TYPE)- -CROSS_CC = $(CROSS_COMPILE)gcc -CROSS_CXX = $(CROSS_COMPILE)g++ -CROSS_AR = $(CROSS_COMPILE)ar +CC = $(CROSS_COMPILE)gcc +CXX = $(CROSS_COMPILE)g++ +AR = $(CROSS_COMPILE)ar +LD = $(CROSS_COMPILE)ld CROSS_LIB_PATH = /usr/$(CROSS_HOST_TYPE)/lib/ CROSS_BIN_PATH = /usr/$(CROSS_HOST_TYPE)/bin/ CROSS_PKGS_LIB_PATH = /usr/lib/$(CROSS_HOST_TYPE) @@ -310,7 +311,8 @@ CROSS_PKGS_LIB_PATH = /usr/lib/$(CROSS_HOST_TYPE) CROSS_LIBPERL_VERSION = $(shell dpkg -s libperl-dev:$(CONFIGURED_ARCH)|grep Version|awk '{split($$2,v,"-"); print v[1];}') CROSS_PERL_CORE_PATH = $(CROSS_PKGS_LIB_PATH)/perl/$(CROSS_LIBPERL_VERSION)/CORE/ -CROSS_COMPILE_FLAGS := CGO_ENABLED=1 GOOS=linux GOARCH=$(GOARCH) CROSS_COMPILE=$(CROSS_COMPILE) OVERRIDE_HOST_TYPE=$(CROSS_HOST_TYPE) CROSS_CC=$(CROSS_CC) CROSS_CXX=$(CROSS_CXX) CROSS_LIB_PATH=$(CROSS_LIB_PATH) CROSS_BIN_PATH=$(CROSS_BIN_PATH) CROSS_HOST_TYPE=$(CROSS_HOST_TYPE) CROSS_PKGS_LIB_PATH=$(CROSS_PKGS_LIB_PATH) CROSS_PERL_CORE_PATH=$(CROSS_PERL_CORE_PATH) +CROSS_COMPILE_FLAGS := CGO_ENABLED=1 GOOS=linux GOARCH=$(GOARCH) CROSS_COMPILE=$(CROSS_COMPILE) OVERRIDE_HOST_TYPE=$(CROSS_HOST_TYPE) CROSS_LIB_PATH=$(CROSS_LIB_PATH) CROSS_BIN_PATH=$(CROSS_BIN_PATH) CROSS_HOST_TYPE=$(CROSS_HOST_TYPE) CROSS_PKGS_LIB_PATH=$(CROSS_PKGS_LIB_PATH) CROSS_PERL_CORE_PATH=$(CROSS_PERL_CORE_PATH) CC=$(CC) CXX=$(CXX) AR=$(AR) LD=$(LD) + endif ############################################################################### @@ -818,9 +820,12 @@ ifneq ($(CROSS_BUILD_ENVIRON),y) if [ ! "$($*_TEST)" = "n" ]; then python$($*_PYTHON_VERSION) setup.py test $(LOG); fi python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) else - PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py build $(LOG); - if [ ! "$($*_TEST)" = "n" ]; then PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py test $(LOG); fi - PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) + { + export PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} + pip$($*_PYTHON_VERSION) install . && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name` + if [ ! "$($*_TEST)" = "n" ]; then python$($*_PYTHON_VERSION) setup.py test $(LOG); fi + python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) + } endif # clean up if [ -f ../$(notdir $($*_SRC_PATH)).patch/series ]; then quilt pop -a -f; [ -d .pc ] && rm -rf .pc; fi diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index e4338557601..b89d44656d3 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -64,6 +64,8 @@ ARG gcc_arch=aarch64-linux-gnu ARG PYTHON_CROSS_PLATFORM=linux_aarch64 {%- endif %} +RUN echo "deb http://ftp.debian.org/debian buster-backports main" >> /etc/apt/sources.list + RUN dpkg --add-architecture $arch RUN apt-get update RUN apt-get install -y crossbuild-essential-$arch @@ -643,6 +645,9 @@ RUN apt-get install -y rsync dh-python RUN apt-get install -y libelf-dev:$arch libdw-dev:$arch libbz2-dev:$arch liblzo2-dev:$arch libedit-dev:$arch libevent-dev:$arch libopts25-dev:$arch libssl-dev:$arch pps-tools:$arch libpam-cap:$arch libcap-dev:$arch libpam0g-dev:$arch libaudit-dev:$arch libgtk-3-dev:$arch libkrb5-dev:$arch libsystemd-dev:$arch libwrap0-dev:$arch libkrb5-dev:$arch libboost1.67-dev:$arch libboost-dev:$arch libzmq5:$arch libzmq3-dev:$arch libdaemon-dev:$arch libjansson-dev:$arch libmnl-dev:$arch libsensors5:$arch libsensors4-dev:$arch libperl-dev:$arch libmariadb-dev:$arch libmariadb-dev-compat:$arch libpci-dev:$arch libjson-c3:$arch libjson-c-dev:$arch libreadline-dev:$arch librtr-dev:$arch librrd-dev:$arch libnetfilter-conntrack-dev:$arch libnetfilter-conntrack3:$arch libnfnetlink-dev:$arch libnftnl-dev:$arch libldap2-dev:$arch libbind-export-dev:$arch check:$arch libboost-atomic-dev:$arch libboost-test-dev:$arch libglib2.0-dev:$arch qt5-default:$arch libexplain-dev:$arch libc-ares-dev:$arch libip4tc0:$arch libip6tc0:$arch libiptc0:$arch libxtables12:$arch iptables-dev:$arch libatm1-dev:$arch libdb-dev:$arch pkg-config:$arch libnghttp2-14:$arch librtmp1:$arch libssh2-1:$arch libcjson1:$arch libcjson-dev:$arch libcurl3-gnutls:$arch libcurl3-nss-dev:$arch libboost-thread1.67-dev:$arch libboost-thread-dev:$arch libboost-system1.67-dev:$arch libboost-system-dev:$arch libgtest-dev:$arch libgmock-dev:$arch +RUN apt-get install -y -t buster-backports \ + libbpf-dev:$arch + RUN apt-get download libgirepository1.0-dev:$arch && dpkg --force-all -i libgirepository1.0-dev* RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install pycairo diff --git a/src/libyang/Makefile b/src/libyang/Makefile index 64fe77d8fac..53c4d59d1e1 100644 --- a/src/libyang/Makefile +++ b/src/libyang/Makefile @@ -3,7 +3,7 @@ SHELL = /bin/bash .SHELLFLAGS += -e MAIN_TARGET = $(LIBYANG) -DERIVED_TARGETS = $(LIBYANG_DEV) $(LIBYANG_DBG) $(LIBYANG_PY3) $(LIBYANG_CPP) +DERIVED_TARGETS = $(LIBYANG_DEV) $(LIBYANG_DBGSYM) $(LIBYANG_PY3) $(LIBYANG_CPP) $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Obtaining the libyang @@ -16,22 +16,12 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : stg import -s ../patch/series ifeq ($(CROSS_BUILD_ENVIRON), y) - patch -p1 < ../patch/cross-compile-changes.patch -endif - - mkdir build - pushd build -ifeq ($(CROSS_BUILD_ENVIRON), y) - CC=$(CROSS_CC) CXX=$(CROSS_CXX) cmake .. - make CC=$(CROSS_CC) CXX=$(CROSS_CXX) build-deb + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else - cmake .. - make build-deb + dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif - - pushd debs - mv $* $(DEST)/ - mv $(DERIVED_TARGETS) $(DEST)/ popd + mv $(DERIVED_TARGETS) $* $(DEST)/ + $(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/src/libyang/patch/cross-compile-changes.patch b/src/libyang/patch/cross-compile-changes.patch deleted file mode 100644 index ece5c1c661b..00000000000 --- a/src/libyang/patch/cross-compile-changes.patch +++ /dev/null @@ -1,48 +0,0 @@ -Index: libyang-1.0.73/CMakeLists.txt -=================================================================== ---- libyang-1.0.73.orig/CMakeLists.txt -+++ libyang-1.0.73/CMakeLists.txt -@@ -1,4 +1,5 @@ - cmake_minimum_required(VERSION 2.8.12) -+set(CMAKE_OBJCOPY $(CROSS_BIN_PATH)/objcopy CACHE PATH "" FORCE) - - # force out-of-source build - if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) -Index: libyang-1.0.73/packages/debian.control.in -=================================================================== ---- libyang-1.0.73.orig/packages/debian.control.in -+++ libyang-1.0.73/packages/debian.control.in -@@ -2,7 +2,7 @@ Source: @PACKAGE_NAME@ - Maintainer: CESNET - Priority: extra - Standards-Version: 3.8.2 --Build-Depends: debhelper (>= 9), gcc -+Build-Depends: debhelper (>= 9), - Homepage: https://github.com/CESNET/libyang - - Package: @PACKAGE_NAME@ -Index: libyang-1.0.73/packages/debian.rules.in -=================================================================== ---- libyang-1.0.73.orig/packages/debian.rules.in -+++ libyang-1.0.73/packages/debian.rules.in -@@ -13,7 +13,7 @@ override_dh_strip: - dh_strip -ppython3-yang@PACKAGE_PART_NAME@ --dbg-package=python3-yang@PACKAGE_PART_NAME@-dbg - - override_dh_auto_configure: -- cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE:String="@BUILD_TYPE@" -DENABLE_LYD_PRIV=ON -DGEN_LANGUAGE_BINDINGS=ON -DGEN_PYTHON_VERSION=2 . -+ CC=$(CROSS_CC) CXX=$(CROSS_CXX) cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE:String="@BUILD_TYPE@" -DENABLE_LYD_PRIV=ON -DGEN_LANGUAGE_BINDINGS=ON -DGEN_PYTHON_VERSION=2 . - - override_dh_makeshlibs: - dh_makeshlibs -Xextensions -Xuser_types -Index: libyang-1.0.73/packages/local-deb.sh.in -=================================================================== ---- libyang-1.0.73.orig/packages/local-deb.sh.in -+++ libyang-1.0.73/packages/local-deb.sh.in -@@ -22,6 +22,6 @@ cp "@PROJECT_SOURCE_DIR@/packages/debian - echo -e "@PACKAGE_NAME@ (@LIBYANG_VERSION@) stable; urgency=low\n" >debian/changelog - git log -10 --pretty=format:' * %s (%aN)%n' 2>/dev/null >>debian/changelog || echo -e " * unknown changes \n" >>debian/changelog - git log -1 --pretty=format:'%n -- %aN <%aE> %aD%n' >>debian/changelog 2>/dev/null || echo " -- ${USER} <${USER}@`hostname`> `date -R`" >>debian/changelog --debuild --no-lintian -i -b -us -uc -+debuild -e CROSS_CC -e CROSS_CXX --no-lintian -i -b -us -uc -a ${CONFIGURED_ARCH} - mv ../*.deb debs - export LC_TIME=$LOCAL_LC_TIME diff --git a/src/libyang/patch/series b/src/libyang/patch/series index 28352b9628e..9796e28649c 100644 --- a/src/libyang/patch/series +++ b/src/libyang/patch/series @@ -2,3 +2,4 @@ libyang.patch libyang_mgmt_framework.patch swig.patch large_file_support_arm32.patch +debian-packaging-files.patch diff --git a/src/radius/pam/Makefile b/src/radius/pam/Makefile index 61c403c0b50..685516b5f82 100644 --- a/src/radius/pam/Makefile +++ b/src/radius/pam/Makefile @@ -20,7 +20,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : cp ../patches/config.sub . cp ../patches/config.guess . ifeq ($(CROSS_BUILD_ENVIRON), y) - ./configure --disable-static --enable-libtool-lock --libdir=$(CROSS_PKGS_LIB_PATH) --libexecdir=$(CROSS_PKGS_LIB_PATH) --host=$(CROSS_HOST_TYPE) + ./configure --disable-static --enable-libtool-lock --host=$(CROSS_HOST_TYPE) else ./configure --disable-static --enable-libtool-lock endif diff --git a/src/sflow/hsflowd/Makefile b/src/sflow/hsflowd/Makefile index 43385da2ad6..35d17783f90 100644 --- a/src/sflow/hsflowd/Makefile +++ b/src/sflow/hsflowd/Makefile @@ -27,9 +27,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : sed -i -e s/_VERSION_/$(HSFLOWD_VERSION)-$(HSFLOWD_SUBVERSION)/g debian/changelog ifeq ($(CROSS_BUILD_ENVIRON), y) - sed -i "s/gcc/$$CROSS_CC/g" src/sflow/Makefile - sed -i "s/gcc/$$CROSS_CC/g" src/Linux/Makefile - CC=$(CROSS_CC) dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) --buildinfo-option=-u. --changes-option=-u. + dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) --buildinfo-option=-u. --changes-option=-u. else dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) --buildinfo-option=-u. --changes-option=-u. endif diff --git a/src/sflow/hsflowd/patch/0002-host_sflow_debian.patch b/src/sflow/hsflowd/patch/0002-host_sflow_debian.patch index 86ebab72335..f1977ccb00b 100644 --- a/src/sflow/hsflowd/patch/0002-host_sflow_debian.patch +++ b/src/sflow/hsflowd/patch/0002-host_sflow_debian.patch @@ -68,7 +68,7 @@ diff -ruN a/DEBIAN_build/rules b/DEBIAN_build/rules + dpkg-deb --build debian/hsflowd hsflowd_$(HSFLOWD_VERSION)-$(HSFLOWD_SUBVERSION)_$(CONFIGURED_ARCH).deb + +override_dh_auto_build: -+ make sonic-deb FEATURES="SONIC" ++ make sonic-deb FEATURES="SONIC" CC=$(CC) CXX=$(CXX) LD=$(CC) + +override_dh_auto_configure: + diff --git a/src/sflow/psample/debian/psample.install b/src/sflow/psample/debian/psample.install deleted file mode 100644 index 36d4eac1a85..00000000000 --- a/src/sflow/psample/debian/psample.install +++ /dev/null @@ -1,4 +0,0 @@ -bin/psample usr/bin -lib/libpsample.so.1.0 lib/x86_64-linux-gnu -lib/libpsample.so.1 lib/x86_64-linux-gnu -lib/libpsample.so lib/x86_64-linux-gnu diff --git a/src/sflow/psample/debian/rules b/src/sflow/psample/debian/rules index 652a6f1cc4b..eb7df4dda5c 100755 --- a/src/sflow/psample/debian/rules +++ b/src/sflow/psample/debian/rules @@ -4,20 +4,9 @@ %: dh $@ -override_dh_auto_build: -ifeq ($(CROSS_BUILD_ENVIRON), y) - CC=$(CROSS_CC) cmake . && make CROSS_COMPILE=$(CROSS_COMPILE) CC=$(CROSS_CC) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) -else - cmake . && make -endif - override_dh_auto_install: + dh_auto_install + rm -r debian/psample/usr/include override_dh_auto_test: -override_dh_auto_clean: - -override_dh_strip: - -override_dh_clean: - diff --git a/src/snmpd/Makefile b/src/snmpd/Makefile index 1a08feb539c..0445b1ed6be 100644 --- a/src/snmpd/Makefile +++ b/src/snmpd/Makefile @@ -59,8 +59,7 @@ endif ifneq ($(CROSS_BUILD_ENVIRON), y) dpkg-buildpackage -rfakeroot -b -d -us -uc -j1 --admindir $(SONIC_DPKG_ADMINDIR) else - patch -p1 < ../patch-$(SNMPD_VERSION)/cross-compile-changes.patch - CFLAGS="-I $$CROSS_PERL_CORE_PATH" LDFLAGS=" -L$$CROSS_PKGS_LIB_PATH" dpkg-buildpackage -rfakeroot -b -d -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j1 --admindir $(SONIC_DPKG_ADMINDIR) + PYTHONPATH=/usr/lib/python2.7/plat-arm-linux-gnueabihf/ dpkg-buildpackage -rfakeroot -b -d -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j1 --admindir $(SONIC_DPKG_ADMINDIR) endif popd diff --git a/src/snmpd/patch-5.7.3+dfsg/cross-compile-changes.patch b/src/snmpd/patch-5.7.3+dfsg/cross-compile-changes.patch index 682296ef1b3..47db1105a68 100644 --- a/src/snmpd/patch-5.7.3+dfsg/cross-compile-changes.patch +++ b/src/snmpd/patch-5.7.3+dfsg/cross-compile-changes.patch @@ -1,122 +1,17 @@ -Index: net-snmp-5.7.3+dfsg/debian/rules -=================================================================== ---- net-snmp-5.7.3+dfsg.orig/debian/rules -+++ net-snmp-5.7.3+dfsg/debian/rules -@@ -59,11 +59,11 @@ override_dh_auto_configure: +diff --git a/debian/rules b/debian/rules +index 9274c17..d107454 100755 +--- a/debian/rules ++++ b/debian/rules +@@ -5,6 +5,12 @@ export DEB_BUILD_MAINT_OPTIONS := hardening=+all + DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) + DEB_BUILD_ARCH_OS ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS) - override_dh_auto_build: - dh_auto_build -- cd python; python setup.py build --basedir=$(CURDIR) -+ cd python; CC=$(CROSS_CC) LDSHARED="$(CROSS_CC) -shared" python setup.py build --basedir=$(CURDIR) ++DEB_BUILD_MULTIARCH ?= $(shell dpkg-architecture -qDEB_BUILD_MULTIARCH) ++ ++ifneq ($(DEB_BUILD_MULTIARCH),$(DEB_HOST_MULTIARCH)) ++export PERL5OPT := -I/usr/lib/$(DEB_HOST_MULTIARCH)/perl/cross-config-$(shell perl -MConfig -e 'print $$Config{version}') ++endif ++ + LIB_VERSION = 30 + PYTHON_VERSION = 1.0a1 - override_dh_auto_install: - dh_auto_install -- cd python; python setup.py install --root=$(CURDIR)/debian/tmp \ -+ cd python; CC=$(CROSS_CC) LDSHARED="$(CROSS_CC) -shared" python setup.py install --root=$(CURDIR)/debian/tmp \ - --install-layout=deb --basedir=$(CURDIR) ; \ - find $(CURDIR) -name *.pyc -delete - -Index: net-snmp-5.7.3+dfsg/perl/ASN/Makefile.PL -=================================================================== ---- net-snmp-5.7.3+dfsg.orig/perl/ASN/Makefile.PL -+++ net-snmp-5.7.3+dfsg/perl/ASN/Makefile.PL -@@ -72,6 +72,8 @@ sub InitMakeParams { - else - { - $opts = NetSNMPGetOpts(); -+$Params{'CC'} = "$ENV{'CROSS_CC'}"; -+$Params{'LD'} = "$ENV{'CROSS_CC'}"; - $Params{'LDDLFLAGS'} = "$Config{lddlflags} " . `$opts->{'nsconfig'} --ldflags`; - $Params{'LIBS'} = `$opts->{'nsconfig'} --libs`; - chomp($Params{'LIBS'}); -Index: net-snmp-5.7.3+dfsg/perl/Makefile.PL -=================================================================== ---- net-snmp-5.7.3+dfsg.orig/perl/Makefile.PL -+++ net-snmp-5.7.3+dfsg/perl/Makefile.PL -@@ -14,6 +14,8 @@ sub InitMakeParams { - - # bogus, but these options need to be passed to the lower levels - $opts = NetSNMPGetOpts("./"); -+$Params{'CC'} = "$ENV{'CROSS_CC'}"; -+$Params{'LD'} = "$ENV{'CROSS_CC'}"; - - return(%Params); - } -Index: net-snmp-5.7.3+dfsg/perl/OID/Makefile.PL -=================================================================== ---- net-snmp-5.7.3+dfsg.orig/perl/OID/Makefile.PL -+++ net-snmp-5.7.3+dfsg/perl/OID/Makefile.PL -@@ -70,6 +70,8 @@ sub InitMakeParams { - } - else { - $opts = NetSNMPGetOpts(); -+$Params{'CC'} = "$ENV{'CROSS_CC'}"; -+$Params{'LD'} = "$ENV{'CROSS_CC'}"; - $Params{'LDDLFLAGS'} = "$Config{lddlflags} " . `$opts->{'nsconfig'} --ldflags`; - $Params{'LIBS'} = `$opts->{'nsconfig'} --libs`; - chomp($Params{'LIBS'}); -Index: net-snmp-5.7.3+dfsg/perl/SNMP/Makefile.PL -=================================================================== ---- net-snmp-5.7.3+dfsg.orig/perl/SNMP/Makefile.PL -+++ net-snmp-5.7.3+dfsg/perl/SNMP/Makefile.PL -@@ -74,6 +74,8 @@ sub InitMakeParams { - } - else { - $opts = NetSNMPGetOpts(); -+$Params{'CC'} = "$ENV{'CROSS_CC'}"; -+$Params{'LD'} = "$ENV{'CROSS_CC'}"; - $Params{'LDDLFLAGS'} = "$Config{lddlflags} " . `$opts->{'nsconfig'} --ldflags`; - if (!$ENV{'NETSNMP_LIBS'}) { - $Params{'LIBS'} = `$opts->{'nsconfig'} --libs`; -Index: net-snmp-5.7.3+dfsg/perl/TrapReceiver/Makefile.PL -=================================================================== ---- net-snmp-5.7.3+dfsg.orig/perl/TrapReceiver/Makefile.PL -+++ net-snmp-5.7.3+dfsg/perl/TrapReceiver/Makefile.PL -@@ -103,6 +103,8 @@ sub InitMakeParams { - } - else { - $opts = NetSNMPGetOpts(); -+$Params{'CC'} = "$ENV{'CROSS_CC'}"; -+$Params{'LD'} = "$ENV{'CROSS_CC'}"; - $Params{'LDDLFLAGS'} = "$Config{lddlflags} " . `$opts->{'nsconfig'} --ldflags`; - $Params{'LIBS'} = '-lnetsnmptrapd ' . `$opts->{'nsconfig'} --base-agent-libs`; - chomp($Params{'LIBS'}); -Index: net-snmp-5.7.3+dfsg/perl/agent/Makefile.PL -=================================================================== ---- net-snmp-5.7.3+dfsg.orig/perl/agent/Makefile.PL -+++ net-snmp-5.7.3+dfsg/perl/agent/Makefile.PL -@@ -75,6 +75,8 @@ sub InitMakeParams { - } - else { - $opts = NetSNMPGetOpts(); -+$Params{'CC'} = "$ENV{'CROSS_CC'}"; -+$Params{'LD'} = "$ENV{'CROSS_CC'}"; - $Params{'LDDLFLAGS'} = "$Config{lddlflags} " . `$opts->{'nsconfig'} --ldflags`; - $Params{'LIBS'} = `$opts->{'nsconfig'} --base-agent-libs`; - chomp($Params{'LIBS'}); -Index: net-snmp-5.7.3+dfsg/perl/agent/default_store/Makefile.PL -=================================================================== ---- net-snmp-5.7.3+dfsg.orig/perl/agent/default_store/Makefile.PL -+++ net-snmp-5.7.3+dfsg/perl/agent/default_store/Makefile.PL -@@ -66,6 +66,8 @@ sub InitMakeParams { - } - else { - $opts = NetSNMPGetOpts("../../"); -+$Params{'CC'} = "$ENV{'CROSS_CC'}"; -+$Params{'LD'} = "$ENV{'CROSS_CC'}"; - $Params{'LIBS'} = `$opts->{'nsconfig'} --libs`; - chomp($Params{'LIBS'}); - $Params{'CCFLAGS'} = `$opts->{'nsconfig'} --cflags`; -Index: net-snmp-5.7.3+dfsg/perl/default_store/Makefile.PL -=================================================================== ---- net-snmp-5.7.3+dfsg.orig/perl/default_store/Makefile.PL -+++ net-snmp-5.7.3+dfsg/perl/default_store/Makefile.PL -@@ -64,6 +64,8 @@ sub InitMakeParams { - } - else { - $opts = NetSNMPGetOpts(); -+$Params{'CC'} = "$ENV{'CROSS_CC'}"; -+$Params{'LD'} = "$ENV{'CROSS_CC'}"; - $Params{'LDDLFLAGS'} = "$Config{lddlflags} " . `$opts->{'nsconfig'} --ldflags`; - $Params{'LIBS'} = `$opts->{'nsconfig'} --libs`; - chomp($Params{'LIBS'}); diff --git a/src/snmpd/patch-5.7.3+dfsg/series b/src/snmpd/patch-5.7.3+dfsg/series index 31b251845de..769b2938d37 100644 --- a/src/snmpd/patch-5.7.3+dfsg/series +++ b/src/snmpd/patch-5.7.3+dfsg/series @@ -3,3 +3,4 @@ 0006-From-Jiri-Cervenka-snmpd-Fixed-agentx-crashing-and-or-freezing-on-timeout.patch 0007-Linux-VRF-5.7.3-Support.patch 0008-Enable-macro-DEB_BUILD_ARCH_OS-in-order-to-build-ipv.patch +cross-compile-changes.patch diff --git a/src/snmpd/patch-5.9+dfsg/cross-compile-changes.patch b/src/snmpd/patch-5.9+dfsg/cross-compile-changes.patch index 95b036f8aec..fedaeaa36bb 100644 --- a/src/snmpd/patch-5.9+dfsg/cross-compile-changes.patch +++ b/src/snmpd/patch-5.9+dfsg/cross-compile-changes.patch @@ -1,165 +1,17 @@ -Index: net-snmp-5.9+dfsg/perl/ASN/Makefile.PL -=================================================================== ---- net-snmp-5.9+dfsg.orig/perl/ASN/Makefile.PL -+++ net-snmp-5.9+dfsg/perl/ASN/Makefile.PL -@@ -13,7 +13,9 @@ my $lib_version; - # See lib/ExtUtils/MakeMaker.pm for details of how to influence - # the contents of the Makefile that is written. +diff --git a/debian/rules b/debian/rules +index b23b335..b8a79b9 100755 +--- a/debian/rules ++++ b/debian/rules +@@ -5,6 +5,12 @@ export DEB_BUILD_MAINT_OPTIONS := hardening=+all + DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) + DEB_BUILD_ARCH_OS ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS) --WriteMakefile(AsnInitMakeParams()); -+sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } ++DEB_BUILD_MULTIARCH ?= $(shell dpkg-architecture -qDEB_BUILD_MULTIARCH) + -+WriteMakefile_cross(AsnInitMakeParams()); - - Check_Version($lib_version); - -Index: net-snmp-5.9+dfsg/perl/AnyData_SNMP/Makefile.PL -=================================================================== ---- net-snmp-5.9+dfsg.orig/perl/AnyData_SNMP/Makefile.PL -+++ net-snmp-5.9+dfsg/perl/AnyData_SNMP/Makefile.PL -@@ -1,7 +1,9 @@ - use ExtUtils::MakeMaker; - # See lib/ExtUtils/MakeMaker.pm for details of how to influence - # the contents of the Makefile that is written. --WriteMakefile( -+sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } -+ -+WriteMakefile_cross( - 'NAME' => 'AnyData::SNMP', - 'VERSION_FROM' => 'Storage.pm', # finds $VERSION - 'PREREQ_PM' => {# SNMP => 5.0, -Index: net-snmp-5.9+dfsg/perl/Makefile.PL -=================================================================== ---- net-snmp-5.9+dfsg.orig/perl/Makefile.PL -+++ net-snmp-5.9+dfsg/perl/Makefile.PL -@@ -8,7 +8,9 @@ use MakefileSubs; - # Prevent that MakeMaker complains about unknown parameter names. - NetSNMPGetOpts(); - --WriteMakefile( -+sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } -+ -+WriteMakefile_cross( - 'NAME' => 'Bundle::NetSNMP', - 'DIR' => [qw(default_store ASN OID agent SNMP TrapReceiver)], - ); -Index: net-snmp-5.9+dfsg/perl/OID/Makefile.PL -=================================================================== ---- net-snmp-5.9+dfsg.orig/perl/OID/Makefile.PL -+++ net-snmp-5.9+dfsg/perl/OID/Makefile.PL -@@ -10,7 +10,9 @@ use MakefileSubs; - - my $lib_version; - --WriteMakefile(OidInitMakeParams()); -+sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } -+ -+WriteMakefile_cross(OidInitMakeParams()); - - Check_Version($lib_version); - -Index: net-snmp-5.9+dfsg/perl/SNMP/Makefile.PL -=================================================================== ---- net-snmp-5.9+dfsg.orig/perl/SNMP/Makefile.PL -+++ net-snmp-5.9+dfsg/perl/SNMP/Makefile.PL -@@ -14,7 +14,9 @@ my $prefix; - # See lib/ExtUtils/MakeMaker.pm for details of how to influence - # the contents of the Makefile that is written. - --WriteMakefile(SnmpInitMakeParams()); -+sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } -+ -+WriteMakefile_cross(SnmpInitMakeParams()); - - Check_Version($lib_version); - -Index: net-snmp-5.9+dfsg/perl/TrapReceiver/Makefile.PL -=================================================================== ---- net-snmp-5.9+dfsg.orig/perl/TrapReceiver/Makefile.PL -+++ net-snmp-5.9+dfsg/perl/TrapReceiver/Makefile.PL -@@ -7,7 +7,9 @@ use MakefileSubs; - - my $lib_version; - --WriteMakefile(TrapReceiverInitMakeParams()); -+sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } -+ -+WriteMakefile_cross(TrapReceiverInitMakeParams()); - - Check_Version($lib_version); - -Index: net-snmp-5.9+dfsg/perl/agent/Makefile.PL -=================================================================== ---- net-snmp-5.9+dfsg.orig/perl/agent/Makefile.PL -+++ net-snmp-5.9+dfsg/perl/agent/Makefile.PL -@@ -7,7 +7,9 @@ use MakefileSubs; - - my $lib_version; - --WriteMakefile(AgentInitMakeParams()); -+sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } -+ -+WriteMakefile_cross(AgentInitMakeParams()); - - Check_Version($lib_version); - -Index: net-snmp-5.9+dfsg/perl/agent/Support/Makefile.PL -=================================================================== ---- net-snmp-5.9+dfsg.orig/perl/agent/Support/Makefile.PL -+++ net-snmp-5.9+dfsg/perl/agent/Support/Makefile.PL -@@ -10,7 +10,9 @@ my $lib_version; - # See lib/ExtUtils/MakeMaker.pm for details of how to influence - # the contents of the Makefile that is written. - --WriteMakefile(SupportInitMakeParams()); -+sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } -+ -+WriteMakefile_cross(SupportInitMakeParams()); - - Check_Version($lib_version); - -Index: net-snmp-5.9+dfsg/perl/agent/default_store/Makefile.PL -=================================================================== ---- net-snmp-5.9+dfsg.orig/perl/agent/default_store/Makefile.PL -+++ net-snmp-5.9+dfsg/perl/agent/default_store/Makefile.PL -@@ -7,7 +7,9 @@ use MakefileSubs; - - my $lib_version; - --WriteMakefile(AgentDefaultStoreInitMakeParams()); -+sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } ++ifneq ($(DEB_BUILD_MULTIARCH),$(DEB_HOST_MULTIARCH)) ++export PERL5OPT := -I/usr/lib/$(DEB_HOST_MULTIARCH)/perl/cross-config ++endif + -+WriteMakefile_cross(AgentDefaultStoreInitMakeParams()); - - Check_Version($lib_version); - -Index: net-snmp-5.9+dfsg/perl/default_store/Makefile.PL -=================================================================== ---- net-snmp-5.9+dfsg.orig/perl/default_store/Makefile.PL -+++ net-snmp-5.9+dfsg/perl/default_store/Makefile.PL -@@ -8,7 +8,9 @@ use MakefileSubs; + LIB_VERSION = 40 - my $lib_version; - --WriteMakefile(DefaultStoreInitMakeParams()); -+sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } -+ -+WriteMakefile_cross(DefaultStoreInitMakeParams()); - - sub DefaultStoreInitMakeParams { - my $opts; -Index: net-snmp-5.9+dfsg/perl/manager/Makefile.PL -=================================================================== ---- net-snmp-5.9+dfsg.orig/perl/manager/Makefile.PL -+++ net-snmp-5.9+dfsg/perl/manager/Makefile.PL -@@ -1,7 +1,9 @@ - use ExtUtils::MakeMaker; - # See lib/ExtUtils/MakeMaker.pm for details of how to influence - # the contents of the Makefile that is written. --WriteMakefile( -+sub WriteMakefile_cross { push(@_, 'CC' => $ENV{'CROSS_CC'}); push(@_, 'LD' => $ENV{'CROSS_CC'}); WriteMakefile(@_); } -+ -+WriteMakefile_cross( - 'NAME' => 'NetSNMP::manager', - 'VERSION' => '', # finds $VERSION - 'PREREQ_PM' => {# SNMP => 4.0, + MIB_MODULES = smux ucd-snmp/dlmod mibII/mta_sendmail disman/event-mib diff --git a/src/snmpd/patch-5.9+dfsg/series b/src/snmpd/patch-5.9+dfsg/series index cabee4060f9..81a3ecc3f3e 100644 --- a/src/snmpd/patch-5.9+dfsg/series +++ b/src/snmpd/patch-5.9+dfsg/series @@ -3,3 +3,4 @@ #0006-From-Jiri-Cervenka-snmpd-Fixed-agentx-crashing-and-or-freezing-on-timeout.patch #0007-Linux-VRF-5.7.3-Support.patch 0008-Enable-macro-DEB_BUILD_ARCH_OS-in-order-to-build-ipv.patch +cross-compile-changes.patch diff --git a/src/sonic-frr/Makefile b/src/sonic-frr/Makefile index 1f7e831eaea..289c3de6bc7 100644 --- a/src/sonic-frr/Makefile +++ b/src/sonic-frr/Makefile @@ -19,8 +19,7 @@ endif gbp dch --ignore-branch --new-version=$(FRR_VERSION)-sonic-$(FRR_SUBVERSION) --dch-opt="--force-bad-version" --commit --git-author ifeq ($(CROSS_BUILD_ENVIRON), y) - patch -p1 < ../patch/cross-compile-changes.patch - CFLAGS="-I $$CROSS_PERL_CORE_PATH" LDFLAGS=" -L $$CROSS_PKGS_LIB_PATH" dpkg-buildpackage -rfakeroot -b -d -us -uc -Ppkg.frr.nortrlib -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + CFLAGS="-I $$CROSS_PERL_CORE_PATH" dpkg-buildpackage -rfakeroot -b -d -us -uc -Ppkg.frr.nortrlib -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else dpkg-buildpackage -rfakeroot -b -us -uc -Ppkg.frr.nortrlib -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif diff --git a/src/sonic-frr/patch/cross-compile-changes.patch b/src/sonic-frr/patch/cross-compile-changes.patch index 9a44ed02fe0..621a8a66985 100644 --- a/src/sonic-frr/patch/cross-compile-changes.patch +++ b/src/sonic-frr/patch/cross-compile-changes.patch @@ -1,15 +1,30 @@ -Index: frr/debian/frr-doc.info -=================================================================== ---- frr.orig/debian/frr-doc.info -+++ frr/debian/frr-doc.info -@@ -1 +1 @@ +From ece218405fe4c086017f2a4f2b2b4c86b9790db0 Mon Sep 17 00:00:00 2001 +From: Saikrishna Arcot +Date: Wed, 6 Jul 2022 11:28:16 -0700 +Subject: [PATCH] Make changes to support crosscompilation in SONiC + +Signed-off-by: Saikrishna Arcot +--- + debian/frr-doc.info | 1 - + debian/frr.manpages | 16 ---------------- + debian/rules | 17 ++++++++++++----- + 3 files changed, 12 insertions(+), 22 deletions(-) + delete mode 100644 debian/frr-doc.info + delete mode 100644 debian/frr.manpages + +diff --git a/debian/frr-doc.info b/debian/frr-doc.info +deleted file mode 100644 +index a83255a24..000000000 +--- a/debian/frr-doc.info ++++ /dev/null +@@ -1 +0,0 @@ -doc/user/_build/texinfo/frr.info -+build/doc/user/_build/texinfo/frr.info -Index: frr/debian/frr.manpages -=================================================================== ---- frr.orig/debian/frr.manpages -+++ frr/debian/frr.manpages -@@ -1,16 +1,16 @@ +diff --git a/debian/frr.manpages b/debian/frr.manpages +deleted file mode 100644 +index 5075fd763..000000000 +--- a/debian/frr.manpages ++++ /dev/null +@@ -1,16 +0,0 @@ -doc/manpages/_build/man/frr-bgpd.8 -doc/manpages/_build/man/frr-eigrpd.8 -doc/manpages/_build/man/frr-fabricd.8 @@ -26,32 +41,22 @@ Index: frr/debian/frr.manpages -doc/manpages/_build/man/frr.1 -doc/manpages/_build/man/mtracebis.8 -doc/manpages/_build/man/vtysh.1 -+build/doc/manpages/_build/man/frr-bgpd.8 -+build/doc/manpages/_build/man/frr-eigrpd.8 -+build/doc/manpages/_build/man/frr-fabricd.8 -+build/doc/manpages/_build/man/frr-isisd.8 -+build/doc/manpages/_build/man/frr-ldpd.8 -+build/doc/manpages/_build/man/frr-nhrpd.8 -+build/doc/manpages/_build/man/frr-ospf6d.8 -+build/doc/manpages/_build/man/frr-ospfd.8 -+build/doc/manpages/_build/man/frr-pimd.8 -+build/doc/manpages/_build/man/frr-ripd.8 -+build/doc/manpages/_build/man/frr-ripngd.8 -+build/doc/manpages/_build/man/frr-watchfrr.8 -+build/doc/manpages/_build/man/frr-zebra.8 -+build/doc/manpages/_build/man/frr.1 -+build/doc/manpages/_build/man/mtracebis.8 -+build/doc/manpages/_build/man/vtysh.1 -Index: frr/debian/rules -=================================================================== ---- frr.orig/debian/rules -+++ frr/debian/rules -@@ -27,10 +27,10 @@ else +diff --git a/debian/rules b/debian/rules +index 0fa9c3a3b..6b005ea5f 100755 +--- a/debian/rules ++++ b/debian/rules +@@ -27,10 +27,17 @@ else CONF_LUA=--enable-scripting endif --export PYTHON=python3 ++DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH) ++DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) ++ ++ifneq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH)) +export PYTHON=/python_virtualenv/env3/bin/python3 ++else + export PYTHON=python3 ++endif %: - dh $@ @@ -59,14 +64,14 @@ Index: frr/debian/rules override_dh_auto_configure: $(shell dpkg-buildflags --export=sh); \ -@@ -67,12 +67,12 @@ override_dh_auto_configure: +@@ -67,12 +74,12 @@ override_dh_auto_configure: override_dh_auto_install: dh_auto_install - sed -e '1c #!/usr/bin/python3' -i debian/tmp/usr/lib/frr/frr-reload.py - sed -e '1c #!/usr/bin/python3' -i debian/tmp/usr/lib/frr/generate_support_bundle.py -+ sed -e '1c #!/python_virtualenv/env3/bin/python3' -i debian/tmp/usr/lib/frr/frr-reload.py -+ sed -e '1c #!/python_virtualenv/env3/bin/python3' -i debian/tmp/usr/lib/frr/generate_support_bundle.py ++ sed -e '1c #!$(shell which $PYTHON)' -i debian/tmp/usr/lib/frr/frr-reload.py ++ sed -e '1c #!$(shell which $PYTHON)' -i debian/tmp/usr/lib/frr/generate_support_bundle.py # let dh_systemd_* and dh_installinit do their thing automatically - cp tools/frr.service debian/frr.service @@ -76,3 +81,6 @@ Index: frr/debian/rules -rm -f debian/tmp/usr/lib/frr/frr # install config files +-- +2.25.1 + diff --git a/src/sonic-frr/patch/series b/src/sonic-frr/patch/series index 43e407a3c95..3e8438bf6dd 100644 --- a/src/sonic-frr/patch/series +++ b/src/sonic-frr/patch/series @@ -7,3 +7,4 @@ 0007-Add-support-of-bgp-l3vni-evpn.patch 0008-Link-local-scope-was-not-set-while-binding-socket-for-bgp-ipv6-link-local-neighbors.patch Disable-ipv6-src-address-test-in-pceplib.patch +cross-compile-changes.patch diff --git a/src/systemd-sonic-generator/Makefile b/src/systemd-sonic-generator/Makefile index afcdb711e9d..0e6fb9095dc 100644 --- a/src/systemd-sonic-generator/Makefile +++ b/src/systemd-sonic-generator/Makefile @@ -1,21 +1,11 @@ CC=gcc -CFLAGS=-std=gnu99 -D_GNU_SOURCE +CFLAGS += -std=gnu99 -D_GNU_SOURCE -CPP=g++ -CPPFLAGS=-std=c++11 -D_GNU_SOURCE -LFLAGS=-lpthread -lboost_filesystem -lboost_system -lgtest +CXX=g++ +CXXFLAGS += -std=c++11 -D_GNU_SOURCE +LDFLAGS += -lpthread -lboost_filesystem -lboost_system -lgtest BINARY = systemd-sonic-generator -MAIN_TARGET = $(BINARY)_1.0.0_$(CONFIGURED_ARCH).deb - -$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : -ifeq ($(CROSS_BUILD_ENVIRON), y) - dpkg-buildpackage -us -uc -b -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) -else - dpkg-buildpackage -us -uc -b -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) -endif - mv ../$(MAIN_TARGET) $(DEST)/ - rm ../$(BINARY)-* ../$(BINARY)_* $(BINARY): systemd-sonic-generator.c rm -f ./systemd-sonic-generator @@ -34,7 +24,7 @@ test: ssg_test ./ssg_test ssg_test: ssg-test.cc systemd-sonic-generator.o - $(CPP) $(CPPFLAGS) -o $@ $^ $(LFLAGS) + $(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) systemd-sonic-generator.o: systemd-sonic-generator.c $(CC) $(CFLAGS) -D_SSG_UNITTEST -o $@ -c $^ diff --git a/src/systemd-sonic-generator/debian/control b/src/systemd-sonic-generator/debian/control index cbf8989e8df..1daa9bc0f71 100644 --- a/src/systemd-sonic-generator/debian/control +++ b/src/systemd-sonic-generator/debian/control @@ -1,6 +1,11 @@ Source: systemd-sonic-generator +Section: devel +Priority: optional +Build-Depends: debhelper (>= 11.0.0) +Standards-Version: 3.9.3 Maintainer: Lawrence Lee Package: systemd-sonic-generator Architecture: any +Depends: ${shlibs:Depends} Description: Systemd generator for SONiC services diff --git a/src/systemd-sonic-generator/debian/rules b/src/systemd-sonic-generator/debian/rules index 6adbc22d24d..9e806e86650 100755 --- a/src/systemd-sonic-generator/debian/rules +++ b/src/systemd-sonic-generator/debian/rules @@ -1,30 +1,9 @@ #!/usr/bin/make -f - -DISTRIBUTION = $(shell sed -n "s/^VERSION_CODENAME=//p" /etc/os-release) -VERSION = 1.0.0 -PACKAGEVERSION = $(VERSION) +export DH_VERBOSE=1 %: dh $@ -override_dh_auto_clean: -override_dh_auto_build: -override_dh_auto_install: -ifeq ($(CROSS_BUILD_ENVIRON), y) - make CROSS_COMPILE=$(CROSS_COMPILE) CC=$(CROSS_CC) LD_LIBRARY_PATH=$(CROSS_LIB_PATH) systemd-sonic-generator -else - make systemd-sonic-generator -endif - make install DESTDIR=debian/systemd-sonic-generator - -ifeq ($(CROSS_BUILD_ENVIRON), y) -override_dh_shlibdeps: - dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info -l$(CROSS_LIB_PATH) -endif - -override_dh_gencontrol: - dh_gencontrol -- -v$(PACKAGEVERSION) - override_dh_auto_test: ifneq "$(DEB_HOST_ARCH)" "armhf" make test From ca03d67f6589609c1c2ab1a48fca3f9a277fd1c3 Mon Sep 17 00:00:00 2001 From: marvell Date: Mon, 18 Jul 2022 17:07:59 +0530 Subject: [PATCH 28/30] Fixed saiarcot895 reviewer's additional requests --- slave.mk | 2 +- sonic-slave-bullseye/Dockerfile.j2 | 12 +++++++++++- sonic-slave-bullseye/disable-non-manylinux.patch | 10 ++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 sonic-slave-bullseye/disable-non-manylinux.patch diff --git a/slave.mk b/slave.mk index 5f6ac31c107..be2cded0ba8 100644 --- a/slave.mk +++ b/slave.mk @@ -822,7 +822,7 @@ ifneq ($(CROSS_BUILD_ENVIRON),y) else { export PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} - pip$($*_PYTHON_VERSION) install . && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name` + python$($*_PYTHON_VERSION) setup.py build $(LOG) if [ ! "$($*_TEST)" = "n" ]; then python$($*_PYTHON_VERSION) setup.py test $(LOG); fi python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) } diff --git a/sonic-slave-bullseye/Dockerfile.j2 b/sonic-slave-bullseye/Dockerfile.j2 index eda8533f082..669732330a7 100644 --- a/sonic-slave-bullseye/Dockerfile.j2 +++ b/sonic-slave-bullseye/Dockerfile.j2 @@ -95,7 +95,7 @@ RUN pip3 install virtualenv RUN mkdir /python_virtualenv RUN cd /python_virtualenv && python3 -m virtualenv --copies -p /usr/bin/python3 env3 -RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install setuptools==49.6.00 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==5.2 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 PyYAML==5.4.1 redis==3.5.3 pexpect==4.8.0 Pympler==0.8 parameterized natsort==6.2.1 MarkupSafe==2.0.1 Jinja2==3.0.3 click tabulate netaddr netifaces pyroute2 pyfakefs sphinx && ln -s /python_virtualenv/env3/bin/pytest /python_virtualenv/env3/bin/pytest-3 +RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install setuptools==49.6.00 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==5.2 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 PyYAML==5.4.1 redis==3.5.3 pexpect==4.8.0 Pympler==0.8 parameterized natsort==6.2.1 MarkupSafe==2.0.1 Jinja2==3.0.3 click tabulate netaddr netifaces pyroute2 pyfakefs sphinx lazy_object_proxy && ln -s /python_virtualenv/env3/bin/pytest /python_virtualenv/env3/bin/pytest-3 RUN apt-get --fix-broken install -y RUN LIBPYTHON3_DEPS="`apt-cache depends libpython3-dev:$arch |grep Depends|awk {'print \$2;'}|tr "\n" " "`" && apt-get install -y libpython2.7-dev:$arch $LIBPYTHON3_DEPS libxml2-dev:$arch libxslt-dev:$arch libssl-dev:$arch libz-dev:$arch @@ -492,6 +492,16 @@ RUN apt-get purge -y python3-pip python3-yaml RUN pip3 install setuptools==49.6.00 RUN pip3 install wheel==0.35.1 +{%- if CONFIGURED_ARCH == "armhf" %} +# Allow only manylinux wheels on armhf, to ensure that binaries/libraries work correctly on armhf +COPY ["disable-non-manylinux.patch", "/"] +{%- if CROSS_BUILD_ENVIRON == "y" %} +RUN patch -p1 -i /disable-non-manylinux.patch /python_virtualenv/env3/lib/python3.9/site-packages/pip/_vendor/packaging/tags.py +{%- else %} +RUN patch -p1 -i /disable-non-manylinux.patch /usr/local/lib/python3.9/dist-packages/pip/_vendor/packaging/tags.py +{%- endif %} +{%- endif %} + # For building sonic-utilities RUN pip3 install fastentrypoints mock diff --git a/sonic-slave-bullseye/disable-non-manylinux.patch b/sonic-slave-bullseye/disable-non-manylinux.patch new file mode 100644 index 00000000000..67e81c4e911 --- /dev/null +++ b/sonic-slave-bullseye/disable-non-manylinux.patch @@ -0,0 +1,10 @@ +--- a/tags.py 2022-07-12 00:07:22.710207780 +0000 ++++ b/tags.py 2022-07-12 00:07:13.185890659 +0000 +@@ -424,7 +424,6 @@ + _, arch = linux.split("_", 1) + yield from _manylinux.platform_tags(linux, arch) + yield from _musllinux.platform_tags(arch) +- yield linux + + + def _generic_platforms() -> Iterator[str]: From 26f479e65da666d300478f2e0e0a9e28003f921c Mon Sep 17 00:00:00 2001 From: marvell Date: Mon, 18 Jul 2022 20:14:31 +0530 Subject: [PATCH 29/30] src/libyang/patch/debian-packaging-files.patch --- .../patch/debian-packaging-files.patch | 233 ++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 src/libyang/patch/debian-packaging-files.patch diff --git a/src/libyang/patch/debian-packaging-files.patch b/src/libyang/patch/debian-packaging-files.patch new file mode 100644 index 00000000000..5370a94aa45 --- /dev/null +++ b/src/libyang/patch/debian-packaging-files.patch @@ -0,0 +1,233 @@ +From 99afc75d62942e1e4a4d576a880c697ecb0bab06 Mon Sep 17 00:00:00 2001 +From: Saikrishna Arcot +Date: Fri, 1 Jul 2022 10:30:48 -0700 +Subject: [PATCH] Add debian packaging files. + +Libyang does have a custom cmake target that can make these files, but +it breaks several things. Building for another architecture doesn't +cleanly work unless you happen to enable language bindings in your +initial CMake call (otherwise, it will use the default C++ compiler +instead of whatever is set in the environment variable). In addition, +objcopy at the end doesn't appear to use the target +architecture-specific version for whatever reason. + +Make things cleaner by just creating the debian files. In these files, +bump up the compat level, remove the hardcoded debug packages (dbgsym +packages are automatically generated), and rely on debhelper to do the +configure/build. + +Signed-off-by: Saikrishna Arcot +--- + debian/changelog | 23 +++++++++++++++++++++ + debian/compat | 1 + + debian/control | 37 ++++++++++++++++++++++++++++++++++ + debian/copyright | 28 +++++++++++++++++++++++++ + debian/libyang-cpp-dev.install | 3 +++ + debian/libyang-cpp.install | 1 + + debian/libyang-dev.install | 3 +++ + debian/libyang.install | 5 +++++ + debian/python3-yang.install | 1 + + debian/rules | 16 +++++++++++++++ + debian/source/format | 1 + + 11 files changed, 119 insertions(+) + create mode 100644 debian/changelog + create mode 100644 debian/compat + create mode 100644 debian/control + create mode 100644 debian/copyright + create mode 100644 debian/libyang-cpp-dev.install + create mode 100644 debian/libyang-cpp.install + create mode 100644 debian/libyang-dev.install + create mode 100644 debian/libyang.install + create mode 100644 debian/python3-yang.install + create mode 100755 debian/rules + create mode 100644 debian/source/format + +diff --git a/debian/changelog b/debian/changelog +new file mode 100644 +index 00000000..421609c7 +--- /dev/null ++++ b/debian/changelog +@@ -0,0 +1,23 @@ ++libyang (1.0.73) stable; urgency=low ++ ++ * VERSION bump to version 1.0.73 (Radek Krejci) ++ ++ * SOVERSION bump to version 1.2.2 (Radek Krejci) ++ ++ * JSON parser CHANGE respect STRICT flag and if not set, ignore unknown data (Radek Krejci) ++ ++ * VERSION bump to version 1.0.72 (Radek Krejci) ++ ++ * SOVERSION bump to version 1.2.1 (Radek Krejci) ++ ++ * schema parsers BUGFIX duplicating iffeature expression data (Radek Krejci) ++ ++ * VERSION bump to version 1.0.71 (Radek Krejci) ++ ++ * SOVERSION bump to version 1.2.0 (Radek Krejci) ++ ++ * schema parsers BUGFIX creating implicit cases when augmenting choice (Radek Krejci) ++ ++ * Merge pull request #891 from opensourcerouting/api_tracing (Michal Vasko) ++ ++ -- sarcot Fri, 1 Jul 2022 16:46:13 +0000 +diff --git a/debian/compat b/debian/compat +new file mode 100644 +index 00000000..f599e28b +--- /dev/null ++++ b/debian/compat +@@ -0,0 +1 @@ ++10 +diff --git a/debian/control b/debian/control +new file mode 100644 +index 00000000..cb182fa4 +--- /dev/null ++++ b/debian/control +@@ -0,0 +1,37 @@ ++Source: libyang ++Maintainer: CESNET ++Priority: extra ++Standards-Version: 3.8.2 ++Build-Depends: debhelper (>= 10) ++Homepage: https://github.com/CESNET/libyang ++ ++Package: libyang ++Depends: libpcre3, ${shlibs:Depends} ++Conflicts: libyang-experimental (= 1.0) ++Section: libs ++Architecture: any ++Description: Libyang is YANG data modelling language parser and toolkit written (and providing API) in C. ++ ++Package: libyang-dev ++Depends: libpcre3-dev, libyang (= ${binary:Version}) ++Section: libdevel ++Architecture: any ++Description: Headers of libyang library. ++ ++Package: libyang-cpp ++Depends: libyang (= ${binary:Version}) ++Section: libs ++Architecture: any ++Description: Bindings of libyang library to C++ language. ++ ++Package: libyang-cpp-dev ++Depends: libpcre3-dev, libyang-cpp (= ${binary:Version}) ++Section: libdevel ++Architecture: any ++Description: Headers of bindings to c++ language libyang library. ++ ++Package: python3-yang ++Depends: libyang (= ${binary:Version}), libyang-cpp (= ${binary:Version}) ++Section: libs ++Architecture: any ++Description: Bindings of libyang library to python3 language. +diff --git a/debian/copyright b/debian/copyright +new file mode 100644 +index 00000000..f7cafac5 +--- /dev/null ++++ b/debian/copyright +@@ -0,0 +1,28 @@ ++Copyright (c) 2015-2016, CESNET ++All rights reserved. ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are met: ++ ++* Redistributions of source code must retain the above copyright notice, this ++ list of conditions and the following disclaimer. ++ ++* 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. ++ ++* Neither the name of libyang nor the names of its ++ contributors may be used to endorse or promote products derived from ++ this software without specific prior written permission. ++ ++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 HOLDER 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/debian/libyang-cpp-dev.install b/debian/libyang-cpp-dev.install +new file mode 100644 +index 00000000..e56e41ed +--- /dev/null ++++ b/debian/libyang-cpp-dev.install +@@ -0,0 +1,3 @@ ++usr/lib/*/libyang-cpp.so ++usr/include/libyang/*.hpp ++usr/lib/*/pkgconfig/libyang-cpp.pc +diff --git a/debian/libyang-cpp.install b/debian/libyang-cpp.install +new file mode 100644 +index 00000000..2157465b +--- /dev/null ++++ b/debian/libyang-cpp.install +@@ -0,0 +1 @@ ++usr/lib/*/libyang-cpp.so.* +\ No newline at end of file +diff --git a/debian/libyang-dev.install b/debian/libyang-dev.install +new file mode 100644 +index 00000000..bb04ac28 +--- /dev/null ++++ b/debian/libyang-dev.install +@@ -0,0 +1,3 @@ ++usr/lib/*/libyang.so ++usr/lib/*/pkgconfig/libyang.pc ++usr/include/libyang/*.h +diff --git a/debian/libyang.install b/debian/libyang.install +new file mode 100644 +index 00000000..249a5291 +--- /dev/null ++++ b/debian/libyang.install +@@ -0,0 +1,5 @@ ++usr/bin/yanglint ++usr/bin/yangre ++usr/share/man/man1 ++usr/lib/*/libyang.so.* ++usr/lib/*/libyang/* +diff --git a/debian/python3-yang.install b/debian/python3-yang.install +new file mode 100644 +index 00000000..3272cd65 +--- /dev/null ++++ b/debian/python3-yang.install +@@ -0,0 +1 @@ ++usr/lib/python3/dist-packages/* +diff --git a/debian/rules b/debian/rules +new file mode 100755 +index 00000000..9308403e +--- /dev/null ++++ b/debian/rules +@@ -0,0 +1,16 @@ ++#!/usr/bin/make -f ++# -*- makefile -*- ++# Uncomment this to turn on verbose mode. ++export DH_VERBOSE=1 ++ ++%: ++ dh $@ ++ ++override_dh_auto_configure: ++ dh_auto_configure -- -DENABLE_LYD_PRIV=ON -DGEN_LANGUAGE_BINDINGS=ON -DGEN_PYTHON_VERSION=2 ++ ++override_dh_makeshlibs: ++ dh_makeshlibs -Xextensions -Xuser_types ++ ++override_dh_auto_test: ++ ctest --output-on-failure +diff --git a/debian/source/format b/debian/source/format +new file mode 100644 +index 00000000..163aaf8d +--- /dev/null ++++ b/debian/source/format +@@ -0,0 +1 @@ ++3.0 (quilt) +-- +2.25.1 + From c20e081a70b988fdc652543c00e84a29ef9cf0de Mon Sep 17 00:00:00 2001 From: marvell Date: Thu, 21 Jul 2022 01:20:02 +0530 Subject: [PATCH 30/30] Removed --no-deps option when installing wheels. Removed unnecessary lazy_object_proxy arm python3 package instalation --- slave.mk | 2 +- sonic-slave-bullseye/Dockerfile.j2 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/slave.mk b/slave.mk index 57b16c02e1b..2e648b37f4c 100644 --- a/slave.mk +++ b/slave.mk @@ -857,7 +857,7 @@ ifneq ($(CROSS_BUILD_ENVIRON),y) { sudo -E pip$($*_PYTHON_VERSION) install $(PYTHON_WHEELS_PATH)/$* $(LOG) && rm -d $(PYTHON_WHEELS_PATH)/pip_lock && break; } || { rm -d $(PYTHON_WHEELS_PATH)/pip_lock && exit 1 ; } else # Link python script and data expected location to the cross python virtual env istallation locations - { PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} sudo -E $(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION))/pip$($*_PYTHON_VERSION) install --no-deps $(PYTHON_WHEELS_PATH)/$* $(LOG) && $(if $(findstring $(SONIC_CONFIG_ENGINE_PY3),$*),(sudo ln -s $(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION))/sonic-cfggen /usr/local/bin/sonic-cfggen 2>/dev/null || true), true ) && $(if $(findstring $(SONIC_YANG_MODELS_PY3),$*),(sudo ln -s $(VIRTENV_BASE_CROSS_PYTHON3)/yang-models /usr/local/yang-models 2>/dev/null || true), true ) && rm -d $(PYTHON_WHEELS_PATH)/pip_lock && break; } || { rm -d $(PYTHON_WHEELS_PATH)/pip_lock && exit 1 ; } + { PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} sudo -E $(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION))/pip$($*_PYTHON_VERSION) install $(PYTHON_WHEELS_PATH)/$* $(LOG) && $(if $(findstring $(SONIC_CONFIG_ENGINE_PY3),$*),(sudo ln -s $(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION))/sonic-cfggen /usr/local/bin/sonic-cfggen 2>/dev/null || true), true ) && $(if $(findstring $(SONIC_YANG_MODELS_PY3),$*),(sudo ln -s $(VIRTENV_BASE_CROSS_PYTHON3)/yang-models /usr/local/yang-models 2>/dev/null || true), true ) && rm -d $(PYTHON_WHEELS_PATH)/pip_lock && break; } || { rm -d $(PYTHON_WHEELS_PATH)/pip_lock && exit 1 ; } endif fi done diff --git a/sonic-slave-bullseye/Dockerfile.j2 b/sonic-slave-bullseye/Dockerfile.j2 index 669732330a7..2258946c781 100644 --- a/sonic-slave-bullseye/Dockerfile.j2 +++ b/sonic-slave-bullseye/Dockerfile.j2 @@ -95,7 +95,7 @@ RUN pip3 install virtualenv RUN mkdir /python_virtualenv RUN cd /python_virtualenv && python3 -m virtualenv --copies -p /usr/bin/python3 env3 -RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install setuptools==49.6.00 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==5.2 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 PyYAML==5.4.1 redis==3.5.3 pexpect==4.8.0 Pympler==0.8 parameterized natsort==6.2.1 MarkupSafe==2.0.1 Jinja2==3.0.3 click tabulate netaddr netifaces pyroute2 pyfakefs sphinx lazy_object_proxy && ln -s /python_virtualenv/env3/bin/pytest /python_virtualenv/env3/bin/pytest-3 +RUN PATH=/python_virtualenv/env3/bin/:$PATH pip3 install setuptools==49.6.00 wheel==0.35.1 fastentrypoints pytest pytest-cov pytest-runner==5.2 nose==1.3.7 mockredispy==2.9.3 mock==3.0.5 PyYAML==5.4.1 redis==3.5.3 pexpect==4.8.0 Pympler==0.8 parameterized natsort==6.2.1 MarkupSafe==2.0.1 Jinja2==3.0.3 click tabulate netaddr netifaces pyroute2 pyfakefs sphinx && ln -s /python_virtualenv/env3/bin/pytest /python_virtualenv/env3/bin/pytest-3 RUN apt-get --fix-broken install -y RUN LIBPYTHON3_DEPS="`apt-cache depends libpython3-dev:$arch |grep Depends|awk {'print \$2;'}|tr "\n" " "`" && apt-get install -y libpython2.7-dev:$arch $LIBPYTHON3_DEPS libxml2-dev:$arch libxslt-dev:$arch libssl-dev:$arch libz-dev:$arch