Module: Tebako::Packager::PatchLibraries
- Defined in:
- lib/tebako/packager/patch_libraries.rb
Overview
Ruby patching definitions (pass2)
Constant Summary collapse
- DARWIN_BREW_LIBS =
rubocop:disable Style/WordArray
[ ["zlib", "z"], ["gdbm", "gdbm"], ["readline", "readline"], ["libffi", "ffi"], ["ncurses", "ncurses"], ["lz4", "lz4"], ["xz", "lzma"], ["libyaml", "yaml"], ["boost", "boost_chrono"], ["double-conversion", "double-conversion"] ].freeze
- DARWIN_BREW_LIBS_PRE_31 =
[["[email protected]", "ssl"], ["[email protected]", "crypto"]].freeze
- DARWIN_BREW_LIBS_31 =
[["openssl@3", "ssl"], ["openssl@3", "crypto"]].freeze
- DARWIN_DEP_LIBS_1 =
["folly", "fsst", "metadata_thrift", "thrift_light", "xxhash", "zstd"].freeze
- DARWIN_DEP_LIBS_2 =
["glog", "gflags", "brotlienc", "brotlidec", "brotlicommon", "fmt"].freeze
- LIBTEBAKOFS =
rubocop:enable Style/WordArray
"-Wl,--push-state,--whole-archive -l:libtebako-fs.a -Wl,--pop-state"- COMMON_LINUX_LIBRARIES =
[ LIBTEBAKOFS, "-l:libdwarfs-wr.a", "-l:libdwarfs.a", "LIBCOMPRESSION", "-l:libfolly.a", "-l:libfsst.a", "-l:libmetadata_thrift.a", "-l:libthrift_light.a", "-l:libxxhash.a", "-l:libfmt.a", "-l:libdouble-conversion.a", "-l:libglog.a", "-l:libgflags.a", "-l:libevent.a" ].freeze
- COMMON_ARCHIEVE_LIBRARIES =
[ "-l:libarchive.a", "-l:liblz4.a", "-l:libz.a", "-l:libzstd.a", "-l:libbrotlienc.a", "-l:libbrotlidec.a", "-l:libbrotlicommon.a", "-l:liblzma.a" ].freeze
- LINUX_GNU_LIBRARIES =
[ "-l:libiberty.a", "-l:libacl.a", "-l:libssl.a", "-l:libcrypto.a", "-l:libgdbm.a", "-l:libreadline.a", "-l:libtinfo.a", "-l:libffi.a", "-l:libncurses.a", "-l:libjemalloc.a", "-l:libcrypt.a", "-l:libanl.a", "LIBYAML", "-l:libboost_system.a", "-l:libboost_chrono.a", "-l:libutil.a", "-l:libstdc++.a", "-lgcc_eh", "-l:libunwind.a", "-l:liblzma.a", "-l:librt.a", "-ldl", "-lpthread", "-lm" ].freeze
- LINUX_MUSL_LIBRARIES =
[ "-l:libiberty.a", "-l:libacl.a", "-l:libssl.a", "-l:libcrypto.a", "-l:libreadline.a", "-l:libgdbm.a", "-l:libffi.a", "-l:libncurses.a", "-l:libjemalloc.a", "-l:libcrypt.a", "LIBYAML", "-l:libboost_system.a", "-l:libboost_chrono.a", "-l:librt.a", "-l:libstdc++.a", "-lgcc_eh", " -l:libunwind.a", "-l:liblzma.a", "-ldl", "-lpthread" ].freeze
- MSYS_LIBRARIES =
[ "-l:liblz4.a", "-l:libz.a", "-l:libzstd.a", "-l:liblzma.a", "-l:libncurses.a", "-l:liblzma.a", "-l:libiberty.a", "LIBYAML", "-l:libffi.a", "-l:libboost_chrono-mt.a", "-l:libstdc++.a", "-l:libdl.a", "-static-libgcc", "-static-libstdc++", "-l:libssl.a", "-l:libcrypto.a", "-l:libz.a", "-l:libwinpthread.a", "-lcrypt32", "-lshlwapi", "-lwsock32", "-liphlpapi", "-limagehlp", "-lbcrypt", "-lole32", "-loleaut32", "-luuid", "-lws2_32" ].freeze
Class Method Summary collapse
- .darwin_libraries(deps_lib_dir, ruby_ver, with_compression) ⇒ Object
- .linux_gnu_libraries(ruby_ver, with_compression) ⇒ Object
- .linux_libraries(libraries, ruby_ver, with_compression) ⇒ Object
- .linux_musl_libraries(ruby_ver, with_compression) ⇒ Object
-
.mlibs(ostype, deps_lib_dir, ruby_ver, with_compression) ⇒ Object
.….….….….….….….….….….….….….
- .msys_libraries(ruby_ver, with_compression) ⇒ Object
- .process_brew_libs!(libs, brew_libs) ⇒ Object
Class Method Details
.darwin_libraries(deps_lib_dir, ruby_ver, with_compression) ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/tebako/packager/patch_libraries.rb', line 125 def darwin_libraries(deps_lib_dir, ruby_ver, with_compression) libs = String.new DARWIN_DEP_LIBS_1.each { |lib| libs << "#{deps_lib_dir}/lib#{lib}.a " } process_brew_libs!(libs, ruby_ver.ruby31? ? DARWIN_BREW_LIBS_31 : DARWIN_BREW_LIBS_PRE_31) process_brew_libs!(libs, DARWIN_BREW_LIBS) DARWIN_DEP_LIBS_2.each { |lib| libs << "#{deps_lib_dir}/lib#{lib}.a " } compression_lib = with_compression ? "-force_load #{deps_lib_dir}/libdwarfs_compression.a" : "" "-ltebako-fs -ldwarfs-wr -ldwarfs #{compression_lib} #{libs} -ljemalloc -lc++ -lc++abi" end |
.linux_gnu_libraries(ruby_ver, with_compression) ⇒ Object
92 93 94 95 |
# File 'lib/tebako/packager/patch_libraries.rb', line 92 def linux_gnu_libraries(ruby_ver, with_compression) libraries = COMMON_LINUX_LIBRARIES + COMMON_ARCHIEVE_LIBRARIES + LINUX_GNU_LIBRARIES linux_libraries(libraries, ruby_ver, with_compression) end |
.linux_libraries(libraries, ruby_ver, with_compression) ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/tebako/packager/patch_libraries.rb', line 102 def linux_libraries(libraries, ruby_ver, with_compression) libraries.map! do |lib| if lib == "LIBYAML" PatchHelpers.yaml_reference(ruby_ver) elsif lib == "LIBCOMPRESSION" with_compression ? "-Wl,--push-state,--whole-archive -l:libdwarfs_compression.a -Wl,--pop-state" : "" else lib end end libraries.join(" ") end |
.linux_musl_libraries(ruby_ver, with_compression) ⇒ Object
97 98 99 100 |
# File 'lib/tebako/packager/patch_libraries.rb', line 97 def linux_musl_libraries(ruby_ver, with_compression) libraries = COMMON_LINUX_LIBRARIES + COMMON_ARCHIEVE_LIBRARIES + LINUX_MUSL_LIBRARIES linux_libraries(libraries, ruby_ver, with_compression) end |
.mlibs(ostype, deps_lib_dir, ruby_ver, with_compression) ⇒ Object
.….….….….….….….….….….….….….
Notes re linux libraries
1) This order is important: -lgcc_eh -l:libunwind.a -l:liblzma.a lzma is used to process debug sections.
gcc_eh shall be linked before unwind to avoid duplicate symbols.
2) -lgcc_eh assumes -static-libgcc (applied in CMakeLists.ext, RUBY_C_FLAGS)
3) -static-libstdc++ did not work, not sure why [TODO ?]
4) When clang is used linker links libraries specified in exensions in such way that they are linked shared
(libz, libffi, libreadline, libncurses, libtinfo, ... )
Using stuff like -l:libz.a does not help; there is a reference to libz.so anyway.
This is fixed by ext/extmk.rb patch [TODO ?]
.….….….….….….….….….….….….….
150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/tebako/packager/patch_libraries.rb', line 150 def mlibs(ostype, deps_lib_dir, ruby_ver, with_compression) scmb = ScenarioManagerBase.new(ostype) if scmb.msys? msys_libraries(ruby_ver, with_compression) elsif scmb.macos? darwin_libraries(deps_lib_dir, ruby_ver, with_compression) elsif scmb.musl? linux_musl_libraries(ruby_ver, with_compression) else linux_gnu_libraries(ruby_ver, with_compression) end end |
.msys_libraries(ruby_ver, with_compression) ⇒ Object
115 116 117 118 119 |
# File 'lib/tebako/packager/patch_libraries.rb', line 115 def msys_libraries(ruby_ver, with_compression) libraries = with_compression ? ["-Wl,-Bstatic"] : [] libraries = libraries + COMMON_LINUX_LIBRARIES + MSYS_LIBRARIES linux_libraries(libraries, ruby_ver, with_compression) end |
.process_brew_libs!(libs, brew_libs) ⇒ Object
121 122 123 |
# File 'lib/tebako/packager/patch_libraries.rb', line 121 def process_brew_libs!(libs, brew_libs) brew_libs.each { |lib| libs << "#{PatchHelpers.get_prefix_macos(lib[0]).chop}/lib/lib#{lib[1]}.a " } end |