[PATCH] D147823: [clang-repl] Reduce dynamic-library.cpp test to only load shared library

2023-05-04 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 abandoned this revision.
zhuhan0 added a comment.

Superseded by https://reviews.llvm.org/D148992.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D147823

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D148992: [clang-repl] Fix dynamic library test to avoid cstdio and linker

2023-04-24 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 accepted this revision.
zhuhan0 added a comment.
This revision is now accepted and ready to land.

LGTM. Thanks!


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D148992

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D141824: [clang-repl] Add a command to load dynamic libraries

2023-04-21 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added a comment.

Hi, I have just got the time to come back to https://reviews.llvm.org/D147823, 
but I wanna check here first if you guys have any fix in flight? In addition to 
the linking issue, we also encountered the "cstdio" not found issue as 
mentioned above.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D141824

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D148262: [clang][cmake] Add options to pass in vcs repo and revision info

2023-04-17 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added a comment.

The patch failed a build bot 
 which sets 
`LLVM_APPEND_VC_REV=OFF`. Fixed with 
https://reviews.llvm.org/rGee68f612ba682ddb911c5621e63df56039ec5824.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D148262

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D148262: [clang][cmake] Add options to pass in vcs repo and revision info

2023-04-17 Thread Han Zhu via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG1f5e737fc135: [clang][cmake] Add options to pass in vcs repo 
and revision info (authored by zhuhan0).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D148262

Files:
  clang/lib/Basic/CMakeLists.txt
  llvm/cmake/modules/GenerateVersionFromVCS.cmake


Index: llvm/cmake/modules/GenerateVersionFromVCS.cmake
===
--- llvm/cmake/modules/GenerateVersionFromVCS.cmake
+++ llvm/cmake/modules/GenerateVersionFromVCS.cmake
@@ -18,10 +18,7 @@
 # Handle strange terminals
 set(ENV{TERM} "dumb")
 
-function(append_info name path)
-  if(path)
-get_source_info("${path}" revision repository)
-  endif()
+function(append_info name revision repository)
   if(revision)
 file(APPEND "${HEADER_FILE}.tmp"
   "#define ${name}_REVISION \"${revision}\"\n")
@@ -39,10 +36,15 @@
 endfunction()
 
 foreach(name IN LISTS NAMES)
-  if(NOT DEFINED ${name}_SOURCE_DIR)
+  if(${name}_VC_REPOSITORY AND ${name}_VC_REVISION)
+set(revision ${${name}_VC_REVISION})
+set(repository ${${name}_VC_REPOSITORY})
+  elseif(DEFINED ${name}_SOURCE_DIR)
+get_source_info(${${name}_SOURCE_DIR} revision repository)
+  else()
 message(FATAL_ERROR "${name}_SOURCE_DIR is not defined")
   endif()
-  append_info(${name} "${${name}_SOURCE_DIR}")
+  append_info(${name} ${revision} ${repository})
 endforeach()
 
 # Copy the file only if it has changed.
Index: clang/lib/Basic/CMakeLists.txt
===
--- clang/lib/Basic/CMakeLists.txt
+++ clang/lib/Basic/CMakeLists.txt
@@ -14,9 +14,19 @@
 if(llvm_vc AND LLVM_APPEND_VC_REV)
   set(llvm_source_dir ${LLVM_MAIN_SRC_DIR})
 endif()
+if (LLVM_VC_REPOSITORY AND LLVM_VC_REVISION)
+  set(llvm_source_dir ${LLVM_SOURCE_DIR})
+  set(llvm_vc_repository ${LLVM_VC_REPOSITORY})
+  set(llvm_vc_revision ${LLVM_VC_REVISION})
+endif()
 if(clang_vc AND LLVM_APPEND_VC_REV)
   set(clang_source_dir ${CLANG_SOURCE_DIR})
 endif()
+if (CLANG_VC_REPOSITORY AND CLANG_VC_REVISION)
+  set(clang_source_dir ${CLANG_SOURCE_DIR})
+  set(clang_vc_repository ${CLANG_VC_REPOSITORY})
+  set(clang_vc_revision ${CLANG_VC_REVISION})
+endif()
 
 # Create custom target to generate the VC revision include.
 add_custom_command(OUTPUT "${version_inc}"
@@ -24,7 +34,11 @@
   COMMAND ${CMAKE_COMMAND} "-DNAMES=\"LLVM;CLANG\""
"-DLLVM_SOURCE_DIR=${llvm_source_dir}"
"-DCLANG_SOURCE_DIR=${clang_source_dir}"
+   "-DCLANG_VC_REPOSITORY=${clang_vc_repository}"
+   "-DCLANG_VC_REVISION=${clang_vc_revision}"
"-DHEADER_FILE=${version_inc}"
+   "-DLLVM_VC_REPOSITORY=${llvm_vc_repository}"
+   "-DLLVM_VC_REVISION=${llvm_vc_revision}"
-P "${generate_vcs_version_script}")
 
 # Mark the generated header as being generated.


Index: llvm/cmake/modules/GenerateVersionFromVCS.cmake
===
--- llvm/cmake/modules/GenerateVersionFromVCS.cmake
+++ llvm/cmake/modules/GenerateVersionFromVCS.cmake
@@ -18,10 +18,7 @@
 # Handle strange terminals
 set(ENV{TERM} "dumb")
 
-function(append_info name path)
-  if(path)
-get_source_info("${path}" revision repository)
-  endif()
+function(append_info name revision repository)
   if(revision)
 file(APPEND "${HEADER_FILE}.tmp"
   "#define ${name}_REVISION \"${revision}\"\n")
@@ -39,10 +36,15 @@
 endfunction()
 
 foreach(name IN LISTS NAMES)
-  if(NOT DEFINED ${name}_SOURCE_DIR)
+  if(${name}_VC_REPOSITORY AND ${name}_VC_REVISION)
+set(revision ${${name}_VC_REVISION})
+set(repository ${${name}_VC_REPOSITORY})
+  elseif(DEFINED ${name}_SOURCE_DIR)
+get_source_info(${${name}_SOURCE_DIR} revision repository)
+  else()
 message(FATAL_ERROR "${name}_SOURCE_DIR is not defined")
   endif()
-  append_info(${name} "${${name}_SOURCE_DIR}")
+  append_info(${name} ${revision} ${repository})
 endforeach()
 
 # Copy the file only if it has changed.
Index: clang/lib/Basic/CMakeLists.txt
===
--- clang/lib/Basic/CMakeLists.txt
+++ clang/lib/Basic/CMakeLists.txt
@@ -14,9 +14,19 @@
 if(llvm_vc AND LLVM_APPEND_VC_REV)
   set(llvm_source_dir ${LLVM_MAIN_SRC_DIR})
 endif()
+if (LLVM_VC_REPOSITORY AND LLVM_VC_REVISION)
+  set(llvm_source_dir ${LLVM_SOURCE_DIR})
+  set(llvm_vc_repository ${LLVM_VC_REPOSITORY})
+  set(llvm_vc_revision ${LLVM_VC_REVISION})
+endif()
 if(clang_vc AND LLVM_APPEND_VC_REV)
   set(clang_source_dir ${CLANG_SOURCE_DIR})
 endif()
+if (CLANG_VC_REPOSITORY AND CLANG_VC_REVISION)
+  set(clang_source_dir ${CLANG_SOURCE_DIR})
+  

[PATCH] D148262: [clang][cmake] Add options to pass in vcs repo and revision info

2023-04-14 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 updated this revision to Diff 513753.
zhuhan0 added a comment.

Address comments.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D148262

Files:
  clang/lib/Basic/CMakeLists.txt
  llvm/cmake/modules/GenerateVersionFromVCS.cmake


Index: llvm/cmake/modules/GenerateVersionFromVCS.cmake
===
--- llvm/cmake/modules/GenerateVersionFromVCS.cmake
+++ llvm/cmake/modules/GenerateVersionFromVCS.cmake
@@ -18,10 +18,7 @@
 # Handle strange terminals
 set(ENV{TERM} "dumb")
 
-function(append_info name path)
-  if(path)
-get_source_info("${path}" revision repository)
-  endif()
+function(append_info name revision repository)
   if(revision)
 file(APPEND "${HEADER_FILE}.tmp"
   "#define ${name}_REVISION \"${revision}\"\n")
@@ -39,10 +36,15 @@
 endfunction()
 
 foreach(name IN LISTS NAMES)
