#
# Makefile for the Linux C library
#

#.EXPORT_ALL_VARIABLES:

export JUMP_DIR JUMP_LIB

#
# include a configuration file if one exists and ignore all the
# setup stuff.
#
# This hack so subdirectories may include toplevel config.in

include $(TOPDIR)/config.in

# That is for new ld.so. Please make sure they are the same as
# the one used in ld.so package.
LDSO_ADDR = 62f00000
LDSO_ENTRY = "(0x$(LDSO_ADDR)+32)"

ifeq ($(WHICH),)

ifeq ($(PIC),true)
SHARED=false
DEBUG=false
PROFILE=false
CHECKER=false
STATIC_SHARED=false
WHICH=PIC
PIC_AS=$(PICASDIR)/as
PIC_LD=$(PICASDIR)/ld

PIC_CFLAGS=-B$(PICASDIR)/ -Wa,-k -fPIC
endif

ifeq ($(STATIC),true)
SHARED=false
DEBUG=false
PROFILE=false
CHECKER=false
STATIC_SHARED=false
WHICH=STATIC
endif

ifeq ($(LITE),true)
SHARED=true

# Where we get those dll files.
ifeq ($(SHLIB),)
SHLIB:=libc.lite
endif

endif

ifeq ($(SHARED),true)
STATIC=false
DEBUG=false
PROFILE=false
CHECKER=false
STATIC_SHARED=false

JUMP_CFLAGS=-B$(JUMPASDIR)/

ifeq ($(WHICH),)
WHICH=SHARED
endif

endif

ifeq ($(STATIC_SHARED),true)
STATIC=true
SHARED=true
DEBUG=false
PROFILE=false
CHECKER=false
WHICH=STATIC_SHARED
endif

ifeq ($(DEBUG),true)
STATIC=false
SHARED=false
PROFILE=false
CHECKER=false
STATIC_SHARED=false
WHICH=DEBUG
endif

ifeq ($(PROFILE),true)
STATIC=false
SHARED=false
DEBUG=false
CHECKER=false
STATIC_SHARED=false
WHICH=PROFILE
endif

ifeq ($(CHECKER),true)
STATIC=false
SHARED=false
PROFILE=false
DEBUG=false
STATIC_SHARED=false
WHICH=CHECKER
endif

ifeq ($(WHICH),)

ifeq ($(STATIC),)
STATIC=true
endif

ifeq ($(SHARED),)
SHARED=true
endif

ifeq ($(PROFILE),)
PROFILE=true
endif

ifeq ($(DEBUG),)
DEBUG=true
endif

ifeq ($(STATIC_SHARED),)
STATIC_SHARED=true
endif

WHICH=ALL

endif

endif

ifeq ($(SHLIB),)
# Where we get those dll files.
SHLIB:=libc
endif

ifeq ($(JUMP_LIB),)
JUMP_LIB:=libc
endif


ifeq ($(TARGET_ROOTDIR),/)
TARGET_LIB_DIR=$(TARGET_ROOTDIR)usr/lib
TARGET_SBIN_DIR=$(TARGET_ROOTDIR)sbin
TARGET_SO_DIR=$(TARGET_ROOTDIR)lib
TARGET_LIBM_SO_DIR=$(TARGET_ROOTDIR)lib
CROSS_ROOTDIR=$(HOST_ROOTDIR)
TARGET_LIBEXTRA_DIR=$(TARGET_ROOTDIR)usr/lib

LDCONFIG=ldconfig

else
TARGET_LIB_DIR=$(TARGET_ROOTDIR)/usr/lib
TARGET_SBIN_DIR=$(TARGET_ROOTDIR)/sbin
TARGET_SO_DIR=$(TARGET_ROOTDIR)/lib
TARGET_LIBM_SO_DIR=$(TARGET_ROOTDIR)/lib
CROSS_ROOTDIR=$(HOST_ROOTDIR)/$(TARGET_MACHINE)
TARGET_LIBEXTRA_DIR=$(TARGET_ROOTDIR)/extra/usr/lib

LDCONFIG=true

endif

CROSS_INCDIR=$(CROSS_ROOTDIR)/include
CROSS_BINDIR=$(CROSS_ROOTDIR)/bin
DLLDIR=$(CROSS_ROOTDIR)/dll/bin
JUMPASDIR=$(CROSS_ROOTDIR)/dll/jump
PICASDIR=$(CROSS_ROOTDIR)/pic/bin

#
# Don't change anything below unless you know what you are doing.
#

# Pic `ld' doesn't use these options at the moment
ifeq ($(PIC),)
ifeq ($(TARGET_ARCH_486),true)

TARGET_ARCH=i386
IX86FLAGS=-m486
IX86LDFLAGS=-m486

else

ifeq ($(TARGET_ARCH),i386)
IX86FLAGS=-m386
IX86LDFLAGS=
endif
endif
endif

MKDIR=mkdir -p

ifneq ($(LD),true)
LD=$(CROSS_BINDIR)/ld
LDFLAGS=-r -x $(IX86LDFLAGS)
endif

ifneq ($(MV),true)
MV	=mv
endif

AR	=$(CROSS_BINDIR)/ar
ARFLAGS=ucv
AR_FLAGS=$(ARFLAGS)

AS	=$(CROSS_BINDIR)/as
NM	=$(CROSS_BINDIR)/nm
STRIP	=$(CROSS_BINDIR)/strip
REALRANLIB=$(CROSS_BINDIR)/ranlib

RANLIB	=true

NEWSTDIOFLAGS=-I$(TOPDIR)/libio -I$(TOPDIR)/libio/stdio

GNU_MAKE=gmake

PIC_DIR=$(TOPDIR)/pic
SHARED_LITE_DIR=$(TOPDIR)/shared.lite
STATIC_DIR=$(TOPDIR)/static
ifeq ($(LITE),true)
SHARED_DIR=$(SHARED_LITE_DIR)
else
SHARED_DIR=$(TOPDIR)/shared
endif
DEBUG_DIR=$(TOPDIR)/debug
PROFILE_DIR=$(TOPDIR)/profile
CHECKER_DIR=$(TOPDIR)/checker

# It is used for cleaning up.
OBJS_DIRS=$(STATIC_DIR) $(SHARED_DIR) $(DEBUG_DIR) $(PROFILE_DIR) \
	$(SHARED_LITE_DIR) $(PIC_DIR)

# It is used for installation
INSTALL_DIRS=$(STATIC_DIR) $(DEBUG_DIR) $(PROFILE_DIR) jump

ifeq ($(MATH),true)

PIC_LIB=$(PIC_DIR)/libm.a
STATIC_LIB=$(STATIC_DIR)/libm.a
SHARED_LIB=$(SHARED_DIR)/libm.a
LIBALIAS=$(TOPDIR)/libmalias.a

# Overiwrite the default values.
SHLIB=libm
JUMP_LIB=libm

else

ifeq ($(PIC_LIB),)
PIC_LIB=$(PIC_DIR)/libc.a
endif

ifeq ($(STATIC_LIB),)
STATIC_LIB=$(STATIC_DIR)/libc.a
endif

ifeq ($(SHARED_LIB),)
SHARED_LIB=$(SHARED_DIR)/libc.a
endif

ifeq ($(LIBALIAS),)
LIBALIAS=$(TOPDIR)/libalias.a
endif

endif

ifneq ($(DEBUG_LIB),false)
DEBUG_LIB=$(DEBUG_DIR)/libg.a
endif

ifneq ($(PROFILE_LIB),false)
PROFILE_LIB=$(PROFILE_DIR)/libc_p.a
endif

JUMP_DIR:=$(TOPDIR)/jump/$(SHLIB)

# The relative directory from the TOPDIR.
SUBDIR=$(JUMP_LIB)
#SUBDIR=$(subst $(shell cd $(TOPDIR); pwd)/,,$(shell pwd))

MKIMAGE=$(DLLDIR)/mkimage
VERIFY=$(DLLDIR)/verify-shlib
MKSTUBS=$(DLLDIR)/mkstubs

ifneq ($(LITE),true)

YP=true
YPFLAGS=-DYP
YPDIR=yp

NLS=true
NLSFLAGS=-DNLS -I$(TOPDIR)/nls
NLSDIR=nls

endif

ifneq ($(SHADOW_COMPAT),true)
SHADOWFLAGS=-DNO_SHADOW
endif

WFLAGS=-Wall -Wstrict-prototypes -Wmissing-prototypes

CC	=$(HOST_BINDIR)/gcc -V $(GCCVERSION) -b $(TARGET_MACHINE) \
		$(IX86FLAGS)

XCFLAGS = -D_GNU_SOURCE -DSTDC_HEADERS -DUSG -DDIRENT -DSYSV \
	-DUSE_BSD_REGEX -D_LIBC # -D__USE_BSD_SIGNAL

ifeq ($(PIC),)
XCFLAGS+= -DHAVE_GNU_LD
else
XCFLAGS+= -D__PIC__ -D__pic__
endif

CHARFLAGS=-funsigned-char

BASE_CFLAGS= $(JUMP_CFLAGS) $(PIC_CFLAGS) $(YPFLAGS) \
		$(NLSFLAGS) $(NEWSTDIOFLAGS) $(SHADOWFLAGS) \
		$(SHFLAGS) $(XCFLAGS) $(WFLAGS) $(INC_CFLAGS) \
		$(CHARFLAGS)

ifeq ($(OPT_CFLAGS),)
OPT_CFLAGS= -O6 -fomit-frame-pointer
endif
ifeq ($(DEBUG_OPT_CFLAGS),)
DEBUG_OPT_CFLAGS=-O -g
endif
ifeq ($(PROFILE_OPT_CFLAGS),)
PROFILE_OPT_CFLAGS=-O -pg
endif
ifeq ($(CHECKER_OPT_CFLAGS),)
CHECKER_OPT_CFLAGS=-O -checker
endif

CFLAGS= $(OPT_CFLAGS) $(BASE_CFLAGS)
DEBUG_CFLAGS= $(DEBUG_OPT_CFLAGS) $(BASE_CFLAGS)
PROFILE_CFLAGS= $(PROFILE_OPT_CFLAGS) $(BASE_CFLAGS)
CHECKER_CFLAGS= $(CHECKER_OPT_CFLAGS) $(BASE_CFLAGS)
  
CPP	=$(CC) -E $(INC_CFLAGS) # $(XCFLAGS)
RM	=/bin/rm
