[flang][driver] Add default intrinsic module path in f18 to make f18 behave like flang-new (with respect to the module paths), make it possible to share more tests between the drivers and make using f18 easier (the default path means that users are no longer required to specify it)

Reviewed By: awarzynski

Differential Revision: https://reviews.llvm.org/D99336
This commit is contained in:
Arnamoy Bhattacharyya 2021-03-29 09:47:38 -04:00 committed by Arnamoy Bhattacharyya
parent f6f21dcd6c
commit d0d92fee6f
4 changed files with 23 additions and 17 deletions

View File

@ -3,20 +3,11 @@
! With the option GIVEN, the module with the same name is PREPENDED, and considered over the
! default one, causing a CHECKSUM error.
! REQUIRES: new-flang-driver
!--------------------------
! FLANG DRIVER (flang-new)
!--------------------------
! RUN: %flang-new -fsyntax-only %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
! RUN: not %flang-new -fsyntax-only -fintrinsic-modules-path %S/Inputs/ %s 2>&1 | FileCheck %s --check-prefix=GIVEN
!-----------------------------------------
! FRONTEND FLANG DRIVER (flang-new -fc1)
!-----------------------------------------
! RUN: %flang-new -fc1 %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
! RUN: not %flang-new -fc1 -fintrinsic-modules-path %S/Inputs/ %s 2>&1 | FileCheck %s --check-prefix=GIVEN
! RUN: %flang_fc1 -fsyntax-only %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT
! RUN: not %flang_fc1 -fsyntax-only -fintrinsic-modules-path %S/Inputs/ %s 2>&1 | FileCheck %s --check-prefix=GIVEN
!-----------------------------------------
! EXPECTED OUTPUT WITHOUT

View File

@ -64,7 +64,6 @@ if config.flang_standalone_build:
# the build directory holding that tool.
tools = [
ToolSubst('%f18', command=FindTool('f18'),
extra_args=["-intrinsic-module-directory "+config.flang_intrinsic_modules_dir],
unresolved='fatal')
]
@ -75,10 +74,8 @@ if config.include_flang_new_driver_test:
extra_args=['-fc1'], unresolved='fatal'))
else:
tools.append(ToolSubst('%flang', command=FindTool('f18'),
extra_args=["-intrinsic-module-directory "+config.flang_intrinsic_modules_dir],
unresolved='fatal'))
tools.append(ToolSubst('%flang_fc1', command=FindTool('f18'),
extra_args=["-intrinsic-module-directory "+config.flang_intrinsic_modules_dir],
unresolved='fatal'))
if config.flang_standalone_build:

View File

@ -27,6 +27,7 @@
#include "flang/Version.inc"
#include "llvm/Support/Errno.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/FileUtilities.h"
#include "llvm/Support/Program.h"
#include "llvm/Support/Signals.h"
#include "llvm/Support/raw_ostream.h"
@ -395,6 +396,16 @@ int printVersion() {
return exitStatus;
}
// Generate the path to look for intrinsic modules
static std::string getIntrinsicDir() {
// TODO: Find a system independent API
llvm::SmallString<128> driverPath;
driverPath.assign(llvm::sys::fs::getMainExecutable(nullptr, nullptr));
llvm::sys::path::remove_filename(driverPath);
driverPath.append("/../include/flang/");
return std::string(driverPath);
}
int main(int argc, char *const argv[]) {
atexit(CleanUpAtExit);
@ -431,6 +442,10 @@ int main(int argc, char *const argv[]) {
std::vector<std::string> fortranSources, otherSources;
bool anyFiles{false};
// Add the default intrinsic module directory to the list of search
// directories
driver.searchDirectories.push_back(getIntrinsicDir());
while (!args.empty()) {
std::string arg{std::move(args.front())};
auto dot{arg.rfind(".")};
@ -603,8 +618,11 @@ int main(int argc, char *const argv[]) {
} else if (arg == "-module-suffix") {
driver.moduleFileSuffix = args.front();
args.pop_front();
} else if (arg == "-intrinsic-module-directory") {
driver.searchDirectories.push_back(args.front());
} else if (arg == "-intrinsic-module-directory" ||
arg == "-fintrinsic-modules-path") {
// prepend to the list of search directories
driver.searchDirectories.insert(
driver.searchDirectories.begin(), args.front());
args.pop_front();
} else if (arg == "-futf-8") {
driver.encoding = Fortran::parser::Encoding::UTF_8;

View File

@ -8,7 +8,7 @@
#===------------------------------------------------------------------------===#
wd=$(cd $(dirname "$0")/.. && pwd)
opts="-module-suffix .f18.mod -intrinsic-module-directory $wd/include/flang"
opts="-module-suffix .f18.mod "
if ! $wd/bin/f18 $opts "$@"
then status=$?
echo flang: in $PWD, f18 failed with exit status $status: $wd/bin/f18 $opts "$@" >&2