From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id C007C1B3B9 for ; Wed, 30 Jan 2019 23:16:08 +0100 (CET) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 20AD3C057E2C; Wed, 30 Jan 2019 22:16:08 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.18.25.8]) by smtp.corp.redhat.com (Postfix) with ESMTP id 76EA260152; Wed, 30 Jan 2019 22:16:07 +0000 (UTC) From: Michael Santana To: dev@dpdk.org Cc: Aaron Conole , Bruce Richardson , Honnappa Nagarahalli , Thomas Monjalon Date: Wed, 30 Jan 2019 17:16:02 -0500 Message-Id: <20190130221602.13866-3-msantana@redhat.com> In-Reply-To: <20190130221602.13866-1-msantana@redhat.com> References: <20190123220714.20763-1-msantana@redhat.com> <20190130221602.13866-1-msantana@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Wed, 30 Jan 2019 22:16:08 +0000 (UTC) Subject: [dpdk-dev] [PATCH v2 2/2] ci: Introduce travis builds for github repositories X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Jan 2019 22:16:09 -0000 GitHub is a service used by developers to store repositories. GitHub provides service integrations that allow 3rd party services to access developer repositories and perform actions. One of these services is Travis-CI, a simple continuous integration platform. This is a simple initial implementation of a travis build for the DPDK project. It doesn't require any changes from individual developers to enable, but will allow those developers who opt-in to GitHub and the travis service to get automatic builds for every push they make. Additionally, the travis service will send an email to the test-report list informing anyone interested in the automated build (including a result). Signed-off-by: Aaron Conole Signed-off-by: Michael Santana --- v2: - Added aarch64 build - Added multiple meson options for builds - Added multiple make/config options for builds .ci/linux-build.sh | 88 +++++++++++++++ .ci/linux-setup.sh | 31 ++++++ .travis.yml | 159 ++++++++++++++++++++++++++++ MAINTAINERS | 7 ++ doc/guides/contributing/patches.rst | 4 + meson_cross_aarch64_gcc.txt | 12 +++ 6 files changed, 301 insertions(+) create mode 100755 .ci/linux-build.sh create mode 100755 .ci/linux-setup.sh create mode 100644 .travis.yml create mode 100644 meson_cross_aarch64_gcc.txt diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh new file mode 100755 index 000000000..66d031a21 --- /dev/null +++ b/.ci/linux-build.sh @@ -0,0 +1,88 @@ +#!/bin/bash + +# check for whether we're clang or gcc +# setup the right options depending on the environment variables +# run the build + +# Just used for the 'classic' configuration system (ie: make) +set_conf() { + echo "[BUILT WITH $2 SET TO $3]" + c="$1/.config" + shift + + if grep -q "$1" "$c"; then + sed -i "s:^$1=.*$:$1=$2:g" $c + else + echo $1=$2 >> "$c" + fi +} + +BUILD_ARCH="x86_64-native-linuxapp-" + +if [ "${ARM64}" == "1" ]; then + # convert the arch specifier + BUILD_ARCH="arm64-armv8a-linuxapp-" + ARM64_TOOL="linaro-arm-tool" + export PATH=$PATH:$(pwd)/${ARM64_TOOL}/bin +fi + + +if [ "${NINJABUILD}" == "1" ]; then + OPTS="" + + DEF_LIB="static" + if [ "${SHARED}" == "1" ]; then + DEF_LIB="shared" + fi + + if [ "${KERNEL}" == "1" ]; then + OPTS="-Denable_kmods=false" + fi + + if [ "${ARM64}" == "1" ]; then + OPTS="${OPTS} --cross-file meson_cross_aarch64_${CC}.txt" + fi + + OPTS="$OPTS --default-library=$DEF_LIB" + meson build --werror -Dexamples=all ${OPTS} + ninja -C build +else + EXTRA_OPTS="" + + make config T="${BUILD_ARCH}${CC}" + + set_conf build CONFIG_RTE_KNI_KMOD n + set_conf build CONFIG_RTE_EAL_IGB_UIO n + + if dpkg --list | grep -q zlib1g ; then + set_conf build CONFIG_RTE_LIBRTE_PMD_ZLIB y + fi + + if dpkg --list | grep -q libpcap-dev ; then + set_conf build CONFIG_RTE_PORT_PCAP y + fi + + if [ "${SHARED}" == "1" ]; then + set_conf build CONFIG_RTE_BUILD_SHARED_LIB y + fi + + if [ "${KERNEL}" == "1" ]; then + echo Unsupported kernel builds at the moment + fi + + if [ "${ARM64}" == "1" ]; then + EXTRA_OPTS="CROSS=aarch64-linux-gnu-" + + # need to turn off these extras + set_conf build CONFIG_RTE_PORT_PCAP n + set_conf build CONFIG_RTE_LIBRTE_PMD_ZLIB n + + # convert the CC/CXX variables + export CC=aarch64-linux-gnu-${CC} + export CXX=aarch64-linux-gnu-${CXX} + export AR=aarch64-linux-gnu-ar + export STRIP=aarch64-linux-gnu-strip + fi + + make all ${EXTRA_OPTS} +fi diff --git a/.ci/linux-setup.sh b/.ci/linux-setup.sh new file mode 100755 index 000000000..7d6478ef9 --- /dev/null +++ b/.ci/linux-setup.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +python3.5 -m pip install --upgrade meson --user + +echo "ARM64 is [ ${ARM64} ]" + +if [ "${ARM64}" == "1" ]; then + # need to build & install libnuma + # This will only be minimal support for now. + ARM64_TOOL_URL='https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz' + ARM64_TOOL="linaro-arm-tool" + NUMA_GIT_URL="https://github.com/numactl/numactl.git" + + wget -O "${ARM64_TOOL}.tar.xz" "${ARM64_TOOL_URL}" + tar -xf "${ARM64_TOOL}.tar.xz" + mv gcc-linaro* "${ARM64_TOOL}" + export PATH=$PATH:$(pwd)/${ARM64_TOOL}/bin + git clone "${NUMA_GIT_URL}" + cd numactl + git checkout v2.0.11 + ./autogen.sh + autoconf -i + mkdir numa_bin + ./configure --host=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc \ + --prefix=$(pwd)/numa_bin + make install # install numa + cd .. + cp numactl/numa_bin/include/numa*.h "${ARM64_TOOL}/aarch64-linux-gnu/libc/usr/include/" + cp numactl/numa_bin/lib/libnuma.* "${ARM64_TOOL}/aarch64-linux-gnu/lib64/" + cp numactl/numa_bin/lib/libnuma.* "${ARM64_TOOL}/lib/" +fi diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..f296d6914 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,159 @@ +language: c +compiler: + - gcc + - clang + +os: + - linux + +addons: + apt: + sources: + - deadsnakes #source for python 3.5 + - sourceline: 'ppa:mstipicevic/ninja-build-1-7-2' + packages: + - [libnuma-dev, linux-headers-$(uname -r), python3.5, python3-pip, ninja-build] + +before_install: ./.ci/${TRAVIS_OS_NAME}-setup.sh + +sudo: false + +env: + - SHARED=1 + - KERNEL=1 + - SHARED=1 KERNEL=1 + - NINJABUILD=1 + - NINJABUILD=1 SHARED=1 + - NINJABUILD=1 KERNEL=1 + - NINJABUILD=1 SHARED=1 KERNEL=1 + +matrix: + include: + - env: SHARED=1 + compiler: gcc + addons: + apt: + sources: + - deadsnakes #source for python 3.5 + - sourceline: 'ppa:mstipicevic/ninja-build-1-7-2' + packages: + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] + - [libnuma-dev, linux-headers-$(uname -r), python3.5, python3-pip, ninja-build] + - env: KERNEL=1 + compiler: gcc + addons: + apt: + sources: + - deadsnakes #source for python 3.5 + - sourceline: 'ppa:mstipicevic/ninja-build-1-7-2' + packages: + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] + - [libnuma-dev, linux-headers-$(uname -r), python3.5, python3-pip, ninja-build] + - env: SHARED=1 KERNEL=1 + compiler: gcc + addons: + apt: + sources: + - deadsnakes #source for python 3.5 + - sourceline: 'ppa:mstipicevic/ninja-build-1-7-2' + packages: + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] + - [libnuma-dev, linux-headers-$(uname -r), python3.5, python3-pip, ninja-build] + - env: SHARED=1 + compiler: clang + addons: + apt: + sources: + - deadsnakes #source for python 3.5 + - sourceline: 'ppa:mstipicevic/ninja-build-1-7-2' + packages: + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] + - [libnuma-dev, linux-headers-$(uname -r), python3.5, python3-pip, ninja-build] + - env: KERNEL=1 + compiler: clang + addons: + apt: + sources: + - deadsnakes #source for python 3.5 + - sourceline: 'ppa:mstipicevic/ninja-build-1-7-2' + packages: + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] + - [libnuma-dev, linux-headers-$(uname -r), python3.5, python3-pip, ninja-build] + - env: SHARED=1 KERNEL=1 + compiler: clang + addons: + apt: + sources: + - deadsnakes #source for python 3.5 + - sourceline: 'ppa:mstipicevic/ninja-build-1-7-2' + packages: + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] + - [libnuma-dev, linux-headers-$(uname -r), python3.5, python3-pip, ninja-build] + - env: ARM64=1 + compiler: gcc + addons: + apt: + sources: + - deadsnakes #source for python 3.5 + - sourceline: 'ppa:mstipicevic/ninja-build-1-7-2' + packages: + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] + - [libnuma-dev, linux-headers-$(uname -r), libtool, python3.5, python3-pip] + - env: ARM64=1 NINJABUILD=1 + compiler: gcc + addons: + apt: + sources: + - deadsnakes #source for python 3.5 + - sourceline: 'ppa:mstipicevic/ninja-build-1-7-2' + packages: + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] + - [linux-headers-$(uname -r), libtool, python3.5, python3-pip, ninja-build] + - env: NINJABUILD=1 + compiler: gcc + addons: + apt: + sources: + - deadsnakes #source for python 3.5 + - sourceline: 'ppa:mstipicevic/ninja-build-1-7-2' + packages: + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] + - [libnuma-dev, linux-headers-$(uname -r), python3.5, python3-pip, ninja-build] + - env: NINJABUILD=1 SHARED=1 + compiler: gcc + addons: + apt: + sources: + - deadsnakes #source for python 3.5 + - sourceline: 'ppa:mstipicevic/ninja-build-1-7-2' + packages: + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] + - [libnuma-dev, linux-headers-$(uname -r), python3.5, python3-pip, ninja-build] + - env: NINJABUILD=1 KERNEL=1 + compiler: gcc + addons: + apt: + sources: + - deadsnakes #source for python 3.5 + - sourceline: 'ppa:mstipicevic/ninja-build-1-7-2' + packages: + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] + - [libnuma-dev, linux-headers-$(uname -r), python3.5, python3-pip, ninja-build] + - env: NINJABUILD=1 SHARED=1 KERNEL=1 + compiler: gcc + addons: + apt: + sources: + - deadsnakes #source for python 3.5 + - sourceline: 'ppa:mstipicevic/ninja-build-1-7-2' + packages: + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] + - [libnuma-dev, linux-headers-$(uname -r), python3.5, python3-pip, ninja-build] + + +script: ./.ci/${TRAVIS_OS_NAME}-build.sh + +notifications: + email: + recipients: + - test-report@dpdk.org diff --git a/MAINTAINERS b/MAINTAINERS index 66104405e..634afc41d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -119,6 +119,13 @@ F: config/rte_config.h F: buildtools/gen-pmdinfo-cfile.sh F: buildtools/symlink-drivers-solibs.sh +Public CI +M: Aaron Conole +M: Michael Santana +F: .travis.yml +F: .ci/ +F: meson_cross_aarch64_gcc.txt + ABI versioning M: Neil Horman F: lib/librte_compat/ diff --git a/doc/guides/contributing/patches.rst b/doc/guides/contributing/patches.rst index a64bb0368..49e930cbb 100644 --- a/doc/guides/contributing/patches.rst +++ b/doc/guides/contributing/patches.rst @@ -32,6 +32,10 @@ The mailing list for DPDK development is `dev@dpdk.org `_ in order to submit patches. It is also worth registering for the DPDK `Patchwork `_ +If you are using the GitHub service, you can link your repository to +the ``travis-ci.org`` build service. When you push patches to your GitHub +repository, the travis service will automatically build your changes. + The development process requires some familiarity with the ``git`` version control system. Refer to the `Pro Git Book `_ for further information. diff --git a/meson_cross_aarch64_gcc.txt b/meson_cross_aarch64_gcc.txt new file mode 100644 index 000000000..aee167d13 --- /dev/null +++ b/meson_cross_aarch64_gcc.txt @@ -0,0 +1,12 @@ +[binaries] +c = 'aarch64-linux-gnu-gcc' +cpp = 'aarch64-linux-gnu-g++' +ar = 'aarch64-linux-gnu-gcc-ar' +strip = 'aarch64-linux-gnu-strip' +pkgconfig = 'aarch64-linux-gnu-pkg-config' + +[host_machine] +system = 'linux' +cpu_family = 'aarch64' +cpu = 'aarch64' +endian = 'little' -- 2.19.1