|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v2] build: support for sharing libraries across multiple platforms
Hi Simon,
Ok, got it, yes, if you could please send a v2 with a clearer explanation that
would be great.
Thanks,
-- Felipe
On 24.05.19, 11:52, "Simon Kuenzer" <simon.kuenzer@xxxxxxxxx> wrote:
Hey Felipe,
thanks a lot for looking into this. Just to make sure: What this patch
fixes is the case that you assign a single library to multiple
platforms. It enables the case that platforms can share the same library
build (imagine a kvm and a bare-metal platform could share a driver
library for PCI bus). If I understood you right, you tested the case
where you include a single library multiple times to the _same_ platform
(here: kvm). This is is still something else and I would prefer keeping
this to fail. I can't image how useful correcting the behaviour to make
work would be. Maybe we should make the patch description a bit more
clear about this.
Thanks,
Simon
On 23.05.19 15:36, Felipe Huici wrote:
> Hi Florian, Simon,
>
> If I duplicate a line in say plat/kvm/Makefile.uk such as $(eval $(call
addplatlib_s,kvm,libkvmpci,$(CONFIG_KVM_PCI))) I still get multiple definition
errors on the final link step. Perhaps some sort()s are missing in the linker
script(s)?
>
> Thanks,
>
> -- Felipe
>
> On 23.05.19, 11:16, "Minios-devel on behalf of Florian Schmidt"
<minios-devel-bounces@xxxxxxxxxxxxxxxxxxxx on behalf of
florian.schmidt@xxxxxxxxx> wrote:
>
> Currently, if a library is added to the list of libraries-to-be-built
> more than once, this will lead to problems when make rules are
> installed, as well as in the linking step (trying to link multiple
> versions in, resulting in duplicate symbols).
> This patch aggregates all libraries first, then removes duplicates
(via
> make's $(sort) function), and so makes sure no library is built more
> than once.
>
> Why would this happen? The best example is having a platform library
used
> by two platforms, for example, using libpci for a kvm and a baremetal
> platform, which requires two addplatlib calls, one for each platform
it
> is registered with.
>
> The same applies to cleaning, respectively.
>
> Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>
> Signed-off-by: Florian Schmidt <florian.schmidt@xxxxxxxxx>
> ---
> support/build/Makefile.build | 21 +++++++++++----------
> support/build/Makefile.clean | 8 ++++++--
> 2 files changed, 17 insertions(+), 12 deletions(-)
>
> diff --git a/support/build/Makefile.build
b/support/build/Makefile.build
> index 5679741d..6a0091c2 100644
> --- a/support/build/Makefile.build
> +++ b/support/build/Makefile.build
> @@ -26,16 +26,12 @@
> ifneq ($(call qstrip,$(UK_LIBS) $(UK_LIBS-y)),)
> $(foreach L,$(UK_LIBS) $(UK_LIBS-y), \
> $(if $(call qstrip,$($(call uc,$(L))_SRCS) $($(call
uc,$(L))_SRCS-y)), \
> -$(foreach S,$($(call uc,$(L))_SRCS) $($(call uc,$(L))_SRCS-y), \
> -$(eval $(call buildrule_libobj_multitarget,$(L),$(S))) \
> -); \
> -$(eval $(call buildrule_olib,$(L))); \
> $(eval UK_OLIBS-y += $(call libname2olib,$(L))); \
> +$(eval UKBUILD_LIBS += $(L)); \
> ) \
> )
> endif
>
> -
> #################################################
> #
> # Install build rules for each enabled platform
> @@ -47,13 +43,18 @@ $(foreach P,$(UK_PLATS) $(UK_PLATS-y), \
> $(if $(call qstrip,$($(call uc,$(P))_LIBS) $($(call
uc,$(P))_LIBS-y)), \
> $(foreach L,$($(call uc,$(P))_LIBS) $($(call uc,$(P))_LIBS-y), \
> $(if $(call qstrip,$($(call uc,$(L))_SRCS) $($(call
uc,$(L))_SRCS-y)), \
> +$(eval $(call uc,$(P))_OLIBS-y += $(call libname2olib,$(L))); \
> +$(eval UKBUILD_LIBS += $(L)); \
> +) \
> +) \
> +) \
> +)
> +
> +endif
> +
> +$(foreach L,$(sort $(UKBUILD_LIBS)), \
> $(foreach S,$($(call uc,$(L))_SRCS) $($(call uc,$(L))_SRCS-y), \
> $(eval $(call buildrule_libobj_multitarget,$(L),$(S))) \
> ); \
> $(eval $(call buildrule_olib,$(L))); \
> -$(eval $(call uc,$(P))_OLIBS-y += $(call libname2olib,$(L))); \
> -) \
> -) \
> -); \
> )
> -endif
> diff --git a/support/build/Makefile.clean
b/support/build/Makefile.clean
> index 0ad3d155..a131119e 100644
> --- a/support/build/Makefile.clean
> +++ b/support/build/Makefile.clean
> @@ -25,7 +25,7 @@
>
> ifneq ($(call qstrip,$(UK_LIBS) $(UK_LIBS-y)),)
> $(foreach L,$(UK_LIBS) $(UK_LIBS-y), \
> -$(eval $(call cleanrule_lib,$(L))); \
> +$(eval UKCLEAN_LIBS += $(L)); \
> )
> endif
>
> @@ -40,8 +40,12 @@ ifneq ($(call qstrip,$(UK_PLATS) $(UK_PLATS-y)),)
> $(foreach P,$(UK_PLATS) $(UK_PLATS-y), \
> $(if $(call qstrip,$($(call uc,$(P))_LIBS) $($(call
uc,$(P))_LIBS-y)), \
> $(foreach L,$($(call uc,$(P))_LIBS) $($(call uc,$(P))_LIBS-y), \
> -$(eval $(call cleanrule_lib,$(L))); \
> +$(eval UKCLEAN_LIBS += $(L)); \
> ) \
> ) \
> )
> endif
> +
> +$(foreach L,$(sort $(UKCLEAN_LIBS)), \
> +$(eval $(call cleanrule_lib,$(L))); \
> +)
> --
> 2.21.0
>
>
> _______________________________________________
> Minios-devel mailing list
> Minios-devel@xxxxxxxxxxxxxxxxxxxx
> https://lists.xenproject.org/mailman/listinfo/minios-devel
>
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |