diff --git a/.azure-pipelines/azure-pipelines-build.yml b/.azure-pipelines/azure-pipelines-build.yml index 72af591b08..68ce08fa41 100644 --- a/.azure-pipelines/azure-pipelines-build.yml +++ b/.azure-pipelines/azure-pipelines-build.yml @@ -129,6 +129,12 @@ jobs: if [ $(raw_image) == yes ]; then make $BUILD_OPTIONS target/sonic-$(GROUP_NAME).raw fi + if [ $(GROUP_NAME) == marvell-armhf ]; then + make $BUILD_OPTIONS ENABLE_SYNCD_RPC=y SAITHRIFT_V2=y PLATFORM_ARCH=armhf target/docker-saiserverv2-mrvl.gz + pushd ./src/sonic-sairedis/SAI + git stash + popd + fi if [ $(docker_syncd_rpc_image) == yes ]; then # workaround for issue in rules/sairedis.dep, git ls-files will list un-exist files for cache make $BUILD_OPTIONS ENABLE_SYNCD_RPC=y target/docker-syncd-$(platform_rpc)-rpc.gz @@ -145,6 +151,12 @@ jobs: git stash popd fi + if [ $(GROUP_NAME) == marvell-armhf ]; then + make $BUILD_OPTIONS ENABLE_SYNCD_RPC=y SAITHRIFT_V2=y PLATFORM_ARCH=armhf target/docker-saiserverv2-mrvl.gz + pushd ./src/sonic-sairedis/SAI + git stash + popd + fi fi if [ $(syncd_rpc_image) == yes ]; then make $BUILD_OPTIONS ENABLE_SYNCD_RPC=y target/sonic-$(GROUP_NAME).bin diff --git a/.azure-pipelines/build-template.yml b/.azure-pipelines/build-template.yml index 7b5ec1ed27..eb1ec4cab2 100644 --- a/.azure-pipelines/build-template.yml +++ b/.azure-pipelines/build-template.yml @@ -115,6 +115,12 @@ jobs: git stash popd fi + if [ $(GROUP_NAME) == marvell-armhf ]; then + make USERNAME=admin $CACHE_OPTIONS SONIC_BUILD_JOBS=$(nproc) ENABLE_SYNCD_RPC=y SAITHRIFT_V2=y PLATFORM_ARCH=armhf target/docker-saiserverv2-mrvl.gz + pushd ./src/sonic-sairedis/SAI + git stash + popd + fi fi make USERNAME=admin $CACHE_OPTIONS SONIC_BUILD_JOBS=$(nproc) target/sonic-${{ parameters.platform }}.bin diff --git a/platform/marvell-armhf/docker-saiserver-mrvl.mk b/platform/marvell-armhf/docker-saiserver-mrvl.mk index 963335b579..186edbacc3 100644 --- a/platform/marvell-armhf/docker-saiserver-mrvl.mk +++ b/platform/marvell-armhf/docker-saiserver-mrvl.mk @@ -1,13 +1,22 @@ # docker image for mrvl saiserver -DOCKER_SAISERVER_MRVL = docker-saiserver-mrvl.gz +DOCKER_SAISERVER_MRVL = docker-saiserver$(SAITHRIFT_VER)-mrvl.gz $(DOCKER_SAISERVER_MRVL)_PATH = $(PLATFORM_PATH)/docker-saiserver-mrvl $(DOCKER_SAISERVER_MRVL)_DEPENDS += $(SAISERVER) -$(DOCKER_SAISERVER_MRVL)_FILES += $(DSSERVE) $(BCMCMD) + +$(DOCKER_SAISERVER_MRVL)_DEPENDS += $(MRVL_FPA) $(MRVL_SAI) + +# Use syncd_init_common.sh to init hardware platform +SYNCD_INIT_COMMON_SCRIPT = syncd_init_common.sh +$(SYNCD_INIT_COMMON_SCRIPT)_PATH = $(SRC_PATH)/sonic-sairedis/syncd/scripts +SONIC_COPY_FILES += $(SYNCD_INIT_COMMON_SCRIPT) + +$(DOCKER_SAISERVER_MRVL)_FILES += $(SYNCD_INIT_COMMON_SCRIPT) $(DOCKER_SAISERVER_MRVL)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BULLSEYE) +SONIC_BULLSEYE_DOCKERS += $(DOCKER_SAISERVER_MRVL) SONIC_DOCKER_IMAGES += $(DOCKER_SAISERVER_MRVL) -$(DOCKER_SAISERVER_MRVL)_CONTAINER_NAME = saiserver +$(DOCKER_SAISERVER_MRVL)_CONTAINER_NAME = saiserver$(SAITHRIFT_VER) $(DOCKER_SAISERVER_MRVL)_RUN_OPT += --privileged -t $(DOCKER_SAISERVER_MRVL)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf $(DOCKER_SAISERVER_MRVL)_RUN_OPT += -v /var/run/docker-saiserver:/var/run/sswsyncd diff --git a/platform/marvell-armhf/docker-saiserver-mrvl/Dockerfile.j2 b/platform/marvell-armhf/docker-saiserver-mrvl/Dockerfile.j2 new file mode 100644 index 0000000000..bc882e8558 --- /dev/null +++ b/platform/marvell-armhf/docker-saiserver-mrvl/Dockerfile.j2 @@ -0,0 +1,57 @@ +{% from "dockers/dockerfile-macros.j2" import install_debian_packages %} +FROM docker-config-engine-bullseye-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} + +ARG docker_container_name + +RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf + +## Make apt-get non-interactive +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update + +RUN apt-get update \ + && apt-get -y install \ + net-tools \ + iputils-ping + +RUN apt-get -y install libpcap-dev libxml2-dev python-dev swig libsensors4-dev nfs-common + +## Pre-install the fundamental packages +RUN apt-get update \ + && apt-get -y install \ + net-tools \ + python3-pip \ + python-setuptools \ + build-essential \ + libssl-dev \ + libffi-dev \ + python-dev \ + wget \ + cmake \ + libqt5core5a \ + libqt5network5 \ + libboost-atomic1.74.0 + +COPY \ +{% for deb in docker_saiserver_mrvl_debs.split(' ') -%} +debs/{{ deb }}{{' '}} +{%- endfor -%} +debs/ + +RUN dpkg -i \ +{% for deb in docker_saiserver_mrvl_debs.split(' ') -%} +debs/{{ deb }}{{' '}} +{%- endfor %} + +COPY ["start.sh", "saiserver_start.sh", "/usr/bin/"] +COPY ["files/syncd_init_common.sh", "/usr/bin/"] +RUN chmod +x /usr/bin/start.sh /usr/bin/saiserver_start.sh /usr/bin/syncd_init_common.sh + +COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] + +## Clean up +RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y +RUN rm -rf /debs + +ENTRYPOINT ["/usr/local/bin/supervisord"] diff --git a/platform/marvell-armhf/docker-saiserver-mrvl/saiserver_start.sh b/platform/marvell-armhf/docker-saiserver-mrvl/saiserver_start.sh new file mode 100644 index 0000000000..06fcf6c3f3 --- /dev/null +++ b/platform/marvell-armhf/docker-saiserver-mrvl/saiserver_start.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# Copy from src/sonic-sairedis/syncd/scripts/syncd_start.sh +# Re-use the structure for syncd setup +# Use it to start saiserver +# Script to start syncd using supervisord +# + +# Source the file that holds common code for systemd and supervisord +. /usr/bin/syncd_init_common.sh + +get_saiserver_param() +{ + IFS=' ' read -r -a array <<< "$CMD_ARGS" + for index in "${!array[@]}" + do + #echo "$index ${array[index]}" + if [[ "${array[index]}" == *"-p"* ]]; then + SAI_PROFILE="${array[index+1]}" + fi + if [[ "${array[index]}" == *"-m"* ]]; then + PORT_CONFIG="${array[index+1]}" + fi + done +} + +ENABLE_SAITHRIFT=1 +config_syncd +get_saiserver_param + +echo exec /usr/sbin/saiserver -p ${SAI_PROFILE} -f ${PORT_CONFIG} +exec /usr/sbin/saiserver -p ${SAI_PROFILE} -f ${PORT_CONFIG} +#exec ${CMD} ${CMD_ARGS} diff --git a/platform/marvell-armhf/docker-saiserver-mrvl/start.sh b/platform/marvell-armhf/docker-saiserver-mrvl/start.sh new file mode 100644 index 0000000000..13592e0744 --- /dev/null +++ b/platform/marvell-armhf/docker-saiserver-mrvl/start.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +rm -f /var/run/rsyslogd.pid +supervisorctl start rsyslogd +supervisorctl start saiserver diff --git a/platform/marvell-armhf/docker-saiserver-mrvl/supervisord.conf b/platform/marvell-armhf/docker-saiserver-mrvl/supervisord.conf new file mode 100644 index 0000000000..6cba9a2e77 --- /dev/null +++ b/platform/marvell-armhf/docker-saiserver-mrvl/supervisord.conf @@ -0,0 +1,29 @@ +[supervisord] +logfile_maxbytes=1MB +logfile_backups=2 +nodaemon=true + +[program:start.sh] +command=/usr/bin/start.sh +priority=1 +autostart=true +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog + +[program:rsyslogd] +command=/usr/sbin/rsyslogd -n -iNONE +priority=1 +autostart=false +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog + +[program:saiserver] +command=/usr/bin/saiserver_start.sh +priority=2 +autostart=false +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog + diff --git a/platform/marvell-armhf/libsaithrift-dev.mk b/platform/marvell-armhf/libsaithrift-dev.mk index e1c3da156e..8bfeb12169 100644 --- a/platform/marvell-armhf/libsaithrift-dev.mk +++ b/platform/marvell-armhf/libsaithrift-dev.mk @@ -2,19 +2,30 @@ SAI_VER = 0.9.4 -LIBSAITHRIFT_DEV = libsaithrift-dev_$(SAI_VER)_$(CONFIGURED_ARCH).deb +LIBSAITHRIFT_DEV = libsaithrift$(SAITHRIFT_VER)-dev_$(SAI_VER)_$(CONFIGURED_ARCH).deb $(LIBSAITHRIFT_DEV)_SRC_PATH = $(SRC_PATH)/sonic-sairedis/SAI -$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBTHRIFT) $(LIBTHRIFT_DEV) $(PYTHON_THRIFT) $(THRIFT_COMPILER) $(MRVL_FPA) $(MRVL_SAI) -$(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBTHRIFT) $(MRVL_SAI) + +#Support two different versions of thrift +ifeq ($(SAITHRIFT_V2),y) +$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBTHRIFT_0_14_1) $(LIBTHRIFT_0_14_1_DEV) $(PYTHON3_THRIFT_0_14_1) $(THRIFT_0_14_1_COMPILER) +$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBSAIMETADATA) $(LIBSAIMETADATA_DEV) +$(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBTHRIFT_0_14_1) $(LIBSAIMETADATA) +$(LIBSAITHRIFT_DEV)_BUILD_ENV = SAITHRIFTV2=true SAITHRIFT_VER=v2 GEN_SAIRPC_OPTS="--adapter_logger" SAIRPC_EXTRA_LIBS="-L\$(top_srcdir)/meta/.libs -lsaimetadata -lsaimeta" +else +$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBTHRIFT) $(LIBTHRIFT_DEV) $(PYTHON_THRIFT) $(THRIFT_COMPILER) +$(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBTHRIFT) +endif +$(LIBSAITHRIFT_DEV)_DEPENDS += $(MRVL_FPA) $(MRVL_SAI) +$(LIBSAITHRIFT_DEV)_RDEPENDS += $(MRVL_SAI) SONIC_DPKG_DEBS += $(LIBSAITHRIFT_DEV) -PYTHON_SAITHRIFT = python-saithrift_$(SAI_VER)_$(CONFIGURED_ARCH).deb +PYTHON_SAITHRIFT = python-saithrift$(SAITHRIFT_VER)_$(SAI_VER)_$(CONFIGURED_ARCH).deb $(eval $(call add_extra_package,$(LIBSAITHRIFT_DEV),$(PYTHON_SAITHRIFT))) -SAISERVER = saiserver_$(SAI_VER)_$(CONFIGURED_ARCH).deb -$(SAISERVER)_RDEPENDS += $(LIBTHRIFT) $(MRVL_SAI) +SAISERVER = saiserver$(SAITHRIFT_VER)_$(SAI_VER)_$(CONFIGURED_ARCH).deb +$(SAISERVER)_RDEPENDS += $(LIBSAITHRIFT_DEV) $(eval $(call add_extra_package,$(LIBSAITHRIFT_DEV),$(SAISERVER))) -SAISERVER_DBG = saiserver-dbg_$(SAI_VER)_$(CONFIGURED_ARCH).deb +SAISERVER_DBG = saiserver$(SAITHRIFT_VER)-dbg_$(SAI_VER)_$(CONFIGURED_ARCH).deb $(SAISERVER_DBG)_RDEPENDS += $(SAISERVER) $(eval $(call add_extra_package,$(LIBSAITHRIFT_DEV),$(SAISERVER_DBG))) diff --git a/src/thrift_0_14_1/thrift.patch/0005-Fix-build-rules-python.patch b/src/thrift_0_14_1/thrift.patch/0005-Fix-build-rules-python.patch new file mode 100644 index 0000000000..5783ccb2bb --- /dev/null +++ b/src/thrift_0_14_1/thrift.patch/0005-Fix-build-rules-python.patch @@ -0,0 +1,13 @@ +diff --git a/debian/rules b/debian/rules +index 3a50319ee..4b2a05932 100755 +--- a/debian/rules ++++ b/debian/rules +@@ -86,7 +86,7 @@ clean: + dh_testroot + rm -f build-arch-stamp build-indep-stamp configure-stamp + +- cd $(CURDIR)/lib/py && python setup.py clean --all ++ if [ -z $(shell command -v python) ]; then cd $(CURDIR)/lib/py && python3 setup.py clean --all; else cd $(CURDIR)/lib/py && python setup.py clean --all; fi + + # Add here commands to clean up after the build process. + -$(MAKE) clean diff --git a/src/thrift_0_14_1/thrift.patch/0006-Fix-build-rules-boost-test.patch b/src/thrift_0_14_1/thrift.patch/0006-Fix-build-rules-boost-test.patch new file mode 100644 index 0000000000..935319e2fc --- /dev/null +++ b/src/thrift_0_14_1/thrift.patch/0006-Fix-build-rules-boost-test.patch @@ -0,0 +1,12 @@ +diff --git a/debian/rules b/debian/rules +index 3a50319ee..4b2a05932 100755 +--- a/debian/rules ++++ b/debian/rules +@@ -65,6 +65,7 @@ build-compiler-stamp: configure-stamp + + build-libcpp-stamp: configure-stamp build-compiler-stamp + # Compile C++ library ++ if [ -f /usr/lib/arm-linux-gnueabihf/libboost_unit_test_framework.a ]; then sudo ln -s /usr/lib/arm-linux-gnueabihf/libboost_unit_test_framework.a /usr/lib/libboost_unit_test_framework.a ; fi + $(MAKE) -C $(CURDIR)/lib/cpp + touch $@ + diff --git a/src/thrift_0_14_1/thrift.patch/series b/src/thrift_0_14_1/thrift.patch/series index fa2f836a8e..bdf6d9fc25 100644 --- a/src/thrift_0_14_1/thrift.patch/series +++ b/src/thrift_0_14_1/thrift.patch/series @@ -3,3 +3,5 @@ 0003-Remove-minimist-packages.patch 0004-Remove-underscore-packages.patch 0002-cve-2017-1000487.patch +0005-Fix-build-rules-python.patch +0006-Fix-build-rules-boost-test.patch