File: static-bfd.patch

package info (click to toggle)
lfortran 0.57.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 22,208 kB
  • sloc: cpp: 295,471; python: 14,442; ansic: 5,269; yacc: 2,334; f90: 761; sh: 37; makefile: 29
file content (82 lines) | stat: -rw-r--r-- 2,958 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
--- a/cmake/FindBFD.cmake
+++ b/cmake/FindBFD.cmake
@@ -1,14 +1,46 @@
-find_path(BFD_INCLUDE_DIR bfd.h)
-find_library(BFD_LIBRARY bfd)
-#find_library(IBERTY_LIBRARY iberty)
-#find_library(Z_LIBRARY z)
-#find_library(DL_LIBRARY dl)
+# Patched to use static BFD
+
+# Backup the original value of the requested library suffixes
+set(_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
+# Static libraries end with .a on Unix and .lib on Windows
+set(CMAKE_FIND_LIBRARY_SUFFIXES .a .lib)
+
+find_path(bfd_INCLUDE_DIR bfd.h)
+find_library(bfd_LIBRARY bfd)
 
 include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(BFD DEFAULT_MSG BFD_INCLUDE_DIR BFD_LIBRARY)
+find_package_handle_standard_args(StaticBFD DEFAULT_MSG bfd_LIBRARY
+    bfd_INCLUDE_DIR)
+
+find_path(iberty_INCLUDE_DIR libiberty/libiberty.h)
+find_library(iberty_LIBRARY iberty)
+
+find_path(sframe_INCLUDE_DIR sframe.h)
+find_library(sframe_LIBRARY sframe)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(StaticBFD DEFAULT_MSG bfd_LIBRARY
+    bfd_INCLUDE_DIR)
+find_package_handle_standard_args(StaticIBERTY DEFAULT_MSG iberty_LIBRARY
+    iberty_INCLUDE_DIR)
+find_package_handle_standard_args(StaticSFRAME DEFAULT_MSG sframe_LIBRARY
+    sframe_INCLUDE_DIR)
+
+  
+# Reset the library suffixes to the original value
+set(CMAKE_FIND_LIBRARY_SUFFIXES ${_CMAKE_FIND_LIBRARY_SUFFIXES})
+# Unset the temporary to not pollute the global namespace
+unset(_CMAKE_FIND_LIBRARY_SUFFIXES)
+
+# We found the static BFD library and then we set this target which
+# LLVM CMake uses to find the "shared" library. Then BFD gets linked
+# statically with LFortran and everything works. This is dependent
+# on LLVM's CMake. If it changes, we also have to change the handling
+# here.
+
 
-add_library(p::bfd INTERFACE IMPORTED)
-set_property(TARGET p::bfd PROPERTY INTERFACE_INCLUDE_DIRECTORIES
-    ${BFD_INCLUDE_DIR})
-set_property(TARGET p::bfd PROPERTY INTERFACE_LINK_LIBRARIES
-    ${BFD_LIBRARY})
+add_library(bfd::libbfd_shared INTERFACE IMPORTED)
+set_property(TARGET bfd::libbfd_shared PROPERTY INTERFACE_INCLUDE_DIRECTORIES
+    ${bfd_INCLUDE_DIR})
+set_property(TARGET bfd::libbfd_shared PROPERTY INTERFACE_LINK_LIBRARIES
+    ${bfd_LIBRARY} ${iberty_LIBRARY} ${sframe_LIBRARY})
--- a/src/libasr/CMakeLists.txt
+++ b/src/libasr/CMakeLists.txt
@@ -133,7 +133,7 @@
     target_link_libraries(asr p::libunwind)
 endif()
 if (WITH_BFD)
-    target_link_libraries(asr p::bfd)
+    target_link_libraries(asr bfd::libbfd_shared  p::z)
 endif()
 if (WITH_LINK)
     target_link_libraries(asr p::link)
--- a/src/lfortran/CMakeLists.txt
+++ b/src/lfortran/CMakeLists.txt
@@ -81,7 +81,7 @@
     target_link_libraries(lfortran_lib p::rapidjson)
 endif()
 if (WITH_BFD)
-    target_link_libraries(lfortran_lib p::bfd)
+    target_link_libraries(lfortran_lib bfd::libbfd_shared  p::z)
 endif()
 if (WITH_LINK)
     target_link_libraries(lfortran_lib p::link)