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

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