]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/uclibc/lib/uclibc/Makefile
Inital import
[l4.git] / l4 / pkg / uclibc / lib / uclibc / Makefile
diff --git a/l4/pkg/uclibc/lib/uclibc/Makefile b/l4/pkg/uclibc/lib/uclibc/Makefile
new file mode 100644 (file)
index 0000000..118ab6c
--- /dev/null
@@ -0,0 +1,280 @@
+PKGDIR         ?= ../..
+L4DIR          ?= $(PKGDIR)/../..
+
+CXXFLAGS_amd64 += -mcmodel=medium
+CFLAGS_amd64 += -mcmodel=medium
+
+include $(L4DIR)/mk/Makeconf
+
+SYSTEMS                = x86 arm amd64 ppc32
+TARGET         = libuc_c.a libuc_c.so
+LDFLAGS         = -z combreloc -z relro --sort-common \
+                  --sort-section alignment --warn-common \
+                 --warn-once
+
+LDFLAGS_libuc_c.so := -init __uClibc_init
+
+PC_FILENAME     := libc
+SYSDEPS                := libc/sysdeps/linux
+VPATH_SRC_BASE  = $(OBJ_DIR)
+
+FILES_all      := $(PKGDIR_ABS)/lib/uclibc/contrib_files_all.lst
+FILES_x86      := $(PKGDIR_ABS)/lib/uclibc/contrib_files_x86.lst
+FILES_arm      := $(PKGDIR_ABS)/lib/uclibc/contrib_files_arm.lst
+FILES_amd64     := $(PKGDIR_ABS)/lib/uclibc/contrib_files_amd64.lst
+FILES_ppc32     := $(PKGDIR_ABS)/lib/uclibc/contrib_files_ppc32.lst
+CONTRIB_DIR    := $(PKGDIR_ABS)/lib/contrib/uclibc
+PTHLIB_DIR     := $(PKGDIR_ABS)/lib/libpthread
+
+ifneq ($(SYSTEM),)
+UCLIBC_ARCH_x86   := i386
+UCLIBC_ARCH_arm          := arm
+UCLIBC_ARCH_amd64 := x86_64
+UCLIBC_ARCH_ppc32 := powerpc
+UCLIBC_ARCH       := $(UCLIBC_ARCH_$(ARCH))
+DIRS           := libc/stdio libc/stdlib libc/stdlib/malloc libc/string \
+                  libc/string/$(UCLIBC_ARCH) libc/string/generic \
+                  libc/inet libc/misc libc/misc/assert libc/misc/ctype \
+                  libc/misc/dirent libc/misc/error libc/misc/internals \
+                  libc/misc/locale libc/misc/elf \
+                  libc/misc/time libc/pwd_grp libc/unistd libc/termios \
+                  libc/misc/wctype libc/misc/wchar libc/misc/fnmatch \
+                  libc/misc/glob libc libcrypt \
+                  libc/signal $(SYSDEPS)/$(UCLIBC_ARCH) \
+                  $(SYSDEPS)/common libm libm/$(UCLIBC_ARCH)
+
+BOTH_SRC_CC    := $(foreach arch,all $(ARCH),\
+                   $(foreach dir,$(DIRS), \
+                    $(addprefix ARCH-$(arch)/$(dir)/,\
+                     $(notdir $(wildcard ../ARCH-$(arch)/$(dir)/*.cc)))))
+BOTH_SRC_C     := $(foreach arch,all $(ARCH),\
+                   $(foreach dir,$(DIRS), \
+                    $(addprefix ARCH-$(arch)/$(dir)/,\
+                     $(notdir $(wildcard ../ARCH-$(arch)/$(dir)/*.c)))))
+BOTH_SRC_S     := $(foreach arch,all $(ARCH),\
+                   $(foreach dir,$(DIRS), \
+                    $(addprefix ARCH-$(arch)/$(dir)/,\
+                     $(notdir $(wildcard ../ARCH-$(arch)/$(dir)/*.S)))))
+
+# some files cannot be compiled alone but are included by
+# other files and thus needs to be linked
+BOTH_SRC_C     := $(filter-out ARCH-all/libc/misc/fnmatch/fnmatch_loop.c ARCH-all/libc/pwd_grp/pwd_grp_internal.c ARCH-ppc32/libc/string/generic/_memcpy_fwd.c,$(BOTH_SRC_C))
+
+STATICONLY_SRC_C := dl-core.c
+
+SRC_C_libuc_c.a   := $(BOTH_SRC_C)
+SRC_C_libuc_c.so  := $(filter-out $(addprefix %/,$(STATICONLY_SRC_C)), $(BOTH_SRC_C))
+SRC_CC_libuc_c.a  := $(BOTH_SRC_CC)
+SRC_CC_libuc_c.so := $(BOTH_SRC_CC)
+SRC_S_libuc_c.a   := $(BOTH_SRC_S)
+SRC_S_libuc_c.so  := $(BOTH_SRC_S)
+
+IDL_PATH       =
+PRIVATE_INCDIR = $(SRC_DIR)/ARCH-$(ARCH)/include $(SRC_DIR)/ARCH-all/include \
+                 $(OBJ_DIR)/ARCH-$(ARCH)/include $(OBJ_DIR)/ARCH-all/include \
+                 $(OBJ_DIR)/ARCH-all/libc/string \
+                 $(SRC_DIR)/../contrib/uclibc/libc/misc/internals \
+                 $(OBJ_BASE)/include/$(ARCH) $(OBJ_BASE)/include \
+                 $(OBJ_BASE)/include/uclibc \
+                 $(SRC_DIR)/../contrib/uclibc/libcrypt
+LIBCINCDIR     = $(addprefix -I,$(GCCINCDIR))
+CPPFLAGS       += -nostdinc -include \
+                 $(OBJ_DIR)/ARCH-all/include/libc-symbols.h
+CFLAGS         += -fno-builtin
+CFLAGS          += -DUCLIBC_INTERNAL
+# CFLAGS       += -std=iso9899:199901
+DEFINES                = -DNDEBUG -D_LIBC -D__UCLIBC_CTOR_DTOR__
+WARNINGS       = -Wall -Wstrict-prototypes
+
+CPPFLAGS_dl-iterate-phdr.c += -I$(SRC_DIR)/../contrib/uclibc/ldso/include \
+                              -I$(SRC_DIR)/../contrib/uclibc/ldso/ldso/$(UCLIBC_ARCH)
+CPPFLAGS_dl-core.c         += -I$(SRC_DIR)/../contrib/uclibc/ldso/ldso/$(UCLIBC_ARCH) \
+                              -I$(SRC_DIR)/../contrib/uclibc/ldso/include
+CPPFLAGS_$(OBJ_DIR)/ARCH-all/libc/inet += -DRESOLVER="\"resolv.c\""
+
+ifneq ($(L4API),)
+DEFINES                    += -DL4_THREAD_SAFE
+TARGET              = r/libuc_c.a r/libuc_c.so
+LDFLAGS_r/libuc_c.so := $(LDFLAGS_libuc_c.so)
+SRC_C_r/libuc_c.a   := $(SRC_C_libuc_c.a)
+SRC_C_r/libuc_c.so  := $(SRC_C_libuc_c.so) libpthread/src/forward.c
+SRC_CC_r/libuc_c.a  := $(SRC_CC_libuc_c.a)
+SRC_CC_r/libuc_c.so := $(SRC_CC_libuc_c.so)
+SRC_S_r/libuc_c.a   := $(SRC_S_libuc_c.a)
+SRC_S_r/libuc_c.so  := $(SRC_S_libuc_c.so)
+PRIVATE_INCDIR      = $(SRC_DIR)/ARCH-$(ARCH)/include $(SRC_DIR)/ARCH-all/include \
+                      $(OBJ_DIR)/ARCH-$(ARCH)/include $(OBJ_DIR)/ARCH-all/include \
+                      $(SRC_DIR)/../contrib/uclibc/libc/misc/internals \
+                      $(OBJ_DIR)/ARCH-all/libc/string \
+                      $(OBJ_BASE)/include/$(ARCH)/$(L4API) \
+                      $(OBJ_BASE)/include/$(ARCH) $(OBJ_BASE)/include \
+                      $(OBJ_BASE)/include/uclibc_pthreads \
+                      $(OBJ_BASE)/include/uclibc \
+                      $(SRC_DIR)/../contrib/uclibc/libcrypt
+vpath libpthread/src/forward.c $(PTHLIB_DIR)/..
+PRIVATE_INCDIR_libpthread/src/forward.s.o += $(PTHLIB_DIR)/src/sysdeps/$(UCLIBC_ARCH_$(ARCH)) \
+                                             $(PTHLIB_DIR)/src
+endif
+
+endif
+
+BUILD_ARCHS    := all $(BUILD_ARCH)
+
+.general.d: $(FILES_x86) $(FILE_arm) $(FILES_amd64) $(FILES_all)
+
+ifeq ($(SYSTEM),)
+
+INCDIRS                = $(addsuffix /include,$(addprefix $(OBJ_DIR)/ARCH-,$(BUILD_ARCHS)))
+INCDIRS_OBJ_m   = $(addsuffix /Makefile,$(INCDIRS))
+
+pre-obj:: include
+
+$(INCDIRS_OBJ_m):
+       $(VERBOSE)install -d $(dir $@)
+       $(VERBOSE)echo 'PKGDIR   ?= $(PKGDIR_ABS)' > $@
+       $(VERBOSE)echo 'L4DIR    ?= $(L4DIR_ABS)' >> $@
+       $(VERBOSE)echo 'OBJ_BASE ?= $(OBJ_BASE)' >> $@
+       $(VERBOSE)echo 'OBJ_DIR  ?= $(OBJ_DIR)' >> $@
+       $(VERBOSE)echo 'INSTALL_INC_PREFIX = $$(PKGNAME)' >> $@
+       $(VERBOSE)echo 'include $$(L4DIR)/mk/include.mk' >> $@
+
+.PHONY: include
+
+include:: $(addprefix $(OBJ_DIR)/ARCH-,$(addsuffix /links-done,$(BUILD_ARCHS))) $(INCDIRS_OBJ_m)
+       $(VERBOSE)for i in $(INCDIRS); do \
+         PWD=$$i $(MAKE) -C $$i all; \
+       done
+
+install:: all
+       $(VERBOSE)set -e; $(foreach d,$(INCDIRS), \
+         if [ -f $d/Makefile ]; then \
+           PWD=$(PWD)/$d $(MAKE) -C $d $@ $(MKFLAGS); \
+         fi;)
+
+# ok, we have a list of files to check in FILES
+# for each file do
+# check if it exists, yes? go on
+#   no? create an apropriate link with a relative path to the contrib dir
+
+REBUILD_LINKS_CONTRIB =                                                  \
+  set -e; arch=$1;                                                       \
+    cat contrib_files_$${arch}.lst | while read file flags;              \
+    do                                                                   \
+      path_file=`dirname $${file}`;                                      \
+      path_ctrb=`dirname $(CONTRIB_DIR)/$${file}`;                       \
+      if [ -n "$${flags}" ]; then                                        \
+        dest="$${path_file}/$${flags}.c";                                \
+      else                                                               \
+        dest="$${file}";                                                 \
+      fi;                                                                \
+      if [ "$${path_file}" = "$(SYSDEPS)/i386/bits" -o                   \
+           "$${path_file}" = "$(SYSDEPS)/arm/bits"  -o                   \
+           "$${path_file}" = "$(SYSDEPS)/x86_64/bits" -o                 \
+           "$${path_file}" = "$(SYSDEPS)/powerpc/bits" -o                \
+           "$${path_file}" = "$(SYSDEPS)/common/bits" ]; then            \
+        if [ \( ! -e ARCH-$${arch}/include/bits/`basename $${dest}` \)   \
+                  -a \( -e $(CONTRIB_DIR)/$${file} \) ]; then            \
+         b=`basename $${file}`;                                         \
+          from=$${path_ctrb}/$$b;                                        \
+          to=$(OBJ_DIR)/ARCH-$${arch}/include/bits/$$b;                  \
+        fi;                                                              \
+      elif [ "$${path_file}" = "$(SYSDEPS)/i386/sys" -o                  \
+             "$${path_file}" = "$(SYSDEPS)/arm/sys"  -o                  \
+             "$${path_file}" = "$(SYSDEPS)/x86_64/sys"  -o               \
+             "$${path_file}" = "$(SYSDEPS)/powerpc/sys"  -o              \
+             "$${path_file}" = "$(SYSDEPS)/common/sys" ]; then           \
+        if [ \( ! -e ARCH-$${arch}/include/sys/`basename $${dest}` \)    \
+                  -a \( -e $(CONTRIB_DIR)/$${file} \) ]; then            \
+         b=`basename $${file}`;                                         \
+          from=$${path_ctrb}/$$b;                                        \
+          to=$(OBJ_DIR)/ARCH-$${arch}/include/sys/$$b;                   \
+        fi;                                                              \
+      elif [ \( "$${path_file}" = "$(SYSDEPS)/i386" -o                   \
+                "$${path_file}" = "$(SYSDEPS)/arm"  -o                   \
+                "$${path_file}" = "$(SYSDEPS)/x86_64"  -o                \
+                "$${path_file}" = "$(SYSDEPS)/powerpc"  -o               \
+                "$${path_file}" = "$(SYSDEPS)/common" \)                 \
+            -a $${file%.h} != $${file} ]; then                          \
+        if [ \( ! -e ARCH-$${arch}/include/`basename $${dest}` \)        \
+                  -a \( -e $(CONTRIB_DIR)/$${file} \) ]; then            \
+         b=`basename $${file}`;                                         \
+          from=$${path_ctrb}/$$b;                                        \
+          to=$(OBJ_DIR)/ARCH-$${arch}/include/$$b;                       \
+        fi;                                                              \
+      else                                                               \
+        if [ -e $(CONTRIB_DIR)/$${file} ] ; then                         \
+          from=$${path_ctrb}/`basename $${file}`;                        \
+          to=$(OBJ_DIR)/ARCH-$${arch}/$${dest};                          \
+        fi;                                                              \
+      fi;                                                                \
+      if [ -n "$$to" -a -n "$$from" -a ! -e "$$to" ]; then               \
+        d=`dirname $$to`;                                                \
+        [ -d "$$d" ] || mkdir -p $$d;                                    \
+        ln -s$(if $(VERBOSE),,v) "$$from" "$$to";                        \
+      fi;                                                                \
+      unset to; unset from;                                              \
+    done;
+
+REBUILD_LINKS_SRC =                                                      \
+  set -e; arch=$1;                                                       \
+    find ARCH-$$arch -name \*.h -o -name \*.c -o -name \*.cc -o -name \*.S |            \
+    while read file;                                                     \
+    do                                                                   \
+      to=$(OBJ_DIR)/$$file;                                              \
+      d=$$(dirname $$to);                                                \
+      [ -d "$$d" ] || mkdir -p $$d;                                      \
+      if [ ! -e "$$to" ] ; then                                          \
+        ln -s$(if $(VERBOSE),,v) "$(SRC_DIR)/$$file" "$$to";             \
+      fi;                                                                \
+    done;
+
+
+$(OBJ_DIR)/ARCH-%/links-done: contrib_files_%.lst Makefile
+       @echo -n "  ... Checking and fixing contrib file links, cleaning .o [$*]"
+       $(VERBOSE)if [ -d "$(OBJ_DIR)/ARCH-$*" ]; then                      \
+         find $(OBJ_DIR)/ARCH-$* -type l | xargs rm -f$(if $(VERBOSE),,v); \
+       fi
+       $(VERBOSE)$(call REBUILD_LINKS_SRC,$*)
+       $(VERBOSE)$(call REBUILD_LINKS_CONTRIB,$*)
+       @touch $@
+       @echo " ... done!"
+
+else
+
+CONTRIB: $(addprefix $(OBJ_DIR)/ARCH-,$(addsuffix /links-done,$(BUILD_ARCHS)))
+
+endif
+
+cleanall::
+       $(VERBOSE)find $(OBJ_DIR) -type l | xargs rm -f$(if $(VERBOSE),,v)
+       $(VERBOSE)$(RM) $(OBJ_DIR)/ARCH-*/links-done
+       $(VERBOSE)$(RM) $(OBJ_DIR)/ARCH-*/include/.general.d
+
+# static and shared
+$(SRC_CC_libuc_c.so:.cc=.s.o)   $(SRC_C_libuc_c.so:.c=.s.o)  : DEFINES += -DSHARED
+$(SRC_CC_libuc_c.a:.cc=.o)      $(SRC_C_libuc_c.a:.c=.o)     : DEFINES += -DSTATIC
+
+# some special defines
+O_AND_SO_OBJS  = $(SRC_CC_libuc_c.a:.cc=.o) $(SRC_CC_libuc_c.so:.cc=.s.o)
+O_AND_SO_OBJS  += $(SRC_C_libuc_c.a:.c=.o)   $(SRC_C_libuc_c.so:.c=.s.o)
+$(filter %__DO_UNLOCKED.o %__DO_UNLOCKED.s.o,$(O_AND_SO_OBJS)):\
+       DEFINES += -D__DO_UNLOCKED
+$(filter %__DO_LARGEFILE.o %__DO_LARGEFILE.s.o,$(O_AND_SO_OBJS)):\
+       DEFINES += -D__DO_LARGEFILE
+$(filter %__FN.o,$(SRC_C_libuc_c.a:.c=.o)):\
+       DEFINES += -DL_$(patsubst %__FN.o,%,$(notdir $@))
+$(filter %__FN.s.o,$(SRC_C_libuc_c.a:.c=.s.o)):\
+       DEFINES += -DL_$(patsubst %__FN.s.o,%,$(notdir $@))
+
+$(SRC_C_libm:.c=.o) $(SRC_C_libm:.c=.s.o):\
+       DEFINES += -D_IEEE_LIBM -D_ISOC99_SOURCE -D_SVID_SOURCE
+
+$(filter %__FN.o,$(SRC_CC:.cc=.o)):\
+       DEFINES += -DL_$(patsubst %__FN.o,%,$(notdir $@))
+$(filter %__FN.s.o,$(SRC_CC:.cc=.s.o)):\
+       DEFINES += -DL_$(patsubst %__FN.s.o,%,$(notdir $@))
+
+$(SRC_CC_libm:.cc=.o) $(SRC_CC_libm:.cc=.s.o):\
+       DEFINES += -D_IEEE_LIBM -D_ISOC99_SOURCE -D_SVID_SOURCE
+
+include $(L4DIR)/mk/lib.mk