[flang] Make flang build compatible with LLVM dylib
authorSerge Guelton <sguelton@redhat.com>
Mon, 5 Oct 2020 19:35:38 +0000 (15:35 -0400)
committerserge-sans-paille <sguelton@redhat.com>
Wed, 14 Oct 2020 12:27:25 +0000 (14:27 +0200)
Harmonize usage of LLVM components througout Flang.

Explicit LLVM Libs where used across several CMakeFIles, which led to
incompatibilities with LLVM shlibs.
Fortunately, the LLVM component system can be relied on to harmoniously handle
both cases.

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

flang/CMakeLists.txt
flang/cmake/modules/AddFlang.cmake
flang/tools/flang-driver/CMakeLists.txt
flang/unittests/CMakeLists.txt
flang/unittests/Decimal/CMakeLists.txt
flang/unittests/Evaluate/CMakeLists.txt
flang/unittests/Runtime/CMakeLists.txt

index ceba69c..2e6c5f1 100644 (file)
@@ -229,9 +229,8 @@ if(LINK_WITH_FIR)
   endif()
   # Always build tco tool
   set(LLVM_BUILD_TOOLS ON)
-  message(STATUS "Linking driver with FIR and LLVM")
-  llvm_map_components_to_libnames(LLVM_COMMON_LIBS support)
-  message(STATUS "LLVM libraries: ${LLVM_COMMON_LIBS}")
+  set(LLVM_COMMON_COMPONENTS Support)
+  message(STATUS "Linking driver with FIR and LLVM, using LLVM components: ${LLVM_COMMON_COMPONENTS}")
 endif()
 
 # Add Flang-centric modules to cmake path.
index 7fe8b7e..ba36a23 100644 (file)
@@ -61,7 +61,6 @@ macro(add_flang_library name)
   llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
 
   if (TARGET ${name})
-    target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
 
     if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libflang")
       set(export_to_flangtargets)
index 5e34a33..d4bbe23 100644 (file)
@@ -7,20 +7,23 @@ link_directories(${LLVM_LIBRARY_DIR})
 add_flang_tool(flang-new
   driver.cpp
   fc1_main.cpp
+
+  LINK_COMPONENTS
+
+  ${LLVM_COMMON_COMPONENTS}
+  Support
+  Target
+  Option
 )
 
 # Link against LLVM and Clang libraries
 target_link_libraries(flang-new
   PRIVATE
-  ${LLVM_COMMON_LIBS}
   flangFrontend
   flangFrontendTool
   clangDriver
   clangBasic
   clangFrontend
-  LLVMSupport
-  LLVMTarget
-  LLVMOption
 )
 
 install(TARGETS flang-new DESTINATION bin)
index 9f068fb..54af3af 100644 (file)
@@ -10,11 +10,30 @@ if (CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG)
 endif()
 
 function(add_flang_nongtest_unittest test_name)
-  add_executable(${test_name}.test ${test_name}.cpp)
+  cmake_parse_arguments(ARG
+    "SLOW_TEST"
+    ""
+    ""
+    ${ARGN})
 
-  target_link_libraries(${test_name}.test ${ARGN})
+  if(ARG_SLOW_TEST)
+      set(suffix .slow)
+  else()
+      set(suffix .test)
+  endif()
 
-  add_dependencies(FlangUnitTests ${test_name}.test)
+  add_executable(${test_name}${suffix} ${test_name}.cpp)
+
+  if (LLVM_LINK_LLVM_DYLIB AND NOT ARG_DISABLE_LLVM_LINK_LLVM_DYLIB)
+    set(llvm_libs LLVM)
+  else()
+    llvm_map_components_to_libnames(llvm_libs Support)
+  endif()
+  target_link_libraries(${test_name}${suffix} ${llvm_libs} ${ARG_UNPARSED_ARGUMENTS})
+
+  if(NOT ARG_SLOW_TEST)
+    add_dependencies(FlangUnitTests ${test_name}${suffix})
+  endif()
 endfunction()
 
 add_subdirectory(Optimizer)
index 112b02f..d301a9d 100644 (file)
@@ -1,15 +1,10 @@
 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
 add_flang_nongtest_unittest(quick-sanity-test
   FortranDecimal
-  LLVMSupport
 )
 
