# Copyright (c) 2020 Huawei Technologies Co., Ltd. All rights reserved.
# auxiliary functions to be included in "ubt-print-aux-cmdline-options" and
# "ubt-wrapper"

function exagear_make_opt_cmdline {
    local CMDLINE=

    if [ ! -z "${EXAGEAR_SMO_MODE}" -a ! "${EXAGEAR_SMO_MODE}" == "fbase" ]
    then
        CMDLINE+="--smo-mode ${EXAGEAR_SMO_MODE} "
    fi

    if [ ! -z "${EXAGEAR_SMO_SEVERITY}" -a ! "${EXAGEAR_SMO_SEVERITY}" == "smart" ]
    then
        CMDLINE+="--smo-severity ${EXAGEAR_SMO_SEVERITY} "
    fi

    if [ "${EXAGEAR_DISABLE_SMO_IN_JIT}" == "y" ]
    then
        CMDLINE+="--disable-smo-in-jit "
    fi

    if [ ! -z "${EXAGEAR_SMO_PATTERNS}" ]
    then
        CMDLINE+="--smo-patterns=${EXAGEAR_SMO_PATTERNS} "
    fi

    if [ ! -z "${EXAGEAR_SMO_PATTERNS_EXCL}" ]
    then
        CMDLINE+="--smo-patterns-excl=${EXAGEAR_SMO_PATTERNS_EXCL} "
    fi

    if [ "${EXAGEAR_USE_OPT}" == "y" ]
    then
        if [ ! -z "${EXAGEAR_OPT_SOCKET}" -a \( -z "${EXAGEAR_IN_CONTAINER}" -o "${EXAGEAR_IN_CONTAINER}" == "n" \) ]
        then
            CMDLINE+="--use-opt ${EXAGEAR_OPT_SOCKET} "
        else
            CMDLINE+="--use-opt ${EXAGEAR_OPT_BINARY} "
        fi
    fi

    if [ "${EXAGEAR_ENABLE_SW_PROF}" == "y" ]
    then
        CMDLINE+="--enable-sw-prof "
    fi

    if [ "${EXAGEAR_USE_CB}" == "y" ]
    then
        CMDLINE+="--cb-builder ${EXAGEAR_CB_BINARY} "
    fi

    if [ "${EXAGEAR_USE_INTERPRETER}" == "y" ]
    then
        CMDLINE+="--enable-fast-interpreter "
    fi

    if [ "${EXAGEAR_FAST_MATH}" == "y" ]
    then
            CMDLINE+="--fast-math "
    fi

    if [ "${EXAGEAR_X86_PRECISE_FP}" == "y" ]
    then
            CMDLINE+="--x86-precise-fp "
    fi

    if [ "${EXAGEAR_X86_PRECISE_80BIT_FP}" == "y" ]
    then
            CMDLINE+="--x86-precise-80bit-fp "
    fi

    if [ "${EXAGEAR_X86_ENABLE_AVX}" == "y" ]
    then
            CMDLINE+="--x86-enable-avx "
    fi

    if [ "${EXAGEAR_ENABLE_SVE}" == "y" ]
    then
            CMDLINE+="--enable-sve "
    fi

    if [ "${EXAGEAR_DISABLE_NATIVE_RETURN_ADDR_OPT}" == "y" ]
    then
            CMDLINE+="--disable-native-ret-addr-opt "
    fi

    if [ "${EXAGEAR_DISABLE_THP_PREALLOC}" == "y" ]
    then
            CMDLINE+="--disable-thp-preallocation "
    fi

    if [ "${EXAGEAR_DISABLE_THP_MADVISE}" == "y" ]
    then
            CMDLINE+="--disable-thp-madvise "
    fi

    if [ "${EXAGEAR_DISABLE_FLAGS_ON_RET_OPT}" == "y" ]
    then
            CMDLINE+="--disable-flags-on-ret-opt "
    fi

    if [ "${EXAGEAR_DISABLE_JIT_STORE_OPT}" == "y" ]
    then
            CMDLINE+="--disable-jit-store-opt "
    fi

    if [ "${EXAGEAR_ENABLE_SWITCHES_OPT}" == "y" ]
    then
            CMDLINE+="--enable-switches-opt "
    fi

    if [ "${EXAGEAR_X86_DISABLE_SSE_PRESERVE}" == "y" ]
    then
            CMDLINE+="--x86-disable-sse-preserve "
    fi

    if [ "${EXAGEAR_X86_ENABLE_VZEROUPPER}" == "y" ]
    then
            CMDLINE+="--x86-enable-vzeroupper "
    fi

    if [ ! -z "${EXAGEAR_FD_HARD_LIMIT}" ]
    then
            CMDLINE+="--hifd-start ${EXAGEAR_FD_HARD_LIMIT} "
    fi

    if [ ! -z "${EXAGEAR_HIFD_RESERVE}" ]
    then
            CMDLINE+="--hifd-reserve ${EXAGEAR_HIFD_RESERVE} "
    fi

    if [ ! "${EXAGEAR_DP_TABLE_HASH_SIZE}" == "default" ]
    then
            CMDLINE+="--dp-table-hash-size ${EXAGEAR_DP_TABLE_HASH_SIZE} "
    fi

    if [ ! -z "${EXAGEAR_BOLT_MODE}" -a ! "${EXAGEAR_BOLT_MODE}" == "none" ]
    then
        if [ ! -z "${EXAGEAR_BOLT_SOCKET}" -a \( -z "${EXAGEAR_IN_CONTAINER}" -o "${EXAGEAR_IN_CONTAINER}" == "n" \) ]
        then
            CMDLINE+="--bolt-socket ${EXAGEAR_BOLT_SOCKET} "
        fi
        CMDLINE+="--bolt-path ${EXAGEAR_BOLT_BINARY} --bolt-info-path ${EXAGEAR_BOLT_INFO_PATH} "
    fi

    if [ "${EXAGEAR_SUPPRESS_ABNORMAL_LOGS}" == "y" ]
    then
            CMDLINE+="--suppress-abnormal-logs "
    fi

    if [ ! -z "${EXAGEAR_FOREIGN_ARCH}" ]
    then
        if [ -e "/opt/exagear/shared/exagear-${EXAGEAR_FOREIGN_ARCH}.conf" ]
        then
            FOREIGN_UBT_BINARY=`. /opt/exagear/shared/exagear-${EXAGEAR_FOREIGN_ARCH}.conf; echo ${EXAGEAR_UBT_BINARY}`
            USE_FOREIGN_BINARY="--foreign-ubt-binary ${FOREIGN_UBT_BINARY}"
            FOREIGN_OPT_BINARY=`. /opt/exagear/shared/exagear-${EXAGEAR_FOREIGN_ARCH}.conf; echo ${EXAGEAR_OPT_BINARY}`
            FOREIGN_USE_OPT=`. /opt/exagear/shared/exagear-${EXAGEAR_FOREIGN_ARCH}.conf; echo ${EXAGEAR_USE_OPT}`
            if [ "${FOREIGN_USE_OPT}" == "y" ]
            then
                    USE_FOREIGN_OPT="--foreign-opt-binary ${FOREIGN_OPT_BINARY}"
            fi

            CMDLINE+="${USE_FOREIGN_BINARY} ${USE_FOREIGN_OPT}"
        fi
    fi

    echo ${CMDLINE}
}
