From 04adfb660987072ad31756e0d04803f96c3c39f7 Mon Sep 17 00:00:00 2001 From: Andrzej Warzynski Date: Tue, 4 May 2021 15:52:15 +0000 Subject: [PATCH] [flang][cmake] Enable the new driver by default With this patch, `FLANG_BUILD_NEW_DRIVER` is set to `On` by default (i.e. the new driver is enabled). Note that the new driver depends on Clang and hence with this change you will need to add `clang` to `LLVM_ENABLE_PROJECTS`. If you don't want to build the new driver, set `FLANG_BUILD_NEW_DRIVER` to `Off`. This way you won't be required to include `clang` in `LLVM_ENABLE_PROJECTS`. Differential Revision: https://reviews.llvm.org/D101842 --- flang/CMakeLists.txt | 2 -- flang/README.md | 35 +++++++++++++++-------------------- llvm/CMakeLists.txt | 14 +++++++++++--- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt index 2ef2993..28b712e 100644 --- a/flang/CMakeLists.txt +++ b/flang/CMakeLists.txt @@ -2,8 +2,6 @@ cmake_minimum_required(VERSION 3.13.4) set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON) -option(FLANG_BUILD_NEW_DRIVER "Build the flang compiler driver" OFF) - # Flang requires C++17. set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) diff --git a/flang/README.md b/flang/README.md index 7e5352b..326505e 100644 --- a/flang/README.md +++ b/flang/README.md @@ -69,16 +69,17 @@ of LLVM, follow those instructions and add flang to `LLVM_ENABLE_PROJECTS`. We highly recommend using the same compiler to compile both llvm and flang. The flang CMakeList.txt file uses -the variable `LLVM_DIR` to find the installed LLVM components -and -the variable `MLIR_DIR` to find the installed MLIR components. +* `LLVM_DIR` to find the installed LLVM components +* `MLIR_DIR` to find the installed MLIR components +* `CLANG_DIR` to find the installed Clang components -To get the correct LLVM and MLIR libraries included in your flang build, -define LLVM_DIR and MLIR_DIR on the cmake command line. +To get the correct LLVM, MLIR and Clang libraries included in your flang build, +define `LLVM_DIR`, `MLIR_DIR` and `CLANG_DIR` on the cmake command line. ``` LLVM=/lib/cmake/llvm \ MLIR=/lib/cmake/mlir \ -cmake -DLLVM_DIR=$LLVM -DMLIR_DIR=$MLIR ... +CLANG=/lib/cmake/clang \ +cmake -DLLVM_DIR=$LLVM -DMLIR_DIR=$MLIR -DCLANG_DIR=$CLANG ... ``` where `LLVM_BUILD_DIR` is the top-level directory where LLVM was built. @@ -140,23 +141,17 @@ Release builds execute quickly. ### Build Flang out of tree ``` cd ~/flang/build -cmake -DLLVM_DIR=$LLVM -DMLIR_DIR=$MLIR ~/flang/src +cmake -DLLVM_DIR=$LLVM -DMLIR_DIR=$MLIR -DCLANG_DIR=$CLANG ~/flang/src make ``` -### Build The New Flang Driver -The new Flang driver, `flang-new`, is currently under active development and -should be considered as an experimental feature. For this reason it is disabled -by default. This will change once the new driver replaces the _throwaway_ -driver, `flang`. - -In order to build the new driver, add `-DFLANG_BUILD_NEW_DRIVER=ON` to your -CMake invocation line. Additionally, when building out-of-tree, use `CLANG_DIR` -(similarly to `LLVM_DIR` and `MLIR_DIR`) to find the installed Clang -components. - -**Note:** `CLANG_DIR` is only required when building the new Flang driver, -which currently depends on Clang. +### Disable The New Flang Driver +The new Flang compiler driver, `flang-new`, is implemented in terms of +`clangDriver` and hence it introduces a dependency on Clang. This dependency is +otherwise not required. If you do not require the new driver, you can disable +it by adding `-DFLANG_BUILD_NEW_DRIVER=OFF` to your CMake invocation. With the +new driver disabled, you no longer need to add `clang` to +`LLVM_ENABLE_PROJECTS` (or to specify `CLANG_DIR` when building out-of-tree). # How to Run Tests diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt index f6bf945..e5febba 100644 --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -74,9 +74,17 @@ set(LLVM_ENABLE_PROJECTS "" CACHE STRING if( LLVM_ENABLE_PROJECTS STREQUAL "all" ) set( LLVM_ENABLE_PROJECTS ${LLVM_ALL_PROJECTS}) endif() -if ("flang" IN_LIST LLVM_ENABLE_PROJECTS AND NOT "mlir" IN_LIST LLVM_ENABLE_PROJECTS) - message(STATUS "Enabling MLIR as a dependency to flang") - list(APPEND LLVM_ENABLE_PROJECTS "mlir") + +if ("flang" IN_LIST LLVM_ENABLE_PROJECTS) + if (NOT "mlir" IN_LIST LLVM_ENABLE_PROJECTS) + message(STATUS "Enabling MLIR as a dependency to flang") + list(APPEND LLVM_ENABLE_PROJECTS "mlir") + endif() + + option(FLANG_BUILD_NEW_DRIVER "Build the flang compiler driver" ON) + if (FLANG_BUILD_NEW_DRIVER AND NOT "clang" IN_LIST LLVM_ENABLE_PROJECTS) + message(FATAL_ERROR "Clang is not enabled, but it's required by the new Flang driver") + endif() endif() # LLVM_ENABLE_PROJECTS_USED is `ON` if the user has ever used the -- 2.7.4