-# This test is not run by default as it takes a long time to execute
-add_executable(thorough-test
-  thorough-test.cpp
-)
-
-target_link_libraries(thorough-test
+# This test is not run by default as it takes a long time to execute.
+add_flang_nongtest_unittest(thorough-test
+  SLOW_TEST
   FortranDecimal
-  LLVMSupport
 )
index c56789b..f9e5227 100644 (file)
@@ -3,24 +3,24 @@ add_library(FortranEvaluateTesting
   testing.cpp
   fp-testing.cpp
 )
-
-target_link_libraries(FortranEvaluateTesting
-  LLVMSupport
-)
+    if (LLVM_LINK_LLVM_DYLIB)
+      set(llvm_libs LLVM)
+    else()
+      llvm_map_components_to_libnames(llvm_libs Support)
+    endif()
+    target_link_libraries(FortranEvaluateTesting
+           ${llvm_libs})
 
 add_flang_nongtest_unittest(leading-zero-bit-count
   FortranEvaluateTesting
-  LLVMSupport
 )
 
 add_flang_nongtest_unittest(bit-population-count
   FortranEvaluateTesting
-  LLVMSupport
 )
 
 add_flang_nongtest_unittest(uint128
   FortranEvaluateTesting
-  LLVMSupport
 )
 
 add_flang_nongtest_unittest(expression
@@ -29,14 +29,12 @@ add_flang_nongtest_unittest(expression
   FortranEvaluate
   FortranSemantics
   FortranParser
-  LLVMSupport
 )
 
 add_flang_nongtest_unittest(integer
   FortranEvaluateTesting
   FortranEvaluate
   FortranSemantics
-  LLVMSupport
 )
 
 add_flang_nongtest_unittest(intrinsics
@@ -47,14 +45,12 @@ add_flang_nongtest_unittest(intrinsics
   FortranSemantics
   FortranParser
   FortranRuntime
-  LLVMSupport
 )
 
 add_flang_nongtest_unittest(logical
   FortranEvaluateTesting
   FortranEvaluate
   FortranSemantics
-  LLVMSupport
 )
 
 # GCC -fno-exceptions breaks the fenv.h interfaces needed to capture
@@ -68,7 +64,6 @@ add_flang_nongtest_unittest(real
   FortranEvaluate
   FortranDecimal
   FortranSemantics
-  LLVMSupport
 )
 llvm_update_compile_flags(real.test)
 
@@ -77,7 +72,6 @@ add_flang_nongtest_unittest(reshape
   FortranSemantics
   FortranEvaluate
   FortranRuntime
-  LLVMSupport
 )
 
 add_flang_nongtest_unittest(ISO-Fortran-binding
@@ -85,7 +79,6 @@ add_flang_nongtest_unittest(ISO-Fortran-binding
   FortranEvaluate
   FortranSemantics
   FortranRuntime
-  LLVMSupport
 )
 
 add_flang_nongtest_unittest(folding
@@ -93,5 +86,4 @@ add_flang_nongtest_unittest(folding
   FortranEvaluateTesting
   FortranEvaluate
   FortranSemantics
-  LLVMSupport
 )
index 041b631..45dc65b 100644 (file)
@@ -10,19 +10,16 @@ llvm_update_compile_flags(RuntimeTesting)
 
 target_link_libraries(RuntimeTesting
   FortranRuntime
-  LLVMSupport
 )
 
 add_flang_nongtest_unittest(format
   RuntimeTesting
   FortranRuntime
-  LLVMSupport
 )
 
 add_flang_nongtest_unittest(hello
   RuntimeTesting
   FortranRuntime
-  LLVMSupport
 )
 
 # This test is not run by default as it requires input.
@@ -32,23 +29,19 @@ add_executable(external-hello-world
 
 target_link_libraries(external-hello-world
   FortranRuntime
-  LLVMSupport
 )
 
 add_flang_nongtest_unittest(external-io
   RuntimeTesting
   FortranRuntime
-  LLVMSupport
 )
 
 add_flang_nongtest_unittest(list-input
   RuntimeTesting
   FortranRuntime
-  LLVMSupport
 )
 
 add_flang_nongtest_unittest(character
   RuntimeTesting
   FortranRuntime
-  LLVMSupport
 )