[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT PATCH 2/9] build: Introduce a new variable UK_FAMILY



We want modify the folders layout for multi-architectures like:
unikraft----arch----arm----arm32
              |      |-----arm64
              |
              |-----x86----x86
                     |-----x86_64

In this case, we introduce a new variable UK_FAMILY for build scipts.
we should not expect the user to set or select UK_FAMILY in a menu or
by setting the variable externally. So we retrieve UK_FAMILY directly
from UK_ARCH. Because of this we can keep Compiler.uk, Makefile.uk,
and Config.uk directly under the UK_FAMILY directory.

Signed-off-by: Wei Chen <Wei.Chen@xxxxxxx>
---
 Makefile                | 25 +++++++++-----
 arch/Config.uk          |  2 +-
 arch/x86/Compiler.uk    |  6 ++++
 arch/x86/Config.uk      | 89 +++++++++++++++++++++++++++++++++++++++++++++++++
 arch/x86/Makefile.uk    | 37 ++++++++++++++++++++
 arch/x86_64/Compiler.uk |  6 ----
 arch/x86_64/Config.uk   | 89 -------------------------------------------------
 arch/x86_64/Makefile.uk | 37 --------------------
 8 files changed, 150 insertions(+), 141 deletions(-)
 create mode 100644 arch/x86/Compiler.uk
 create mode 100644 arch/x86/Config.uk
 create mode 100644 arch/x86/Makefile.uk
 delete mode 100644 arch/x86_64/Compiler.uk
 delete mode 100644 arch/x86_64/Config.uk
 delete mode 100644 arch/x86_64/Makefile.uk

