Skip to content

Commit 48a11c9

Browse files
committed
Set RUNPATH on ELF files in erlang package
CMK-29405 Change-Id: Ie75b92b37fa95e1f2d4263148af616af670d55e8
1 parent 958952c commit 48a11c9

File tree

2 files changed

+121
-21
lines changed

2 files changed

+121
-21
lines changed

omd/packages/erlang/BUILD

Lines changed: 121 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
load("@rules_pkg//pkg:mappings.bzl", "filter_directory", "pkg_attributes", "pkg_files", "pkg_mklink", "strip_prefix")
22
load("@rules_pkg//pkg:tar.bzl", "pkg_tar")
33
load("//bazel/rules:exclude_from_filegroup.bzl", "exclude_from_filegroup")
4+
load("//bazel/rules:patchelf.bzl", "set_runpath")
45
load("//omd/packages/erlang:vars.bzl", "PLACE_HOLDER")
56

67
OMD_ROOT_AWARE = [
@@ -27,13 +28,21 @@ LIB_OSMON_PRIV_BIN = [
2728
"lib/erlang/lib/os_mon-2.9.1/priv/bin/cpu_sup",
2829
]
2930

30-
LIB_ERTS_BIN = [
31+
LIB_CRYPTO_PRIV_LIB = [
32+
"lib/erlang/lib/crypto-5.4.2.3/priv/lib/crypto.so",
33+
"lib/erlang/lib/crypto-5.4.2.3/priv/lib/otp_test_engine.so",
34+
]
35+
36+
LIB_ERL_INTERFACE_BIN = [
37+
"lib/erlang/lib/erl_interface-5.5.1/bin/erl_call",
38+
]
39+
40+
LIB_ERTS_BIN_ELF = [
3141
"lib/erlang/erts-14.2.5.10/bin/beam.smp",
3242
"lib/erlang/erts-14.2.5.10/bin/ct_run",
3343
"lib/erlang/erts-14.2.5.10/bin/dialyzer",
3444
"lib/erlang/erts-14.2.5.10/bin/dyn_erl",
3545
"lib/erlang/erts-14.2.5.10/bin/epmd",
36-
"lib/erlang/erts-14.2.5.10/bin/erl.src",
3746
"lib/erlang/erts-14.2.5.10/bin/erl_call",
3847
"lib/erlang/erts-14.2.5.10/bin/erl_child_setup",
3948
"lib/erlang/erts-14.2.5.10/bin/erlc",
@@ -42,30 +51,41 @@ LIB_ERTS_BIN = [
4251
"lib/erlang/erts-14.2.5.10/bin/heart",
4352
"lib/erlang/erts-14.2.5.10/bin/inet_gethost",
4453
"lib/erlang/erts-14.2.5.10/bin/run_erl",
45-
"lib/erlang/erts-14.2.5.10/bin/start.src",
46-
"lib/erlang/erts-14.2.5.10/bin/start_erl.src",
4754
"lib/erlang/erts-14.2.5.10/bin/to_erl",
4855
"lib/erlang/erts-14.2.5.10/bin/typer",
4956
"lib/erlang/erts-14.2.5.10/bin/yielding_c_fun",
5057
]
5158

52-
LIB_BIN = [
59+
LIB_ERTS_BIN_NOELF = [
60+
"lib/erlang/erts-14.2.5.10/bin/erl.src",
61+
"lib/erlang/erts-14.2.5.10/bin/start.src",
62+
"lib/erlang/erts-14.2.5.10/bin/start_erl.src",
63+
]
64+
65+
LIB_ERTS_BIN = LIB_ERTS_BIN_ELF + LIB_ERTS_BIN_NOELF
66+
67+
LIB_BIN_ELF = [
5368
"lib/erlang/bin/ct_run",
5469
"lib/erlang/bin/dialyzer",
5570
"lib/erlang/bin/erl_call",
5671
"lib/erlang/bin/erlc",
5772
"lib/erlang/bin/escript",
58-
"lib/erlang/bin/no_dot_erlang.boot",
5973
"lib/erlang/bin/run_erl",
74+
"lib/erlang/bin/to_erl",
75+
"lib/erlang/bin/typer",
76+
]
77+
78+
LIB_BIN_NOELF = [
79+
"lib/erlang/bin/no_dot_erlang.boot",
6080
"lib/erlang/bin/start.boot",
6181
"lib/erlang/bin/start.script",
6282
"lib/erlang/bin/start_clean.boot",
6383
"lib/erlang/bin/start_erl",
6484
"lib/erlang/bin/start_sasl.boot",
65-
"lib/erlang/bin/to_erl",
66-
"lib/erlang/bin/typer",
6785
]
6886

87+
LIB_BIN = LIB_BIN_ELF + LIB_BIN_NOELF
88+
6989
exclude_from_filegroup(
7090
name = "erlang_purged",
7191
src = "@erlang//:gen_dir",
@@ -75,7 +95,7 @@ exclude_from_filegroup(
7595
"misc",
7696
"include",
7797
"src",
78-
] + OMD_ROOT_AWARE + LIB_OSMON_PRIV_BIN + LIB_ERTS_BIN + BIN_SYMLINKS,
98+
] + OMD_ROOT_AWARE + LIB_OSMON_PRIV_BIN + LIB_CRYPTO_PRIV_LIB + LIB_ERL_INTERFACE_BIN + LIB_ERTS_BIN + LIB_BIN + BIN_SYMLINKS,
7999
tags = ["manual"],
80100
)
81101

@@ -143,6 +163,73 @@ genrule(
143163
tags = ["manual"],
144164
)
145165

166+
genrule(
167+
name = "erlang_lib_erl_interface_bin",
168+
srcs = [
169+
"@erlang//:gen_dir",
170+
],
171+
outs = LIB_ERL_INTERFACE_BIN,
172+
cmd = """
173+
#!/bin/bash
174+
for F in $(OUTS); do
175+
cp -L $(location @erlang//:gen_dir)/%s/$${F#$(RULEDIR)/} $$F
176+
chmod 750 $$F
177+
done
178+
""" % PLACE_HOLDER,
179+
tags = ["manual"],
180+
)
181+
182+
genrule(
183+
name = "erlang_lib_crypto_priv_lib",
184+
srcs = [
185+
"@erlang//:gen_dir",
186+
],
187+
outs = LIB_CRYPTO_PRIV_LIB,
188+
cmd = """
189+
#!/bin/bash
190+
for F in $(OUTS); do
191+
cp -L $(location @erlang//:gen_dir)/%s/$${F#$(RULEDIR)/} $$F
192+
chmod 750 $$F
193+
done
194+
""" % PLACE_HOLDER,
195+
tags = ["manual"],
196+
)
197+
198+
set_runpath(
199+
name = "erl_interface_bin_runpath",
200+
srcs = LIB_ERL_INTERFACE_BIN,
201+
rpaths = ["$ORIGIN/../../../../../lib"],
202+
tags = ["manual"],
203+
)
204+
205+
set_runpath(
206+
name = "erts_bin_runpath",
207+
srcs = LIB_ERTS_BIN_ELF,
208+
rpaths = ["$ORIGIN/../../../../lib"],
209+
tags = ["manual"],
210+
)
211+
212+
set_runpath(
213+
name = "osmon_priv_bin_runpath",
214+
srcs = LIB_OSMON_PRIV_BIN,
215+
rpaths = ["$ORIGIN/../../../../../../lib"],
216+
tags = ["manual"],
217+
)
218+
219+
set_runpath(
220+
name = "crypto_priv_lib_runpath",
221+
srcs = LIB_CRYPTO_PRIV_LIB,
222+
rpaths = ["$ORIGIN/../../../../../../lib"],
223+
tags = ["manual"],
224+
)
225+
226+
set_runpath(
227+
name = "lib_bin_runpath",
228+
srcs = LIB_BIN_ELF,
229+
rpaths = ["$ORIGIN/../../../lib"],
230+
tags = ["manual"],
231+
)
232+
146233
pkg_files(
147234
name = "omd_root_aware_pkg",
148235
srcs = [
@@ -174,17 +261,37 @@ pkg_mklink(
174261

175262
pkg_files(
176263
name = "lib_osmon_priv_bin_pkg",
177-
srcs = LIB_OSMON_PRIV_BIN,
264+
srcs = [":osmon_priv_bin_runpath"],
178265
attributes = pkg_attributes(
179266
mode = "0755",
180267
),
181268
prefix = "lib/erlang/lib/os_mon-2.9.1/priv/bin",
182269
tags = ["manual"],
183270
)
184271

272+
pkg_files(
273+
name = "lib_crypto_priv_lib_pkg",
274+
srcs = [":crypto_priv_lib_runpath"],
275+
attributes = pkg_attributes(
276+
mode = "0755",
277+
),
278+
prefix = "lib/erlang/lib/crypto-5.4.2.3/priv/lib",
279+
tags = ["manual"],
280+
)
281+
282+
pkg_files(
283+
name = "lib_erl_interface_bin_pkg",
284+
srcs = [":erl_interface_bin_runpath"],
285+
attributes = pkg_attributes(
286+
mode = "0755",
287+
),
288+
prefix = "lib/erlang/lib/erl_interface-5.5.1/bin",
289+
tags = ["manual"],
290+
)
291+
185292
pkg_files(
186293
name = "lib_erts_bin_pkg",
187-
srcs = LIB_ERTS_BIN,
294+
srcs = [":erts_bin_runpath"] + LIB_ERTS_BIN_NOELF,
188295
attributes = pkg_attributes(
189296
mode = "0755",
190297
),
@@ -194,7 +301,7 @@ pkg_files(
194301

195302
pkg_files(
196303
name = "lib_bin_pkg",
197-
srcs = LIB_BIN,
304+
srcs = [":lib_bin_runpath"] + LIB_BIN_NOELF,
198305
attributes = pkg_attributes(
199306
mode = "0755",
200307
),
@@ -223,6 +330,8 @@ pkg_tar(
223330
srcs = [
224331
":epmd_lib_link",
225332
":lib_bin_pkg",
333+
":lib_crypto_priv_lib_pkg",
334+
":lib_erl_interface_bin_pkg",
226335
":lib_erts_bin_pkg",
227336
":lib_osmon_priv_bin_pkg",
228337
":omd_root_aware_pkg",

omd/packages/erlang/BUILD.erlang.bazel

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,9 @@ configure_make(
4848
"--without-wx",
4949
],
5050
copts = [
51-
"-Wl,--rpath,$ORIGIN_VAR/../lib",
5251
"-O2",
5352
"-g",
5453
],
55-
env = {
56-
"ORIGIN_VAR": "\\\\$$\\$$ORIGIN",
57-
},
5854
install_prefix = "$INSTALLDIR",
5955
lib_source = ":all_srcs",
6056
linkopts = ["-Wl,--strip-all"],
@@ -77,11 +73,6 @@ configure_make(
7773
],
7874
out_static_libs = [
7975
],
80-
postfix_script = """
81-
patchelf --force-rpath --set-rpath "\\$$ORIGIN/../../../../../../lib" \
82-
$$INSTALLDIR{place_holder}/lib/erlang/lib/crypto-5.4.2.3/priv/lib/crypto.so \
83-
$$INSTALLDIR{place_holder}/lib/erlang/lib/crypto-5.4.2.3/priv/lib/otp_test_engine.so \
84-
""".format(place_holder = PLACE_HOLDER),
8576
deps = ["@openssl"],
8677
)
8778

0 commit comments

Comments
 (0)