#
# Kbuild file for klibc
#

libc-y := vsnprintf.o snprintf.o vsprintf.o sprintf.o \
	  asprintf.o vasprintf.o \
	  vsscanf.o sscanf.o ctypes.o \
	  strntoumax.o strntoimax.o \
	  atoi.o atol.o atoll.o \
	  strtol.o strtoll.o strtoul.o strtoull.o \
	  strtoimax.o strtoumax.o \
	  globals.o exit.o atexit.o onexit.o \
	  execl.o execle.o execv.o execvpe.o execvp.o execlp.o execlpe.o \
	  fork.o wait.o wait3.o waitpid.o system.o setpgrp.o getpgrp.o \
	  daemon.o \
	  printf.o vprintf.o fprintf.o vfprintf.o perror.o \
	  statfs.o fstatfs.o umount.o \
	  open.o fopen.o fread.o fread2.o fgetc.o fgets.o \
	  fwrite.o fwrite2.o fputc.o fputs.o puts.o putchar.o \
	  sleep.o usleep.o strtotimespec.o strtotimeval.o \
	  raise.o abort.o assert.o alarm.o pause.o \
	  __signal.o sysv_signal.o bsd_signal.o siglist.o sigabbrev.o \
	  siglongjmp.o \
	  sigaction.o sigpending.o sigprocmask.o sigsuspend.o \
	  brk.o sbrk.o malloc.o realloc.o calloc.o mmap.o \
	  memcpy.o memcmp.o memset.o memccpy.o memmem.o memswap.o \
	  memmove.o memchr.o memrchr.o \
	  strcasecmp.o strncasecmp.o strndup.o strerror.o \
	  strcat.o strchr.o strcmp.o strcpy.o strdup.o strlen.o strnlen.o \
	  strncat.o strlcpy.o strlcat.o \
	  strstr.o strncmp.o strncpy.o strrchr.o \
	  strxspn.o strspn.o strcspn.o strpbrk.o strsep.o strtok.o \
	  gethostname.o getdomainname.o getcwd.o \
	  seteuid.o setegid.o \
	  getenv.o setenv.o putenv.o __put_env.o unsetenv.o \
	  clearenv.o nullenv.o \
	  getopt.o readdir.o \
	  syslog.o closelog.o pty.o getpt.o isatty.o reboot.o \
	  time.o utime.o llseek.o nice.o getpriority.o \
	  qsort.o \
	  lrand48.o jrand48.o mrand48.o nrand48.o srand48.o seed48.o \
	  inet/inet_ntoa.o inet/inet_aton.o inet/inet_addr.o \
	  inet/inet_ntop.o inet/inet_pton.o inet/bindresvport.o \
	  send.o recv.o

libc-$(CONFIG_KLIBC_ERRLIST) += errlist.o

libc-$(CONFIG_KLIBC_ZLIB)    += \
	zlib/adler32.o zlib/compress.o zlib/crc32.o zlib/gzio.o \
	zlib/uncompr.o zlib/deflate.o zlib/trees.o zlib/zutil.o \
	zlib/inflate.o zlib/infback.o zlib/inftrees.o zlib/inffast.o

# zlib specific flag
EXTRA_CFLAGS := -DDYNAMIC_CRC_TABLE

#####
# Add any architecture-specific rules
include $(obj)/arch/$(ARCH)/Makefile.inc

#####
# Shared definitions
LIB      := libc.a
SOLIB    := libc.so
SOHASH   := klibc.so
CRT0     := arch/$(ARCH)/crt0.o
INTERP_O := interp.o

always   := $(CRT0) $(LIB) $(SOLIB) $(SOHASH) $(INTERP_O)
LIB      := $(call objectify,$(LIB))
SOLIB    := $(call objectify,$(SOLIB))
SOHASH   := $(call objectify,$(SOHASH))
CRT0     := $(call objectify,$(CRT0))
INTERP_O := $(call objectify,$(INTERP_O))

