Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Don't produce a shared library artifact. #77

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

iddm
Copy link
Collaborator

@iddm iddm commented Nov 14, 2023

The crate is not shipped as a shared library, and is not used as such.

Explaining the linking modifiers:

Linking modifiers: whole-archive

This modifier is only compatible with the static linking kind. Using any other kind will result in a compiler error.

+whole-archive means that the static library is linked as a whole archive without throwing any object files away.

This modifier translates to --whole-archive for ld-like linkers, to /WHOLEARCHIVE for link.exe, and to -force_load for ld64. The modifier does nothing for linkers that don't support it.

The default for this modifier is -whole-archive.
NOTE: The default may currently be different in some cases for backward compatibility, but it is not guaranteed. If you need whole archive semantics use +whole-archive explicitly.
Linking modifiers: bundle

This modifier is only compatible with the static linking kind. Using any other kind will result in a compiler error.

When building a rlib or staticlib +bundle means that the native static library will be packed into the rlib or staticlib archive, and then retrieved from there during linking of the final binary.

When building a rlib -bundle means that the native static library is registered as a dependency of that rlib "by name", and object files from it are included only during linking of the final binary, the file search by that name is also performed during final linking.
When building a staticlib -bundle means that the native static library is simply not included into the archive and some higher level build system will need to add it later during linking of the final binary.

This modifier has no effect when building other targets like executables or dynamic libraries.

The default for this modifier is +bundle.

We need the whole archive semantics so that the crates that depend on v8-rs do not need to link to stdc++ anymore but already have all the symbols. The unused symbols will be stripped anyway during the optimisation stage. With the bundle semantics, the crates that depend on v8-rs will simply know the fact that libv8_rs.rlib requires libstdc++.a and will do that later.