-  if(NOT DEFINED ${name}_SOURCE_DIR)
+  if(${name}_VC_REPOSITORY AND ${name}_VC_REVISION)
+set(revision ${${name}_VC_REVISION})
+set(repository ${${name}_VC_REPOSITORY})
+  elseif(DEFINED ${name}_SOURCE_DIR)
+get_source_info(${${name}_SOURCE_DIR} revision repository)
+  else()
 message(FATAL_ERROR "${name}_SOURCE_DIR is not defined")
   endif()
-  append_info(${name} "${${name}_SOURCE_DIR}")
+  append_info(${name} ${revision} ${repository})
 endforeach()
 
 # Copy the file only if it has changed.
Index: clang/lib/Basic/CMakeLists.txt
===
--- clang/lib/Basic/CMakeLists.txt
+++ clang/lib/Basic/CMakeLists.txt
@@ -14,9 +14,19 @@
 if(llvm_vc AND LLVM_APPEND_VC_REV)
   set(llvm_source_dir ${LLVM_MAIN_SRC_DIR})
 endif()
+if (LLVM_VC_REPOSITORY AND LLVM_VC_REVISION)
+  set(llvm_source_dir ${LLVM_SOURCE_DIR})
+  set(llvm_vc_repository ${LLVM_VC_REPOSITORY})
+  set(llvm_vc_revision ${LLVM_VC_REVISION})
+endif()
 if(clang_vc AND LLVM_APPEND_VC_REV)
   set(clang_source_dir ${CLANG_SOURCE_DIR})
 endif()
+if (CLANG_VC_REPOSITORY AND CLANG_VC_REVISION)
+  set(clang_source_dir ${CLANG_SOURCE_DIR})
+  set(clang_vc_repository ${CLANG_VC_REPOSITORY})
+  set(clang_vc_revision ${CLANG_VC_REVISION})
+endif()
 
 # Create custom target to generate the VC revision include.
 add_custom_command(OUTPUT "${version_inc}"
@@ -24,7 +34,11 @@
   COMMAND ${CMAKE_COMMAND} "-DNAMES=\"LLVM;CLANG\""
"-DLLVM_SOURCE_DIR=${llvm_source_dir}"
"-DCLANG_SOURCE_DIR=${clang_source_dir}"
+   "-DCLANG_VC_REPOSITORY=${clang_vc_repository}"
+   "-DCLANG_VC_REVISION=${clang_vc_revision}"
"-DHEADER_FILE=${version_inc}"
+   "-DLLVM_VC_REPOSITORY=${llvm_vc_repository}"
+   "-DLLVM_VC_REVISION=${llvm_vc_revision}"
-P "${generate_vcs_version_script}")
 
 # Mark the generated header as being generated.


Index: llvm/cmake/modules/GenerateVersionFromVCS.cmake
===
--- llvm/cmake/modules/GenerateVersionFromVCS.cmake
+++ llvm/cmake/modules/GenerateVersionFromVCS.cmake
@@ -18,10 +18,7 @@
 # Handle strange terminals
 set(ENV{TERM} "dumb")
 
-function(append_info name path)
-  if(path)
-get_source_info("${path}" revision repository)
-  endif()
+function(append_info name revision repository)
   if(revision)
 file(APPEND "${HEADER_FILE}.tmp"
   "#define ${name}_REVISION \"${revision}\"\n")
@@ -39,10 +36,15 @@
 endfunction()
 
 foreach(name IN LISTS NAMES)
-  if(NOT DEFINED ${name}_SOURCE_DIR)
+  if(${name}_VC_REPOSITORY AND ${name}_VC_REVISION)
+set(revision ${${name}_VC_REVISION})
+set(repository ${${name}_VC_REPOSITORY})
+  elseif(DEFINED ${name}_SOURCE_DIR)
+get_source_info(${${name}_SOURCE_DIR} revision repository)
+  else()
 message(FATAL_ERROR "${name}_SOURCE_DIR is not defined")
   endif()
-  append_info(${name} "${${name}_SOURCE_DIR}")
+  append_info(${name} ${revision} ${repository})
 endforeach()
 
 # Copy the file only if it has changed.
Index: clang/lib/Basic/CMakeLists.txt
===
--- clang/lib/Basic/CMakeLists.txt
+++ clang/lib/Basic/CMakeLists.txt
@@ -14,9 +14,19 @@
 if(llvm_vc AND LLVM_APPEND_VC_REV)
   set(llvm_source_dir ${LLVM_MAIN_SRC_DIR})
 endif()
+if (LLVM_VC_REPOSITORY AND LLVM_VC_REVISION)
+  set(llvm_source_dir ${LLVM_SOURCE_DIR})
+  set(llvm_vc_repository ${LLVM_VC_REPOSITORY})
+  set(llvm_vc_revision ${LLVM_VC_REVISION})
+endif()
 if(clang_vc AND LLVM_APPEND_VC_REV)
   set(clang_source_dir ${CLANG_SOURCE_DIR})
 endif()
+if (CLANG_VC_REPOSITORY AND CLANG_VC_REVISION)
+  set(clang_source_dir ${CLANG_SOURCE_DIR})
+  set(clang_vc_repository ${CLANG_VC_REPOSITORY})
+  set(clang_vc_revision ${CLANG_VC_REVISION})
+endif()
 
 # Create custom target to generate the VC revision include.

[PATCH] D148262: [clang][cmake] Add options to pass in vcs repo and revision info

2023-04-14 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added inline comments.



Comment at: llvm/cmake/modules/GenerateVersionFromVCS.cmake:50
+endif()
+append_info(${name} "${${name}_SOURCE_DIR}" "" "")
   endif()

drodriguez wrote:
> I would recommend changing the flow a little bit:
> 
> - Remove `path` argument from `append_info`. Leave `name`, `revision`, and 
> `repository`.
> - Remove the `if(path) get_source_info() endif()` part.
> - Change this `foreach` to the following:
> 
> ```
> foreach(name IN LISTS NAMES)
>   if(${name}_VC_REPOSITORY AND ${name}_VC_REVISION)
>set(revision ${${name}_VC_REVISION})
>set(repository ${${name}_VC_REPOSITORY})
>   elseif(DEFINED ${name}_SOURCE_DIR)
> get_source_info(${${name}_SOURCE_DIR} revision repository)
>   else()
> message(FATAL_ERROR "${name}_SOURCE_DIR is not defined")
>   endif()
>   append_info(${name} ${revision} ${repository})
> endforeach()
> ```
Looks much better!


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D148262

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D148262: [clang][cmake] Add options to pass in vcs repo and revision info

2023-04-14 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added inline comments.



Comment at: llvm/cmake/modules/GenerateVersionFromVCS.cmake:23-25
+if(path)
+  get_source_info("${path}" revision repository)
+endif()

drodriguez wrote:
> Nit: Looks like tabs were added?
These are not tabs but spaces. The arrow just means it's further indented.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D148262

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D148262: [clang][cmake] Add options to pass in vcs repo and revision info

2023-04-13 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 created this revision.
Herald added subscribers: ekilmer, hoy, wenlei.
Herald added a project: All.
zhuhan0 requested review of this revision.
Herald added projects: clang, LLVM.
Herald added subscribers: llvm-commits, cfe-commits.

Clang may be built in an environment where Git is not available. In our case,
Clang is part of a larger monorepo which is not Git-based, and
GenerateVersionFromVCS was not able to get source info.

Provide options to pass in repo and revision info from cmake.

  cmake \
-DCLANG_VC_REPOSITORY=abc://repo.url.com \
-DCLANG_VC_REVISION=abcd1234 \
...

This would allow us to prepare the source info beforehand and pass it to the
clang binary.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D148262

Files:
  clang/lib/Basic/CMakeLists.txt
  llvm/cmake/modules/GenerateVersionFromVCS.cmake


Index: llvm/cmake/modules/GenerateVersionFromVCS.cmake
===
--- llvm/cmake/modules/GenerateVersionFromVCS.cmake
+++ llvm/cmake/modules/GenerateVersionFromVCS.cmake
@@ -18,9 +18,11 @@
 # Handle strange terminals
 set(ENV{TERM} "dumb")
 
