Index: flang/test/Driver/intrinsic_module_path.f90 =================================================================== --- flang/test/Driver/intrinsic_module_path.f90 +++ flang/test/Driver/intrinsic_module_path.f90 @@ -3,7 +3,7 @@ ! 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 + !-------------------------- @@ -15,8 +15,8 @@ !----------------------------------------- ! 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 %s 2>&1 | FileCheck %s --allow-empty --check-prefix=WITHOUT +! RUN: not %flang_fc1 -fintrinsic-modules-path %S/Inputs/ %s 2>&1 | FileCheck %s --check-prefix=GIVEN !----------------------------------------- ! EXPECTED OUTPUT WITHOUT Index: flang/test/lit.cfg.py =================================================================== --- flang/test/lit.cfg.py +++ flang/test/lit.cfg.py @@ -64,7 +64,6 @@ # 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 @@ 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: flang/tools/f18/f18.cpp =================================================================== --- flang/tools/f18/f18.cpp +++ flang/tools/f18/f18.cpp @@ -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 @@ 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 @@ std::vector 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,7 +618,9 @@ driver.moduleFileSuffix = args.front(); args.pop_front(); } else if (arg == "-intrinsic-module-directory") { - driver.searchDirectories.push_back(args.front()); + // 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: flang/tools/f18/flang =================================================================== --- flang/tools/f18/flang +++ flang/tools/f18/flang @@ -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