[llvm] [CMake] Disable LTO library when PIC is disables (PR #136372)

Petr Hosek via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 18 14:37:06 PDT 2025


https://github.com/petrhosek created https://github.com/llvm/llvm-project/pull/136372

Building shared libraries requires PIC. This matches what we do for Remarks which is another tool library.

>From 0f2ce137b590c8558bbbc622f641ede9b884f7bd Mon Sep 17 00:00:00 2001
From: Petr Hosek <phosek at google.com>
Date: Fri, 18 Apr 2025 21:34:55 +0000
Subject: [PATCH] [CMake] Disable LTO library when PIC is disables

Building shared libraries requires PIC. This matches what we do for
Remarks which is another tool library.
---
 llvm/tools/lto/CMakeLists.txt | 91 ++++++++++++++++++-----------------
 1 file changed, 48 insertions(+), 43 deletions(-)

diff --git a/llvm/tools/lto/CMakeLists.txt b/llvm/tools/lto/CMakeLists.txt
index c2f7d81063af8..8c7d7904e16ea 100644
--- a/llvm/tools/lto/CMakeLists.txt
+++ b/llvm/tools/lto/CMakeLists.txt
@@ -1,48 +1,53 @@
-set(LLVM_LINK_COMPONENTS
-  AllTargetsAsmParsers
-  AllTargetsCodeGens
-  AllTargetsDescs
-  AllTargetsDisassemblers
-  AllTargetsInfos
-  BitReader
-  Core
-  CodeGen
-  LTO
-  MC
-  MCDisassembler
-  Support
-  Target
-  TargetParser
-  )
-
-set(SOURCES
-  LTODisassembler.cpp
-  lto.cpp
-  )
-
-set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/lto.exports)
-
-if(CMAKE_SYSTEM_NAME STREQUAL AIX)
-    set(LTO_LIBRARY_TYPE MODULE)
-    set(LTO_LIBRARY_NAME libLTO)
-  else()
-    set(LTO_LIBRARY_TYPE SHARED)
-    set(LTO_LIBRARY_NAME LTO)
-endif()
+# Building shared libraries requires PIC objects.
+if(LLVM_ENABLE_PIC)
+
+  set(LLVM_LINK_COMPONENTS
+    AllTargetsAsmParsers
+    AllTargetsCodeGens
+    AllTargetsDescs
+    AllTargetsDisassemblers
+    AllTargetsInfos
+    BitReader
+    Core
+    CodeGen
+    LTO
+    MC
+    MCDisassembler
+    Support
+    Target
+    TargetParser
+    )
 
-add_llvm_library(${LTO_LIBRARY_NAME} ${LTO_LIBRARY_TYPE} INSTALL_WITH_TOOLCHAIN
-    ${SOURCES} DEPENDS intrinsics_gen)
+  set(SOURCES
+    LTODisassembler.cpp
+    lto.cpp
+    )
 
-install(FILES ${LLVM_MAIN_INCLUDE_DIR}/llvm-c/lto.h
-  DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/llvm-c"
-  COMPONENT LTO)
+  set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/lto.exports)
 
-if (APPLE)
-  set(LTO_VERSION ${LLVM_VERSION_MAJOR})
-  if(LLVM_LTO_VERSION_OFFSET)
-    math(EXPR LTO_VERSION "${LLVM_VERSION_MAJOR} + ${LLVM_LTO_VERSION_OFFSET}")
+  if(CMAKE_SYSTEM_NAME STREQUAL AIX)
+      set(LTO_LIBRARY_TYPE MODULE)
+      set(LTO_LIBRARY_NAME libLTO)
+    else()
+      set(LTO_LIBRARY_TYPE SHARED)
+      set(LTO_LIBRARY_NAME LTO)
   endif()
-  set_property(TARGET LTO APPEND_STRING PROPERTY
-              LINK_FLAGS
-              " -compatibility_version 1 -current_version ${LTO_VERSION}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}")
+
+  add_llvm_library(${LTO_LIBRARY_NAME} ${LTO_LIBRARY_TYPE} INSTALL_WITH_TOOLCHAIN
+      ${SOURCES} DEPENDS intrinsics_gen)
+
+  install(FILES ${LLVM_MAIN_INCLUDE_DIR}/llvm-c/lto.h
+    DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/llvm-c"
+    COMPONENT LTO)
+
+  if (APPLE)
+    set(LTO_VERSION ${LLVM_VERSION_MAJOR})
+    if(LLVM_LTO_VERSION_OFFSET)
+      math(EXPR LTO_VERSION "${LLVM_VERSION_MAJOR} + ${LLVM_LTO_VERSION_OFFSET}")
+    endif()
+    set_property(TARGET LTO APPEND_STRING PROPERTY
+                LINK_FLAGS
+                " -compatibility_version 1 -current_version ${LTO_VERSION}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}")
+  endif()
+
 endif()



More information about the llvm-commits mailing list