-function(append_info name path)
-  if(path)
-get_source_info("${path}" revision repository)
+function(append_info name path repository revision)
+  if (NOT repository AND NOT revision)
+if(path)
+  get_source_info("${path}" revision repository)
+endif()
   endif()
   if(revision)
 file(APPEND "${HEADER_FILE}.tmp"
@@ -39,10 +41,14 @@
 endfunction()
 
 foreach(name IN LISTS NAMES)
-  if(NOT DEFINED ${name}_SOURCE_DIR)
-message(FATAL_ERROR "${name}_SOURCE_DIR is not defined")
+  if(${name}_VC_REPOSITORY AND ${name}_VC_REVISION)
+append_info(${name} "" "${${name}_VC_REPOSITORY}" "${${name}_VC_REVISION}")
+  else()
+if(NOT DEFINED ${name}_SOURCE_DIR)
+  message(FATAL_ERROR "${name}_SOURCE_DIR is not defined")
+endif()
+append_info(${name} "${${name}_SOURCE_DIR}" "" "")
   endif()
-  append_info(${name} "${${name}_SOURCE_DIR}")
 endforeach()
 
 # Copy the file only if it has changed.
Index: clang/lib/Basic/CMakeLists.txt
===
--- clang/lib/Basic/CMakeLists.txt
+++ clang/lib/Basic/CMakeLists.txt
@@ -17,6 +17,11 @@
 if(clang_vc AND LLVM_APPEND_VC_REV)
   set(clang_source_dir ${CLANG_SOURCE_DIR})
 endif()
+if (CLANG_VC_REPOSITORY AND CLANG_VC_REVISION)
+  set(clang_source_dir ${CLANG_SOURCE_DIR})
+  set(clang_vc_repository ${CLANG_VC_REPOSITORY})
+  set(clang_vc_revision ${CLANG_VC_REVISION})
+endif()
 
 # Create custom target to generate the VC revision include.
 add_custom_command(OUTPUT "${version_inc}"
@@ -24,6 +29,8 @@
   COMMAND ${CMAKE_COMMAND} "-DNAMES=\"LLVM;CLANG\""
"-DLLVM_SOURCE_DIR=${llvm_source_dir}"
"-DCLANG_SOURCE_DIR=${clang_source_dir}"
+   "-DCLANG_VC_REPOSITORY=${clang_vc_repository}"
+   "-DCLANG_VC_REVISION=${clang_vc_revision}"
"-DHEADER_FILE=${version_inc}"
-P "${generate_vcs_version_script}")
 


Index: llvm/cmake/modules/GenerateVersionFromVCS.cmake
===
--- llvm/cmake/modules/GenerateVersionFromVCS.cmake
+++ llvm/cmake/modules/GenerateVersionFromVCS.cmake
@@ -18,9 +18,11 @@
 # Handle strange terminals
 set(ENV{TERM} "dumb")
 
-function(append_info name path)
-  if(path)
-get_source_info("${path}" revision repository)
+function(append_info name path repository revision)
+  if (NOT repository AND NOT revision)
+if(path)
+  get_source_info("${path}" revision repository)
+endif()
   endif()
   if(revision)
 file(APPEND "${HEADER_FILE}.tmp"
@@ -39,10 +41,14 @@
 endfunction()
 
 foreach(name IN LISTS NAMES)
-  if(NOT DEFINED ${name}_SOURCE_DIR)
-message(FATAL_ERROR "${name}_SOURCE_DIR is not defined")
+  if(${name}_VC_REPOSITORY AND ${name}_VC_REVISION)
+append_info(${name} "" "${${name}_VC_REPOSITORY}" "${${name}_VC_REVISION}")
+  else()
+if(NOT DEFINED ${name}_SOURCE_DIR)
+  message(FATAL_ERROR "${name}_SOURCE_DIR is not defined")
+endif()
+append_info(${name} "${${name}_SOURCE_DIR}" "" "")
   endif()
-  append_info(${name} "${${name}_SOURCE_DIR}")
 endforeach()
 
 # Copy the file only if it has changed.
Index: clang/lib/Basic/CMakeLists.txt
===
--- clang/lib/Basic/CMakeLists.txt
+++ clang/lib/Basic/CMakeLists.txt
@@ -17,6 +17,11 @@
 if(clang_vc AND LLVM_APPEND_VC_REV)
   set(clang_source_dir ${CLANG_SOURCE_DIR})
 endif()
+if (CLANG_VC_REPOSITORY AND CLANG_VC_REVISION)
+  set(clang_source_dir ${CLANG_SOURCE_DIR})
+  set(clang_vc_repository ${CLANG_VC_REPOSITORY})
+  set(clang_vc_revision ${CLANG_VC_REVISION})
+endif()
 
 # Create custom target to generate the VC revision include.
 add_custom_command(OUTPUT "${version_inc}"

[PATCH] D147823: [clang-repl] Reduce dynamic-library.cpp test to only load shared library

2023-04-10 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added a comment.

This doesn't work. The test would fail with

  error: libdynamic-library-test.so: ELF load command address/offset not 
properly aligned

I first used obj2yaml to convert `libdynamic-library-test.so` to YAML, and then 
the test uses yaml2obj to convert it back. But it looks like yaml2obj could not 
generate a loadable shared library. The input library's first load offset 
starts at 0x000:

  LOAD off0x vaddr 0x paddr 
0x align 2**12
   filesz 0x04f4 memsz 0x04f4 flags r--

It contains a padding section before the first real section .dynsym:

  Sections:
  Idx Name  Size VMA  Type
0    
1 .dynsym   00a8 0238

But in the output library of yaml2obj, the first load offset does not start at 
0x000 but with the start of .dynsym 0x238

  LOAD off0x0238 vaddr 0x paddr 
0x align 2**12
   filesz 0x02bc memsz 0x02bc flags r--

It's not aligned by 0x1000 and therefore it failed to load.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D147823

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D147823: [clang-repl] Reduce dynamic-library.cpp test to only load shared library

2023-04-10 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 updated this revision to Diff 512223.
zhuhan0 added a comment.

Remove .so file.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D147823

Files:
  clang/test/Interpreter/Inputs/dynamic-library-test.cpp
  clang/test/Interpreter/Inputs/libdynamic-library-test.yaml
  clang/test/Interpreter/dynamic-library.cpp

Index: clang/test/Interpreter/dynamic-library.cpp
===
--- clang/test/Interpreter/dynamic-library.cpp
+++ clang/test/Interpreter/dynamic-library.cpp
@@ -1,9 +1,20 @@
 // REQUIRES: host-supports-jit, system-linux
 // UNSUPPORTED: target={{.*-(ps4|ps5)}}
 
-// RUN: %clang -xc++ -o %T/libdynamic-library-test.so -fPIC -shared -DLIBRARY %S/Inputs/dynamic-library-test.cpp
+// RUN: yaml2obj %S/Inputs/libdynamic-library-test.yaml &> %T/libdynamic-library-test.so
 // RUN: cat %s | env LD_LIBRARY_PATH=%T:$LD_LIBRARY_PATH clang-repl | FileCheck %s
 
+// Input source dynamic-library-test.cpp:
+//
+// int ultimate_answer = 0;
+// int calculate_answer() {
+//   ultimate_answer = 42;
+//   return 5;
+// }
+//
+// Compile with:
+// clang -xc++ -o libdynamic-library-test.so -fPIC -fuse-ld=lld -shared dynamic-library-test.cpp
+
 #include 
 
 extern int ultimate_answer;
Index: clang/test/Interpreter/Inputs/libdynamic-library-test.yaml
===
--- /dev/null
+++ clang/test/Interpreter/Inputs/libdynamic-library-test.yaml
@@ -0,0 +1,433 @@
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:ELFDATA2LSB
+  Type:ET_DYN
+  Machine: EM_X86_64
+ProgramHeaders:
+  - Type:PT_PHDR
+Flags:   [ PF_R ]
+VAddr:   0x40
+Align:   0x8
+  - Type:PT_LOAD
+Flags:   [ PF_R ]
+FirstSec:.dynsym
+LastSec: .eh_frame
+Align:   0x1000
+  - Type:PT_LOAD
+Flags:   [ PF_X, PF_R ]
+FirstSec:.text
+LastSec: .plt
+VAddr:   0x1500
+Align:   0x1000
+  - Type:PT_LOAD
+Flags:   [ PF_W, PF_R ]
+FirstSec:.data.rel.ro
+LastSec: .got
+VAddr:   0x2630
+Align:   0x1000
+  - Type:PT_LOAD
+Flags:   [ PF_W, PF_R ]
+FirstSec:.data
+LastSec: .bss
+VAddr:   0x37F0
+Align:   0x1000
+  - Type:PT_DYNAMIC
+Flags:   [ PF_W, PF_R ]
+FirstSec:.dynamic
+LastSec: .dynamic
+VAddr:   0x2648
+Align:   0x8
+  - Type:PT_GNU_RELRO
+Flags:   [ PF_R ]
+FirstSec:.data.rel.ro
+LastSec: .got
+VAddr:   0x2630
+  - Type:PT_GNU_EH_FRAME
+Flags:   [ PF_R ]
+FirstSec:.eh_frame_hdr
+LastSec: .eh_frame_hdr
+VAddr:   0x4A0
+Align:   0x4
+  - Type:PT_GNU_STACK
+Flags:   [ PF_W, PF_R ]
+Align:   0x0
+Sections:
+  - Name:.dynsym
+Type:SHT_DYNSYM
+Flags:   [ SHF_ALLOC ]
+Address: 0x238
+Link:.dynstr
+AddressAlign:0x8
+  - Name:.gnu.version
+Type:SHT_GNU_versym
+Flags:   [ SHF_ALLOC ]
+Address: 0x2E0
+Link:.dynsym
+AddressAlign:0x2
+Entries: [ 0, 1, 1, 1, 2, 1, 1 ]
+  - Name:.gnu.version_r
+Type:SHT_GNU_verneed
+Flags:   [ SHF_ALLOC ]
+Address: 0x2F0
+Link:.dynstr
+AddressAlign:0x4
+Dependencies:
+  - Version: 1
+File:libc.so.6
+Entries:
+  - Name:GLIBC_2.2.5
+Hash:157882997
+Flags:   0
+Other:   2
+  - Name:.gnu.hash
+Type:SHT_GNU_HASH
+Flags:   [ SHF_ALLOC ]
+Address: 0x310
+Link:.dynsym
+AddressAlign:0x8
+Header:
+  SymNdx:  0x5
+  Shift2:  0x1A
+BloomFilter: [ 0x20001000108 ]
+HashBuckets: [ 0x5 ]
+HashValues:  [ 0xA1434758, 0xCC33179 ]
+  - Name:.dynstr
+Type:SHT_STRTAB
+Flags:   [ SHF_ALLOC ]
+Address: 0x334
+AddressAlign:0x1
+  - Name:.rela.dyn
+Type:SHT_RELA
+Flags:   [ SHF_ALLOC ]
+Address: 0x3C8
+Link:.dynsym
+AddressAlign:0x8
+Relocations:
+  - Offset:  0x2630
+Type:R_X86_64_RELATIVE
+Addend:  9776
+  - Offset:  0x2638
+Type:R_X86_64_RELATIVE
+Addend:  5488
+  

[PATCH] D147823: [clang-repl] Reduce dynamic-library.cpp test to only load shared library

2023-04-10 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 updated this revision to Diff 51.
zhuhan0 added a comment.

Try with yaml2obj.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D147823

Files:
  clang/test/Interpreter/Inputs/dynamic-library-test.cpp
  clang/test/Interpreter/Inputs/libdynamic-library-test.so
  clang/test/Interpreter/Inputs/libdynamic-library-test.yaml
  clang/test/Interpreter/dynamic-library.cpp

Index: clang/test/Interpreter/dynamic-library.cpp
===
--- clang/test/Interpreter/dynamic-library.cpp
+++ clang/test/Interpreter/dynamic-library.cpp
@@ -1,9 +1,20 @@
 // REQUIRES: host-supports-jit, system-linux
 // UNSUPPORTED: target={{.*-(ps4|ps5)}}
 
-// RUN: %clang -xc++ -o %T/libdynamic-library-test.so -fPIC -shared -DLIBRARY %S/Inputs/dynamic-library-test.cpp
+// RUN: yaml2obj %S/Inputs/libdynamic-library-test.yaml &> %T/libdynamic-library-test.so
 // RUN: cat %s | env LD_LIBRARY_PATH=%T:$LD_LIBRARY_PATH clang-repl | FileCheck %s
 
+// Input source dynamic-library-test.cpp:
+//
+// int ultimate_answer = 0;
+// int calculate_answer() {
+//   ultimate_answer = 42;
+//   return 5;
+// }
+//
+// Compile with:
+// clang -xc++ -o libdynamic-library-test.so -fPIC -fuse-ld=lld -shared dynamic-library-test.cpp
+
 #include 
 
 extern int ultimate_answer;
Index: clang/test/Interpreter/Inputs/libdynamic-library-test.yaml
===
--- /dev/null
+++ clang/test/Interpreter/Inputs/libdynamic-library-test.yaml
@@ -0,0 +1,433 @@
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:ELFDATA2LSB
+  Type:ET_DYN
+  Machine: EM_X86_64
+ProgramHeaders:
+  - Type:PT_PHDR
+Flags:   [ PF_R ]
+VAddr:   0x40
+Align:   0x8
+  - Type:PT_LOAD
+Flags:   [ PF_R ]
+FirstSec:.dynsym
+LastSec: .eh_frame
+Align:   0x1000
+  - Type:PT_LOAD
+Flags:   [ PF_X, PF_R ]
+FirstSec:.text
+LastSec: .plt
+VAddr:   0x1500
+Align:   0x1000
+  - Type:PT_LOAD
+Flags:   [ PF_W, PF_R ]
+FirstSec:.data.rel.ro
+LastSec: .got
+VAddr:   0x2630
+Align:   0x1000
+  - Type:PT_LOAD
+Flags:   [ PF_W, PF_R ]
+FirstSec:.data
+LastSec: .bss
+VAddr:   0x37F0
+Align:   0x1000
+  - Type:PT_DYNAMIC
+Flags:   [ PF_W, PF_R ]
+FirstSec:.dynamic
+LastSec: .dynamic
+VAddr:   0x2648
+Align:   0x8
+  - Type:PT_GNU_RELRO
+Flags:   [ PF_R ]
+FirstSec:.data.rel.ro
+LastSec: .got
+VAddr:   0x2630
+  - Type:PT_GNU_EH_FRAME
+Flags:   [ PF_R ]
+FirstSec:.eh_frame_hdr
+LastSec: .eh_frame_hdr
+VAddr:   0x4A0
+Align:   0x4
+  - Type:PT_GNU_STACK
+Flags:   [ PF_W, PF_R ]
+Align:   0x0
+Sections:
+  - Name:.dynsym
+Type:SHT_DYNSYM
+Flags:   [ SHF_ALLOC ]
+Address: 0x238
+Link:.dynstr
+AddressAlign:0x8
+  - Name:.gnu.version
+Type:SHT_GNU_versym
+Flags:   [ SHF_ALLOC ]
+Address: 0x2E0
+Link:.dynsym
+AddressAlign:0x2
+Entries: [ 0, 1, 1, 1, 2, 1, 1 ]
+  - Name:.gnu.version_r
+Type:SHT_GNU_verneed
+Flags:   [ SHF_ALLOC ]
+Address: 0x2F0
+Link:.dynstr
+AddressAlign:0x4
+Dependencies:
+  - Version: 1
+File:libc.so.6
+Entries:
+  - Name:GLIBC_2.2.5
+Hash:157882997
+Flags:   0
+Other:   2
+  - Name:.gnu.hash
+Type:SHT_GNU_HASH
+Flags:   [ SHF_ALLOC ]
+Address: 0x310
+Link:.dynsym
+AddressAlign:0x8
+Header:
+  SymNdx:  0x5
+  Shift2:  0x1A
+BloomFilter: [ 0x20001000108 ]
+HashBuckets: [ 0x5 ]
+HashValues:  [ 0xA1434758, 0xCC33179 ]
+  - Name:.dynstr
+Type:SHT_STRTAB
+Flags:   [ SHF_ALLOC ]
+Address: 0x334
+AddressAlign:0x1
+  - Name:.rela.dyn
+Type:SHT_RELA
+Flags:   [ SHF_ALLOC ]
+Address: 0x3C8
+Link:.dynsym
+AddressAlign:0x8
+Relocations:
+  - Offset:  0x2630
+Type:R_X86_64_RELATIVE
+Addend:  9776
+  - Offset:  0x2638
+Type:

[PATCH] D141824: [clang-repl] Add a command to load dynamic libraries

2023-04-07 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added a comment.

I've put up https://reviews.llvm.org/D147823.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D141824

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D147823: [clang-repl] Reduce dynamic-library.cpp test to only load shared library

2023-04-07 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 created this revision.
Herald added subscribers: hoy, wenlei.
Herald added a project: All.
zhuhan0 requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Follow-up to the discussion in https://reviews.llvm.org/D141824. Because the
purpose of the test is to test loading a shared library, and clang tests
traditionally have not invoked actual linking, reduce this test case to loading
a shared library only.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D147823

Files:
  clang/test/Interpreter/Inputs/dynamic-library-test.cpp
  clang/test/Interpreter/Inputs/libdynamic-library-test.so
  clang/test/Interpreter/dynamic-library.cpp


Index: clang/test/Interpreter/dynamic-library.cpp
===
--- clang/test/Interpreter/dynamic-library.cpp
+++ clang/test/Interpreter/dynamic-library.cpp
@@ -1,8 +1,18 @@
 // REQUIRES: host-supports-jit, system-linux
 // UNSUPPORTED: target={{.*-(ps4|ps5)}}
 
-// RUN: %clang -xc++ -o %T/libdynamic-library-test.so -fPIC -shared -DLIBRARY 
%S/Inputs/dynamic-library-test.cpp
-// RUN: cat %s | env LD_LIBRARY_PATH=%T:$LD_LIBRARY_PATH clang-repl | 
FileCheck %s
+// RUN: cat %s | env LD_LIBRARY_PATH=%S/Inputs:$LD_LIBRARY_PATH clang-repl | 
FileCheck %s
+
+// Input source dynamic-library-test.cpp:
+//
+// int ultimate_answer = 0;
+// int calculate_answer() {
+//   ultimate_answer = 42;
+//   return 5;
+// }
+//
+// Compile with:
+// clang -xc++ -o libdynamic-library-test.so -fPIC -shared -DLIBRARY 
dynamic-library-test.cpp
 
 #include 
 
Index: clang/test/Interpreter/Inputs/dynamic-library-test.cpp
===
--- clang/test/Interpreter/Inputs/dynamic-library-test.cpp
+++ /dev/null
@@ -1,6 +0,0 @@
-int ultimate_answer = 0;
-
-int calculate_answer() {
-  ultimate_answer = 42;
-  return 5;
-}


Index: clang/test/Interpreter/dynamic-library.cpp
===
--- clang/test/Interpreter/dynamic-library.cpp
+++ clang/test/Interpreter/dynamic-library.cpp
@@ -1,8 +1,18 @@
 // REQUIRES: host-supports-jit, system-linux
 // UNSUPPORTED: target={{.*-(ps4|ps5)}}
 
-// RUN: %clang -xc++ -o %T/libdynamic-library-test.so -fPIC -shared -DLIBRARY %S/Inputs/dynamic-library-test.cpp
-// RUN: cat %s | env LD_LIBRARY_PATH=%T:$LD_LIBRARY_PATH clang-repl | FileCheck %s
+// RUN: cat %s | env LD_LIBRARY_PATH=%S/Inputs:$LD_LIBRARY_PATH clang-repl | FileCheck %s
+
+// Input source dynamic-library-test.cpp:
+//
+// int ultimate_answer = 0;
+// int calculate_answer() {
+//   ultimate_answer = 42;
+//   return 5;
+// }
+//
+// Compile with:
+// clang -xc++ -o libdynamic-library-test.so -fPIC -shared -DLIBRARY dynamic-library-test.cpp
 
 #include 
 
Index: clang/test/Interpreter/Inputs/dynamic-library-test.cpp
===
--- clang/test/Interpreter/Inputs/dynamic-library-test.cpp
+++ /dev/null
@@ -1,6 +0,0 @@
-int ultimate_answer = 0;
-
-int calculate_answer() {
-  ultimate_answer = 42;
-  return 5;
-}
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D141824: [clang-repl] Add a command to load dynamic libraries

2023-04-06 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added a comment.

In D141824#4250011 , @sgraenitz wrote:

> In D141824#4247891 , @zhuhan0 wrote:
>
>> This seems to be the first clang test that involves actual linking.
>
> Interesting, I think we all didn't have this on our radars.
>
>> If the intention is to test loading a dynamic library, could you commit the 
>> library in the Inputs directory instead of building it from source? cc 
>> @ayermolo
>
> Is that something other tests do? Otherwise, I am not sure it's a practical 
> solution.

Yes. You can search for .so files under various /test directories. See this 

 and this 

 as some examples. Admittedly you lose some readability if you replace the cpp 
source input with a compiled library, but you can simply add the source cpp as 
comments in the test file. After all if the intention is to test loading a 
shared library, I think it's better to reduce it to just doing that, so you 
avoid any flakiness that might come from the compilation.

> We could also consider another requirement like `host-supports-linking` for 
> the test. What do you think?

I don't think this will work. Our platform supports linking. It's just the C 
startup/finish libraries are at a different path. It might be overly 
complicated to plumb that down to the test through cmake and llvm-lit.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D141824

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D141824: [clang-repl] Add a command to load dynamic libraries

2023-04-06 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added subscribers: ayermolo, zhuhan0.
zhuhan0 added a comment.

Hi @argentite, we build llvm in a custom distro which is missing some C startup 
code, and this fails with errors like:

  /abc/bin/ld: cannot find crti.o: No such file or directory
  /abc/bin/ld: cannot find crtbeginS.o: No such file or directory
  /abc/bin/ld: cannot find -lgcc
  /abc/bin/ld: cannot find -lgcc_s
  /abc/bin/ld: cannot find -lc
  /abc/bin/ld: cannot find -lgcc
  /abc/bin/ld: cannot find -lgcc_s
  /abc/bin/ld: cannot find crtendS.o: No such file or directory
  /abc/bin/ld: cannot find crtn.o: No such file or directory

This seems to be the first clang test that involves actual linking. If the 
intention is to test loading a dynamic library, could you commit the library in 
the Inputs directory instead of building it from source?
cc @ayermolo


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D141824

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D115844: [ubsan] Using metadata instead of prologue data for function sanitizer

2022-02-02 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added a comment.

I verified this patch together with https://reviews.llvm.org/D116130 fix the 
issue https://github.com/llvm/llvm-project/issues/49689. I'm not an expert in 
this area. Could someone review this patch so we can move forward with the fix?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D115844

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D81176: [HIP] Add default header and include path

2020-06-23 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added a comment.

In D81176#2106382 , @yaxunl wrote:

> In D81176#2105944 , @zhuhan0 wrote:
>
> > This broke a test `clang/test/Tooling/clang-check-offload.cpp` for a 
> > critical Linux distro at Facebook. With this change, the test adds a 
> > `-include __clang_hip_runtime_wrapper` argument. The wrapper includes some 
> > standard c++ headers, but our distro don't have those headers in the 
> > default include paths, thus causing a break.
> >
> > I notice this behavior doesn't happen for CUDA tests, which also rely on a 
> > similar `__clang_cuda_runtime_wrapper`. I think what's causing the 
> > difference is the different handling of `nogpuinc/nogpulib` option. My 
> > knowledge on this area is limited, so correct me if I'm wrong. CUDA seems 
> > to respect `nogpuinc` and doesn't include its wrapper if the flag is 
> > provided: 
> > https://github.com/llvm/llvm-project/blob/master/clang/lib/Driver/ToolChains/Cuda.cpp#L255.
> >  But based on this change, HIP does things differently: 
> > https://github.com/llvm/llvm-project/blob/master/clang/lib/Driver/ToolChains/AMDGPU.cpp#L226.
> >
> > If I modify `RocmInstallationDetector::AddHIPIncludeArgs` to also respect 
> > `nogpuinc/nogpulib`, the test will pass for us. Is it a mistake for HIP to 
> > always include the wrapper file? Could you provide a fix for this issue? 
> > Thanks!
>
>
> Thanks for investigating the issue. It makes sense to respect nogpuinc and 
> nogpulib. fixed by 2580635bd2f3c0527353e4d7823326cd9f92ff7c 
> 


It works! Thanks for the quick fix.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81176



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D81176: [HIP] Add default header and include path

2020-06-22 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added a comment.

This broke a test `clang/test/Tooling/clang-check-offload.cpp` for a critical 
Linux distro at Facebook. With this change, the test adds a `-include 
__clang_hip_runtime_wrapper` argument. The wrapper includes some standard c++ 
headers, but our distro don't have those headers in the default include paths, 
thus causing a break.

I notice this behavior doesn't happen for CUDA tests, which also rely on a 
similar `__clang_cuda_runtime_wrapper`. I think what's causing the difference 
is the different handling of `nogpuinc/nogpulib` option. My knowledge on this 
area is limited, so correct me if I'm wrong. CUDA seems to respect `nogpuinc` 
and doesn't include its wrapper if the flag is provided: 
https://github.com/llvm/llvm-project/blob/master/clang/lib/Driver/ToolChains/Cuda.cpp#L255.
 But based on this change, HIP does things differently: 
https://github.com/llvm/llvm-project/blob/master/clang/lib/Driver/ToolChains/AMDGPU.cpp#L226.

If I modify `RocmInstallationDetector::AddHIPIncludeArgs` to also respect 
`nogpuinc/nogpulib`, the test will pass for us. Is it a mistake for HIP to 
always include the wrapper file? Could you provide a fix for this issue? Thanks!


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81176



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D79059: Fix and re-submit D78534 - [libclang] Install both libclang.a and libclang.so when LIBCLANG_BUILD_STATIC=ON

2020-05-06 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added a comment.

@smeenai Yes please. Thanks!


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D79059



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D79059: Fix and re-submit D78534 - [libclang] Install both libclang.a and libclang.so when LIBCLANG_BUILD_STATIC=ON

2020-05-06 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 updated this revision to Diff 262506.
zhuhan0 added a comment.

Address comment


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D79059

Files:
  clang/cmake/modules/AddClang.cmake

Index: clang/cmake/modules/AddClang.cmake
===
--- clang/cmake/modules/AddClang.cmake
+++ clang/cmake/modules/AddClang.cmake
@@ -45,7 +45,7 @@
 
 macro(add_clang_library name)
   cmake_parse_arguments(ARG
-"SHARED;INSTALL_WITH_TOOLCHAIN"
+"SHARED;STATIC;INSTALL_WITH_TOOLCHAIN"
 ""
 "ADDITIONAL_HEADERS"
 ${ARGN})
@@ -81,7 +81,10 @@
   ${ARG_ADDITIONAL_HEADERS} # It may contain unparsed unknown args.
   )
   endif()
-  if(ARG_SHARED)
+
+  if(ARG_SHARED AND ARG_STATIC)
+set(LIBTYPE SHARED STATIC)
+  elseif(ARG_SHARED)
 set(LIBTYPE SHARED)
   else()
 # llvm_add_library ignores BUILD_SHARED_LIBS if STATIC is explicitly set,
@@ -99,39 +102,46 @@
   endif()
   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 ARG_INSTALL_WITH_TOOLCHAIN)
-  set(export_to_clangtargets)
-  if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  "clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  NOT LLVM_DISTRIBUTION_COMPONENTS)
-set(export_to_clangtargets EXPORT ClangTargets)
-set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
-  endif()
-
-  install(TARGETS ${name}
-COMPONENT ${name}
-${export_to_clangtargets}
-LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-RUNTIME DESTINATION bin)
-
-  if (NOT LLVM_ENABLE_IDE)
-add_llvm_install_targets(install-${name}
- DEPENDS ${name}
- COMPONENT ${name})
-  endif()
-
-  set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${name})
-endif()
-set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name})
-  else()
-# Add empty "phony" target
-add_custom_target(${name})
+  set(libs ${name})
+  if(ARG_SHARED AND ARG_STATIC)
+list(APPEND libs ${name}_static)
   endif()
 
+  foreach(lib ${libs})
+if(TARGET ${lib})
+  target_link_libraries(${lib} INTERFACE ${LLVM_COMMON_LIBS})
+
+  if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
+set(export_to_clangtargets)
+if(${lib} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+"clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+NOT LLVM_DISTRIBUTION_COMPONENTS)
+  set(export_to_clangtargets EXPORT ClangTargets)
+  set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
+endif()
+
+install(TARGETS ${lib}
+  COMPONENT ${lib}
+  ${export_to_clangtargets}
+  LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  RUNTIME DESTINATION bin)
+
+if (NOT LLVM_ENABLE_IDE)
+  add_llvm_install_targets(install-${lib}
+   DEPENDS ${lib}
+   COMPONENT ${lib})
+endif()
+
+set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${lib})
+  endif()
+  set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${lib})
+else()
+  # Add empty "phony" target
+  add_custom_target(${lib})
+endif()
+  endforeach()
+
   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


[PATCH] D79059: Fix and re-submit D78534 - [libclang] Install both libclang.a and libclang.so when LIBCLANG_BUILD_STATIC=ON

2020-05-04 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 updated this revision to Diff 261866.
zhuhan0 added a comment.

Rebase


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D79059

Files:
  clang/cmake/modules/AddClang.cmake

Index: clang/cmake/modules/AddClang.cmake
===
--- clang/cmake/modules/AddClang.cmake
+++ clang/cmake/modules/AddClang.cmake
@@ -45,7 +45,7 @@
 
 macro(add_clang_library name)
   cmake_parse_arguments(ARG
-"SHARED;INSTALL_WITH_TOOLCHAIN"
+"SHARED;STATIC;INSTALL_WITH_TOOLCHAIN"
 ""
 "ADDITIONAL_HEADERS"
 ${ARGN})
@@ -81,7 +81,10 @@
   ${ARG_ADDITIONAL_HEADERS} # It may contain unparsed unknown args.
   )
   endif()
-  if(ARG_SHARED)
+
+  if(ARG_SHARED AND ARG_STATIC)
+set(LIBTYPE SHARED STATIC)
+  elseif(ARG_SHARED)
 set(LIBTYPE SHARED)
   else()
 # llvm_add_library ignores BUILD_SHARED_LIBS if STATIC is explicitly set,
@@ -99,39 +102,46 @@
   endif()
   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 ARG_INSTALL_WITH_TOOLCHAIN)
-  set(export_to_clangtargets)
-  if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  "clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  NOT LLVM_DISTRIBUTION_COMPONENTS)
-set(export_to_clangtargets EXPORT ClangTargets)
-set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
-  endif()
-
-  install(TARGETS ${name}
-COMPONENT ${name}
-${export_to_clangtargets}
-LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-RUNTIME DESTINATION bin)
-
-  if (NOT LLVM_ENABLE_IDE)
-add_llvm_install_targets(install-${name}
- DEPENDS ${name}
- COMPONENT ${name})
-  endif()
-
-  set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${name})
-endif()
-set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name})
-  else()
-# Add empty "phony" target
-add_custom_target(${name})
+  set(libs ${name})
+  if(ARG_SHARED AND ARG_STATIC)
+set(libs ${name} ${name}_static)
   endif()
 
+  foreach(lib ${libs})
+if(TARGET ${lib})
+  target_link_libraries(${lib} INTERFACE ${LLVM_COMMON_LIBS})
+
+  if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
+set(export_to_clangtargets)
+if(${lib} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+"clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+NOT LLVM_DISTRIBUTION_COMPONENTS)
+  set(export_to_clangtargets EXPORT ClangTargets)
+  set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
+endif()
+
+install(TARGETS ${lib}
+  COMPONENT ${lib}
+  ${export_to_clangtargets}
+  LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  RUNTIME DESTINATION bin)
+
+if (NOT LLVM_ENABLE_IDE)
+  add_llvm_install_targets(install-${lib}
+   DEPENDS ${lib}
+   COMPONENT ${lib})
+endif()
+
+set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${lib})
+  endif()
+  set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${lib})
+else()
+  # Add empty "phony" target
+  add_custom_target(${lib})
+endif()
+  endforeach()
+
   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


[PATCH] D78534: [libclang] Install both libclang.a and libclang.so when LIBCLANG_BUILD_STATIC=ON

2020-04-28 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added a comment.

Thanks @hans My bad. Didn't test this when LLVM_ENABLE_PIC=OFF.

Submitted D79059  to better solve this problem.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D78534



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D79059: Fix and re-submit D78534 - [libclang] Install both libclang.a and libclang.so when LIBCLANG_BUILD_STATIC=ON

2020-04-28 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 updated this revision to Diff 260818.
zhuhan0 edited the summary of this revision.
zhuhan0 added a comment.

Spacing.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D79059

Files:
  clang/cmake/modules/AddClang.cmake

Index: clang/cmake/modules/AddClang.cmake
===
--- clang/cmake/modules/AddClang.cmake
+++ clang/cmake/modules/AddClang.cmake
@@ -45,7 +45,7 @@
 
 macro(add_clang_library name)
   cmake_parse_arguments(ARG
-"SHARED;INSTALL_WITH_TOOLCHAIN"
+"SHARED;STATIC;INSTALL_WITH_TOOLCHAIN"
 ""
 "ADDITIONAL_HEADERS"
 ${ARGN})
@@ -81,7 +81,10 @@
   ${ARG_ADDITIONAL_HEADERS} # It may contain unparsed unknown args.
   )
   endif()
-  if(ARG_SHARED)
+
+  if(ARG_SHARED AND ARG_STATIC)
+set(LIBTYPE SHARED STATIC)
+  elseif(ARG_SHARED)
 set(LIBTYPE SHARED)
   else()
 # llvm_add_library ignores BUILD_SHARED_LIBS if STATIC is explicitly set,
@@ -99,39 +102,46 @@
   endif()
   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 ARG_INSTALL_WITH_TOOLCHAIN)
-  set(export_to_clangtargets)
-  if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  "clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  NOT LLVM_DISTRIBUTION_COMPONENTS)
-set(export_to_clangtargets EXPORT ClangTargets)
-set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
-  endif()
-
-  install(TARGETS ${name}
-COMPONENT ${name}
-${export_to_clangtargets}
-LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-RUNTIME DESTINATION bin)
-
-  if (NOT LLVM_ENABLE_IDE)
-add_llvm_install_targets(install-${name}
- DEPENDS ${name}
- COMPONENT ${name})
-  endif()
-
-  set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${name})
-endif()
-set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name})
-  else()
-# Add empty "phony" target
-add_custom_target(${name})
+  set(libs ${name})
+  if(ARG_SHARED AND ARG_STATIC)
+set(libs ${name} ${name}_static)
   endif()
 
