# Makefile configuration, without explicit rules
#
-ARCH = $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
+# CROSS is the prefix used for system tools like gcc, ld etc.
CROSS =
+
+# KCROSS is the prefix we use for klibc installations. This is usually
+# the same as CROSS, but may be different, e.g. to install an i386
+# cross-compilation suite on an x86-64 system, using the same gcc/binutils.
+KCROSS ?= $(CROSS)
+
+# Location for installation
+prefix = /usr
+bindir = $(prefix)/bin
+libdir = $(prefix)/lib
+mandir = $(prefix)/man
+INSTALLDIR = $(prefix)/lib/klibc
+INSTALLROOT =
+
+INSTALL_EXEC = install -m 755
+INSTALL_DATA = install -m 644
+
+# 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
+
+# klibc version information
+KLIBCVER = -D__KLIBC__=$(shell cut -d. -f1 < $(SRCROOT)/version) \
+ -D__KLIBC_MINOR__=$(shell cut -d. -f2 < $(SRCROOT)/version)
+
+ARCH = $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
CC = $(CROSS)gcc
LD = $(CROSS)ld
KLIBSRC = $(SRCROOT)/klibc
-REQFLAGS = $(ARCHREQFLAGS) -nostdinc -iwithprefix include -I$(KLIBSRC) \
- -I$(KLIBSRC)/arch/$(ARCH)/include \
- -I$(KLIBSRC)/include/bits$(BITSIZE) \
- -D__KLIBC__ -DBITSIZE=$(BITSIZE) -I$(KLIBSRC)/include \
- -I$(KERNEL_DIR)/include
+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) $(KLIBCVER) -nostdinc -iwithprefix include \
+ $(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
+
+STRIP = $(CROSS)strip
+STRIPFLAGS = --strip-all -R .comment -R .note
+STRIPCMD = $(STRIP) $(STRIPFLAGS)
HOST_CC = gcc
HOST_CFLAGS = -g -O
HOST_LIBS =
# Static library paths
-CRT0 = $(KLIBSRC)/crt0.o
-KLIBC = $(KLIBSRC)/libc.a
-LIBGCC = $(shell $(CC) --print-libgcc)
+CRT0 = $(KLIBOBJ)/crt0.o
+KLIBC = $(KLIBOBJ)/libc.a
+LIBGCC = $(shell $(CC) $(REQFLAGS) $(OPTFLAGS) --print-libgcc)
# Shared library paths
-CRTSHARED = $(KLIBSRC)/interp.o
-LIBSHARED = $(KLIBSRC)/libc.so
+CRTSHARED = $(KLIBOBJ)/interp.o
+LIBSHARED = $(KLIBOBJ)/libc.so
#
# This indicates the location of the final version of the shared library.
#
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 zlib in klibc. This roughly triples the size of klibc!
+ZLIB = 0
+
#
# Include arch-specific rule fragments
#
include $(KLIBSRC)/arch/$(ARCH)/MCONFIG
+
+ifeq ($(DEBUG),y)
+STRIP = /bin/true -Since_we_are_debugging
+OPTFLAGS += -O1 -g
+endif
+
+# How to tell the linker main() is the entrypoint
+EMAIN ?= -e main