# 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 [ ! -z "${EXAGEAR_SMO_CONFIG}" ]
    then
        CMDLINE+="--smo-config ${EXAGEAR_SMO_CONFIG} "
    fi

    if [ "${EXAGEAR_SMO_LIBC_USE_BLACKLIST}" == "y" ]
    then
        CMDLINE+="--smo-libc-use-blacklist "
    fi

    if [ "${EXAGEAR_SMO_DISABLE_LIBC_WARN}" == "y" ]
    then
        CMDLINE+="--smo-disable-libc-warn "
    fi

    if [ "${EXAGEAR_USE_OPT}" == "y" ]
    then
        if [ ! -z "${EXAGEAR_OPT_SOCKET}" ]
        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_X86_ENABLE_AVX512}" == "y" ]
    then
            CMDLINE+="--x86-enable-avx512 "
    fi

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

    if [ "${EXAGEAR_ENABLE_SVE512}" == "y" ]
    then
            CMDLINE+="--enable-sve512 "
    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_CALL_RET_OPT}" == "y" ]
    then
            CMDLINE+="--disable-flags-on-call-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 [ "${EXAGEAR_DUMP_OPTIONS}" == "y" ]
    then
            CMDLINE+="--dump-options "
    fi

    if [ ! -z "${EXAGEAR_PT_CONFIG}" ]
    then
            CMDLINE+="--pt-config ${EXAGEAR_PT_CONFIG} "
    fi

    if [ ! -z "${EXAGEAR_FD_HARD_LIMIT}" ]
    then
            CMDLINE+="--rlimit-nofile-guest -1,${EXAGEAR_FD_HARD_LIMIT} "
    fi

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

    if [ ! -z "${EXAGEAR_NATIVE_WINE_PATH}" ]
    then
            CMDLINE+="--native-wine-path ${EXAGEAR_NATIVE_WINE_PATH} "
    fi

    if [ ! -z "${EXAGEAR_CFG_BUILDER_MODE}" -a ! "${EXAGEAR_CFG_BUILDER_MODE}" == "none" ]
    then
        if [ ! -z "${EXAGEAR_CFG_BUILDER_SOCKET}" ]
        then
            CMDLINE+="--cfg-builder-socket ${EXAGEAR_CFG_BUILDER_SOCKET} "
        fi
        CMDLINE+="--cfg-builder-mode ${EXAGEAR_CFG_BUILDER_MODE} --cfg-builder-path ${EXAGEAR_CFG_BUILDER_BINARY} "
    fi

    if [ \( ! -z "${EXAGEAR_CFG_BUILDER_MODE}" -a ! "${EXAGEAR_CFG_BUILDER_MODE}" == "none" \) -o "${EXAGEAR_USE_CB}" == "y" ]
    then
        CMDLINE+="--cfg-builder-info-path ${EXAGEAR_CFG_BUILDER_INFO_PATH} "
    fi

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

    if [ ! -z "${EXAGEAR_FOREIGN_ARCH}" ]
    then
        if [ -e "${EXAGEAR_ROOT_DIR}/etc/exagear-${EXAGEAR_FOREIGN_ARCH}.conf" ]
        then
            FOREIGN_UBT_BINARY=`. ${EXAGEAR_ROOT_DIR}/etc/exagear-${EXAGEAR_FOREIGN_ARCH}.conf; echo ${EXAGEAR_UBT_BINARY}`
            USE_FOREIGN_BINARY="--foreign-ubt-binary ${FOREIGN_UBT_BINARY}"

            FOREIGN_OPT_BINARY=`. ${EXAGEAR_ROOT_DIR}/etc/exagear-${EXAGEAR_FOREIGN_ARCH}.conf; echo ${EXAGEAR_OPT_BINARY}`
            FOREIGN_OPT_SOCKET=`. ${EXAGEAR_ROOT_DIR}/etc/exagear-${EXAGEAR_FOREIGN_ARCH}.conf; echo ${EXAGEAR_OPT_SOCKET}`
            FOREIGN_USE_OPT=`. ${EXAGEAR_ROOT_DIR}/etc/exagear-${EXAGEAR_FOREIGN_ARCH}.conf; echo ${EXAGEAR_USE_OPT}`
            if [ "${FOREIGN_USE_OPT}" == "y" ]
            then
                if [ ! -z "${FOREIGN_OPT_SOCKET}" ]
                then
                    USE_FOREIGN_OPT="--foreign-opt-binary ${FOREIGN_OPT_SOCKET}"
                else
                    USE_FOREIGN_OPT="--foreign-opt-binary ${FOREIGN_OPT_BINARY}"
                fi
            fi

            FOREIGN_CB_BINARY=`. ${EXAGEAR_ROOT_DIR}/etc/exagear-${EXAGEAR_FOREIGN_ARCH}.conf; echo ${EXAGEAR_CB_BINARY}`
            FOREIGN_USE_CB=`. ${EXAGEAR_ROOT_DIR}/etc/exagear-${EXAGEAR_FOREIGN_ARCH}.conf; echo ${EXAGEAR_USE_CB}`
            if [ "${FOREIGN_USE_CB}" == "y" ]
            then
                    USE_FOREIGN_CB="--foreign-cb-binary ${FOREIGN_CB_BINARY}"
            fi

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

    echo ${CMDLINE}
}