+  foreach(lib ${libs})
+if(TARGET ${lib})
+  target_link_libraries(${lib} INTERFACE ${LLVM_COMMON_LIBS})
+
+  if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
+set(export_to_clangtargets)
+if(${lib} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+"clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+NOT LLVM_DISTRIBUTION_COMPONENTS)
+  set(export_to_clangtargets EXPORT ClangTargets)
+  set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
+endif()
+
+install(TARGETS ${lib}
+  COMPONENT ${lib}
+  ${export_to_clangtargets}
+  LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  RUNTIME DESTINATION bin)
+
+if (NOT LLVM_ENABLE_IDE)
+  add_llvm_install_targets(install-${lib}
+   DEPENDS ${lib}
+   COMPONENT ${lib})
+endif()
+
+set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${lib})
+  endif()
+  set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${lib})
+else()
+  # Add empty "phony" target
+  add_custom_target(${lib})
+endif()
+  endforeach()
+
   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


[PATCH] D79059: Fix and re-submit D78534 - [libclang] Install both libclang.a and libclang.so when LIBCLANG_BUILD_STATIC=ON

2020-04-28 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 created this revision.
Herald added subscribers: cfe-commits, mgorny.
Herald added a project: clang.
zhuhan0 edited the summary of this revision.

D78354  enabled installing PIC version of both 
libclang.a and libclang.so when LIBCLANG_BUILD_STATIC is ON. But it broke the 
no-PIC build when LLVM_ENABLE_PIC=OFF with the following error:

  CMake Error at 
  
/b/s/w/ir/cache/builder/src/third_party/llvm/clang/tools/libclang/CMakeLists.txt:123
  (target_compile_definitions):  
  target_compile_definitions called with non-compilable target type

This is because as the code loops through ${name} and ${name}_static, it 
introduced a side effect, which is adding an empty libclang_static to targets. 
Later target_compile_definitions is called on libclang_static. That function 
requires that target must have been created by a command such as 
add_executable() or add_library(), so it crashed.

The solution is to not naively loop through both libclang and libclang_static, 
but only the ones that are actually added by llvm_add_library(). Here's the 
library build type to library target name mapping:

| SHARED only   | libclang |
| STATIC only   | libclang |
| SHARED and STATIC | libclang and libclang_static |
|




Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D79059

Files:
  clang/cmake/modules/AddClang.cmake


Index: clang/cmake/modules/AddClang.cmake
===
--- clang/cmake/modules/AddClang.cmake
+++ clang/cmake/modules/AddClang.cmake
@@ -45,7 +45,7 @@
 
 macro(add_clang_library name)
   cmake_parse_arguments(ARG
-"SHARED;INSTALL_WITH_TOOLCHAIN"
+"SHARED;STATIC;INSTALL_WITH_TOOLCHAIN"
 ""
 "ADDITIONAL_HEADERS"
 ${ARGN})
@@ -81,7 +81,10 @@
   ${ARG_ADDITIONAL_HEADERS} # It may contain unparsed unknown args.
   )
   endif()
-  if(ARG_SHARED)
+
+  if(ARG_SHARED AND ARG_STATIC)
+set(LIBTYPE SHARED STATIC)
+  elseif(ARG_SHARED)
 set(LIBTYPE SHARED)
   else()
 # llvm_add_library ignores BUILD_SHARED_LIBS if STATIC is explicitly set,
@@ -99,38 +102,45 @@
   endif()
   llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
 
-  if(TARGET ${name})
-target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
+  set(libs ${name})
+  if(ARG_SHARED AND ARG_STATIC)
+set(libs ${name} ${name}_static)
+  endif()
 
-if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
-  set(export_to_clangtargets)
-  if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  "clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  NOT LLVM_DISTRIBUTION_COMPONENTS)
-set(export_to_clangtargets EXPORT ClangTargets)
-set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
-  endif()
+  foreach(lib ${libs})
+if(TARGET ${lib})
+  target_link_libraries(${lib} INTERFACE ${LLVM_COMMON_LIBS})
 
-  install(TARGETS ${name}
-COMPONENT ${name}
-${export_to_clangtargets}
-LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-RUNTIME DESTINATION bin)
+  if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
+set(export_to_clangtargets)
+if(${lib} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+"clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+NOT LLVM_DISTRIBUTION_COMPONENTS)
+  set(export_to_clangtargets EXPORT ClangTargets)
+  set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
+endif()
 
-  if (NOT LLVM_ENABLE_IDE)
-add_llvm_install_targets(install-${name}
- DEPENDS ${name}
- COMPONENT ${name})
-  endif()
+install(TARGETS ${lib}
+  COMPONENT ${lib}
+  ${export_to_clangtargets}
+  LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  RUNTIME DESTINATION bin)
 
-  set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${name})
-endif()
-set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name})
-  else()
-# Add empty "phony" target
-add_custom_target(${name})
+if (NOT LLVM_ENABLE_IDE)
+  add_llvm_install_targets(install-${lib}
+  DEPENDS ${lib}
+  COMPONENT ${lib})
+endif()
+
+set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${lib})
+  endif()
+  set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${lib})
+else()
+  # Add empty "phony" target
+  add_custom_target(${lib})
   endif()
+endforeach()
 
   set_target_properties(${name} PROPERTIES FOLDER "Clang libraries")
   

[PATCH] D78534: [libclang] Install both libclang.a and libclang.so when LIBCLANG_BUILD_STATIC=ON

2020-04-27 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added a comment.

@smeenai Thank you!


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D78534



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D78534: [libclang] Install both libclang.a and libclang.so when LIBCLANG_BUILD_STATIC=ON

2020-04-27 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added a comment.

@smeenai Yes.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D78534



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D78534: [libclang] Install both libclang.a and libclang.so when LIBCLANG_BUILD_STATIC=ON

2020-04-26 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 added a comment.

Hello @beanz @phosek @smeenai any comment on this patch? :)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D78534



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D78534: [libclang] Install both libclang.a and libclang.so when LIBCLANG_BUILD_STATIC=ON

2020-04-26 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 updated this revision to Diff 260205.
zhuhan0 added a comment.

Rebase


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D78534

Files:
  clang/cmake/modules/AddClang.cmake


Index: clang/cmake/modules/AddClang.cmake
===
--- clang/cmake/modules/AddClang.cmake
+++ clang/cmake/modules/AddClang.cmake
@@ -99,38 +99,40 @@
   endif()
   llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
 
-  if(TARGET ${name})
-target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
+  foreach(lib ${name} ${name}_static)
+if(TARGET ${lib})
+  target_link_libraries(${lib} INTERFACE ${LLVM_COMMON_LIBS})
 
-if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
-  set(export_to_clangtargets)
-  if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  "clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  NOT LLVM_DISTRIBUTION_COMPONENTS)
-set(export_to_clangtargets EXPORT ClangTargets)
-set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
-  endif()
+  if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
+set(export_to_clangtargets)
+if(${lib} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+"clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+NOT LLVM_DISTRIBUTION_COMPONENTS)
+  set(export_to_clangtargets EXPORT ClangTargets)
+  set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
+endif()
 
-  install(TARGETS ${name}
-COMPONENT ${name}
-${export_to_clangtargets}
-LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-RUNTIME DESTINATION bin)
+install(TARGETS ${lib}
+  COMPONENT ${lib}
+  ${export_to_clangtargets}
+  LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  RUNTIME DESTINATION bin)
 
-  if (NOT LLVM_ENABLE_IDE)
-add_llvm_install_targets(install-${name}
- DEPENDS ${name}
- COMPONENT ${name})
-  endif()
+if (NOT LLVM_ENABLE_IDE)
+  add_llvm_install_targets(install-${lib}
+   DEPENDS ${lib}
+   COMPONENT ${lib})
+endif()
 
-  set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${name})
+set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${lib})
+  endif()
+  set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${lib})
+else()
+  # Add empty "phony" target
+  add_custom_target(${lib})
 endif()
-set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name})
-  else()
-# Add empty "phony" target
-add_custom_target(${name})
-  endif()
+  endforeach()
 
   set_target_properties(${name} PROPERTIES FOLDER "Clang libraries")
   set_clang_windows_version_resource_properties(${name})


