2022-07-29 14:27:49 +00:00
|
|
|
#!/bin/bash
|
|
|
|
# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
|
|
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
#
|
|
|
|
# runtest.sh of /tools/gcc/Sanity/test-m32-m64-options
|
|
|
|
# Description: Try -m32 and -m64 options.
|
|
|
|
# Author: Marek Polacek <polacek@redhat.com>
|
|
|
|
#
|
|
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
#
|
|
|
|
# Copyright (c) 2012 Red Hat, Inc. All rights reserved.
|
|
|
|
#
|
|
|
|
# This copyrighted material is made available to anyone wishing
|
|
|
|
# to use, modify, copy, or redistribute it subject to the terms
|
|
|
|
# and conditions of the GNU General Public License version 2.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be
|
|
|
|
# useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
|
|
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
|
|
# PURPOSE. See the GNU General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public
|
|
|
|
# License along with this program; if not, write to the Free
|
|
|
|
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
# Boston, MA 02110-1301, USA.
|
|
|
|
#
|
|
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
# In this test, we try to compile and run programs using -m32 and -m64.
|
|
|
|
# We compile C, C++ and Fortran Hello World programs. Also, there are two
|
|
|
|
# proglets which are exercising some C++11 features. Furthermore, we try
|
|
|
|
# -fgnu-tm, -fopenmp options. We also use libquadmath a little bit.
|
|
|
|
# We call a function from libgcc. We also use the __thread keyword.
|
|
|
|
|
|
|
|
# Include Beaker environment
|
|
|
|
. /usr/share/beakerlib/beakerlib.sh || exit 1
|
|
|
|
|
2023-01-26 09:26:48 +00:00
|
|
|
GCC=${GCC:-$(type -P gcc)}
|
|
|
|
GCC_RPM_NAME=$(rpm --qf '%{name}' -qf $GCC)
|
2022-07-29 14:27:49 +00:00
|
|
|
|
2023-01-26 09:26:48 +00:00
|
|
|
[[ "$GCC_RPM_NAME" == *toolset* ]] && TOOLSET=${GCC_RPM_NAME%-gcc} || TOOLSET=''
|
2022-07-29 14:27:49 +00:00
|
|
|
|
2023-01-26 09:26:48 +00:00
|
|
|
if [ -n "`rlGetPrimaryArch`" ]; then
|
|
|
|
PRI_ARCH=$(rlGetPrimaryArch)
|
|
|
|
else
|
|
|
|
PRI_ARCH="$(uname -i)"
|
2022-07-29 14:27:49 +00:00
|
|
|
fi
|
|
|
|
|
2023-01-26 09:26:48 +00:00
|
|
|
# State applicable -m<bits> switches
|
|
|
|
SWITCHES='-m64 -m32'
|
|
|
|
case "$PRI_ARCH" in
|
|
|
|
i686)
|
|
|
|
SWITCHES=-m32 # just base RHEL-6/i386
|
|
|
|
;;
|
|
|
|
ppc64le) # we never had 32 support there
|
|
|
|
SWITCHES=-m64
|
|
|
|
;;
|
|
|
|
aarch64)
|
|
|
|
# Not only we never had 32-bit support there, GCC on this architecture
|
|
|
|
# doesn't accept the -m64 switch either. This test isn't applicable
|
|
|
|
# at all and should be excluded by its relevancy, e.g. in TCMS:
|
|
|
|
# arch = aarch64: False
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
ppc64|s390x) # 32-bit support present only in system GCC of RHEL <8
|
|
|
|
if [[ -z "$TOOLSET" ]] && rlIsRHEL '<8'; then
|
|
|
|
if [[ "$PRI_ARCH" != s390x ]]; then
|
|
|
|
SWITCHES='-m64 -m32'
|
|
|
|
else
|
|
|
|
SWITCHES='-m64 -m31'
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
SWITCHES=-m64
|
2022-07-29 14:27:49 +00:00
|
|
|
fi
|
2023-01-26 09:26:48 +00:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
rlJournalStart
|
|
|
|
rlPhaseStartSetup
|
|
|
|
rlLogInfo "COLLECTIONS=$COLLECTIONS"
|
|
|
|
rlLogInfo "GCC=$GCC"
|
|
|
|
rlLogInfo "SKIP_COLLECTION_METAPACKAGE_CHECK=$SKIP_COLLECTION_METAPACKAGE_CHECK"
|
|
|
|
|
|
|
|
# We optionally need to skip checking for the presence of the metapackage
|
|
|
|
# because that would pull in all the dependent toolset subrpms. We do not
|
|
|
|
# always want that, especially in CI.
|
|
|
|
_COLLECTIONS="$COLLECTIONS"
|
|
|
|
if ! test -z $SKIP_COLLECTION_METAPACKAGE_CHECK; then
|
|
|
|
for c in $SKIP_COLLECTION_METAPACKAGE_CHECK; do
|
|
|
|
rlLogInfo "ignoring metapackage check for collection $c"
|
|
|
|
export COLLECTIONS=$(shopt -s extglob && echo ${COLLECTIONS//$c/})
|
|
|
|
done
|
2022-07-29 14:27:49 +00:00
|
|
|
fi
|
2023-01-26 09:26:48 +00:00
|
|
|
rlLogInfo "(without skipped) COLLECTIONS=$COLLECTIONS"
|
|
|
|
export COLLECTIONS="$_COLLECTIONS"
|
|
|
|
|
|
|
|
rlRun "TmpDir=\$(mktemp -d)"
|
|
|
|
rlRun "cp -v hello.{c,cpp,f90} tm.c quad.c thr-init-2.c clear_cache.c omphello.c lambda-template.C cpp11.cpp $TmpDir"
|
|
|
|
rlRun "pushd $TmpDir"
|
|
|
|
rlPhaseEnd
|
|
|
|
|
|
|
|
rlPhaseStartSetup "Showing compiler versions"
|
|
|
|
for compiler in gcc g++ gfortran; do
|
|
|
|
rlLogInfo "Version of compiler: $compiler"
|
|
|
|
eval "$compiler --version 2>&1" | while read line; do
|
|
|
|
rlLogInfo " $line"
|
|
|
|
done
|
|
|
|
done
|
|
|
|
rlPhaseEnd
|
|
|
|
|
|
|
|
for m in $SWITCHES; do
|
|
|
|
rlPhaseStartTest "Compile and run [$m]"
|
|
|
|
|
|
|
|
# Test C
|
|
|
|
rlRun "gcc $m hello.c -o hello_c"
|
|
|
|
rlRun ./hello_c
|
|
|
|
|
|
|
|
# Test C++
|
|
|
|
rlRun "g++ $m hello.cpp -o hello_cpp"
|
|
|
|
rlRun ./hello_cpp
|
|
|
|
|
|
|
|
# C++11 features. Not available in system GCC of RHEL-6
|
|
|
|
if ! rlIsRHEL 6 || [[ -n "$TOOLSET" ]]; then
|
|
|
|
rlRun "g++ $m -std=c++11 lambda-template.C -o lambda"
|
|
|
|
rlRun ./lambda
|
|
|
|
|
|
|
|
rlRun "g++ $m -std=c++11 cpp11.cpp -o cpp11"
|
|
|
|
rlRun ./cpp11
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Test Fortran
|
|
|
|
rlRun "gfortran $m hello.f90 -o hello_fortran"
|
|
|
|
rlRun "./hello_fortran"
|
|
|
|
|
|
|
|
# Test TM. Not available in system GCC of RHEL-6
|
|
|
|
if ! rlIsRHEL 6 || [[ -n "$TOOLSET" ]]; then
|
|
|
|
rlRun "gcc $m -O2 -std=gnu99 -fgnu-tm tm.c -o tm"
|
|
|
|
rlRun ./tm
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Test OpenMP
|
|
|
|
rlRun "gcc $m omphello.c -O2 -std=gnu99 -fopenmp -o omp"
|
|
|
|
rlRun ./omp
|
|
|
|
|
|
|
|
# Test __thread
|
|
|
|
rlRun "gcc $m thr-init-2.c -O2 -std=gnu99 -ftls-model=initial-exec -o thr"
|
|
|
|
rlRun ./thr
|
|
|
|
|
|
|
|
# Now test some libquadmath stuff (__float128 support).
|
|
|
|
if rpm -q ${GCC_RPM_NAME%%gcc}libquadmath-devel &>/dev/null; then
|
|
|
|
rlRun "gcc $m quad.c -O2 -std=gnu99 -lquadmath -o quad -lm"
|
|
|
|
rlRun ./quad
|
|
|
|
fi
|
|
|
|
|
|
|
|
# And now something from libgcc, e.g. __builtin___clear_cache.
|
|
|
|
rlRun "gcc $m clear_cache.c -O2 -std=gnu99 -o cache"
|
|
|
|
rlRun ./cache
|
|
|
|
|
|
|
|
rlPhaseEnd
|
2022-07-29 14:27:49 +00:00
|
|
|
done
|
|
|
|
|
2023-01-26 09:26:48 +00:00
|
|
|
rlPhaseStartCleanup
|
|
|
|
rlRun popd
|
|
|
|
rlRun "rm -r $TmpDir"
|
|
|
|
rlPhaseEnd
|
2022-07-29 14:27:49 +00:00
|
|
|
rlJournalPrintText
|
|
|
|
rlJournalEnd
|