# 
# Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
# Licensed under the GPL
#

ARCH_DIR = arch/l4

# Determine our sys- directory. Isn't the Linux config
# evil!
ifeq ($(CONFIG_ARCH_MIPS64),y)
	SYSTEM=mips
# Gcc prefines mips so it will get expanded to 1 if you
# are not careful
	CFLAGS += -Umips
	CFLAGS += -D_L4_WORD=64 -D__L4EB__ 
# For L4 includes
	CFLAGS += -DMIPS64_BIG_ENDIAN
	CFLAGS += -D__linux__
	AFLAGS += -Umips
	AFLAGS += -D__linux__
	AFLAGS += -D_L4_WORD=64 -D__L4EB__ 
  ifeq ($(CONFIG_U4600),y)
	MACHINE=u4600
	PLAT = u4600
  endif
endif

ifeq ($(CONFIG_ARCH_ARM),y)
	SYSTEM=arm
#FIXME: benjl I don't think we need these...
	CFLAGS += -fno-builtin
	CFLAGS += -D_L4_WORD=32 -D__L4EL__ -O2
# For L4 includes
  ifeq ($(CONFIG_OMAP1510),y)
	PLAT = innovator
	CFLAGS += -DARM_LITTLE_ENDIAN -mlittle-endian  -march=armv4 -mtune=arm9tdmi -mshort-load-bytes -D__LINUX_ARM_ARCH__=4
	MACHINE=omap1510
  endif
  ifeq ($(CONFIG_SA1100),y)
	PLAT = pleb
	CFLAGS += -DARM_LITTLE_ENDIAN -mlittle-endian -D__LINUX_ARM_ARCH__=4
	MACHINE=sa1100
  endif
  ifeq ($(CONFIG_IXDP425),y)
	PLAT = ixdp425
	CFLAGS += -DARM_BIG_ENDIAN -mbig-endian -D__LINUX_ARM_ARCH__=5
	LDFLAGS += -EB
	AFLAGS += -mbig-endian
	MACHINE=ixdp425
  endif

  MODFLAGS	+= -mlong-calls
endif

ifeq ($(CONFIG_ARCH_I386),y)
# Gcc prefines i386 so it will get expanded to 1 if you
# are not careful
	CFLAGS += -Ui386
	SYSTEM=i386
	CFLAGS += -D_L4_WORD=32 -D__L4EL__
# For L4 includes

  ifeq ($(CONFIG_PC99),y)
	PLAT = pc99
	MACHINE=pc99
  endif
endif


CFLAGS += -Werror

CPPFLAGS_vmlinux.lds +=  -U$(ELF_ARCH) -DELF_ARCH=$(ELF_ARCH)


core-y			+= $(ARCH_DIR)/kernel/		 \
			   $(ARCH_DIR)/mm/  \
			   $(ARCH_DIR)/lib/  \
			   $(ARCH_DIR)/sys-$(SYSTEM)/

drivers-y                  += $(ARCH_DIR)/drivers/

#			   $(ARCH_DIR)/sys-$(SYSTEM)/mach-$(MACHINE)
#
core-$(BLK_DEV_INITRD)	+= $(ARCH_DIR)/boot/

libs-y += -lrange_fl -lnaming -ltimer -ll4e -lll -lcircular_buffer -liguana -ll4 -lgcc -lmutex

# We might want this later
# FIXME: Is this the right way to do this??
include $(KBUILD_SRC)/$(ARCH_DIR)/sys-$(SYSTEM)/Makefile

EXTRAVERSION := $(EXTRAVERSION)-$(SYSTEM)

# -Derrno=kernel_errno - This turns all kernel references to errno into
# kernel_errno to separate them from the libc errno.  This allows -fno-common
# in CFLAGS.  Otherwise, it would cause ld to complain about the two different
# errnos.

CFLAGS += -D__arch_l4__ -D__SYSTEM__=$(SYSTEM) -D__MACHINE__=mach-$(MACHINE)
AFLAGS += -D__arch_l4__ -D__SYSTEM__=$(SYSTEM) -D__MACHINE__=mach-$(MACHINE)

# Determine idl4 path
#IDL4=idl4-config
#IDLPATH=$(shell $(IDL4) --include-dir)
#IDLPATH=tools/magpie/include

CFLAGS += -Iarch/l4/include
CFLAGS += -I$(IDL4_INCLUDE)
CFLAGS += -I$(IGUANA_INCLUDE)
CFLAGS += -I$(IGUANA_IDL_INCLUDE)
CFLAGS += -I$(LIBL4_INCLUDE)
AFLAGS += -I$(LIBL4_INCLUDE)
CFLAGS += -I$(LIBTIMER_INCLUDE)
CFLAGS += -I$(LIBCB_INCLUDE)
CFLAGS += -I$(NAMING_INCLUDE)
CFLAGS += -I$(MUTEX_INCLUDE)

include/linux/version.h: arch/$(ARCH)/Makefile

#$(ARCH_DIR)/vmlinux.lds.S :
#	echo "vmlinux.lds.S"
#	touch $@

prepare: $(SYS_HEADERS) $(GEN_HEADERS) include/asm-$(ARCH)/constants.h

LIBGCC=$(CC) -print-libgcc-file-name
LIBGCCDIR=$(shell $(LIBGCC) | xargs dirname)

LDFLAGS_vmlinux = -L$(LIBL4DIR) -L$(LIBCDIR) \
	-L$(LIBIGUANADIR) -L$(LIBGCCDIR) -Ttext=$(LINUX_START_ADDR) \
	-L$(LIBCBDIR) -L$(LIBLLDIR) -L$(LIBRANGE_FLDIR) -L$(LIBNAMINGDIR) -L$(LIBL4EDIR) \
	-L$(LIBTIMERDIR) -L$(LIBMUTEXDIR)

arch/$(ARCH)/sys-$(SYSTEM)/asm-offsets.s: include/asm include/linux/version.h

include/asm-$(ARCH)/constants.h: arch/$(ARCH)/sys-$(SYSTEM)/asm-offsets.s
	$(call filechk,gen-asm-offsets)

archclean: sysclean
	@echo "Arch clean"

CLEAN_FILES += include/asm-$(ARCH)/constants.h*

export SYSTEM MACHINE
