[PATCH] D100901: [CMake][llvm] The first argument to check_linker_flag is the language

2021-04-27 Thread Jim Radford via Phabricator via cfe-commits
radford updated this revision to Diff 340956.
radford added a comment.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

[CMake][llvm] The first argument to check_linker_flag is the language

Match the API for the new check_linker_flag and use it directly when
available, leaving the old code as a fallback.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100901/new/

https://reviews.llvm.org/D100901

Files:
  clang/tools/driver/CMakeLists.txt
  llvm/cmake/modules/AddLLVM.cmake
  llvm/cmake/modules/CheckLinkerFlag.cmake
  llvm/cmake/modules/HandleLLVMOptions.cmake
  llvm/cmake/modules/HandleLLVMStdlib.cmake
  llvm/cmake/modules/LLVMCheckLinkerFlag.cmake

Index: llvm/cmake/modules/LLVMCheckLinkerFlag.cmake
===
--- /dev/null
+++ llvm/cmake/modules/LLVMCheckLinkerFlag.cmake
@@ -0,0 +1,17 @@
+include(CheckLinkerFlag OPTIONAL)
+
+if (COMMAND check_linker_flag)
+  macro(llvm_check_linker_flag)
+check_linker_flag(${ARGN})
+  endmacro()
+else()
+  include(CheckCXXCompilerFlag)
+
+  # cmake builtin compatible, except we assume lang is CXX
+  function(llvm_check_linker_flag lang flag out_var)
+cmake_push_check_state()
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}")
+check_cxx_compiler_flag("" ${out_var})
+cmake_pop_check_state()
+  endfunction()
+endif()
Index: llvm/cmake/modules/HandleLLVMStdlib.cmake
===
--- llvm/cmake/modules/HandleLLVMStdlib.cmake
+++ llvm/cmake/modules/HandleLLVMStdlib.cmake
@@ -13,12 +13,12 @@
   endfunction()
 
   include(CheckCXXCompilerFlag)
-  include(CheckLinkerFlag)
+  include(LLVMCheckLinkerFlag)
   set(LLVM_LIBCXX_USED 0)
   if(LLVM_ENABLE_LIBCXX)
 if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
   check_cxx_compiler_flag("-stdlib=libc++" CXX_COMPILER_SUPPORTS_STDLIB)
-  check_linker_flag("-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB)
+  llvm_check_linker_flag(CXX "-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB)
   if(CXX_COMPILER_SUPPORTS_STDLIB AND CXX_LINKER_SUPPORTS_STDLIB)
 append("-stdlib=libc++"
   CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS
@@ -36,7 +36,7 @@
 if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
   check_cxx_compiler_flag("-static-libstdc++"
   CXX_COMPILER_SUPPORTS_STATIC_STDLIB)
-  check_linker_flag("-static-libstdc++" CXX_LINKER_SUPPORTS_STATIC_STDLIB)
+  llvm_check_linker_flag(CXX "-static-libstdc++" CXX_LINKER_SUPPORTS_STATIC_STDLIB)
   if(CXX_COMPILER_SUPPORTS_STATIC_STDLIB AND
 CXX_LINKER_SUPPORTS_STATIC_STDLIB)
 append("-static-libstdc++"
Index: llvm/cmake/modules/HandleLLVMOptions.cmake
===
--- llvm/cmake/modules/HandleLLVMOptions.cmake
+++ llvm/cmake/modules/HandleLLVMOptions.cmake
@@ -888,8 +888,8 @@
 
 # lld doesn't print colored diagnostics when invoked from Ninja
 if (UNIX AND CMAKE_GENERATOR STREQUAL "Ninja")
-  include(CheckLinkerFlag)
-  check_linker_flag("-Wl,--color-diagnostics" LINKER_SUPPORTS_COLOR_DIAGNOSTICS)
+  include(LLVMCheckLinkerFlag)
+  llvm_check_linker_flag(CXX "-Wl,--color-diagnostics" LINKER_SUPPORTS_COLOR_DIAGNOSTICS)
   append_if(LINKER_SUPPORTS_COLOR_DIAGNOSTICS "-Wl,--color-diagnostics"
 CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
 endif()
Index: llvm/cmake/modules/CheckLinkerFlag.cmake
===
--- llvm/cmake/modules/CheckLinkerFlag.cmake
+++ /dev/null
@@ -1,6 +0,0 @@
-include(CheckCXXCompilerFlag)
-
-function(check_linker_flag flag out_var)
-  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}")
-  check_cxx_compiler_flag("" ${out_var})
-endfunction()
Index: llvm/cmake/modules/AddLLVM.cmake
===
--- llvm/cmake/modules/AddLLVM.cmake
+++ llvm/cmake/modules/AddLLVM.cmake
@@ -236,8 +236,8 @@
   elseif(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
 # Support for ld -z discard-unused=sections was only added in
 # Solaris 11.4.
-include(CheckLinkerFlag)
-check_linker_flag("-Wl,-z,discard-unused=sections" LINKER_SUPPORTS_Z_DISCARD_UNUSED)
+include(LLVMCheckLinkerFlag)
+llvm_check_linker_flag(CXX "-Wl,-z,discard-unused=sections" LINKER_SUPPORTS_Z_DISCARD_UNUSED)
 if (LINKER_SUPPORTS_Z_DISCARD_UNUSED)
   set_property(TARGET ${target_name} APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,-z,discard-unused=sections")
Index: clang/tools/driver/CMakeLists.txt
===
--- clang/tools/driver/CMakeLists.txt
+++ clang/tools/driver/CMakeLists.txt
@@ -93,7 +93,7 @@
 
 if(CLANG_ORDER_FILE AND
 (LLVM_LINKER_IS_LD64 OR LLVM_LINKER_IS_GOLD OR LLVM_LINKER_IS_LLD))
-  inc

[PATCH] D100891: CMake fixes to enable LLVM as a sub-project

2021-04-20 Thread Jim Radford via Phabricator via cfe-commits
radford created this revision.
Herald added a subscriber: mgorny.
radford requested review of this revision.
Herald added projects: clang, LLDB, LLVM.
Herald added subscribers: llvm-commits, lldb-commits, cfe-commits.

[CMake][llvm] Using -D in COMPILE_DEFINITIONS can create a lone -D 
w/generator-expressions

[CMake][llvm] LLVM_DEFINITIONS are a list, not space separated

[CMake][clang] add_clang_library's functions require default visibility

[CMake][lldb] add_lldb_library's functions require default visibility

[CMake][llvm] add_llvm_library's functions require default visibility

[CMake][llvm] avoid changing global flags (may be used outside of llvm)

Changing global flags can break builds of projects that include/build
llvm as a sub-project, as the effect is global.  Ideally we would
disable this warning at the directory level instead, but the obvious
way (disabling warning D9025 ) isn't supported. 
 At least we can limit
the effect to only MSVC.

[CMake][llvm] The first argument to check_linker_flag is the language

[CMake][llvm] avoid includes with generator-expressions in add_custom_command


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D100891

Files:
  clang/cmake/modules/AddClang.cmake
  lldb/cmake/modules/AddLLDB.cmake
  llvm/cmake/modules/AddLLVM.cmake
  llvm/cmake/modules/AddLLVMDefinitions.cmake
  llvm/cmake/modules/HandleLLVMOptions.cmake
  llvm/cmake/modules/TableGen.cmake

Index: llvm/cmake/modules/TableGen.cmake
===
--- llvm/cmake/modules/TableGen.cmake
+++ llvm/cmake/modules/TableGen.cmake
@@ -95,6 +95,8 @@
   # ("${${project}_TABLEGEN_TARGET}" STREQUAL "${${project}_TABLEGEN_EXE}")
   # but lets us having smaller and cleaner code here.
   get_directory_property(tblgen_includes INCLUDE_DIRECTORIES)
+  # No support for generator-expressions in add_custom_command, so strip them
+  list(TRANSFORM tblgen_includes GENEX_STRIP)
   list(TRANSFORM tblgen_includes PREPEND -I)
 
   add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
Index: llvm/cmake/modules/HandleLLVMOptions.cmake
===
--- llvm/cmake/modules/HandleLLVMOptions.cmake
+++ llvm/cmake/modules/HandleLLVMOptions.cmake
@@ -62,18 +62,19 @@
 # NOTE: use `add_compile_options` rather than `add_definitions` since
 # `add_definitions` does not support generator expressions.
 add_compile_options($<$,$>:-UNDEBUG>)
-
-# Also remove /D NDEBUG to avoid MSVC warnings about conflicting defines.
-foreach (flags_var_to_scrub
-CMAKE_CXX_FLAGS_RELEASE
-CMAKE_CXX_FLAGS_RELWITHDEBINFO
-CMAKE_CXX_FLAGS_MINSIZEREL
-CMAKE_C_FLAGS_RELEASE
-CMAKE_C_FLAGS_RELWITHDEBINFO
-CMAKE_C_FLAGS_MINSIZEREL)
-  string (REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " "
-"${flags_var_to_scrub}" "${${flags_var_to_scrub}}")
-endforeach()
+if (MSVC)
+  # Also remove /D NDEBUG to avoid MSVC warnings about conflicting defines.
+  foreach (flags_var_to_scrub
+  CMAKE_CXX_FLAGS_RELEASE
+  CMAKE_CXX_FLAGS_RELWITHDEBINFO
+  CMAKE_CXX_FLAGS_MINSIZEREL
+  CMAKE_C_FLAGS_RELEASE
+  CMAKE_C_FLAGS_RELWITHDEBINFO
+  CMAKE_C_FLAGS_MINSIZEREL)
+string (REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " "
+  "${flags_var_to_scrub}" "${${flags_var_to_scrub}}")
+  endforeach()
+ endif()
   endif()
 endif()
 
@@ -899,7 +900,7 @@
 # lld doesn't print colored diagnostics when invoked from Ninja
 if (UNIX AND CMAKE_GENERATOR STREQUAL "Ninja")
   include(CheckLinkerFlag)
-  check_linker_flag("-Wl,--color-diagnostics" LINKER_SUPPORTS_COLOR_DIAGNOSTICS)
+  check_linker_flag(CXX "-Wl,--color-diagnostics" LINKER_SUPPORTS_COLOR_DIAGNOSTICS)
   append_if(LINKER_SUPPORTS_COLOR_DIAGNOSTICS "-Wl,--color-diagnostics"
 CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
 endif()
@@ -1128,14 +1129,7 @@
 
 function(get_compile_definitions)
   get_directory_property(top_dir_definitions DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS)
-  foreach(definition ${top_dir_definitions})
-if(DEFINED result)
-  string(APPEND result " -D${definition}")
-else()
-  set(result "-D${definition}")
-endif()
-  endforeach()
-  set(LLVM_DEFINITIONS "${result}" PARENT_SCOPE)
+  set(LLVM_DEFINITIONS "${top_dir_definitions}" PARENT_SCOPE)
 endfunction()
 get_compile_definitions()
 
Index: llvm/cmake/modules/AddLLVMDefinitions.cmake
===
--- llvm/cmake/modules/AddLLVMDefinitions.cmake
+++ llvm/cmake/modules/AddLLVMDefinitions.cmake
@@ -6,12 +6,6 @@
 
 macro(add_llvm_definitions)
   # We don't want no semicolons on LLVM_DEFINITIONS:
-  foreach(arg ${ARGN})
-if(DEFINED LLVM_DEFINITIONS)
-  set(LLVM_DEFINITIONS "${LLVM_DEFINITIONS} ${arg}")
-else()
-  set(LLVM_DEFINITIONS ${arg})

[PATCH] D100896: [CMake][clang] add_clang_library's functions require default visibility

2021-04-20 Thread Jim Radford via Phabricator via cfe-commits
radford created this revision.
radford added a reviewer: arphaman.
Herald added a subscriber: mgorny.
radford requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Compiling LLVM, as a cmake sub-project that compiles with visibility
hidden, will generate a "cannot export hidden symbol" error because we
require default visibility.  Even though we export using
-Wl,-exported_symbols_list,libclang.exports, if each .cpp file is
compiled with -fvisibility=hidden, then you'll get this warning and
linking will fail. Essentially -exported_symbols_list is not strong
enough to reverse the -fvisibility=hidden.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D100896

Files:
  clang/cmake/modules/AddClang.cmake


Index: clang/cmake/modules/AddClang.cmake
===
--- clang/cmake/modules/AddClang.cmake
+++ clang/cmake/modules/AddClang.cmake
@@ -142,6 +142,7 @@
 endif()
   endforeach()
 
+  set_target_properties(${name} PROPERTIES CXX_VISIBILITY_PRESET default)
   set_target_properties(${name} PROPERTIES FOLDER "Clang libraries")
   set_clang_windows_version_resource_properties(${name})
 endmacro(add_clang_library)


Index: clang/cmake/modules/AddClang.cmake
===
--- clang/cmake/modules/AddClang.cmake
+++ clang/cmake/modules/AddClang.cmake
@@ -142,6 +142,7 @@
 endif()
   endforeach()
 
+  set_target_properties(${name} PROPERTIES CXX_VISIBILITY_PRESET default)
   set_target_properties(${name} PROPERTIES FOLDER "Clang libraries")
   set_clang_windows_version_resource_properties(${name})
 endmacro(add_clang_library)
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits