[flang/flang-rt] Add -isysroot flag only to tests really requiring (#152914)

-isysroot flag was added to all tests, but it makes
Driver/darwin-version.f90 failed.

In fact, only a few tests regarding interoperability with C need
-isysroot flag to search for headers and libraries. So, -isysroot flag
is now eliminated from the substitution `%flang`, and a new substitution
`%isysroot` has been introduced.

Moreover, Integration/iso-fortran-binding.cpp invokes clang++ via a
shell script, which makes it hard to add -isysroot flag. So, it is
refactored.

Fixes #150765
This commit is contained in:
parabola94 2025-08-14 06:43:53 +09:00 committed by GitHub
parent 0425cc95bd
commit cc58ca5370
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 22 additions and 31 deletions

View File

@ -2,8 +2,8 @@
! UNSUPPORTED: offload-cuda
! RUN: split-file %s %t
! RUN: %clang -I"%include/flang" -c %t/cfile.c -o %t/cfile.o
! RUN: %flang -L"%libdir" %t/ffile.f90 %t/cfile.o -o %t/ctofortran
! RUN: %clang %isysroot -I"%include/flang" -c %t/cfile.c -o %t/cfile.o
! RUN: %flang %isysroot -L"%libdir" %t/ffile.f90 %t/cfile.o -o %t/ctofortran
! RUN: env LD_LIBRARY_PATH="$LD_LIBRARY_PATH:%libdir" %t/ctofortran | FileCheck %s
!--- ffile.f90

View File

@ -7,7 +7,7 @@ UNSUPPORTED: system-windows
UNSUPPORTED: offload-cuda
RUN: %if system-aix %{ export OBJECT_MODE=64 %}
RUN: %cc -std=c99 %s -I%include -L"%libdir" -lflang_rt.runtime -lm \
RUN: %cc -std=c99 %s %isysroot -I%include -L"%libdir" -lflang_rt.runtime -lm \
RUN: %if system-aix %{-lpthread %}
RUN: rm a.out
*/

View File

@ -62,25 +62,24 @@ config.test_source_root = os.path.dirname(__file__)
# lit writes a '.lit_test_times.txt' file into this directory.
config.test_exec_root = config.flang_rt_binary_test_dir
# On MacOS, -isysroot is needed to build binaries.
# On MacOS, some tests need -isysroot to build binaries.
isysroot_flag = []
if config.osx_sysroot:
isysroot_flag = ["-isysroot", config.osx_sysroot]
config.substitutions.append(("%isysroot", " ".join(isysroot_flag)))
tools = [
ToolSubst(
"%flang",
command=config.flang,
extra_args=isysroot_flag,
unresolved="fatal",
),
ToolSubst(
"%clang",
command=FindTool("clang"),
extra_args=isysroot_flag,
unresolved="fatal",
),
ToolSubst("%cc", command=config.cc, extra_args=isysroot_flag, unresolved="fatal"),
ToolSubst("%cc", command=config.cc, unresolved="fatal"),
]
llvm_config.add_tool_substitutions(tools)

View File

@ -495,6 +495,9 @@ endif()
include(AddFlang)
include(FlangCommon)
include(GetClangResourceDir)
get_clang_resource_dir(HEADER_BINARY_DIR PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/.. SUBDIR include)
if (FLANG_INCLUDE_TESTS)
add_compile_definitions(FLANG_INCLUDE_TESTS=1)
@ -575,8 +578,6 @@ endif()
# Put ISO_Fortran_binding.h into the include files of the build area now
# so that we can run tests before installing
include(GetClangResourceDir)
get_clang_resource_dir(HEADER_BINARY_DIR PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/.. SUBDIR include)
configure_file(
${FLANG_SOURCE_DIR}/include/flang/ISO_Fortran_binding.h
${HEADER_BINARY_DIR}/ISO_Fortran_binding.h COPYONLY)

View File

@ -1,9 +1,9 @@
// REQUIRES: clang
// UNSUPPORTED: system-windows
// RUN: split-file %s %t
// RUN: chmod +x %t/runtest.sh
// RUN: %t/runtest.sh %t %t/cppfile.cpp %flang | FileCheck %s
// RUN: rm -rf %t && mkdir %t
// RUN: %clangxx %isysroot -I%flang_include %s -o %t/a.out
// RUN: %t/a.out | FileCheck %s
//--- cppfile.cpp
extern "C" {
#include "ISO_Fortran_binding.h"
}
@ -15,19 +15,3 @@ int main() {
}
// CHECK: PASS
// clang-format off
//--- runtest.sh
#!/bin/bash
TMPDIR=$1
CPPFILE=$2
FLANG=$3
BINDIR=`dirname $FLANG`
CPPCOMP=$BINDIR/clang++
if [ -x $CPPCOMP ]
then
$CPPCOMP $CPPFILE -o $TMPDIR/a.out
$TMPDIR/a.out # should print "PASS"
else
# No clang compiler, just pass by default
echo "PASS"
fi

View File

@ -118,10 +118,11 @@ if config.flang_standalone_build:
"PATH", config.flang_llvm_tools_dir, append_path=True
)
# On MacOS, -isysroot is needed to build binaries.
# On MacOS, some tests need -isysroot to build binaries.
isysroot_flag = []
if config.osx_sysroot:
isysroot_flag = ["-isysroot", config.osx_sysroot]
config.substitutions.append(("%isysroot", " ".join(isysroot_flag)))
# Check for DEFAULT_SYSROOT, because when it is set -isysroot has no effect.
if config.default_sysroot:
@ -133,7 +134,6 @@ tools = [
ToolSubst(
"%flang",
command=FindTool("flang"),
extra_args=isysroot_flag,
unresolved="fatal",
),
ToolSubst(
@ -172,6 +172,11 @@ if config.flang_standalone_build:
else:
llvm_config.add_tool_substitutions(tools, config.llvm_tools_dir)
llvm_config.use_clang(required=False)
# Clang may need the include path for ISO_fortran_binding.h.
config.substitutions.append(("%flang_include", config.flang_headers_dir))
# Enable libpgmath testing
result = lit_config.params.get("LIBPGMATH")
if result:

View File

@ -6,6 +6,7 @@ import lit.util
config.llvm_tools_dir = lit_config.substitute("@LLVM_TOOLS_DIR@")
config.llvm_shlib_dir = lit_config.substitute(path(r"@SHLIBDIR@"))
config.llvm_plugin_ext = "@LLVM_PLUGIN_EXT@"
config.host_triple = "@LLVM_HOST_TRIPLE@"
config.target_triple = "@LLVM_TARGET_TRIPLE@"
config.llvm_target_triple_env = "@LLVM_TARGET_TRIPLE_ENV@"
config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@"
@ -13,6 +14,7 @@ config.errc_messages = "@LLVM_LIT_ERRC_MESSAGES@"
config.flang_obj_root = "@FLANG_BINARY_DIR@"
config.flang_tools_dir = lit_config.substitute("@FLANG_TOOLS_DIR@")
config.flang_intrinsic_modules_dir = "@FLANG_INTRINSIC_MODULES_DIR@"
config.flang_headers_dir = "@HEADER_BINARY_DIR@"
config.flang_llvm_tools_dir = "@CMAKE_BINARY_DIR@/bin"
config.flang_test_triple = "@FLANG_TEST_TARGET_TRIPLE@"
config.flang_examples = @LLVM_BUILD_EXAMPLES@