commit 2db637f21b83701d21aa66295cd35c737649ecdc Author: Emery Hemingway Date: Tue May 5 21:39:21 2020 +0530 Produce libraries with conventional names diff --git a/repos/base/mk/dep_lib.mk b/repos/base/mk/dep_lib.mk index 21fcb77e58..533aebffa3 100644 --- a/repos/base/mk/dep_lib.mk +++ b/repos/base/mk/dep_lib.mk @@ -142,8 +142,8 @@ endif echo " DEBUG_DIR=\$$(DEBUG_DIR)"; \ echo "") >> $(LIB_DEP_FILE) ifdef SHARED_LIB - @(echo "SO_NAME($(LIB)) := $(LIB).lib.so"; \ - echo "") >> $(LIB_DEP_FILE) + @(echo "SO_NAME($(LIB)) := lib$(LIB).so"; \ + echo "") | sed -e 's/libld.so/ld.lib.so/' -e 's/liblib/lib/' >> $(LIB_DEP_FILE) else @(echo "ARCHIVE_NAME($(LIB)) := $(LIB).lib.a"; \ echo "") >> $(LIB_DEP_FILE) diff --git a/repos/base/mk/dep_prg.mk b/repos/base/mk/dep_prg.mk index 190dd92aa1..6611d05d2a 100644 --- a/repos/base/mk/dep_prg.mk +++ b/repos/base/mk/dep_prg.mk @@ -93,7 +93,7 @@ endif # if the target does not depend on any library with unsatisfied build # requirements. In such a case, the target cannot be linked anyway. # - @(echo "ifeq (\$$(filter \$$(DEP_A_$(TARGET).prg:.lib.a=) \$$(DEP_SO_$(TARGET).prg:.lib.so=) $(LIBS),\$$(INVALID_DEPS)),)"; \ + @(echo "ifeq (\$$(filter \$$(DEP_A_$(TARGET).prg:.lib.a=) \$$(patsubst lib%.lib.so,%,$(DEP_SO_$(TARGET).prg)) $(LIBS),\$$(INVALID_DEPS)),)"; \ echo "all: $(TARGET).prg"; \ echo "endif") >> $(LIB_DEP_FILE) # diff --git a/repos/base/mk/generic.mk b/repos/base/mk/generic.mk index d551ac205b..e23fade62f 100644 --- a/repos/base/mk/generic.mk +++ b/repos/base/mk/generic.mk @@ -129,7 +129,7 @@ binary_%.o: % # This is a problem in situations where the undefined symbol is resolved by an # archive rather than the target. I.e., when linking posix.lib.a (which # provides 'Libc::Component::construct'), the 'construct' function is merely -# referenced by the libc.lib.so's 'Component::construct' function. But this +# referenced by the libc.so's 'Component::construct' function. But this # reference apparently does not suffice to keep the posix.lib.a's symbol. By # adding a hard dependency, we force the linker to resolve the symbol and don't # drop posix.lib.a. @@ -164,12 +164,17 @@ endif # time a user of the library is linked, the ABI stub should be used instead of # the library. # -select_so = $(firstword $(wildcard $(LIB_CACHE_DIR)/$(1:.lib.so=)/$(1:.lib.so=).abi.so \ - $(LIB_CACHE_DIR)/$(1:.lib.so=)/$(1:.lib.so=).lib.so)) +select_so = $(firstword $(wildcard \ + $(LIB_CACHE_DIR)/$(patsubst lib%.so,%,$1)/$(patsubst lib%.so,%,$1).abi.so \ + $(LIB_CACHE_DIR)/$(patsubst lib%.so,%,$1)/$(1) \ + $(LIB_CACHE_DIR)/$(patsubst %.so,%,$1)/$(1) \ + $(LIB_CACHE_DIR)/$(1:.lib.so=)/$(1:.lib.so=).abi.so \ + $(LIB_CACHE_DIR)/$(1:.lib.so=)/$(1:.lib.so=).lib.so \ + $(LIB_CACHE_DIR)/$(1:.so=)/$(1:.so=).abi.so )) ifneq ($(filter-out $(foreach s,$(SHARED_LIBS),$(realpath $s)), \ $(foreach s,$(SHARED_LIBS),$(call select_so,$s))),) .PHONY: $(SHARED_LIBS) endif $(SHARED_LIBS): - $(VERBOSE)ln -sf $(call select_so,$@) $@ + $(VERBOSE)ln -sf $(call select_so,$@) $(patsubst liblib%,lib%,$@) diff --git a/repos/base/mk/lib.mk b/repos/base/mk/lib.mk index bfee2c7420..fac49c7298 100644 --- a/repos/base/mk/lib.mk +++ b/repos/base/mk/lib.mk @@ -123,14 +123,20 @@ message: include $(BASE_DIR)/mk/generic.mk # -# Name of .lib.a or .lib.so file to create +# Name of .lib.a or lib.so file to create # # Skip the creation and installation of an .so file if there are no # ingredients. This is the case if the library is present as ABI only. # ifdef SHARED_LIB ifneq ($(sort $(OBJECTS) $(LIBS)),) - LIB_SO := $(addsuffix .lib.so,$(LIB)) + ifeq ($(LIB),ld) + LIB_SO := ld.lib.so + else ifeq ($(patsubst ld-%,ld-,$(LIB)),ld-) + LIB_SO := $(LIB).lib.so + else + LIB_SO := $(patsubst liblib%,lib%,$(patsubst %,lib%.so,$(LIB))) + endif INSTALL_SO := $(INSTALL_DIR)/$(LIB_SO) DEBUG_SO := $(DEBUG_DIR)/$(LIB_SO) endif @@ -150,7 +156,7 @@ ifneq ($(LIB_SO),) endif # -# Trigger the creation of the .lib.a or .lib.so file +# Trigger the creation of the .lib.a or lib.so file # LIB_TAG := $(addsuffix .lib.tag,$(LIB)) all: $(LIB_TAG) @@ -203,7 +209,7 @@ STATIC_LIBS := $(sort $(foreach l,$(ARCHIVES:.lib.a=),$(LIB_CACHE_DIR)/$l/ STATIC_LIBS_BRIEF := $(subst $(LIB_CACHE_DIR),$$libs,$(STATIC_LIBS)) # -# Rule to build the .lib.so file +# Rule to build the lib.so file # # When linking the shared library, we have to link all shared sub libraries # (LIB_SO_DEPS) to the library to store the library-dependency information in diff --git a/repos/base/mk/prg.mk b/repos/base/mk/prg.mk index 04caae01b2..8d64b0d34e 100644 --- a/repos/base/mk/prg.mk +++ b/repos/base/mk/prg.mk @@ -235,6 +235,6 @@ endif clean_prg_objects: $(MSG_CLEAN)$(PRG_REL_DIR) $(VERBOSE)$(RM) -f $(OBJECTS) $(OBJECTS:.o=.d) $(TARGET) $(TARGET).stripped $(BINDER_SRC) - $(VERBOSE)$(RM) -f *.d *.i *.ii *.s *.ali *.lib.so + $(VERBOSE)$(RM) -f *.d *.i *.ii *.s *.ali *.lib.so lib*.so clean: clean_prg_objects diff --git a/repos/base/src/lib/ldso/include/file.h b/repos/base/src/lib/ldso/include/file.h index 1c9ce53ca3..a8875a781e 100644 --- a/repos/base/src/lib/ldso/include/file.h +++ b/repos/base/src/lib/ldso/include/file.h @@ -132,10 +132,10 @@ struct Linker::Elf_file : File * the end of the linker area to ensure that the newly loaded * binary has enough room within the linker area. */ - bool const resident = (name == "libc.lib.so") - || (name == "libm.lib.so") - || (name == "posix.lib.so") - || (strcmp(name.string(), "vfs", 3) == 0); + bool const resident = (name == "libc.so") + || (name == "libm.so") + || (name == "libposix.so") + || (strcmp(name.string(), "libvfs", 6) == 0); reloc_base = resident ? Region_map::r()->alloc_region_at_end(size) : Region_map::r()->alloc_region(size); diff --git a/repos/libports/src/lib/libc/execve.cc b/repos/libports/src/lib/libc/execve.cc index 73fd407db7..554d943763 100644 --- a/repos/libports/src/lib/libc/execve.cc +++ b/repos/libports/src/lib/libc/execve.cc @@ -325,10 +325,10 @@ void Libc::init_execve(Env &env, Genode::Allocator &alloc, void *user_stack_ptr, _binary_name_ptr = &binary_name; _fd_alloc_ptr = &fd_alloc; - Dynamic_linker::keep(env, "libc.lib.so"); - Dynamic_linker::keep(env, "libm.lib.so"); - Dynamic_linker::keep(env, "posix.lib.so"); - Dynamic_linker::keep(env, "vfs.lib.so"); + Dynamic_linker::keep(env, "libc.so"); + Dynamic_linker::keep(env, "libm.so"); + Dynamic_linker::keep(env, "libposix.so"); + Dynamic_linker::keep(env, "libvfs.so"); } diff --git a/repos/libports/src/lib/libc/kernel.cc b/repos/libports/src/lib/libc/kernel.cc index 5dd4b2a2d6..430295e7d5 100644 --- a/repos/libports/src/lib/libc/kernel.cc +++ b/repos/libports/src/lib/libc/kernel.cc @@ -308,10 +308,10 @@ void Libc::Kernel::_clone_state_from_parent() * regular startup of the child. */ bool const blacklisted = (name == "ld.lib.so") - || (name == "libc.lib.so") - || (name == "libm.lib.so") - || (name == "posix.lib.so") - || (strcmp(name.string(), "vfs", 3) == 0); + || (name == "libc.so") + || (name == "libm.so") + || (name == "libposix.so") + || (strcmp(name.string(), "libvfs", 6) == 0); if (!blacklisted) copy_from_parent(range_attr(node)); } diff --git a/repos/os/src/lib/vfs/file_system_factory.cc b/repos/os/src/lib/vfs/file_system_factory.cc index 48069d3fb8..53e8678757 100644 --- a/repos/os/src/lib/vfs/file_system_factory.cc +++ b/repos/os/src/lib/vfs/file_system_factory.cc @@ -117,7 +117,7 @@ Vfs::Global_file_system_factory::_try_create(Vfs::Env &env, Library_name Vfs::Global_file_system_factory::_library_name(Node_name const &node_name) { char lib_name [Library_name::capacity()]; - Genode::snprintf(lib_name, sizeof(lib_name), "vfs_%s.lib.so", + Genode::snprintf(lib_name, sizeof(lib_name), "libvfs_%s.so", node_name.string()); return Library_name(lib_name);