|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v3 3/8] build: Introduce default linker script variable
Hi Sharan,
I have one comment inline.
-- Felipe
On 12.08.19, 16:04, "Minios-devel on behalf of Sharan Santhanam"
<minios-devel-bounces@xxxxxxxxxxxxxxxxxxxx on behalf of
Sharan.Santhanam@xxxxxxxxx> wrote:
Each platform may define `UK_PLAT_PLATNAME_DEF_LDS`. This variable will
be used by Unikraft build system to different default linker script
from additional linker script and automatically generate rules to link
the final application image. If the platform does not introduce this
variable, then all the linker script would be defined as extra linker
scripts.
Signed-off-by: Sharan Santhanam <sharan.santhanam@xxxxxxxxx>
---
doc/guides/developers-platform.rst | 16 +++++++++++-----
plat/kvm/Makefile.uk | 13 ++++++++++++-
plat/xen/Makefile.uk | 12 ++++++++++++
support/build/Makefile.rules | 5 +++--
4 files changed, 38 insertions(+), 8 deletions(-)
diff --git a/doc/guides/developers-platform.rst
b/doc/guides/developers-platform.rst
index c39fbb29..be72b1a9 100644
--- a/doc/guides/developers-platform.rst
+++ b/doc/guides/developers-platform.rst
@@ -15,23 +15,29 @@ treated as libraries in Unikraft but there are a few
differences:
3. You need to provide a linker script and name the file ``Linker.uk``.
-4. You need to place all platform files in the Unikraft repo under
+4. The default linker script for a platform is provided using the
+ ``UK_PLAT_PLATNAME_DEF_LDS`` variable in the Makefile.uk of the platform
+ library. The default linker script is also added as a source file to the
+ platform library to be built. If the default linker script is not
provided,
+ then Unikraft would rely on the linker script provided by the tool
chain.
It's not entirely clear what the "script provided by the tool chain" means,
perhaps you could be more specific?
+
+5. You need to place all platform files in the Unikraft repo under
``plat/platname/``.
-5. A platform have to implement interfaces defined in ``include/uk/plat``
+6. A platform have to implement interfaces defined in ``include/uk/plat``
(this is analogue to architectures that have to implement interfaces in
``include/uk/arch``)
-6. They do not use any external source files, i.e., all source code is
+7. They do not use any external source files, i.e., all source code is
within the Unikraft tree.
-7. They must not have dependencies on external libraries, i.e., the
+8. They must not have dependencies on external libraries, i.e., the
Unikraft repo must be able to be built on its own. Remember that
for such builds, ``libnolibc`` has to be sufficient ``libc`` replacement
to compile, link, and execute internal libraries. This means that nolibc
has to be extended from time to time.
-8. All changes/additions to ``include/uk/plat`` and ``include/uk/arch``
+9. All changes/additions to ``include/uk/plat`` and ``include/uk/arch``
have to be completely independent of any library (internal and
external).
They do not include any header provided by any library and never
conflict
with any library. Most of the times this is challenging for defining
data
diff --git a/plat/kvm/Makefile.uk b/plat/kvm/Makefile.uk
index 7d0c6965..f52bd4ec 100644
--- a/plat/kvm/Makefile.uk
+++ b/plat/kvm/Makefile.uk
@@ -24,6 +24,17 @@ LIBKVMPLAT_ASFLAGS += -DKVMPLAT
LIBKVMPLAT_CFLAGS += -DKVMPLAT
LIBKVMPLAT_CXXFLAGS += -DKVMPLAT
+##
+## Default Linker script
+ifeq ($(CONFIG_ARCH_X86_64),y)
+UK_PLAT_KVM_DEF_LDS :=
$(CONFIG_UK_BASE)/plat/kvm/x86/link64.lds.S
+else
+ifeq ($(CONFIG_ARCH_ARM_64),y)
+UK_PLAT_KVM_DEF_LDS :=
$(CONFIG_UK_BASE)/plat/kvm/arm/link64.lds.S
+endif
+endif
+
+
##
## Architecture library definitions for x86_64
##
@@ -81,7 +92,7 @@ LIBKVMPLAT_SRCS-y += $(LIBKVMPLAT_BASE)/irq.c
LIBKVMPLAT_SRCS-y += $(LIBKVMPLAT_BASE)/io.c
LIBKVMPLAT_SRCS-y += $(UK_PLAT_COMMON_BASE)/lcpu.c|common
LIBKVMPLAT_SRCS-y += $(UK_PLAT_COMMON_BASE)/memory.c|common
-LIBKVMPLAT_SRCS-y += $(KVM_LDSCRIPT_SRC-y)
+LIBKVMPLAT_SRCS-y += $(UK_PLAT_KVM_DEF_LDS)
##
## PCI library definitions
diff --git a/plat/xen/Makefile.uk b/plat/xen/Makefile.uk
index 69b10efc..3f185256 100644
--- a/plat/xen/Makefile.uk
+++ b/plat/xen/Makefile.uk
@@ -18,6 +18,16 @@ LIBXENPLAT_ASFLAGS-y += -DXENPLAT
-D__XEN_INTERFACE_VERSION__=$(XEN_INTERFAC
LIBXENPLAT_CFLAGS-y += -DXENPLAT
-D__XEN_INTERFACE_VERSION__=$(XEN_INTERFACE_VERSION)
LIBXENPLAT_CXXFLAGS-y += -DXENPLAT
-D__XEN_INTERFACE_VERSION__=$(XEN_INTERFACE_VERSION)
+##
+## Default Linker script
+ifeq ($(CONFIG_ARCH_X86_64),y)
+UK_PLAT_XEN_DEF_LDS :=
$(CONFIG_UK_BASE)/plat/xen/x86/link64.lds.S
+else
+ifeq ($(CONFIG_ARCH_ARM_32),y)
+UK_PLAT_XEN_DEF_LDS :=
$(CONFIG_UK_BASE)/plat/xen/arm/link32.lds.S
+endif
+endif
+
##
## Platform library definitions
##
@@ -25,6 +35,8 @@ LIBXENPLAT_ASINCLUDES-y +=
-I$(LIBXENPLAT_BASE)/include
LIBXENPLAT_ASINCLUDES-y += -I$(UK_PLAT_COMMON_BASE)/include
LIBXENPLAT_CINCLUDES-y += -I$(LIBXENPLAT_BASE)/include
LIBXENPLAT_CINCLUDES-y += -I$(UK_PLAT_COMMON_BASE)/include
+
+LIBXENPLAT_SRCS-y += $(UK_PLAT_XEN_DEF_LDS)
LIBXENPLAT_SRCS-y += $(LIBXENPLAT_BASE)/hypervisor.c
LIBXENPLAT_SRCS-y += $(LIBXENPLAT_BASE)/memory.c
LIBXENPLAT_SRCS-y += $(LIBXENPLAT_BASE)/io.c
diff --git a/support/build/Makefile.rules b/support/build/Makefile.rules
index 29e0ce93..3147f4cc 100644
--- a/support/build/Makefile.rules
+++ b/support/build/Makefile.rules
@@ -137,8 +137,9 @@ endef
# Register a platform to the build system
define addplat =
UK_PLATS += $(1)
-$(eval UK_PLAT_$(call uc,$(1))_BASE := $(_IMPORT_BASE))
-$(eval UK_PLAT_$(call uc,$(1))_LINKER := $(_IMPORT_BASE)/Linker.uk)
+$(eval UK_PLAT_$(call uc,$(1))_BASE := $(_IMPORT_BASE))
+$(eval UK_PLAT_$(call uc,$(1))_LINKER := $(_IMPORT_BASE)/Linker.uk)
+$(eval UK_PLAT_$(call uc,$(1))_DEF_LDS :=)
endef
# addplat_s $platname,$switch
--
2.20.1
_______________________________________________
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 |