# -*- makefile -*-
#
# Makefile configuration, without explicit rules
#

# Eventually support separate compilation, but we don't have it yet...
OBJROOT = $(SRCROOT)

# Kernel trees (source and obj) - can potentially be different
KRNLSRC = $(SRCROOT)/linux
KRNLOBJ = $(SRCROOT)/linux

ARCH    = $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
CROSS   = 
CC	= $(CROSS)gcc
LD      = $(CROSS)ld
KLIBSRC = $(SRCROOT)/klibc
KLIBOBJ = $(OBJROOT)/klibc
INCLUDE = -I$(SRCROOT)/include/arch/$(ARCH) \
	  -I$(SRCROOT)/include/bits$(BITSIZE) \
	  -I$(SRCROOT)/include \
	  -I$(KRNLOBJ)/include -I$(KRNLOBJ)/include2 -I$(KRNLSRC)/include
REQFLAGS = $(ARCHREQFLAGS) -nostdinc -iwithprefix include \
	  -D__KLIBC__ -DBITSIZE=$(BITSIZE) \
	  $(INCLUDE)
LDFLAGS =
AR      = $(CROSS)ar
RANLIB  = $(CROSS)ranlib
NM	= $(CROSS)nm
PERL    = perl
STRIP   = $(CROSS)strip --strip-all -R .comment -R .note
OBJCOPY = $(CROSS)objcopy

HOST_CC      = gcc
HOST_CFLAGS  = -g -O
HOST_LDFLAGS = 
HOST_LIBS    =

# Static library paths
CRT0      = $(KLIBOBJ)/crt0.o
KLIBC     = $(KLIBOBJ)/libc.a
LIBGCC    = $(shell $(CC) --print-libgcc)

# Shared library paths
CRTSHARED = $(KLIBOBJ)/interp.o
LIBSHARED = $(KLIBOBJ)/libc.so

#
# This indicates the location of the final version of the shared library.
# THIS MUST BE AN ABSOLUTE PATH WITH NO FINAL SLASH.
# Leave this empty to make it the root.
#
SHLIBDIR = /lib

# Enable this to make perror/strerror return real error messages
# This makes klibc.so and any static binary which uses these functions
# about 4K bigger.
ERRLIST = 1

#
# Include arch-specific rule fragments
#
include $(KLIBSRC)/arch/$(ARCH)/MCONFIG

# How to tell the linker main() is the entrypoint
EMAIN ?= -e main