diff --git a/Makefile b/Makefile
index f8cb661..49e5070 100644
--- a/Makefile
+++ b/Makefile
@@ -297,7 +297,6 @@ export HOSTARCH := $(shell LC_ALL=C $(HOSTCC_NOCCACHE) -v 
2>&1 | \
 export HOSTAR HOSTAS HOSTCC HOSTCC_VERSION HOSTCXX HOSTLD HOSTARCH
 export HOSTCC_NOCCACHE HOSTCXX_NOCCACHE
 
-
 
################################################################################
 # Unikraft Architecture
 
################################################################################
@@ -337,14 +336,24 @@ endif
 override ARCH := $(UK_ARCH)
 export UK_ARCH ARCH
 
-# Quick-check if architecture exists
+# Retrive target CPU family from architecture
+export UK_FAMILY ?= $(shell echo "$(UK_ARCH)" | \
+                       sed -e "s/-.*//" \
+                               -e 's//\1/' \
+                               -e 's/x86.*/x86/' \
+                               -e 's/sparc64/sparc/' \
+                               -e 's/arm.*/arm/' \
+                               -e 's/powerpc.*/powerpc/' \
+                               -e 's/sh.*/sh/' )
+
+# Quick-check if architecture family exists
 ifeq ($(filter $(null_targets) print-vars,$(MAKECMDGOALS)),)
-ifeq ($(wildcard $(UK_BASE)/arch/$(ARCH)/Makefile.uk),)
-$(error Target architecture ($(ARCH)) is currently not supported (could not 
find $(UK_BASE)/arch/$(ARCH)/Makefile.uk).)
+ifeq ($(wildcard $(UK_BASE)/arch/$(UK_FAMILY)/Makefile.uk),)
+$(error Target family ($(UK_FAMILY)) is currently not supported (could not 
find $(UK_BASE)/arch/$(UK_FAMILY)/Makefile.uk).)
 endif
 
-ifeq ($(wildcard arch/$(ARCH)/Compiler.uk),)
-$(error Target architecture ($(ARCH)) is currently not supported (could not 
find $(UK_BASE)/arch/$(ARCH)/Compiler.uk).)
+ifeq ($(wildcard $(UK_BASE)/arch/$(UK_FAMILY)/Compiler.uk),)
+$(error Target family ($(UK_FAMILY)) is currently not supported (could not 
find $(UK_BASE)/arch/$(UK_FAMILY)/Compiler.uk).)
 endif
 endif
 
@@ -383,7 +392,7 @@ unexport MACHINE
 # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile.uk
 CROSS_COMPILE := $(CROSS_COMPILE:"%"=%)
 
-include $(UK_BASE)/arch/$(UK_ARCH)/Compiler.uk
+include $(UK_BASE)/arch/$(UK_FAMILY)/Compiler.uk
 
 # Make variables (CC, etc...)
 LD             := $(CROSS_COMPILE)ld
@@ -445,7 +454,7 @@ endif
 $(foreach E,$(ELIB_DIR), \
        $(eval $(call _import_lib,$(E))); \
 )
-$(eval $(call _import_lib,$(UK_BASE)/arch/$(UK_ARCH))) # architecture libraries
+$(eval $(call _import_lib,$(UK_BASE)/arch/$(UK_FAMILY))) # architecture 
libraries
 include $(UK_BASE)/plat/Makefile.uk # platform libraries
 include $(UK_BASE)/lib/Makefile.uk # libraries
 include $(UK_BASE)/Makefile.uk # Unikraft base
diff --git a/arch/Config.uk b/arch/Config.uk
index 36df8d1..a040288 100644
--- a/arch/Config.uk
+++ b/arch/Config.uk
@@ -13,7 +13,7 @@ config ARCH_ARM_32
 endchoice
 
 if (ARCH_X86_64)
-       source "arch/x86_64/Config.uk"
+       source "arch/x86/Config.uk"
 endif
 if (ARCH_ARM_32)
        source "arch/arm/Config.uk"
diff --git a/arch/x86/Compiler.uk b/arch/x86/Compiler.uk
new file mode 100644
index 0000000..a5470ed
--- /dev/null
+++ b/arch/x86/Compiler.uk
@@ -0,0 +1,6 @@
+# set cross compile
+ifeq ($(CROSS_COMPILE),)
+ifneq ($(UK_ARCH),$(HOSTARCH))
+       CROSS_COMPILE := x86_64-linux-gnu-
+endif
+endif
diff --git a/arch/x86/Config.uk b/arch/x86/Config.uk
new file mode 100644
index 0000000..ca49eed
--- /dev/null
+++ b/arch/x86/Config.uk
@@ -0,0 +1,89 @@
+choice
+       prompt "Processor Optimization"
+       default MARCH_GENERIC
+       help
+               Optimize the code for selected target processor
+               Generic x86_64 does not enable any additional CPU features
+               (e.g., SSE, 3DNow!) and produces highly protable code for x86.
+
+config MARCH_NATIVE
+       bool "Auto-detect host CPU"
+       help
+               Optimize compilation to host CPU
+               Please note that this option will fail in case of 
cross-compilation
+
+config MARCH_GENERIC
+       bool "Generic 64-bit"
+       help
+               Compile for 64-bit compatible x86 CPUs
+
+config MARCH_NOCONA
+       bool "Intel Pentium 4/Xeon (Nocona)"
+       help
+               Improved version of Intel Pentium 4 CPU with 64-bit extensions, 
MMX, SSE, SSE2 and SSE3 instruction set support.
+
+config MARCH_CORE2
+       bool "Intel Core 2/Xeon"
+       help
+               Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 
and SSSE3 instruction set support.
+
+config MARCH_COREI7
+       bool "Intel Core i7/Xeon"
+       help
+               Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, 
SSSE3, SSE4.1 and SSE4.2 instruction set support.
+
+config MARCH_COREI7AVX
+       bool "Intel Core i7/Xeon +AVX"
+       help
+               Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, 
SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction set support.
+
+config MARCH_COREI7AVXI
+       bool "Intel Core/Xeon +AVX +RDRND"
+       help
+               Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, 
SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C instruction 
set support.
+
+config MARCH_ATOM
+       bool "Intel Atom 64-bit"
+       help
+               Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and 
SSSE3 instruction set support.
+
+config MARCH_K8
+       bool "AMD Athlon64/Opteron"
+       help
+               Processors based on the AMD K8 core with x86-64 instruction set 
support, including the AMD Opteron, Athlon 64, and Athlon 64 FX processors. 
(This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! and 64-bit instruction 
set extensions.)
+
+config MARCH_K8SSE3
+       bool "AMD Athlon64/Opteron +SSE3"
+       help
+               Improved versions of AMD K8 cores with SSE3 instruction set 
support.
+
+config MARCH_AMDFAM10
+       bool "AMD Family 10h cores"
+       help
+               CPUs based on AMD Family 10h cores with x86-64 instruction set 
support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, 
ABM and 64-bit instruction set extensions.)
+
+config MARCH_BTVER1
+       bool "AMD Family 14h cores"
+       help
+               CPUs based on AMD Family 14h cores with x86-64 instruction set 
support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 
64-bit instruction set extensions.)
+
+config MARCH_BDVER1
+       bool "AMD Family 15h cores (bdver1)"
+       help
+               CPUs based on AMD Family 15h cores with x86-64 instruction set 
support. (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, 
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set 
extensions.)
+
+config MARCH_BDVER2
+       bool "AMD Family 15h cores (bdver2)"
+       help
+               AMD Family 15h core based CPUs with x86-64 instruction set 
support. (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, 
CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit 
instruction set extensions.)
+
+config MARCH_BDVER3
+       bool "AMD Family 15h cores (bdver3)"
+       help
+               AMD Family 15h core based CPUs with x86-64 instruction set 
support. (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, 
CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit 
instruction set extensions.
+
+config MARCH_BTVER2
+       bool "AMD Family 16h cores"
+       help
+               CPUs based on AMD Family 16h cores with x86-64 instruction set 
support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, 
CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX and 64-bit instruction set 
extensions.
+endchoice
diff --git a/arch/x86/Makefile.uk b/arch/x86/Makefile.uk
new file mode 100644
index 0000000..8c9bfe3
--- /dev/null
+++ b/arch/x86/Makefile.uk
@@ -0,0 +1,37 @@
+ASFLAGS  += -D__X86_64__
+ASFLAGS  += -m64
+CFLAGS   += -D__X86_64__
+CFLAGS   += -m64 -mno-red-zone -fno-reorder-blocks 
-fno-asynchronous-unwind-tables
+CXXFLAGS += -D__X86_64__
+CXXFLAGS += -m64 -mno-red-zone -fno-reorder-blocks 
-fno-asynchronous-unwind-tables
+
+CFLAGS-$(MARCH_GENERIC)      += -mtune=generic
+CXXFLAGS-$(MARCH_GENERIC)    += -mtune=generic
+CFLAGS-$(MARCH_NOCONA)       += -march=nocona
+CXXFLAGS-$(MARCH_NOCONA)     += -march=nocona
+CFLAGS-$(MARCH_CORE2)        += -march=core2
+CXXFLAGS-$(MARCH_CORE2)      += -march=core2
+CFLAGS-$(MARCH_COREI7)       += -march=corei7
+CXXFLAGS-$(MARCH_COREI7)     += -march=corei7
+CFLAGS-$(MARCH_COREI7AVX)    += -march=corei7-avx
+CXXFLAGS-$(MARCH_COREI7AVX)  += -march=corei7-avx
+CFLAGS-$(MARCH_COREI7AVXI)   += -march=core-avx-i
+CXXFLAGS-$(MARCH_COREI7AVXI) += -march=core-avx-i
+CFLAGS-$(MARCH_ATOM)         += -march=atom
+CXXFLAGS-$(MARCH_ATOM)       += -march=atom
+CFLAGS-$(MARCH_K8)           += -march=k8
+CXXFLAGS-$(MARCH_K8)         += -march=k8
+CFLAGS-$(MARCH_K8SSE3)       += -march=k8-sse3
+CXXFLAGS-$(MARCH_K8SSE3)     += -march=k8-sse3
+CFLAGS-$(MARCH_AMDFAM10)     += -march=amdfam10
+CXXFLAGS-$(MARCH_AMDFAM10)   += -march=amdfam10
+CFLAGS-$(MARCH_BDVER1)       += -march=bdver1
+CXXFLAGS-$(MARCH_BDVER1)     += -march=bdver1
+CFLAGS-$(MARCH_BDVER2)       += -march=bdver2
+CXXFLAGS-$(MARCH_BDVER2)     += -march=bdver2
+CFLAGS-$(MARCH_BDVER3)       += -march=bdver3
+CXXFLAGS-$(MARCH_BDVER3)     += -march=bdver3
+CFLAGS-$(MARCH_BTVER1)       += -march=btver1
+CXXFLAGS-$(MARCH_BTVER1)     += -march=btver1
+CFLAGS-$(MARCH_BTVER2)       += -march=btver2
+CXXFLAGS-$(MARCH_BTVER2)     += -march=btver2
diff --git a/arch/x86_64/Compiler.uk b/arch/x86_64/Compiler.uk
deleted file mode 100644
index a5470ed..0000000
--- a/arch/x86_64/Compiler.uk
+++ /dev/null
@@ -1,6 +0,0 @@
-# set cross compile
-ifeq ($(CROSS_COMPILE),)
-ifneq ($(UK_ARCH),$(HOSTARCH))
-       CROSS_COMPILE := x86_64-linux-gnu-
-endif
-endif
diff --git a/arch/x86_64/Config.uk b/arch/x86_64/Config.uk
deleted file mode 100644
index ca49eed..0000000
--- a/arch/x86_64/Config.uk
+++ /dev/null
@@ -1,89 +0,0 @@
-choice
-       prompt "Processor Optimization"
-       default MARCH_GENERIC
-       help
-               Optimize the code for selected target processor
-               Generic x86_64 does not enable any additional CPU features
-               (e.g., SSE, 3DNow!) and produces highly protable code for x86.
-
-config MARCH_NATIVE
-       bool "Auto-detect host CPU"
-       help
-               Optimize compilation to host CPU
-               Please note that this option will fail in case of 
cross-compilation
-
-config MARCH_GENERIC
-       bool "Generic 64-bit"
-       help
-               Compile for 64-bit compatible x86 CPUs
-
-config MARCH_NOCONA
-       bool "Intel Pentium 4/Xeon (Nocona)"
-       help
-               Improved version of Intel Pentium 4 CPU with 64-bit extensions, 
MMX, SSE, SSE2 and SSE3 instruction set support.
-
-config MARCH_CORE2
-       bool "Intel Core 2/Xeon"
-       help
-               Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 
and SSSE3 instruction set support.
-
-config MARCH_COREI7
-       bool "Intel Core i7/Xeon"
-       help
-               Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, 
SSSE3, SSE4.1 and SSE4.2 instruction set support.
-
-config MARCH_COREI7AVX
-       bool "Intel Core i7/Xeon +AVX"
-       help
-               Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, 
SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction set support.
-
-config MARCH_COREI7AVXI
-       bool "Intel Core/Xeon +AVX +RDRND"
-       help
-               Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, 
SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C instruction 
set support.
-
-config MARCH_ATOM
-       bool "Intel Atom 64-bit"
-       help
-               Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and 
SSSE3 instruction set support.
-
-config MARCH_K8
-       bool "AMD Athlon64/Opteron"
-       help
-               Processors based on the AMD K8 core with x86-64 instruction set 
support, including the AMD Opteron, Athlon 64, and Athlon 64 FX processors. 
(This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! and 64-bit instruction 
set extensions.)
-
-config MARCH_K8SSE3
-       bool "AMD Athlon64/Opteron +SSE3"
-       help
-               Improved versions of AMD K8 cores with SSE3 instruction set 
support.
-
-config MARCH_AMDFAM10
-       bool "AMD Family 10h cores"
-       help
-               CPUs based on AMD Family 10h cores with x86-64 instruction set 
support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, 
ABM and 64-bit instruction set extensions.)
-
-config MARCH_BTVER1
-       bool "AMD Family 14h cores"
-       help
-               CPUs based on AMD Family 14h cores with x86-64 instruction set 
support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 
64-bit instruction set extensions.)
-
-config MARCH_BDVER1
-       bool "AMD Family 15h cores (bdver1)"
-       help
-               CPUs based on AMD Family 15h cores with x86-64 instruction set 
support. (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, 
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set 
extensions.)
-
-config MARCH_BDVER2
-       bool "AMD Family 15h cores (bdver2)"
-       help
-               AMD Family 15h core based CPUs with x86-64 instruction set 
support. (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, 
CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit 
instruction set extensions.)
-
-config MARCH_BDVER3
-       bool "AMD Family 15h cores (bdver3)"
-       help
-               AMD Family 15h core based CPUs with x86-64 instruction set 
support. (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, 
CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit 
instruction set extensions.
-
-config MARCH_BTVER2
-       bool "AMD Family 16h cores"
-       help
-               CPUs based on AMD Family 16h cores with x86-64 instruction set 
support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, 
CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX and 64-bit instruction set 
extensions.
-endchoice
diff --git a/arch/x86_64/Makefile.uk b/arch/x86_64/Makefile.uk
deleted file mode 100644
index 8c9bfe3..0000000
--- a/arch/x86_64/Makefile.uk
+++ /dev/null
@@ -1,37 +0,0 @@
-ASFLAGS  += -D__X86_64__
-ASFLAGS  += -m64
-CFLAGS   += -D__X86_64__
-CFLAGS   += -m64 -mno-red-zone -fno-reorder-blocks 
-fno-asynchronous-unwind-tables
-CXXFLAGS += -D__X86_64__
-CXXFLAGS += -m64 -mno-red-zone -fno-reorder-blocks 
-fno-asynchronous-unwind-tables
-
-CFLAGS-$(MARCH_GENERIC)      += -mtune=generic
-CXXFLAGS-$(MARCH_GENERIC)    += -mtune=generic
-CFLAGS-$(MARCH_NOCONA)       += -march=nocona
-CXXFLAGS-$(MARCH_NOCONA)     += -march=nocona
-CFLAGS-$(MARCH_CORE2)        += -march=core2
-CXXFLAGS-$(MARCH_CORE2)      += -march=core2
-CFLAGS-$(MARCH_COREI7)       += -march=corei7
-CXXFLAGS-$(MARCH_COREI7)     += -march=corei7
-CFLAGS-$(MARCH_COREI7AVX)    += -march=corei7-avx
-CXXFLAGS-$(MARCH_COREI7AVX)  += -march=corei7-avx
-CFLAGS-$(MARCH_COREI7AVXI)   += -march=core-avx-i
-CXXFLAGS-$(MARCH_COREI7AVXI) += -march=core-avx-i
-CFLAGS-$(MARCH_ATOM)         += -march=atom
-CXXFLAGS-$(MARCH_ATOM)       += -march=atom
-CFLAGS-$(MARCH_K8)           += -march=k8
-CXXFLAGS-$(MARCH_K8)         += -march=k8
-CFLAGS-$(MARCH_K8SSE3)       += -march=k8-sse3
-CXXFLAGS-$(MARCH_K8SSE3)     += -march=k8-sse3
-CFLAGS-$(MARCH_AMDFAM10)     += -march=amdfam10
-CXXFLAGS-$(MARCH_AMDFAM10)   += -march=amdfam10
-CFLAGS-$(MARCH_BDVER1)       += -march=bdver1
-CXXFLAGS-$(MARCH_BDVER1)     += -march=bdver1
-CFLAGS-$(MARCH_BDVER2)       += -march=bdver2
-CXXFLAGS-$(MARCH_BDVER2)     += -march=bdver2
-CFLAGS-$(MARCH_BDVER3)       += -march=bdver3
-CXXFLAGS-$(MARCH_BDVER3)     += -march=bdver3
-CFLAGS-$(MARCH_BTVER1)       += -march=btver1
-CXXFLAGS-$(MARCH_BTVER1)     += -march=btver1
-CFLAGS-$(MARCH_BTVER2)       += -march=btver2
-CXXFLAGS-$(MARCH_BTVER2)     += -march=btver2
-- 
2.7.4


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.