Index: clang/cmake/modules/AddClang.cmake
===
--- clang/cmake/modules/AddClang.cmake
+++ clang/cmake/modules/AddClang.cmake
@@ -99,38 +99,40 @@
   endif()
   llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
 
-  if(TARGET ${name})
-target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
+  foreach(lib ${name} ${name}_static)
+if(TARGET ${lib})
+  target_link_libraries(${lib} INTERFACE ${LLVM_COMMON_LIBS})
 
-if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
-  set(export_to_clangtargets)
-  if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  "clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  NOT LLVM_DISTRIBUTION_COMPONENTS)
-set(export_to_clangtargets EXPORT ClangTargets)
-set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
-  endif()
+  if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
+set(export_to_clangtargets)
+if(${lib} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+"clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+NOT LLVM_DISTRIBUTION_COMPONENTS)
+  set(export_to_clangtargets EXPORT ClangTargets)
+  set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
+endif()
 
-  install(TARGETS ${name}
-COMPONENT ${name}
-${export_to_clangtargets}
-LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-RUNTIME DESTINATION bin)
+install(TARGETS ${lib}
+  COMPONENT ${lib}
+  ${export_to_clangtargets}
+  LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  RUNTIME DESTINATION bin)
 
-  if (NOT LLVM_ENABLE_IDE)
-

[PATCH] D78534: [libclang] Install both libclang.a and libclang.so when LIBCLANG_BUILD_STATIC=ON

2020-04-21 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 updated this revision to Diff 259043.
zhuhan0 added a comment.

Spacing


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D78534

Files:
  clang/cmake/modules/AddClang.cmake


Index: clang/cmake/modules/AddClang.cmake
===
--- clang/cmake/modules/AddClang.cmake
+++ clang/cmake/modules/AddClang.cmake
@@ -99,38 +99,40 @@
   endif()
   llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
 
-  if(TARGET ${name})
-target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
+  foreach(lib ${name} ${name}_static)
+if(TARGET ${lib})
+  target_link_libraries(${lib} INTERFACE ${LLVM_COMMON_LIBS})
 
-if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
-  set(export_to_clangtargets)
-  if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  "clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  NOT LLVM_DISTRIBUTION_COMPONENTS)
-set(export_to_clangtargets EXPORT ClangTargets)
-set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
-  endif()
+  if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
+set(export_to_clangtargets)
+if(${lib} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+"clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+NOT LLVM_DISTRIBUTION_COMPONENTS)
+  set(export_to_clangtargets EXPORT ClangTargets)
+  set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
+endif()
 
-  install(TARGETS ${name}
-COMPONENT ${name}
-${export_to_clangtargets}
-LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-RUNTIME DESTINATION bin)
+install(TARGETS ${lib}
+  COMPONENT ${lib}
+  ${export_to_clangtargets}
+  LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  RUNTIME DESTINATION bin)
 
-  if (NOT LLVM_ENABLE_IDE)
-add_llvm_install_targets(install-${name}
- DEPENDS ${name}
- COMPONENT ${name})
-  endif()
+if (NOT LLVM_ENABLE_IDE)
+  add_llvm_install_targets(install-${lib}
+   DEPENDS ${lib}
+   COMPONENT ${lib})
+endif()
 
-  set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${name})
+set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${lib})
+  endif()
+  set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${lib})
+else()
+  # Add empty "phony" target
+  add_custom_target(${lib})
 endif()
-set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name})
-  else()
-# Add empty "phony" target
-add_custom_target(${name})
-  endif()
+  endforeach()
 
   set_target_properties(${name} PROPERTIES FOLDER "Clang libraries")
   set_clang_windows_version_resource_properties(${name})


Index: clang/cmake/modules/AddClang.cmake
===
--- clang/cmake/modules/AddClang.cmake
+++ clang/cmake/modules/AddClang.cmake
@@ -99,38 +99,40 @@
   endif()
   llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
 
-  if(TARGET ${name})
-target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
+  foreach(lib ${name} ${name}_static)
+if(TARGET ${lib})
+  target_link_libraries(${lib} INTERFACE ${LLVM_COMMON_LIBS})
 
-if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
-  set(export_to_clangtargets)
-  if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  "clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  NOT LLVM_DISTRIBUTION_COMPONENTS)
-set(export_to_clangtargets EXPORT ClangTargets)
-set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
-  endif()
+  if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
+set(export_to_clangtargets)
+if(${lib} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+"clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+NOT LLVM_DISTRIBUTION_COMPONENTS)
+  set(export_to_clangtargets EXPORT ClangTargets)
+  set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
+endif()
 
-  install(TARGETS ${name}
-COMPONENT ${name}
-${export_to_clangtargets}
-LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-RUNTIME DESTINATION bin)
+install(TARGETS ${lib}
+  COMPONENT ${lib}
+  ${export_to_clangtargets}
+  LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  RUNTIME DESTINATION bin)
 
-  if (NOT LLVM_ENABLE_IDE)
-

[PATCH] D78534: [libclang] Install both libclang.a and libclang.so when LIBCLANG_BUILD_STATIC=ON

2020-04-20 Thread Han Zhu via Phabricator via cfe-commits
zhuhan0 created this revision.
Herald added subscribers: cfe-commits, mgorny.
Herald added a project: clang.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D78534

Files:
  clang/cmake/modules/AddClang.cmake


Index: clang/cmake/modules/AddClang.cmake
===
--- clang/cmake/modules/AddClang.cmake
+++ clang/cmake/modules/AddClang.cmake
@@ -99,38 +99,40 @@
   endif()
   llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
 
-  if(TARGET ${name})
-target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
+  foreach(lib ${name} ${name}_static)
+if(TARGET ${lib})
+  target_link_libraries(${lib} INTERFACE ${LLVM_COMMON_LIBS})
 
-if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
-  set(export_to_clangtargets)
-  if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  "clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  NOT LLVM_DISTRIBUTION_COMPONENTS)
-set(export_to_clangtargets EXPORT ClangTargets)
-set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
-  endif()
+  if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
+set(export_to_clangtargets)
+if(${lib} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+"clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+NOT LLVM_DISTRIBUTION_COMPONENTS)
+  set(export_to_clangtargets EXPORT ClangTargets)
+  set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
+endif()
 
-  install(TARGETS ${name}
-COMPONENT ${name}
-${export_to_clangtargets}
-LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-RUNTIME DESTINATION bin)
+install(TARGETS ${lib}
+  COMPONENT ${lib}
+  ${export_to_clangtargets}
+  LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  RUNTIME DESTINATION bin)
 
-  if (NOT LLVM_ENABLE_IDE)
-add_llvm_install_targets(install-${name}
- DEPENDS ${name}
- COMPONENT ${name})
-  endif()
+if (NOT LLVM_ENABLE_IDE)
+  add_llvm_install_targets(install-${lib}
+  DEPENDS ${lib}
+  COMPONENT ${lib})
+endif()
 
-  set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${name})
+set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${lib})
+  endif()
+  set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${lib})
+else()
+  # Add empty "phony" target
+  add_custom_target(${lib})
 endif()
-set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name})
-  else()
-# Add empty "phony" target
-add_custom_target(${name})
-  endif()
+  endforeach()
 
   set_target_properties(${name} PROPERTIES FOLDER "Clang libraries")
   set_clang_windows_version_resource_properties(${name})


Index: clang/cmake/modules/AddClang.cmake
===
--- clang/cmake/modules/AddClang.cmake
+++ clang/cmake/modules/AddClang.cmake
@@ -99,38 +99,40 @@
   endif()
   llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
 
-  if(TARGET ${name})
-target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
+  foreach(lib ${name} ${name}_static)
+if(TARGET ${lib})
+  target_link_libraries(${lib} INTERFACE ${LLVM_COMMON_LIBS})
 
-if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
-  set(export_to_clangtargets)
-  if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  "clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
-  NOT LLVM_DISTRIBUTION_COMPONENTS)
-set(export_to_clangtargets EXPORT ClangTargets)
-set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
-  endif()
+  if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
+set(export_to_clangtargets)
+if(${lib} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+"clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
+NOT LLVM_DISTRIBUTION_COMPONENTS)
+  set(export_to_clangtargets EXPORT ClangTargets)
+  set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
+endif()
 
-  install(TARGETS ${name}
-COMPONENT ${name}
-${export_to_clangtargets}
-LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-RUNTIME DESTINATION bin)
+install(TARGETS ${lib}
+  COMPONENT ${lib}
+  ${export_to_clangtargets}
+  LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+  RUNTIME DESTINATION bin)
 
-  if (NOT LLVM_ENABLE_IDE)
-add_llvm_install_targets(install-${name}
-