The crate is not shipped as a shared library, and is not used as such.
@iddm iddm requested a review from MeirShpilraien November 14, 2023 15:28
build.rs Outdated
println!("cargo:rustc-cdylib-link-arg=-lstdc++");
println!("cargo:rustc-cdylib-link-arg=-Wl,-Bdynamic");
println!(
"cargo:rustc-link-lib=stdc++",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe this will prefer dynamic linking which is not what we want.

Copy link
Collaborator Author

@iddm iddm Nov 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It can't prefer dynamic linking; since the artefact is a static library, it can only link static libraries into it:

❯ file target/debug/libv8_rs.rlib
target/debug/libv8_rs.rlib: current ar archive

❯ ldd target/debug/libv8_rs.rlib
ldd: warning: you do not have execution permission for `target/debug/libv8_rs.rlib'
	not a dynamic executable

The Rust Library crates are always statically linked.

If you want, I can be more specific and specify the static linkage explicitly:

cargo:rustc-link-lib=static=stdc++

The resulting Rust artefact is an .rlib file (ar archive) with the contents:

❯ ar t target/debug/libv8_rs.rlib
lib.rmeta
v8_rs-202d094763022048.10c567bojat7yq5m.rcgu.o
v8_rs-202d094763022048.10detpinemr7b7xd.rcgu.o
v8_rs-202d094763022048.12tu24li4izo8957.rcgu.o
v8_rs-202d094763022048.15kcvwr8botxu86b.rcgu.o
v8_rs-202d094763022048.1622jh1ptdj3zp3g.rcgu.o
v8_rs-202d094763022048.18wv5nlr3c8dyxor.rcgu.o
v8_rs-202d094763022048.1adgdvcmaov4nblh.rcgu.o
v8_rs-202d094763022048.1bsur4kwyszx7vsc.rcgu.o
v8_rs-202d094763022048.1btrxmkoz6h4otdf.rcgu.o
v8_rs-202d094763022048.1bvlqwdt8j8p8fvu.rcgu.o
v8_rs-202d094763022048.1d9uxemaivppuyjq.rcgu.o
v8_rs-202d094763022048.1ghxpet0wfsu1xta.rcgu.o
v8_rs-202d094763022048.1hh9g9067k4ooin5.rcgu.o
v8_rs-202d094763022048.1l317y8sy1upvw3d.rcgu.o
v8_rs-202d094763022048.1n3rh3me5v4yy3ch.rcgu.o
v8_rs-202d094763022048.1q9c1h5vqjizexyu.rcgu.o
v8_rs-202d094763022048.1qmvx59sm8m9cd2l.rcgu.o
v8_rs-202d094763022048.1rp8pleeqiaume10.rcgu.o
v8_rs-202d094763022048.1t5dyjmk923jbb4f.rcgu.o
v8_rs-202d094763022048.1toi2hcjzxc1kj9z.rcgu.o
v8_rs-202d094763022048.1ugytbzxwmoa9fcb.rcgu.o
v8_rs-202d094763022048.1uo9sbypckduyso2.rcgu.o
v8_rs-202d094763022048.1v6131469li63ede.rcgu.o
v8_rs-202d094763022048.1vm0ewghgvv69cfh.rcgu.o
v8_rs-202d094763022048.1vzedd507iz68xax.rcgu.o
v8_rs-202d094763022048.1xgoho4ofmg8dmy8.rcgu.o
v8_rs-202d094763022048.1z4p0oyn7zzzt3ks.rcgu.o
v8_rs-202d094763022048.20y7bwdy5io80j17.rcgu.o
v8_rs-202d094763022048.2391y3m0x37ne5yn.rcgu.o
v8_rs-202d094763022048.24yuw16l02s0ybs5.rcgu.o
v8_rs-202d094763022048.27d2z1kesftzxfdx.rcgu.o
v8_rs-202d094763022048.27lum3qkh9ucxwjy.rcgu.o
v8_rs-202d094763022048.29cgu2r9iqofiywc.rcgu.o
v8_rs-202d094763022048.29yeuo44etswigyz.rcgu.o
v8_rs-202d094763022048.2aelhbwsucfm1wd1.rcgu.o
v8_rs-202d094763022048.2atslv57ovfdk916.rcgu.o
v8_rs-202d094763022048.2ci6empileughw71.rcgu.o
v8_rs-202d094763022048.2elzhnzmf9hfgyv7.rcgu.o
v8_rs-202d094763022048.2iy09kjcy15vxtcj.rcgu.o
v8_rs-202d094763022048.2l1lh58fdpq4vzm0.rcgu.o
v8_rs-202d094763022048.2lp7sqxw5ghft390.rcgu.o
v8_rs-202d094763022048.2mjv04uak61yp3wm.rcgu.o
v8_rs-202d094763022048.2nqgfj38dmx6tnru.rcgu.o
v8_rs-202d094763022048.2oeqsvnoctzeycy9.rcgu.o
v8_rs-202d094763022048.2p45vj19yoq3sa71.rcgu.o
v8_rs-202d094763022048.2q9rxzcbb8hin5g.rcgu.o
v8_rs-202d094763022048.2rj0cn9din4amar3.rcgu.o
v8_rs-202d094763022048.2rlm850hwqz3rmyw.rcgu.o
v8_rs-202d094763022048.2uz3cibpwcv44o8r.rcgu.o
v8_rs-202d094763022048.2v2udf4ap38ek3vw.rcgu.o
v8_rs-202d094763022048.2voz1fh6yvxxjnfm.rcgu.o
v8_rs-202d094763022048.2wxufrf4q7lzeozb.rcgu.o
v8_rs-202d094763022048.2xa2m17xce5886zr.rcgu.o
v8_rs-202d094763022048.2zn2dqsdqkrdzs6.rcgu.o
v8_rs-202d094763022048.319j7m34ro3pm44j.rcgu.o
v8_rs-202d094763022048.329al1vll6brkhpa.rcgu.o
v8_rs-202d094763022048.32kluv5fuh4xl08a.rcgu.o
v8_rs-202d094763022048.33z9xc0hpdifchcu.rcgu.o
v8_rs-202d094763022048.346vnp89i4umar3l.rcgu.o
v8_rs-202d094763022048.35htr3bhef2gfhgs.rcgu.o
v8_rs-202d094763022048.365v46m9k1w5nlm.rcgu.o
v8_rs-202d094763022048.39afhp0b6jgk51qn.rcgu.o
v8_rs-202d094763022048.3aijzb57gz804t60.rcgu.o
v8_rs-202d094763022048.3b8gij1zp45gnro9.rcgu.o
v8_rs-202d094763022048.3c0u05kmq08usybb.rcgu.o
v8_rs-202d094763022048.3dwuxuay2wqx9rep.rcgu.o
v8_rs-202d094763022048.3dxvltletf26k8fa.rcgu.o
v8_rs-202d094763022048.3eo2zqphmhp7o6lz.rcgu.o
v8_rs-202d094763022048.3g50w0rglhtqapwf.rcgu.o
v8_rs-202d094763022048.3hypbsn0yucymep5.rcgu.o
v8_rs-202d094763022048.3jbeqhtlphubj9m4.rcgu.o
v8_rs-202d094763022048.3ktzm134486vi5f7.rcgu.o
v8_rs-202d094763022048.3lhyprrhbd78h0ad.rcgu.o
v8_rs-202d094763022048.3o9048r7sm7nuozb.rcgu.o
v8_rs-202d094763022048.3rnug7cwf1zg1rty.rcgu.o
v8_rs-202d094763022048.3s3x4f4v22tvygck.rcgu.o
v8_rs-202d094763022048.3si909z7tdh23z6m.rcgu.o
v8_rs-202d094763022048.3tce76r11zwixmaz.rcgu.o
v8_rs-202d094763022048.3tjfgjvw7m6c5qhv.rcgu.o
v8_rs-202d094763022048.3uvby1gi9iguikd.rcgu.o
v8_rs-202d094763022048.3y0wivneg7lx3ebz.rcgu.o
v8_rs-202d094763022048.40avm3vtlxnf7bg5.rcgu.o
v8_rs-202d094763022048.40wffc4ikc52iz4r.rcgu.o
v8_rs-202d094763022048.41133l5qdtrme2jk.rcgu.o
v8_rs-202d094763022048.43bt42k2uugpv4w.rcgu.o
v8_rs-202d094763022048.4614z9hxfaljg1u4.rcgu.o
v8_rs-202d094763022048.47btz7c8yiepstgx.rcgu.o
v8_rs-202d094763022048.49lr6vbyp4tqygh0.rcgu.o
v8_rs-202d094763022048.4a88zfuqez6byjug.rcgu.o
v8_rs-202d094763022048.4asfwfmwznts0l9c.rcgu.o
v8_rs-202d094763022048.4avrk0nf9g5pb584.rcgu.o
v8_rs-202d094763022048.4iwh6yjqu329u6xm.rcgu.o
v8_rs-202d094763022048.4jfj5ge6aquukdle.rcgu.o
v8_rs-202d094763022048.4kveyxz1mi3s6aa2.rcgu.o
v8_rs-202d094763022048.4lplrqxvnprcjylu.rcgu.o
v8_rs-202d094763022048.4nqngb05g6lo09r1.rcgu.o
v8_rs-202d094763022048.4nwzml05eedivn5s.rcgu.o
v8_rs-202d094763022048.4q5q02dl0pmyd5wh.rcgu.o
v8_rs-202d094763022048.4r6g8oj0eabq7kw.rcgu.o
v8_rs-202d094763022048.4saxrluwxp0ty0xb.rcgu.o
v8_rs-202d094763022048.4wsmrcjix5htgec.rcgu.o
v8_rs-202d094763022048.4xheirqna4q5fadc.rcgu.o
v8_rs-202d094763022048.4y5i8q6295oxtihc.rcgu.o
v8_rs-202d094763022048.4yabwjuzdlogds8b.rcgu.o
v8_rs-202d094763022048.4yq0jr85p56sx15n.rcgu.o
v8_rs-202d094763022048.4z0rhi11wbmofvc6.rcgu.o
v8_rs-202d094763022048.533y6lqpo77l22tm.rcgu.o
v8_rs-202d094763022048.55dfrzmimezuzlsd.rcgu.o
v8_rs-202d094763022048.575erz1pmbfsic16.rcgu.o
v8_rs-202d094763022048.578z76ky65rgabwj.rcgu.o
v8_rs-202d094763022048.5a8nvj4z6vengzoe.rcgu.o
v8_rs-202d094763022048.5alf2w2nsjxv424r.rcgu.o
v8_rs-202d094763022048.5bnhc0j6k439wzlg.rcgu.o
v8_rs-202d094763022048.5da1hats47wh4kpz.rcgu.o
v8_rs-202d094763022048.5ddweie16m1ztyhc.rcgu.o
v8_rs-202d094763022048.5v3mxjfdytudt8f.rcgu.o
v8_rs-202d094763022048.60oz1dz0e993umh.rcgu.o
v8_rs-202d094763022048.6iyhsnu655hd8ax.rcgu.o
v8_rs-202d094763022048.7f3ow8suhksfrpg.rcgu.o
v8_rs-202d094763022048.7u6v8dyo5xh56lx.rcgu.o
v8_rs-202d094763022048.8l7y3vtliib368l.rcgu.o
v8_rs-202d094763022048.9qmy6hehurwi1im.rcgu.o
v8_rs-202d094763022048.9xh4sk0q25hwdh3.rcgu.o
v8_rs-202d094763022048.dhc154la0ewi6e6.rcgu.o
v8_rs-202d094763022048.ecwmze1abokg4rq.rcgu.o
v8_rs-202d094763022048.ffeaaoe8wlu4asy.rcgu.o
v8_rs-202d094763022048.fkl5bi4xlpd6aac.rcgu.o
v8_rs-202d094763022048.fu2w0m1fpl2zoao.rcgu.o
v8_rs-202d094763022048.fx8wwworwct65gi.rcgu.o
v8_rs-202d094763022048.gc7of7wi09fls7e.rcgu.o
v8_rs-202d094763022048.hex5vt7aaxzi2pd.rcgu.o
v8_rs-202d094763022048.hgd1zzrv8izq9gc.rcgu.o
v8_rs-202d094763022048.hsqygsh7b1jny6a.rcgu.o
v8_rs-202d094763022048.i19ycmx8s9bjgr6.rcgu.o
v8_rs-202d094763022048.iv8gqwphj63aj9v.rcgu.o
v8_rs-202d094763022048.l8ps3l0u1xla3ss.rcgu.o
v8_rs-202d094763022048.ml12b4qwxtbgrhy.rcgu.o
v8_rs-202d094763022048.oud54tfvu8nmnev.rcgu.o
v8_rs-202d094763022048.uf9pkwcsnxy9y0u.rcgu.o
v8_rs-202d094763022048.upx9h5wm8hjd32s.rcgu.o
v8_rs-202d094763022048.uzkxhcr4or2t7fl.rcgu.o
v8_rs-202d094763022048.x0t9onq4rpmlgyc.rcgu.o
v8_rs-202d094763022048.xnpwbcyfkxy24yd.rcgu.o
v8_rs-202d094763022048.xxjd19kkzmq03zu.rcgu.o
v8_rs-202d094763022048.z0rikxj03veh2a3.rcgu.o
compatibility.o
compatibility-debug_list.o
compatibility-debug_list-2.o
compatibility-atomic-c++0x.o
compatibility-c++0x.o
compatibility-chrono.o
compatibility-condvar.o
compatibility-thread-c++0x.o
array_type_info.o
atexit_arm.o
atexit_thread.o
atomicity.o
bad_alloc.o
bad_array_length.o
bad_array_new.o
bad_cast.o
bad_typeid.o
class_type_info.o
cp-demangle.o
del_op.o
del_opa.o
del_opant.o
del_opnt.o
del_ops.o
del_opsa.o
del_opv.o
del_opva.o
del_opvant.o
del_opvnt.o
del_opvs.o
del_opvsa.o
dyncast.o
eh_alloc.o
eh_arm.o
eh_aux_runtime.o
eh_call.o
eh_catch.o
eh_exception.o
eh_globals.o
eh_personality.o
eh_ptr.o
eh_term_handler.o
eh_terminate.o
eh_throw.o
eh_tm.o
eh_type.o
eh_unex_handler.o
enum_type_info.o
function_type_info.o
fundamental_type_info.o
guard.o
guard_error.o
hash_bytes.o
nested_exception.o
new_handler.o
new_op.o
new_opa.o
new_opant.o
new_opnt.o
new_opv.o
new_opva.o
new_opvant.o
new_opvnt.o
pbase_type_info.o
pmem_type_info.o
pointer_type_info.o
pure.o
si_class_type_info.o
tinfo.o
tinfo2.o
vec.o
vmi_class_type_info.o
vterminate.o
allocator-inst.o
basic_file.o
bitmap_allocator.o
c++locale.o
codecvt.o
codecvt_members.o
collate_members.o
collate_members_cow.o
complex_io.o
concept-inst.o
cow-istream-string.o
ext-inst.o
globals_io.o
hash_tr1.o
hashtable_tr1.o
ios_failure.o
ios_init.o
ios_locale.o
istream-string.o
istream.o
list-aux-2.o
list-aux.o
list.o
list_associated-2.o
list_associated.o
locale.o
locale_facets.o
locale_init.o
localename.o
math_stubs_float.o
math_stubs_long_double.o
messages_members.o
messages_members_cow.o
misc-inst.o
monetary_members.o
monetary_members_cow.o
mt_allocator.o
numeric_members.o
numeric_members_cow.o
parallel_settings.o
pool_allocator.o
stdexcept.o
streambuf.o
strstream.o
time_members.o
tree.o
valarray.o
chrono.o
lt1-codecvt.o
condition_variable.o
cow-fstream-inst.o
cow-locale_init.o
cow-shim_facets.o
cow-sstream-inst.o
cow-stdexcept.o
cow-string-inst.o
cow-string-io-inst.o
cow-wstring-inst.o
cow-wstring-io-inst.o
ctype.o
ctype_configure_char.o
ctype_members.o
cxx11-hash_tr1.o
cxx11-ios_failure.o
cxx11-locale-inst.o
cxx11-shim_facets.o
cxx11-stdexcept.o
cxx11-wlocale-inst.o
debug.o
ext11-inst.o
fstream-inst.o
functexcept.o
functional.o
futex.o
future.o
hash_c++0x.o
hashtable_c++0x.o
ios-inst.o
ios.o
ios_errcat.o
iostream-inst.o
istream-inst.o
limits.o
locale-inst.o
mutex.o
ostream-inst.o
placeholders.o
random.o
regex.o
shared_ptr.o
snprintf_lite.o
sso_string.o
sstream-inst.o
streambuf-inst.o
string-inst.o
string-io-inst.o
system_error.o
thread.o
wlocale-inst.o
wstring-inst.o
wstring-io-inst.o
cow-fs_dir.o
cow-fs_ops.o
cow-fs_path.o
lt2-cow-string-inst.o
floating_from_chars.o
floating_to_chars.o
fs_dir.o
fs_ops.o
fs_path.o
memory_resource.o
lt3-ostream-inst.o
lt4-string-inst.o
lt5-sstream-inst.o
tzdb.o

As you can see, it contains many object files from libstdc++ inside of itself. The symbols are clearly marked as defined within this artefact.
For example, we can read the symbol table and find many C++ types and functions being present in the resulting archive:

0000000000000000 T std::chrono::reload_tzdb()
0000000000000000 t std::chrono::reload_tzdb() [clone .cold]
0000000000000000 T std::chrono::current_zone()
0000000000000000 t std::chrono::current_zone() [clone .cold]
0000000000000000 t std::chrono::(anonymous namespace)::tzdata_stream::ispanbuf::~ispanbuf()
0000000000000000 t std::chrono::(anonymous namespace)::tzdata_stream::ispanbuf::~ispanbuf()
0000000000000000 t std::chrono::(anonymous namespace)::tzdata_stream::ispanbuf::~ispanbuf()
0000000000000000 t std::chrono::(anonymous namespace)::tzdata_stream::tzdata_stream()
0000000000000000 t std::chrono::(anonymous namespace)::tzdata_stream::tzdata_stream() [clone .cold]
0000000000000000 t std::chrono::(anonymous namespace)::tzdata_stream::~tzdata_stream()
0000000000000000 t std::chrono::(anonymous namespace)::tzdata_stream::~tzdata_stream()

MeirShpilraien
MeirShpilraien previously approved these changes Nov 15, 2023
@iddm iddm force-pushed the dont-produce-a-shared-library branch from 5ced7bd to cb2331a Compare November 15, 2023 11:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants