# make .general.d dependent on the role-file
$(if $(ROLE),$(OBJ_DIR)/.general.d: $(L4DIR)/mk/$(ROLE))
-SYSTEM_TARGET_arm = arm-linux-
-SYSTEM_TARGET_ppc32 = powerpc-linux-
-SYSTEM_TARGET = $(SYSTEM_TARGET_$(ARCH))
+SYSTEM_TARGET_arm = arm-linux-
+SYSTEM_TARGET_ppc32 = powerpc-linux-
+SYSTEM_TARGET_sparc = sparc-elf-
+SYSTEM_TARGET = $(SYSTEM_TARGET_$(ARCH))
CARCHFLAGS_amd64 = -mno-red-zone
ASFLAGS_amd64 = -m64
LDFLAGS_amd64 += -m elf_x86_64 -z max-page-size=0x1000 -z common-page-size=0x1000
-LD_EMULATION_CHOICE_amd64 = elf_x86_64
-LD_EMULATION_CHOICE_arm = armelf armelf_linux_eabi
-LD_EMULATION_CHOICE_ppc32 = elf32ppc
-LD_EMULATION_CHOICE_x86 = elf_i386
+LD_EMULATION_CHOICE_amd64 = elf_x86_64
+LD_EMULATION_CHOICE_arm = armelf armelf_linux_eabi
+LD_EMULATION_CHOICE_ppc32 = elf32ppc
+LD_EMULATION_CHOICE_x86 = elf_i386
+LD_EMULATION_CHOICE_sparc = sparcleon
OFORMAT_amd64 = elf64-x86-64
OFORMAT_arm = elf32-littlearm
OFORMAT_ppc32 = elf32-powerpc
OFORMAT_x86 = elf32-i386
+OFORMAT_sparc = elf32-sparc
OFORMAT = $(OFORMAT_$(ARCH))
BFD_ARCH_amd64 = i386
BFD_ARCH_arm = arm
BFD_ARCH_ppc32 = powerpc
BFD_ARCH_x86 = i386
+BFD_ARCH_sparc = sparc
BFD_ARCH = $(BFD_ARCH_$(ARCH))
-L4_KIP_ADDR_amd64 ?= 0x6ffff000
-L4_KIP_ADDR_arm ?= 0xaffff000
-L4_KIP_ADDR_ppc32 ?= 0xaffff000
-L4_KIP_ADDR_x86 ?= 0xaffff000
-L4_KIP_ADDR ?= $(L4_KIP_ADDR_$(ARCH))
+L4_KIP_ADDR_amd64 ?= 0x6ffff000
+L4_KIP_ADDR_arm ?= 0xaffff000
+L4_KIP_ADDR_ppc32 ?= 0xaffff000
+L4_KIP_ADDR_x86 ?= 0xaffff000
+L4_KIP_ADDR_sparc ?= 0xaffff000
+L4_KIP_ADDR ?= $(L4_KIP_ADDR_$(ARCH))
L4_KIP_OFFS_SYS_INVOKE = 0x800
L4_KIP_OFFS_SYS_DEBUGGER = 0x900
-L4_STACK_ADDR_amd64 ?= 0x70000000
-L4_STACK_ADDR_arm ?= 0xb0000000
-L4_STACK_ADDR_ppc32 ?= 0xb0000000
-L4_STACK_ADDR_x86 ?= 0xb0000000
-L4_STACK_ADDR ?= $(L4_STACK_ADDR_$(ARCH))
-L4_STACK_SIZE ?= $(if $(L4_STACK_SIZE_MAIN_THREAD),$(L4_STACK_SIZE_MAIN_THREAD),0x8000)
+L4_STACK_ADDR_amd64 ?= 0x70000000
+L4_STACK_ADDR_arm ?= 0xb0000000
+L4_STACK_ADDR_ppc32 ?= 0xb0000000
+L4_STACK_ADDR_x86 ?= 0xb0000000
+L4_STACK_ADDR_sparc ?= 0xb0000000
+L4_STACK_ADDR ?= $(L4_STACK_ADDR_$(ARCH))
+L4_STACK_SIZE ?= $(if $(L4_STACK_SIZE_MAIN_THREAD),$(L4_STACK_SIZE_MAIN_THREAD),0x8000)
# This is quite bad: There is no other chance to disable the page-alignedment
# of the linker. The linker aligns the first section at 0x100000 for AMD64!
RAM_BASE = $(CONFIG_RAM_BASE)
ARM_PLATFORM_TYPE= $(patsubst "%",%,$(CONFIG_ARM_PLATFORM_TYPE))
PPC_PLATFORM_TYPE= $(patsubst "%",%,$(CONFIG_PPC_PLATFORM_TYPE))
+SPARC_PLATFORM_TYPE= $(patsubst "%",%,$(CONFIG_SPARC_PLATFORM_TYPE))
CPU = $(patsubst "%",%,$(CONFIG_CPU))
BUILD_ABI = $(patsubst "%",%,$(CONFIG_BUILD_ABI))
BUILD_ARCH = $(patsubst "%",%,$(CONFIG_BUILD_ARCH))
CARCHFLAGS_x86_K8 = -march=k8
CARCHFLAGS_x86_opteron = -march=opteron
-CARCHFLAGS_arm = -march=$(CPU)
+CARCHFLAGS_arm_armv4 = -march=armv4
+CARCHFLAGS_arm_armv4t = -march=armv4t
+CARCHFLAGS_arm_armv5 = -march=armv5
+CARCHFLAGS_arm_armv5t = -march=armv5t
+CARCHFLAGS_arm_armv5te = -march=armv5te
+CARCHFLAGS_arm_armv6 = -march=armv6
+CARCHFLAGS_arm_armv6t2 = -march=armv6t2
+CARCHFLAGS_arm_armv6zk = -march=armv6zk
+CARCHFLAGS_arm_armv7a = -march=armv7-a
+CARCHFLAGS_arm_armv7r = -march=armv7-r
IDL_SYSTEMS = x86-l4f
CC_amd64 = $(SYSTEM_TARGET)gcc -m64
CC_arm = $(SYSTEM_TARGET)gcc
CC_ppc32 = $(SYSTEM_TARGET)gcc -m32
+CC_sparc = $(SYSTEM_TARGET)gcc -m32
CXX_x86 = $(SYSTEM_TARGET)g++ -m32
CXX_amd64 = $(SYSTEM_TARGET)g++ -m64
CXX_arm = $(SYSTEM_TARGET)g++
CXX_ppc32 = $(SYSTEM_TARGET)g++ -m32
+CXX_sparc = $(SYSTEM_TARGET)g++ -m32
+
+SYSTEMS_ABI := x86-l4f amd64-l4f arm-l4f ppc32-l4f sparc-l4f
+SYSTEMS_PLAIN := x86 amd64 arm ppc32 sparc
AR = $(SYSTEM_TARGET)ar
AS = $(SYSTEM_TARGET)as
MKFLAGS +=$(MKFLAGS_$@)
NM = $(SYSTEM_TARGET)nm
OBJCOPY = $(SYSTEM_TARGET)objcopy
-PKG_CONFIG = pkg-config --silence-errors
+PKG_CONFIG = pkg-config
PWDCMD = sh -c pwd
RANLIB = $(SYSTEM_TARGET)ranlib
RM = rm -f
SCRUB = $(RM) $(wildcard *.old) $(wildcard *~) $(wildcard *.bak) \
$(wildcard \#*\#)
SED = sed
-SHELL = /bin/bash
+SHELL = bash
SIZE = $(SYSTEM_TARGET)size
STRIP = $(SYSTEM_TARGET)strip
SVN = svn
# it's optional to be able to set it as environment variable
FIASCOUX ?= $(L4DIR)/../kernel/fiasco/build-ux/fiasco
PAGER ?= less
-DISASM_CMD ?= $(SYSTEM_TARGET)objdump -ld $(1) | $(PAGER)
+DISASM_CMD ?= $(SYSTEM_TARGET)objdump -lCSd $(1) | $(PAGER)
IMAGES_DIR ?= $(OBJ_BASE)/images
# linking address, source a possible privately configured one
ifneq ($(RELOC_PHYS),)
-include $(OBJ_BASE)/Makeconf.ram_base
-EXTRA_GENERAL_D_DEP += $(if $(wildcard $(OBJ_BASE)/Makeconf.ram_base),$(OBJ_BASE)/Makeconf.ram_base)
+BID_RAM_BASE_DEP := $(if $(wildcard $(OBJ_BASE)/Makeconf.ram_base),$(OBJ_BASE)/Makeconf.ram_base)
endif
INCLUDE_MAKE_RULES += $(if $(LABEL),$(L4DIR)/Makeconf.$(LABEL))
export PL
endif
-BID_INT_NOEXC=n
-ifeq ($(MODE_NOEXC),y)
-BID_INT_NOEXC=y
-endif
-
include $(L4DIR)/mk/config.inc
ifneq ($(CONFIG_HAVE_LDSO),)
GCCSUBVERSION_f = $(shell $(CC) -dumpversion | sed -e 's/.*\.\(.*\)/\1/')
LDVERSION_f = $(shell $(LD) -v | sed -e 's/.* \([0-9]\)\.\([^. ]*\).*/\1\2/')
GCCSYSLIBDIRS_f = $(shell LC_ALL=C $(CC) -print-search-dirs | sed '/^libraries:/{s/^libraries: /-L/;s/:/ -L/g;q;};d')
-GCCDIR_f = $(shell LC_ALL=C $(CC) -print-search-dirs|sed -ne 's+^install: \(.*[^/][^/]*\)/+\1+p' )
-GCCLIBDIR_f = $(shell LC_ALL=C $(CC) -print-file-name=)
+GCCDIR_f = $(shell LC_ALL=C $(CC) -print-search-dirs | sed -ne 's+^install: \(.*[^/][^/]*\)/+\1+p' )
+GCCLIB_file_f = $(shell LC_ALL=C $(CC) -print-file-name=$(1))
GCCLIB_f = $(shell $(CC) -print-libgcc-file-name)
GCCLIB_EH_f = $(filter /%,$(shell $(CC) -print-file-name=libgcc_eh.a))
GCCINCDIR_f = $(addprefix $(call GCCDIR_f),/include /include-fixed)
.PHONY: FORCE
+#
+# Common functions
+#
+
+# 1: name
+# 2: output file
+# 3: inc path (one only)
+# 4: libs
+# 5: requires_libs
+generate_pcfile = \
+ mkdir -p $(dir $(2)) \
+ ;echo -n > $(2) \
+ $(if $(3),;echo "incdir=/empty_incdir" >> $(2)) \
+ ;echo "Name: $(1)" >> $(2) \
+ ;echo "Version: 0" >> $(2) \
+ ;echo "Description: L4 library" >> $(2) \
+ $(if $(3),;echo "Cflags: $(addprefix -I\$${incdir}/,$(3))" >> $(2)) \
+ $(if $(4),;echo "Libs: $(sort $(4))" >> $(2)) \
+ $(if $(5),;echo "Requires: $(5)" >> $(2)) \
+ $(if $(BID_GEN_CONTROL),;echo "Provides: $(1)" >> $(PKGDIR)/Control) \
+ $(if $(BID_GEN_CONTROL),;echo "Requires: $(5)" >> $(PKGDIR)/Control) ;
+
+
endif # _L4DIR_MK_MAKECONF undefined