SOLIBHASH = $(shell cat $(SOLIB).hash)

targets  := arch/$(ARCH)/crt0.o
targets  += $(libc-y) $(ARCHOBJS)

# Generate syscall stubs
subdir-y += syscalls
# Generate socket calls stubs
subdir-y += socketcalls

# Tell make to descend before building libs
$(obj)/syscalls/syscalls.o: $(obj)/syscalls
$(obj)/socketcalls/socketcalls.o: $(obj)/socketcalls

#####
# Readable errormessages extracted from src..
targets += errlist.c
quiet_cmd_errlist = GEN     $@
      cmd_errlist = $(PERL) $< $(LINUXINCLUDE) -errlist > $@ || rm -f $@

$(obj)/errlist.c: $(srctree)/$(src)/makeerrlist.pl
	$(call cmd,errlist)

# full list of dependencies for klibc
libc-deps = $(call objectify, $(libc-y) $(ARCHOBJS)) \
            $(call objectify, syscalls/syscalls.o socketcalls/socketcalls.o)

######
# Build static library: libc.a
targets += libc.a __static_init.o
quiet_cmd_libc = KLIBCAR $@
      cmd_libc = rm -f $@; \
                 $(KLIBCAR) cq $@ $(filter-out FORCE,$^); \
                 $(KLIBCRANLIB) $@

$(LIB): $(call objectify,__static_init.o) $(libc-deps) FORCE
	$(call if_changed,libc)

######
# Build shared library
targets += libc.so __shared_init.o

quiet_cmd_libcso = KLIBCLD $@
      cmd_libcso = $(KLIBCLD) $(KLIBCLDFLAGS) $(KLIBCSHAREDFLAGS) \
                             -o $@ $(filter-out FORCE,$^) $(KLIBCLIBGCC)

$(SOLIB): $(CRT0) $(call objectify,__shared_init.o) $(libc-deps) FORCE
	$(call if_changed,libcso)


#####
# Build sha1 hash values
targets     += klibc.so libc.so.hash
hostprogs-y := sha1hash
clean-files += klibc-???????????????????????????.so

quiet_cmd_solibhash = HASH    $@
      cmd_solibhash = $(KLIBCNM) $< | egrep '^[0-9a-fA-F]+ [ADRTW] ' | \
                                        sort | $(obj)/sha1hash > $@
$(SOLIB).hash: $(SOLIB) $(obj)/sha1hash FORCE
	$(call if_changed,solibhash)

quiet_cmd_sohash = GEN     $@
      cmd_sohash = cat $< > $@;                                           \
                     $(KLIBCSTRIP) $(KLIBCSTRIPFLAGS) $@;                   \
                     rm -f $(obj)/klibc-???????????????????????????.so;   \
                     ln -f $@ $(obj)/klibc-$(SOLIBHASH).so
$(SOHASH): $(SOLIB) $(SOLIB).hash
	$(call cmd,sohash)


#####
# build interp.o
targets += interp.o

quiet_cmd_interp = BUILD   $@
      cmd_interp = $(KLIBCCC) $(klibccflags) -D__ASSEMBLY__     \
                             -DLIBDIR=\"$(SHLIBDIR)\"         \
			     -DSOHASH=\"$(SOLIBHASH)\" \
			     -c -o $@ $<

$(INTERP_O): $(obj)/interp.S $(SOLIB).hash
	$(call if_changed,interp)

#####
# Install klibc
install-rule:
	@echo "  INSTALL klibc to $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)lib"
	$(Q)$(foreach f, $(LIB) $(SOLIB) $(CRT0) $(INTERP_O), \
	  $(shell $(install-data) $(f) \
	          $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)lib))
	$(Q)$(install-lib) $(obj)/klibc-$(SOLIBHASH).so \
	                      $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)lib
	$(Q)$(install-lib) $(obj)/klibc-$(SOLIBHASH).so \
	                      $(INSTALLROOT)$(SHLIBDIR)
