[flang][driver] Add default intrinsic module path in f18 to make f18 behave like...
authorArnamoy Bhattacharyya <arnamoy.bhattacharyya@huawei.com>
Mon, 29 Mar 2021 13:47:38 +0000 (09:47 -0400)
committerArnamoy Bhattacharyya <arnamoy10@gmail.com>
Mon, 29 Mar 2021 14:01:08 +0000 (10:01 -0400)
Reviewed By: awarzynski

Differential Revision: https://reviews.llvm.org/D99336

flang/test/Driver/intrinsic_module_path.f90
flang/test/lit.cfg.py
flang/tools/f18/f18.cpp
flang/tools/f18/flang

index 3f11512..1105220 100644 (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
index 4392da6..7c99d6f 100644 (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:
index e22905a..9c5e6c9 100644 (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;
index 8dda836..81fac7b 100644 (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