#!/bin/sh # check_simd # Read config from $CHECK_SIMD_CONFIG file or $target_list scriptdir="$(cd "${0%/*}" && pwd)" srcdir="$1" builddir="$2" shift 2 testdir="$builddir/testsuite" CXX="$("$builddir/scripts/testsuite_flags" --build-cxx)" CXXFLAGS="$("$builddir/scripts/testsuite_flags" --cxxflags) $1 -Wno-psabi" shift INCLUDES="$("$builddir/scripts/testsuite_flags" --build-includes)" target_triplet=$($CXX -dumpmachine) define_target() { name="$1" flags="$2" sim="$3" eval "$name=\"flags=\\\"$flags\\\" sim=\\\"$sim\\\"\"" } if [ -f "$CHECK_SIMD_CONFIG" ]; then . "$CHECK_SIMD_CONFIG" elif [ -z "$CHECK_SIMD_CONFIG" ]; then if [ -z "$target_list" ]; then target_list="unix" case "$target_triplet" in x86_64-*) target_list="unix/-march=native" ;; i?86-*) target_list="unix/-march=native" ;; powerpc64le-*) target_list="unix/-mcpu=power8" ;; aarch64-*) target_list="unix/-mcpu=cortex-a53" ;; arm-*) target_list="unix/-mcpu=cortex-a7" ;; esac fi else echo "Error: File not found: \$CHECK_SIMD_CONFIG='$CHECK_SIMD_CONFIG'" 1>&2 exit 1 fi # define unix with no flags and no simulator: define_target unix list="$target_list" # expand a{b,c} to a/b a/c while [ "${list#*\{}" != "${list}" ]; do list="$(echo "$list" | \ sed -e 's#\([^ ]\+\){\([^{},]*\),\([^{}]*\)}\(/[^ ]*\)\?#\1/\2\4 \1{\3}\4#g' \ -e 's#{\([^{},]*\)}#/\1#g' \ -e 's#/ # #g' -e 's#/$##')" done # per a/b/c block extract flags and simulator, then make check-simd while [ ${#list} -gt 0 ]; do a="${list%% *}" if [ "$a" = "$list" ]; then list="" else list="${list#${a} }" fi b="${a%%/*}" eval "eval \"\$$b\"" flags="${flags}$(echo "${a#${b}}"|sed 's#/# #g')" subdir="simd/$(echo "$flags" | sed 's#[= /-]##g')" rm -f "${subdir}/Makefile" $srcdir/testsuite/experimental/simd/generate_makefile.sh \ --destination="$testdir/$subdir" --sim="$sim" --testflags="$flags" \ $CXX $INCLUDES $CXXFLAGS -static-libgcc -static-libstdc++ echo "$subdir" done