Blame SOURCES/gen_config_group.sh

d76f50
#!/bin/bash
d76f50
d76f50
source configlib.sh
d76f50
d76f50
# Generates arch configurations in the current directory based on
d76f50
# 1. an dpdk.spec file
d76f50
# 2. an expanded dpdk tree
d76f50
d76f50
if (( $# != 2 )); then
d76f50
    echo "$0: dpdk.spec dpdk_tree" >&2
d76f50
    exit 1
d76f50
fi
d76f50
d76f50
DPDKSPEC="$1"
d76f50
DPDKDIR="$2"
d76f50
d76f50
# accumulate all arch + name triples
d76f50
DPDK_CONF_MACH_ARCH=()
d76f50
for arch in $(grep %define\ machine_arch "$DPDKSPEC" | sed 's@%define machine_arch @@')
d76f50
do
d76f50
    DPDK_CONF_MACH_ARCH+=($arch)
d76f50
done
d76f50
d76f50
DPDK_CONF_MACH_TMPL=()
d76f50
for tmpl in $(grep %define\ machine_tmpl "$DPDKSPEC" | sed 's@%define machine_tmpl @@')
d76f50
do
d76f50
    DPDK_CONF_MACH_TMPL+=($tmpl)
d76f50
done
d76f50
d76f50
DPDK_CONF_MACH=()
d76f50
for mach in $(grep %define\ machine\  "$DPDKSPEC" | sed 's@%define machine @@')
d76f50
do
d76f50
    DPDK_CONF_MACH+=($mach)
d76f50
done
d76f50
d76f50
DPDK_TARGETS=()
d76f50
for ((i=0; i < ${#DPDK_CONF_MACH[@]}; i++));
d76f50
do
d76f50
    DPDK_TARGETS+=("${DPDK_CONF_MACH_ARCH[$i]}-${DPDK_CONF_MACH_TMPL[$i]}-linuxapp-gcc")
d76f50
    echo "DPDK-target: ${DPDK_TARGETS[$i]}"
d76f50
done
d76f50
d76f50
OUTPUT_DIR=$(pwd)
d76f50
pushd "$DPDKDIR"
d76f50
for ((i=0; i < ${#DPDK_TARGETS[@]}; i++));
d76f50
do
d76f50
    echo "For ${DPDK_TARGETS[$i]}:"
d76f50
d76f50
    echo "     a. Generating initial config"
d76f50
    echo "        make V=1 T=${DPDK_TARGETS[$i]} O=${DPDK_TARGETS[$i]}"
d76f50
    make V=1 T=${DPDK_TARGETS[$i]} O=${DPDK_TARGETS[$i]} -j8 config
d76f50
    ORIG_SHA=""
d76f50
    OUTDIR="${DPDK_TARGETS[$i]}"
d76f50
d76f50
    echo "     b. calculating and applying sha"
d76f50
    calc_sha ORIG_SHA "${OUTDIR}/.config"
d76f50
    if [ "$ORIG_SHA" == "" ]; then
d76f50
        echo "ERROR: Unable to get sha for arch ${DPDK_TARGETS[$i]}"
d76f50
        exit 1
d76f50
    fi
d76f50
    echo "# -*- cfg-sha: ${ORIG_SHA}" > ${OUTDIR}/.config.new
d76f50
    cat "${OUTDIR}/.config" >> "${OUTDIR}/.config.new"
d76f50
    cp "${OUTDIR}/.config" "${OUTDIR}/.config.orig"
d76f50
    mv -f "${OUTDIR}/.config.new" "${OUTDIR}/.config"
d76f50
d76f50
    echo "     c. setting initial configurations"
d76f50
    # these are the original setconf values from dpdk.spec
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_MACHINE "\\\"${DPDK_CONF_MACH[$i]}\\\""
d76f50
d76f50
    # Enable automatic driver loading from this path
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_EAL_PMD_PATH '"/usr/lib64/dpdk-pmds"'
d76f50
d76f50
    # start by disabling ALL PMDs
d76f50
    for pmd in $(grep _PMD= "${OUTDIR}/.config" | sed 's@=\(y\|n\)@@g')
d76f50
    do
d76f50
        set_conf "${OUTDIR}" $pmd n
d76f50
    done
d76f50
d76f50
    # PMDs which have their own naming scheme
d76f50
    # the default for this was 'n' at one point.  Make sure we keep it
d76f50
    # as such
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_QAT n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_VHOST n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_KNI n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_XENVIRT n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_NULL n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_TAP n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_CRYPTO_SCHEDULER n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_SKELETON_EVENTDEV n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_PCAP n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_BOND n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_AF_PACKET n
d76f50
d76f50
    # whitelist of enabled PMDs
d76f50
    # Soft PMDs to enable
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_RING y
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_VHOST y
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_VIRTIO_PMD y
d76f50
d76f50
    # HW PMDs
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_I40E_PMD y
d76f50
    case "${DPDK_CONF_MACH_ARCH[i]}" in
d76f50
    x86_64)
d76f50
        set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_ENIC_PMD y
d76f50
        ;&
d76f50
    arm64)
d76f50
        set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_IXGBE_PMD y
d76f50
        set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_IGB_PMD y
d76f50
        ;;
d76f50
    esac
d76f50
d76f50
    # Compile the PMD test application
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_TEST_PMD y
d76f50
d76f50
    # Enable vhost-numa build, the added deps are ok for us
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_VHOST_NUMA y
d76f50
d76f50
    # Disable kernel modules
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_EAL_IGB_UIO n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_KNI n
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_KNI_KMOD n
d76f50
d76f50
    # Disable experimental stuff
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_NEXT_ABI n
d76f50
d76f50
    # Build DPDK as shared library
d76f50
    set_conf "${OUTDIR}" CONFIG_RTE_BUILD_SHARED_LIB y
d76f50
d76f50
    cp "${OUTDIR}/.config" "${OUTPUT_DIR}/${DPDK_TARGETS[$i]}-config"
d76f50
done
d76f50
popd >/dev/null
d76f50
d76f50
echo -n "For each arch ( "
d76f50
for ((i=0; i < ${#DPDK_CONF_MACH_ARCH[@]}; i++));
d76f50
do
d76f50
    echo -n "${DPDK_CONF_MACH_ARCH[i]} "
d76f50
done
d76f50
echo "):"
d76f50
echo "1. ensure you enable the requisite hw"