diff options
37 files changed, 781 insertions, 312 deletions
diff --git a/Makefile.in b/Makefile.in index 8d254722b..1b3b3371f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -15,6 +15,8 @@ noconfig_targets := menuconfig config oldconfig silentoldconfig randconfig \ include $(top_builddir)Rules.mak sub_headers := headers +#suspicious_dependency:=include/bits + ifeq ($(HAVE_DOT_CONFIG),y) all: pregen libs @@ -36,11 +38,17 @@ include $(top_srcdir)extra/locale/Makefile.in # last included to catch all the objects added by others (locales/threads) include $(top_srcdir)libc/Makefile.in -include/bits/uClibc_config.h: extra/config/conf .config - $(Q)$(INSTALL) -d $(dir $@) - $(Q)@$< -o $(top_srcdir)extra/Configs/Config.in - $(top_srcdir)extra/scripts/conf-header.sh .config > include/bits/uClibc_config.h - +# If the .config changes then we have to make sure that our includes are +# updated properly. This would normally work by saying that the headers +# have uClibc_config.h as prerequisite but since we _symlink_ the headers +# and do not (?) want to rely on 'make -L' we better update them right here, +# on spot to save us from alot of hazzle. +include/bits/uClibc_config.h: extra/config/conf .config $(top_srcdir)extra/scripts/conf-header.sh | include/bits + @$(disp_gen) + @#superfluous: $(Q)$(INSTALL) -d $(dir $@) + $(Q)@$< -s $(top_srcdir)extra/Configs/Config.in + $(Q)$(top_srcdir)extra/scripts/conf-header.sh .config > $@ + $(Q)$(MAKE) headers-y # For the moment, we have to keep re-running this target # because the fix includes scripts rely on pre-processers @@ -54,12 +62,95 @@ export header_extra_args = -n endif HEADERS_BITS_COMMON := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/common/bits/*.h)) HEADERS_BITS_ARCH := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/bits/*.h)) -HEADERS_BITS_SUBARCH := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/bits/$(TARGET_SUBARCH)/*.h)) -HEADERS_BITS_COMMON := $(filter-out $(HEADERS_BITS_ARCH) $(HEADERS_BITS_SUBARCH),$(HEADERS_BITS_COMMON)) +HEADERS_BITS_SUBARCH := +ifneq ($(TARGET_SUBARCH),) +HEADERS_BITS_SUBARCH := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/bits/$(TARGET_SUBARCH)/*.h)) +endif +HEADERS_BITS_COMMON := $(filter-out $(HEADERS_BITS_ARCH) $(HEADERS_BITS_SUBARCH) $(HEADERS_BITS_PTHREAD),$(HEADERS_BITS_COMMON)) + +HEADERS_SYS_COMMON := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/common/sys/*.h)) +HEADERS_SYS_ARCH := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/sys/*.h)) +HEADERS_SYS_COMMON := $(filter-out $(HEADERS_SYS_ARCH),$(HEADERS_SYS_COMMON)) + +ALL_HEADERS_COMMON := include/fpu_control.h include/dl-osinfo.h \ + include/hp-timing.h +ALL_HEADERS_BITS_COMMON := $(addprefix include/bits/,$(HEADERS_BITS_COMMON)) +ALL_HEADERS_BITS_ARCH := $(addprefix include/bits/,$(HEADERS_BITS_ARCH)) +ifneq ($(TARGET_SUBARCH),) +ALL_HEADERS_BITS_SUBARCH := $(addprefix include/bits/,$(HEADERS_BITS_SUBARCH)) +else +ALL_HEADERS_BITS_SUBARCH := +endif +ALL_HEADERS_SYS_COMMON := $(addprefix include/sys/,$(HEADERS_SYS_COMMON)) +ALL_HEADERS_SYS_ARCH := $(addprefix include/sys/,$(HEADERS_SYS_ARCH)) + +target-headers-sysdep := \ + $(ALL_HEADERS_COMMON) \ + $(ALL_HEADERS_BITS_COMMON) \ + $(ALL_HEADERS_BITS_ARCH) \ + $(ALL_HEADERS_BITS_SUBARCH) \ + $(ALL_HEADERS_SYS_COMMON) \ + $(ALL_HEADERS_SYS_ARCH) \ + $(ALL_HEADERS_BITS_PTHREAD) + +include/fpu_control.h: + @$(disp_ln) + $(Q)[ -r libc/sysdeps/linux/$(TARGET_ARCH)/$(@F) ] && \ + $(LN) -fs ../libc/sysdeps/linux/$(TARGET_ARCH)/$(@F) $@ || \ + $(LN) -fs ../libc/sysdeps/linux/common/$(@F) $@ + +include/dl-osinfo.h include/hp-timing.h: + $(do_ln) ../libc/sysdeps/linux/common/$(@F) $@ + +$(ALL_HEADERS_BITS_COMMON): + $(do_ln) ../../libc/sysdeps/linux/common/bits/$(@F) $@ + +$(ALL_HEADERS_BITS_ARCH): + $(do_ln) ../../libc/sysdeps/linux/$(TARGET_ARCH)/bits/$(@F) $@ + +ifneq ($(TARGET_SUBARCH),) +$(ALL_HEADERS_BITS_SUBARCH): + $(do_ln) ../../../libc/sysdeps/linux/$(TARGET_ARCH)/bits/$(TARGET_SUBARCH)/$(@F) $@ +endif + +ifneq ($(strip $(ALL_HEADERS_SYS_COMMON)),) +$(ALL_HEADERS_SYS_COMMON): + $(do_ln) ../../libc/sysdeps/linux/common/sys/$(@F) $@ +endif + +ifneq ($(strip $(ALL_HEADERS_SYS_ARCH)),) +$(ALL_HEADERS_SYS_ARCH): + $(do_ln) ../../libc/sysdeps/linux/$(TARGET_ARCH)/sys/$(@F) $@ +endif -headers_sysnum: - $(Q)\ - set -e; \ +$(target-headers-sysdep): | include/bits + +sysdep_common_headers-clean: + $(RM) $(ALL_HEADERS_COMMON) +headers_clean-y += sysdep_common_headers-clean + +# The headers. Arch specific headers are specified via ARCH_HEADERS in +# libc/sysdeps/linux/$(TARGET_ARCH)/Makefile.arch which appends those via +# libc/sysdeps/linux/Makefile.commonarch to headers-y +headers-y += $(target-headers-sysdep) + +# Make bootstrap only header files: not requiring any cross-compilation +headers: include/bits/uClibc_config.h + +pregen: include/bits/sysnum.h headers + $(Q)$(if $(UCLIBC_HAS_LOCALE),$(MAKE) -C extra/locale locale_headers) +ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) + $(Q)$(MAKE) nptl_headers +ifeq ($(shell $(CC) --help >& /dev/null && echo yes),yes) + $(Q)$(MAKE) nptl_arch_headers + $(Q)$(MAKE) nptl_linux_headers +endif +endif + +include/bits/sysnum.h: $(top_srcdir)extra/scripts/gen_bits_syscall_h.sh + $(Q)$(INSTALL) -d $(@D) + @$(disp_gen) + $(Q)set -e; \ cd $(top_builddir); \ tmp=`mktemp include/bits/sysnum.h.XXXXXX 2>/dev/null`; \ [ -z "$$tmp" ] && tmp='include/bits/sysnum.h.new'; \ @@ -67,66 +158,18 @@ headers_sysnum: if cmp include/bits/sysnum.h $$tmp >/dev/null 2>&1; then \ $(RM) $$tmp; \ else \ - mv -f $$tmp include/bits/sysnum.h; \ + mv -f $$tmp include/bits/sysnum.h; \ fi -# Make bootstrap only header files: not requiring any cross-compilation -headers_bootstrap: include/bits/uClibc_config.h - $(Q)$(MAKE) headers-y - $(Q)\ - set -e; \ - if [ -e libc/sysdeps/linux/$(TARGET_ARCH)/fpu_control.h ] ; then \ - $(LN) -fs ../libc/sysdeps/linux/$(TARGET_ARCH)/fpu_control.h include/ ; \ - else \ - $(LN) -fs ../libc/sysdeps/linux/common/fpu_control.h include/ ; \ - fi; \ - for f in dl-osinfo.h hp-timing.h ; do \ - $(LN) -fs ../libc/sysdeps/linux/common/$$f include/ ; \ - done - $(Q)\ - cd include/bits; \ - set -e; \ - for i in $(HEADERS_BITS_COMMON) ; do \ - $(LN) -fs ../../libc/sysdeps/linux/common/bits/$$i .; \ - done; \ - for i in $(HEADERS_BITS_ARCH) ; do \ - $(LN) -fs ../../libc/sysdeps/linux/$(TARGET_ARCH)/bits/$$i .; \ - done; \ - for i in $(HEADERS_BITS_SUBARCH) ; do \ - $(LN) -fs ../../libc/sysdeps/linux/$(TARGET_ARCH)/bits/$(TARGET_SUBARCH)/$$i .; \ - done - $(Q)\ - cd include/sys; \ - set -e; \ - for i in `ls ../../libc/sysdeps/linux/common/sys/*.h` ; do \ - $(LN) -fs $$i .; \ - done; \ - if [ -d ../../libc/sysdeps/linux/$(TARGET_ARCH)/sys ] ; then \ - for i in `ls ../../libc/sysdeps/linux/$(TARGET_ARCH)/sys/*.h` ; do \ - $(LN) -fs $$i .; \ - done; \ - fi -ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) - $(MAKE) nptl_headers_bootstrap - $(MAKE) nptl_linux_headers_bootstrap -endif - - -headers_extra: - ifeq ($(UCLIBC_HAS_LOCALE),y) - $(MAKE) -C extra/locale locale_headers - endif - ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) - $(MAKE) nptl_headers - ifeq ($(shell $(CC) --help >& /dev/null && echo yes),yes) - $(MAKE) nptl_arch_headers - $(MAKE) nptl_linux_headers - endif - endif - -pregen: headers -# Make all headers -headers: headers_bootstrap headers_sysnum headers_extra +$(LOCAL_INSTALL_PATH): + $(Q)$(MAKE) PREFIX=$(shell pwd)/ RUNTIME_PREFIX=./ \ + DEVEL_PREFIX=$(LOCAL_INSTALL_PATH)/usr/ \ + HOSTCC="$(HOSTCC)" \ + install_kernel_headers + $(Q)$(MAKE) PREFIX=$(shell pwd)/ RUNTIME_PREFIX=./ \ + DEVEL_PREFIX=$(LOCAL_INSTALL_PATH)/usr/ \ + HOSTCC="$(HOSTCC)" \ + install_dev install: install_runtime install_dev @@ -236,6 +279,67 @@ ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) # Remove this as it is only used internally. $(RM) $(PREFIX)$(DEVEL_PREFIX)include/tls.h endif +ifneq ($(UCLIBC_HAS_GNU_ERROR),y) + # Remove error.h upon request + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/error.h +endif +ifneq ($(UCLIBC_HAS_BSD_ERR),y) + # Remove err.h upon request + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/err.h +endif +ifneq ($(UCLIBC_SUSV3_LEGACY),y) + # Remove timeb.h since the LEGACY ftime() was disabled upon request + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/sys/timeb.h +endif +ifneq ($(UCLIBC_HAS_EPOLL),y) + # Remove epoll.h since epoll_*() were disabled upon request + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/sys/epoll.h +endif +ifneq ($(UCLIBC_HAS_XATTR),y) + # Remove xattr.h since extended attributes were disabled upon request + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/sys/xattr.h +endif +ifneq ($(UCLIBC_HAS_PTY),y) + # Remove pty.h since PTY support was disabled upon request + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/pty.h +endif +ifneq ($(UCLIBC_LINUX_SPECIFIC),y) + # Remove linux-specific headers as requested + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/sys/inotify.h + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/sys/perm.h + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/sys/personality.h +endif +ifneq ($(UCLIBC_SV4_DEPRECATED),y) + # Remove ustat.h since deprecated SV4 support was disabled upon request + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/ustat.h + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/sys/ustat.h + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/bits/ustat.h +endif +ifeq ($(UCLIBC_HAS_REALTIME)$(UCLIBC_HAS_ADVANCED_REALTIME),) + # Remove SUSv-realtime related message-queue headers upon request + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/mqueue.h + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/sys/mqueue.h + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/bits/mqueue.h +endif +ifneq ($(UCLIBC_HAS_REALTIME),y) + # Remove SUSv-realtime related headers upon request + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/sched.h + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/sys/sched.h + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/bits/sched.h + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/semaphore.h + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/sys/semaphore.h + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/bits/semaphore.h +endif +ifneq ($(UCLIBC_HAS_SOCKET),y) + # Remove socket related headers upon request + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/sys/socket.h + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/bits/socket.h + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/sys/socketvar.h +endif +ifneq ($(UCLIBC_HAS_CRYPT),y) + # Remove crypt.h since libcrypt was disabled upon request + $(RM) $(PREFIX)$(DEVEL_PREFIX)include/crypt.h +endif # Installs development library links. install_dev: install_headers @@ -322,29 +426,30 @@ headers: endif # ifeq ($(HAVE_DOT_CONFIG),y) include/bits: - $(INSTALL) -d include/bits + @$(disp_mkdir) + $(Q)$(INSTALL) -d $@ # configuration # --------------------------------------------------------------------------- -extra/config/conf extra/config/mconf: include/bits +extra/config/conf extra/config/mconf: $(suspicious_dependency) $(Q)$(MAKE) -C extra/config $(notdir $@) -menuconfig: extra/config/mconf include/bits +menuconfig: extra/config/mconf $(suspicious_dependency) $(Q)./extra/config/mconf extra/Configs/Config.in -config: extra/config/conf include/bits +config: extra/config/conf $(suspicious_dependency) $(Q)./extra/config/conf extra/Configs/Config.in -oldconfig: extra/config/conf include/bits +oldconfig: extra/config/conf $(suspicious_dependency) $(Q)./extra/config/conf -o extra/Configs/Config.in -silentoldconfig: extra/config/conf include/bits +silentoldconfig: extra/config/conf $(suspicious_dependency) $(Q)./extra/config/conf -s extra/Configs/Config.in -randconfig: extra/config/conf include/bits +randconfig: extra/config/conf $(suspicious_dependency) $(Q)./extra/config/conf -r extra/Configs/Config.in -allyesconfig: extra/config/conf include/bits +allyesconfig: extra/config/conf $(suspicious_dependency) $(Q)./extra/config/conf -y extra/Configs/Config.in sed -i -e "s/^DODEBUG=.*/# DODEBUG is not set/" .config sed -i -e "s/^DOASSERTS=.*/# DOASSERTS is not set/" .config @@ -353,16 +458,19 @@ allyesconfig: extra/config/conf include/bits sed -i -e "s/^UCLIBC_MJN3_ONLY=.*/# UCLIBC_MJN3_ONLY is not set/" .config $(Q)./extra/config/conf -o extra/Configs/Config.in -allnoconfig: extra/config/conf include/bits +allnoconfig: extra/config/conf $(suspicious_dependency) $(Q)./extra/config/conf -n extra/Configs/Config.in -defconfig: extra/config/conf include/bits - $(Q)./extra/config/conf -d extra/Configs/Config.in +defconfig: extra/config/conf $(suspicious_dependency) + $(Q)./extra/config/conf -d extra/Configs/Config.in \ + -D extra/Configs/defconfigs/$(ARCH) clean: $(Q)$(RM) -r lib include/bits - $(RM) lib*/*.a ldso/*/*.a libpthread/*/*.a - $(RM) include/fpu_control.h include/dl-osinfo.h include/hp-timing.h + $(RM) ldso/*/*.a libpthread/*/*.a libc/*.a libcrypt/*.a libintl/*.a \ + libm/*.a libnsl/*.a libpthread/*.a libresolv/*.a librt/*.a \ + libutil/*.a lib/*.a \ + include/fpu_control.h include/dl-osinfo.h include/hp-timing.h $(MAKE) objclean-y headers_clean-y $(MAKE) -s -C test clean $(MAKE) -C utils utils_clean @@ -376,9 +484,11 @@ clean: done; \ fi @$(RM) include/linux include/asm* + $(RM) $(top_builddir)extra/scripts/unifdef + $(RM) -r $(LOCAL_INSTALL_PATH) distclean: clean - -find . \( -name core -o -name \*.orig -o -name \*~ \) -exec $(RM) {} \; + -find . \( -name core -o -name \*.orig -o -name \*~ -o -name .\*.dep \) -exec $(RM) {} \; $(RM) .config .config.old .config.cmd $(RM) extra/locale/*.tgz $(MAKE) -C extra/config distclean @@ -391,3 +501,6 @@ dist release: test check: $(Q)$(MAKE) -C test + +test_compile: $(LOCAL_INSTALL_PATH) + $(Q)$(MAKE) -C test compile @@ -4,6 +4,13 @@ .SUFFIXES: .c .S .o .os .oS .so .a .s .i +PHONY := FORCE + +.PHONY: dummy $(PHONY) \ + all check clean realclean distclean test \ + config dist menuconfig oldconfig release \ + subdirs utils + # order is important, the stripping uses STRIP_FLAGS for lib-so, but not for lib-a ifeq ($(HAVE_SHARED),y) .LIBPATTERNS: "lib%.so" @@ -18,14 +25,22 @@ libs: $(lib-a-y) endif objs: all_objs -shared_objs = $(ldso-y) $(libc-y:.o=.os) $(libc-shared-y) $(libc-nonshared-y) $(libdl-so-y) -shared_objs += $(libcrypt-so-y) $(libintl-so-y) $(libm-so-y) $(libnsl-so-y) $(libpthread-so-y) $(libpthread-nonshared-y) -shared_objs += $(libthread_db-so-y) $(libresolv-so-y) $(librt-so-y) $(libutil-so-y) -ar_objs = $(libc-y) $(libc-static-y) $(libdl-a-y) $(libcrypt-a-y) $(libintl-a-y) $(libm-a-y) $(libnsl-a-y) -ar_objs += $(libpthread-a-y) $(libthread_db-a-y) $(libresolv-a-y) $(librt-a-y) $(libutil-a-y) +shared_objs = $(libc-y:.o=.os) $(libc-shared-y) $(libc-nonshared-y) \ + $(libcrypt-so-y) $(libdl-so-y) \ + $(libintl-so-y) $(libm-so-y) $(libnsl-so-y) \ + $(libpthread-so-y) $(libpthread-nonshared-y) $(libthread_db-so-y) \ + $(libresolv-so-y) $(librt-so-y) \ + $(ldso-y) \ + $(libutil-so-y) + +ar_objs = $(libc-y) $(libc-static-y) $(libcrypt-a-y) \ + $(libdl-a-y) $(libintl-a-y) $(libm-a-y) $(libnsl-a-y) \ + $(libpthread-a-y) $(libthread_db-a-y) \ + $(libresolv-a-y) $(librt-a-y) $(libutil-a-y) ifeq ($(DOPIC),y) ar_objs := $(ar_objs:.o=.os) endif +flat_objs = $(lib-gdb-y) ifeq ($(HAVE_SHARED),y) all_objs: $(sort $(shared_objs) $(ar_objs)) @@ -50,7 +65,7 @@ SECHO := @echo ifneq ($(V)$(VERBOSE),) SHELL_SET_X := set -x DISP := ver -Q := +Q := else DISP := pur Q := @ @@ -60,6 +75,9 @@ endif show_objs = $(subst ../,,$@) pur_disp_compile.c = echo " "CC $(show_objs) +pur_disp_compile.i = echo " "CPP $(show_objs) +pur_disp_compile.s = echo " "CC-S $(show_objs) +pur_disp_compile.u = echo " "CC $(show_objs) pur_disp_compile.S = echo " "AS $(show_objs) pur_disp_compile.m = $(pur_disp_compile.c) pur_disp_compile-m = echo " "CC-m $(show_objs) @@ -67,8 +85,15 @@ pur_disp_strip = echo " "STRIP $(STRIP_FLAGS) $@ pur_disp_t_strip = echo " "STRIP $(STRIP_FLAGS) $@ pur_disp_ar = echo " "AR $(ARFLAGS) $@ pur_disp_ld = echo " "LD $(1) +pur_disp_ln = echo " "LN $@ +pur_disp_mkdir = echo " "MKDIR $@ +pur_disp_gen = echo " "GEN $@ +pur_disp_unifdef = echo " "UNIFDEF $@ sil_disp_compile.c = true +sil_disp_compile.i = true +sil_disp_compile.s = true +sil_disp_compile.u = true sil_disp_compile.S = true sil_disp_compile.m = true sil_disp_compile-m = true @@ -76,17 +101,31 @@ sil_disp_strip = true sil_disp_t_strip = true sil_disp_ar = true sil_disp_ld = true +sil_disp_ln = true +sil_disp_mkdir = true +sil_disp_gen = true +sil_disp_unifdef = true ver_disp_compile.c = echo $(cmd_compile.c) +ver_disp_compile.i = echo $(cmd_compile.i) +ver_disp_compile.s = echo $(cmd_compile.s) +ver_disp_compile.u = echo $(cmd_compile.u) ver_disp_compile.S = echo $(cmd_compile.S) ver_disp_compile.m = echo $(cmd_compile.m) ver_disp_compile-m = echo $(cmd_compile-m) ver_disp_strip = echo $(cmd_strip) ver_disp_t_strip = echo $(cmd_t_strip) ver_disp_ar = echo $(cmd_ar) -ver_disp_ld = +ver_disp_ld = +ver_disp_ln = +ver_disp_mkdir = +ver_disp_gen = +ver_disp_unifdef = echo $(cmd_unifdef) disp_compile.c = $($(DISP)_disp_compile.c) +disp_compile.i = $($(DISP)_disp_compile.i) +disp_compile.s = $($(DISP)_disp_compile.s) +disp_compile.u = $($(DISP)_disp_compile.u) disp_compile.S = $($(DISP)_disp_compile.S) disp_compile.m = $($(DISP)_disp_compile.m) disp_compile-m = $($(DISP)_disp_compile-m) @@ -94,30 +133,83 @@ disp_strip = $($(DISP)_disp_strip) disp_t_strip = $($(DISP)_disp_t_strip) disp_ar = $($(DISP)_disp_ar) disp_ld = $($(DISP)_disp_ld) - -cmd_compile.c = $(CC) -c $< -o $@ $(CFLAGS) $(ARCH_CFLAGS) $(CFLAGS-$(suffix $@)) $(filter-out $(CFLAGS-OMIT-$(notdir $<)),$(CFLAGS-$(notdir $(^D)))) $(CFLAGS-$(subst $(top_srcdir),,$(dir $<))) $(CFLAGS-$(notdir $<)) $(CFLAGS-$(notdir $@)) -cmd_compile.S = $(cmd_compile.c) -D__ASSEMBLER__ $(ASFLAGS) $(ARCH_ASFLAGS) $(ASFLAGS-$(suffix $@)) $(ASFLAGS-$(notdir $<)) $(ASFLAGS-$(notdir $@)) +disp_ln = $($(DISP)_disp_ln) +disp_mkdir = $($(DISP)_disp_mkdir) +disp_gen = $($(DISP)_disp_gen) +disp_unifdef = $($(DISP)_disp_unifdef) + +any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^) + +# ../foo/bar/baz.ext -> foo_bar_baz.ext +variablify = $(subst /,_,$(subst $(top_builddir),,$(1))) +# strip the top_builddir off everything to make the *string* idempotent for -C +dirify = $(subst $(top_builddir),,$(patsubst -L$(top_builddir)%,-L%,$(patsubst -I$(top_builddir)%,-I%,$(1)))) + +# True if not identical. Neither order nor whitespace nor identical flags +# matter. +compare_flags = \ + $(strip $(filter-out $(call dirify,$(cmd_$(call variablify,$(1)))), \ + $(call dirify,$(cmd_$(call variablify,$(@))))) \ + $(filter-out $(call dirify,$(cmd_$(call variablify,$(@)))), \ + $(call dirify,$(cmd_$(call variablify,$(1)))))) + +# Rebuild if any prerequisite, the used CC or flags changed. +# Previously used flags are stored in the corresponding .%.dep files +maybe_exec = \ + $(if $(strip $(compare_flags) $(any-prereq)), \ + @set -e; \ + $(disp_$(1)); \ + $(cmd_$(1)); \ + echo 'cmd_$(call variablify,$@) := $(call dirify,$(cmd_$(call variablify,$1)))' >> $(dir $@).$(notdir $@).dep) + + +CFLAGS_gen.dep = -MT $@ -MD -MP -MF $(dir $@).$(notdir $@).dep + +cmd_compile.c = $(CC) -c $< -o $@ $(CFLAGS) $(ARCH_CFLAGS) \ + $(CFLAGS-$(suffix $@)) \ + $(filter-out $(CFLAGS-OMIT-$(notdir $<)),$(CFLAGS-$(notdir $(<D)))) \ + $(CFLAGS-$(subst $(top_srcdir),,$(dir $<))) \ + $(CFLAGS-$(notdir $<)) \ + $(CFLAGS-$(notdir $@)) \ + $(CFLAGS_gen.dep) +cmd_compile.i = $(cmd_compile.c:-c=-E -dD) +cmd_compile.s = $(cmd_compile.c:-c=-S) +cmd_compile.u = $(CC) $^ $(DEPS-$(notdir $@)) -o $@ $(CFLAGS) $(CFLAGS-$(notdir $(^D))) $(CFLAGS-$(notdir $@)) $(CFLAGS_gen.dep) +cmd_compile.S = $(filter-out -std=gnu99, $(cmd_compile.c)) -D__ASSEMBLER__ $(ASFLAGS) $(ARCH_ASFLAGS) $(ASFLAGS-$(suffix $@)) $(ASFLAGS-$(notdir $<)) $(ASFLAGS-$(notdir $@)) cmd_compile.m = $(cmd_compile.c) -DL_$(patsubst %$(suffix $(notdir $@)),%,$(notdir $@)) + cmd_compile-m = $(CC) $^ -c -o $@ $(CFLAGS) $(ARCH_CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(notdir $(@D))) $(CFLAGS-$(notdir $@)) cmd_strip = $(STRIPTOOL) $(STRIP_FLAGS) $^ cmd_t_strip = $(STRIPTOOL) $(STRIP_FLAGS) $@ cmd_ar = $(AR) $(ARFLAGS) $@ $^ -compile.c = @$(disp_compile.c) ; $(cmd_compile.c) -compile.i = $(cmd_compile.c:-c=-E -dD) -compile.s = $(cmd_compile.c:-c=-S) -compile.S = @$(disp_compile.S) ; $(cmd_compile.S) -compile.m = @$(disp_compile.m) ; $(cmd_compile.m) -compile-m = @$(disp_compile-m) ; $(cmd_compile-m) +define do_ln + @$(disp_ln) + $(Q)$(LN) -fs +endef + +define do_awk + @$(disp_gen) + $(Q)$(AWK) -f +endef + +compile.c = @$(call maybe_exec,compile.c) +compile.i = $(call maybe_exec,compile.i) +compile.s = $(call maybe_exec,compile.s) +compile.S = @$(call maybe_exec,compile.S) +compile.m = @$(call maybe_exec,compile.m) +compile-m = @$(disp_compile-m) ; $(cmd_compile-m) ; $(do_t_strip) do_strip = @$(disp_strip) ; $(cmd_strip) do_t_strip= @$(disp_t_strip) ; $(cmd_t_strip) -do_ar = @$(disp_ar) ; $(cmd_ar) +do_unifdef= @$(disp_unifdef) ; $(cmd_unifdef) +define do_ar + $(do_strip) + @$(disp_ar) ; $(cmd_ar) +endef define compile.u - @$(disp_compile.c) - $(Q)$(CC) $^ $(DEPS-$(notdir $@)) -o $@ $(CFLAGS) $(CFLAGS-$(notdir $(^D))) $(CFLAGS-$(notdir $@)) - @$(disp_strip) - $(Q)$(STRIPTOOL) $(STRIP_FLAGS) $@ + @$(disp_compile.u) ; $(cmd_compile.u) + @$(disp_t_strip) endef hcompile.u = $(HOSTCC) $^ $(DEPS-$(notdir $@)) -o $@ $(BUILD_LDFLAGS) $(BUILD_LDFLAGS-$(notdir $(^D))) $(BUILD_LDFLAGS-$(notdir $@)) $(BUILD_CFLAGS) $(BUILD_CFLAGS-$(notdir $(^D))) $(BUILD_CFLAGS-$(notdir $@)) hcompile.o = $(HOSTCC) $^ $(DEPS-$(notdir $@)) -c -o $@ $(BUILD_CFLAGS) $(BUILD_CFLAGS-$(notdir $(^D))) $(BUILD_CFLAGS-$(notdir $@)) @@ -127,7 +219,7 @@ define link.so $(Q)$(RM) $@ $@.$(2) $(dir $@)$(1) @$(disp_ld) $(Q)$(CC) $(LDFLAGS-$(notdir $@)) -Wl,-soname=$(notdir $@).$(2) \ - -nostdlib -o $(dir $@)$(1) $(START_FILE-$(notdir $@)) \ + $(NOSTDLIB_CFLAGS) -o $(dir $@)$(1) $(START_FILE-$(notdir $@)) \ -Wl,--whole-archive $(firstword $^) -Wl,--no-whole-archive \ $(LIBS-$(notdir $@)) $(LIBGCC) $(END_FILE-$(notdir $@)) $(Q)$(LN) -sf $(1) $@.$(2) @@ -146,23 +238,28 @@ LINK_FLAT_CRTS := $(top_builddir)lib/Scrt1.o $(top_builddir)lib/crti.o \ # Argument 1 is the shared library file -- i.e. $(@:.gdb=) -- and argument 2 # is the shared library identifier. If it wasn't for $(disp_ld), we could # avoid passing $(@:.gdb=) as an argument and use $(@:.gdb=) instead of $(1). +# +# This is so far only used for libc, for which we want to link the entire +# libgcc into the shared object. define link-flat.so $(Q)$(INSTALL) -d $(dir $@) $(Q)$(RM) $(1) $@ @$(disp_ld) - $(Q)$(CC) $(LDFLAGS-$(notdir $@)) -nostdlib -o $(1) \ - -Wl,-elf2flt -Wl,-shared-lib-id $(2) $(top_builddir)lib/Scrt1.o \ + $(Q)$(CC) $(LDFLAGS-$(notdir $@)) $(NOSTDLIB_CFLAGS) -o $(1) \ + -Wl,-elf2flt -Wl,-shared-lib-id,$(2) $(top_builddir)lib/Scrt1.o \ $(top_builddir)/lib/crti.o -Wl,--whole-archive $(firstword $^) \ - -Wl,--no-whole-archive $(LIBS-$(notdir $@)) $(LIBGCC) \ + $(LIBGCC) -Wl,--no-whole-archive $(LIBS-$(notdir $@)) $(LIBGCC) \ $(top_builddir)/lib/crtn.o endef define linkm.so $(Q)$(INSTALL) -d $(dir $@) $(Q)$(RM) $@ $@.$(2) $(dir $@)$(1) + $(do_strip) @$(disp_ld) $(Q)$(CC) $(LDFLAGS-$(notdir $@)) -Wl,-soname=$(notdir $@).$(2) \ - -nostdlib -o $(dir $@)$(1) $(START_FILE-$(notdir $@)) $^ \ + $(NOSTDLIB_CFLAGS) -o $(dir $@)$(1) $(START_FILE-$(notdir $@)) \ + $^ \ $(LIBS-$(notdir $@)) $(LIBGCC) $(END_FILE-$(notdir $@)) $(Q)$(LN) -sf $(1) $@.$(2) $(Q)$(LN) -sf $(1) $@ @@ -171,19 +268,19 @@ endef CFLAGS-.os+=$(PICFLAG) CFLAGS-.oS+=$(PICFLAG) -DSHARED -%.o: %.c ; $(compile.c) -%.os: %.c ; $(compile.c) -%.oS: %.c ; $(compile.c) -%.o: %.S ; $(compile.S) -%.os: %.S ; $(compile.S) -%.oS: %.S ; $(compile.S) -%.o: %.s ; $(compile.S) -%.os: %.s ; $(compile.S) -%.oS: %.s ; $(compile.S) -%.i: %.c ; $(compile.i) -%.i: %.S ; $(compile.i) -%.s: %.c ; $(compile.s) -%.s: %.S ; $(compile.s) +%.o: %.c FORCE ; $(compile.c) +%.os: %.c FORCE ; $(compile.c) +%.oS: %.c FORCE ; $(compile.c) +%.o: %.S FORCE ; $(compile.S) +%.os: %.S FORCE ; $(compile.S) +%.oS: %.S FORCE ; $(compile.S) +%.o: %.s FORCE ; $(compile.S) +%.os: %.s FORCE ; $(compile.S) +%.oS: %.s FORCE ; $(compile.S) +%.i: %.c FORCE ; $(compile.i) +%.i: %.S FORCE ; $(compile.i) +%.s: %.c FORCE ; $(compile.s) +%.s: %.S FORCE ; $(compile.s) $(top_builddir)lib/interp.c: | $(sub_headers) $(Q)$(INSTALL) -d $(dir $@) @@ -202,9 +299,6 @@ $(ldso): $(libc): @cd $(top_builddir); $(MAKE) lib/$(patsubst %.$(MAJOR_VERSION),%,$(notdir $@)) -$(headers_dep): - $(Q)cd $(top_builddir); $(MAKE) headers - CRT := crt1 ifeq ($(HAVE_SHARED)$(UCLIBC_FORMAT_SHARED_FLAT),y) @@ -226,6 +320,13 @@ else CTOR_TARGETS:= endif +ifeq ($(UCLIBC_FORMAT_FDPIC_ELF),y) +CRTRELOC=$(top_builddir)lib/crtreloc.o +$(CRTRELOC): $(top_builddir)lib/%.o : $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/%.c + $(Q)$(INSTALL) -d $(dir $@) + $(compile.c) +endif + ifneq ($(wildcard $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/initfini.c),) CFLAGS-initfini.s := -S -g0 $(PICFLAG) -fno-inline-functions -finhibit-size-directive $(top_builddir)lib/initfini.s: $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/initfini.c @@ -238,13 +339,13 @@ $(top_builddir)lib/defs.h: $(top_builddir)lib/initfini.s $(top_builddir)lib/crti.S: $(top_builddir)lib/initfini.s $(top_builddir)lib/defs.h $(Q)sed -n -e '1,/@HEADER_ENDS/p' \ - -e '/@_.*_PROLOG_BEGINS/,/@_.*_PROLOG_ENDS/p' \ - -e '/@TRAILER_BEGINS/,$$p' $< > $@ + -e '/@_.*_PROLOG_BEGINS/,/@_.*_PROLOG_ENDS/p' \ + -e '/@TRAILER_BEGINS/,$$p' $< > $@ $(top_builddir)lib/crtn.S: $(top_builddir)lib/initfini.s $(Q)sed -n -e '1,/@HEADER_ENDS/p' \ - -e '/@_.*_EPILOG_BEGINS/,/@_.*_EPILOG_ENDS/p' \ - -e '/@TRAILER_BEGINS/,$$p' $< > $@ + -e '/@_.*_EPILOG_BEGINS/,/@_.*_EPILOG_ENDS/p' \ + -e '/@TRAILER_BEGINS/,$$p' $< > $@ $(CTOR_TARGETS): $(top_builddir)lib/%.o : $(top_builddir)lib/%.S $(Q)$(INSTALL) -d $(dir $@) @@ -263,28 +364,48 @@ endif CRTS_COMPAT := #endif -$(crt-y): $(CRTS) $(CTOR_TARGETS) $(CRTS_COMPAT) -$(CRTS) $(CTOR_TARGETS) $(CRTS_COMPAT): | headers +$(crt-y): $(CRTS) $(CTOR_TARGETS) $(CRTS_COMPAT) $(CRTRELOC) +$(CRTS) $(CTOR_TARGETS) $(CRTS_COMPAT) $(CRTRELOC): | $(headers-y) $(top_builddir)lib/$(NONSHARED_LIBNAME): $(libc-nonshared-y) $(Q)$(INSTALL) -d $(dir $@) $(Q)$(RM) $@ - $(do_strip) $(do_ar) $(top_builddir)lib/libpthread_nonshared.a: $(libpthread-nonshared-y) $(Q)$(INSTALL) -d $(dir $@) $(Q)$(RM) $@ - $(do_strip) $(do_ar) -.PHONY: dummy create +files.dep := $(libc-a-y) $(libc-so-y) $(libc-nonshared-y) \ + $(libm-a-y) $(libm-so-y) \ + $(libpthread-a-y) $(libpthread-so-y) $(libpthread-nonshared-y) \ + $(libthread_db-a-y) $(libthread_db-so-y) \ + $(librt-a-y) $(librt-so-y) $(libresolv-a-y) $(libresolv-so-y) \ + $(libcrypt-a-y) $(libcrypt-so-y) $(libutil-a-y) $(libutil-so-y) \ + $(libnsl-a-y) $(libnsl-so-y) $(ldso-y) $(libdl-a-y) $(libdl-so-y) +.depends.dep := \ + $(patsubst %.o,%.o.dep,$(filter %.o,$(files.dep))) \ + $(patsubst %.os,%.os.dep,$(filter %.os,$(files.dep))) \ + $(patsubst %.oS,%.oS.dep,$(filter %.oS,$(files.dep))) +# Oh, and prepend a dot to the basename so i don't have to change my habit of +# calling 'size thefile.o*' +.depends.dep := $(foreach f,$(.depends.dep),$(dir $(f)).$(notdir $(f))) +.depends.dep := $(wildcard $(.depends.dep)) + +FORCE: + clean: objclean-y headers_clean-y +realclean: clean + $(Q)$(RM) $(.depends.dep) objclean-y: $(objclean-y) headers_clean-y: $(headers_clean-y) -.PHONY: \ - all check clean distclean test \ - config dist menuconfig oldconfig release \ - subdirs utils +ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),) +ifneq ($(strip $(.depends.dep)),) +.NOEXPORT: +-include $(.depends.dep) +endif +endif + @@ -41,12 +41,20 @@ INSTALL = install LN = ln RM = rm -f TAR = tar +AWK = awk STRIP_FLAGS ?= -x -R .note -R .comment +UNIFDEF := $(top_builddir)extra/scripts/unifdef -UUCLIBC_INTERNAL + # Select the compiler needed to build binaries for your development system HOSTCC = gcc BUILD_CFLAGS = -O2 -Wall +export ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun.*/sparc/ -e s/sparc.*/sparc/ \ + -e s/arm.*/arm/ -e s/sa110/arm/ -e s/sh.*/sh/ \ + -e s/s390x/s390/ -e s/parisc.*/hppa/ \ + -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \ + -e s/xtensa.*/xtensa/ ) #--------------------------------------------------------- @@ -85,7 +93,7 @@ export MAJOR_VERSION MINOR_VERSION SUBLEVEL VERSION LC_ALL LIBC := libc SHARED_MAJORNAME := $(LIBC).so.$(MAJOR_VERSION) -ifneq ($(findstring $(TARGET_ARCH) , hppa64 ia64 mips64 powerpc64 s390x sh64 sparc64 x86_64 ),) +ifneq ($(findstring $(TARGET_ARCH) , hppa64 ia64 mips64 powerpc64 s390x sparc64 x86_64 ),) UCLIBC_LDSO_NAME := ld64-uClibc else UCLIBC_LDSO_NAME := ld-uClibc @@ -93,6 +101,7 @@ endif UCLIBC_LDSO := $(UCLIBC_LDSO_NAME).so.$(MAJOR_VERSION) NONSHARED_LIBNAME := uclibc_nonshared.a libc := $(top_builddir)lib/$(SHARED_MAJORNAME) +libc.depend := $(top_builddir)lib/$(SHARED_MAJORNAME:.$(MAJOR_VERSION)=) interp := $(top_builddir)lib/interp.os ldso := $(top_builddir)lib/$(UCLIBC_LDSO) headers_dep := $(top_builddir)include/bits/sysnum.h @@ -133,6 +142,7 @@ check_ld=$(shell \ ARFLAGS:=cr +# Flags in OPTIMIZATION are used only for non-debug builds OPTIMIZATION:= # Use '-Os' optimization if available, else use -O2, allow Config to override OPTIMIZATION+=$(call check_gcc,-Os,-O2) @@ -152,17 +162,70 @@ OPTIMIZATION+=$(call check_gcc,-fno-tree-dominator-opts,) OPTIMIZATION+=$(call check_gcc,-fno-strength-reduce,) endif -ifeq ($(UCLIBC_FORMAT_FDPIC_ELF),y) - PICFLAG:=-mfdpic -else - PICFLAG:=-fPIC -DPIC -endif +CPU_CFLAGS-$(UCLIBC_FORMAT_SHARED_FLAT) += -mid-shared-library +CPU_CFLAGS-$(UCLIBC_FORMAT_FLAT_SEP_DATA) += -msep-data + +PICFLAG-y := -fPIC -DPIC +PICFLAG-$(UCLIBC_FORMAT_FDPIC_ELF) := -mfdpic +PICFLAG := $(PICFLAG-y) PIEFLAG_NAME:=-fPIE # Some nice CPU specific optimizations ifeq ($(TARGET_ARCH),i386) - OPTIMIZATION+=$(call check_gcc,-mpreferred-stack-boundary=2,) - OPTIMIZATION+=$(call check_gcc,-falign-jumps=0 -falign-loops=0,-malign-jumps=0 -malign-loops=0) + OPTIMIZATION+=$(call check_gcc,-fomit-frame-pointer,) + + # NB: this may make SSE insns segfault! + # -O1 -march=pentium3, -Os -msse etc are known to be affected. + # TODO: conditionally bump to 4 + # (see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13685) + OPTIMIZATION+=$(call check_gcc,-mpreferred-stack-boundary=4,) + + # Choice of alignment (please document why!) + # -falign-labels: in-line labels + # (reachable by normal code flow, aligning will insert nops + # which will be executed - may even make things slower) + # -falign-jumps: reachable only by a jump + # Generic: no alignment at all (smallest code) + GCC_FALIGN=$(call check_gcc,-falign-functions=1 -falign-jumps=1 -falign-labels=1 -falign-loops=1,-malign-jumps=1 -malign-loops=1) +ifeq ($(CONFIG_K7),y) + # Align functions to four bytes, use default for jumps and loops (why?) + GCC_FALIGN=$(call check_gcc,-falign-functions=4 -falign-labels=1,-malign-functions=4) +endif +ifeq ($(CONFIG_CRUSOE),y) + # Use compiler's default for functions, jumps and loops (why?) + GCC_FALIGN=$(call check_gcc,-falign-functions=0 -falign-labels=1,-malign-functions=0) +endif +ifeq ($(CONFIG_CYRIXIII),y) + # Use compiler's default for functions, jumps and loops (why?) + GCC_FALIGN=$(call check_gcc,-falign-functions=0 -falign-labels=1,-malign-functions=0) +endif + OPTIMIZATION+=$(GCC_FALIGN) + + # Putting each function and data object into its own section + # allows for kbytes of less text if users link against static uclibc + # using ld --gc-sections. + # ld 2.18 can't do that (yet?) for shared libraries, so we itself + # do not use --gc-sections at shared lib link time. + # However, in combination with sections being sorted by alignment + # it does result in much reduced padding: + # text data bss dec hex + # 235319 1472 5992 242783 3b45f old.so + # 234104 1472 5980 241556 3af94 new.so + # Without -ffunction-sections, all functions will get aligned + # to 4 byte boundary by as/ld. This is arguably a bug in as. + # It specifies 4 byte align for .text even if not told to do so: + # Idx Name Size VMA LMA File off Algn + # 0 .text xxxxxxxx 00000000 00000000 xxxxxxxx 2**2 <===! + CPU_CFLAGS-y += $(call check_gcc,-ffunction-sections -fdata-sections,) +ifneq ($(call check_ld,--sort-common,),) + CPU_LDFLAGS-y += -Wl,--sort-common +endif +ifneq ($(call check_ld,--sort-section alignment),) + CPU_LDFLAGS-y += -Wl,--sort-section,alignment +endif + + CPU_LDFLAGS-y+=-m32 + CPU_CFLAGS-y+=-m32 CPU_CFLAGS-$(CONFIG_386)+=-march=i386 CPU_CFLAGS-$(CONFIG_486)+=-march=i486 CPU_CFLAGS-$(CONFIG_ELAN)+=-march=i486 @@ -173,11 +236,11 @@ ifeq ($(TARGET_ARCH),i386) CPU_CFLAGS-$(CONFIG_PENTIUMIII)+=$(call check_gcc,-march=pentium3,-march=i686) CPU_CFLAGS-$(CONFIG_PENTIUM4)+=$(call check_gcc,-march=pentium4,-march=i686) CPU_CFLAGS-$(CONFIG_K6)+=$(call check_gcc,-march=k6,-march=i586) - CPU_CFLAGS-$(CONFIG_K7)+=$(call check_gcc,-march=athlon,-march=i686) $(call check_gcc,-falign-functions=4,-malign-functions=4) - CPU_CFLAGS-$(CONFIG_CRUSOE)+=-march=i686 $(call check_gcc,-falign-functions=0,-malign-functions=0) + CPU_CFLAGS-$(CONFIG_K7)+=$(call check_gcc,-march=athlon,-march=i686) + CPU_CFLAGS-$(CONFIG_CRUSOE)+=-march=i686 CPU_CFLAGS-$(CONFIG_WINCHIPC6)+=$(call check_gcc,-march=winchip-c6,-march=i586) CPU_CFLAGS-$(CONFIG_WINCHIP2)+=$(call check_gcc,-march=winchip2,-march=i586) - CPU_CFLAGS-$(CONFIG_CYRIXIII)+=$(call check_gcc,-march=c3,-march=i486) $(call check_gcc,-falign-functions=0,-malign-functions=0) + CPU_CFLAGS-$(CONFIG_CYRIXIII)+=$(call check_gcc,-march=c3,-march=i486) CPU_CFLAGS-$(CONFIG_NEHEMIAH)+=$(call check_gcc,-march=c3-2,-march=i686) endif @@ -204,11 +267,15 @@ ifeq ($(TARGET_ARCH),arm) CPU_CFLAGS-$(CONFIG_ARM926T)+=-mtune=arm9tdmi -march=armv5t CPU_CFLAGS-$(CONFIG_ARM10T)+=-mtune=arm10tdmi -march=armv5t CPU_CFLAGS-$(CONFIG_ARM1136JF_S)+=-mtune=arm1136jf-s -march=armv6 + CPU_CFLAGS-$(CONFIG_ARM1176JZ_S)+=-mtune=arm1176jz-s -march=armv6 + CPU_CFLAGS-$(CONFIG_ARM1176JZF_S)+=-mtune=arm1176jzf-s -march=armv6 CPU_CFLAGS-$(CONFIG_ARM_SA110)+=-mtune=strongarm110 -march=armv4 CPU_CFLAGS-$(CONFIG_ARM_SA1100)+=-mtune=strongarm1100 -march=armv4 CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=$(call check_gcc,-mtune=xscale,-mtune=strongarm110) CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=-march=armv5te -Wa,-mcpu=xscale CPU_CFLAGS-$(CONFIG_ARM_IWMMXT)+=-march=iwmmxt -Wa,-mcpu=iwmmxt -mabi=iwmmxt + CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M3)+=-mcpu=cortex-m3 -mthumb + CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M1)+=-mcpu=cortex-m1 -mthumb endif ifeq ($(TARGET_ARCH),mips) @@ -266,6 +333,7 @@ ifeq ($(TARGET_ARCH),sh64) endif ifeq ($(TARGET_ARCH),h8300) + SYMBOL_PREFIX=_ CPU_LDFLAGS-$(CONFIG_H8300H)+= -Wl,-ms8300h CPU_LDFLAGS-$(CONFIG_H8S) += -Wl,-ms8300s CPU_CFLAGS-$(CONFIG_H8300H) += -mh -mint32 @@ -295,6 +363,21 @@ ifeq ($(TARGET_ARCH),powerpc) PIEFLAG_NAME:=-fpie PPC_HAS_REL16:=$(shell echo -e "\t.text\n\taddis 11,30,_GLOBAL_OFFSET_TABLE_-.@ha" | $(CC) -c -x assembler -o /dev/null - 2> /dev/null && echo -n y || echo -n n) CPU_CFLAGS-$(PPC_HAS_REL16)+= -DHAVE_ASM_PPC_REL16 + CPU_CFLAGS-$(CONFIG_E500) += "-D__NO_MATH_INLINES -D__NO_LONG_DOUBLE_MATH" + +endif + +ifeq ($(TARGET_ARCH),bfin) + SYMBOL_PREFIX=_ +ifeq ($(UCLIBC_FORMAT_FDPIC_ELF),y) + CPU_CFLAGS-y:=-mfdpic + CPU_LDFLAGS-y += -Wl,-melf32bfinfd + PICFLAG:=-fpic + PIEFLAG_NAME:=-fpie +endif +ifeq ($(UCLIBC_FORMAT_SHARED_FLAT),y) + PICFLAG := -mleaf-id-shared-library +endif endif ifeq ($(TARGET_ARCH),frv) @@ -308,6 +391,24 @@ ifeq ($(TARGET_ARCH),frv) UCLIBC_LDSO=ld.so.1 endif +ifeq ($(strip $(TARGET_ARCH)),avr32) + CPU_CFLAGS-$(CONFIG_AVR32_AP7) += -march=ap + CPU_CFLAGS-$(CONFIG_LINKRELAX) += -mrelax + CPU_LDFLAGS-$(CONFIG_LINKRELAX) += --relax +endif + +ifeq ($(TARGET_ARCH),i960) + SYMBOL_PREFIX=_ +endif + +ifeq ($(TARGET_ARCH),microblaze) + SYMBOL_PREFIX=_ +endif + +ifeq ($(TARGET_ARCH),v850) + SYMBOL_PREFIX=_ +endif + # Keep the check_gcc from being needlessly executed ifndef PIEFLAG ifneq ($(UCLIBC_BUILD_PIE),y) @@ -327,21 +428,9 @@ export LDPIEFLAG:=$(shell $(LD) --help 2>/dev/null | grep -q -- -pie && echo "-W endif endif -# For NPTL we need to add the dynamic linker into the -# libc.so linker script. Required to provide __tls_get_addr -# symbol when usign TLS dynamic access model - -ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) -ASNEEDED:=AS_NEEDED ( $(UCLIBC_LDSO) ) -endif - # Check for AS_NEEDED support in linker script (binutils>=2.16.1 has it) ifndef ASNEEDED -ifneq ($(UCLIBC_HAS_SSP),y) -export ASNEEDED:= -else -export ASNEEDED:=$(shell (LD_TMP=$(mktemp LD_XXXXXX) ; echo "GROUP ( AS_NEEDED ( /usr/lib/libc.so ) )" > $LD_TMP && if $(LD) -T $LD_TMP -o /dev/null > /dev/null 2>&1; then echo "AS_NEEDED ( $(UCLIBC_LDSO) )"; else echo "$(UCLIBC_LDSO)"; fi; rm -f $LD_TMP ) ) -endif +export ASNEEDED:=$(shell $(LD) --help 2>/dev/null | grep -q -- --as-needed && echo "AS_NEEDED ( $(UCLIBC_LDSO) )" || echo "$(UCLIBC_LDSO)") endif # Add a bunch of extra pedantic annoyingly strict checks @@ -365,10 +454,12 @@ else SSP_CFLAGS := $(SSP_DISABLE_FLAGS) endif +NOSTDLIB_CFLAGS:=$(call check_gcc,-nostdlib,) # Some nice CFLAGS to work with CFLAGS := -include $(top_builddir)include/libc-symbols.h \ $(XWARNINGS) $(CPU_CFLAGS) $(SSP_CFLAGS) \ - -fno-builtin -nostdinc -I$(top_builddir)include -I. + -fno-builtin -nostdinc -I$(top_builddir)include -I. \ + -I$(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH) ifneq ($(strip $(UCLIBC_EXTRA_CFLAGS)),"") CFLAGS += $(subst ",, $(UCLIBC_EXTRA_CFLAGS)) @@ -391,13 +482,15 @@ ifeq ($(TARGET_ARCH),arm) endif endif +# Please let us see private headers' parts +CFLAGS += -DUCLIBC_INTERNAL + # We need this to be checked within libc-symbols.h ifneq ($(HAVE_SHARED),y) CFLAGS += -DSTATIC endif -# only i386 is known to work if compile.S gets -D__ASSEMBLER__ -#CFLAGS += $(call check_gcc,-std=c99,) +CFLAGS += $(call check_gcc,-std=gnu99,) LDFLAGS_NOSTRIP:=$(CPU_LDFLAGS-y) -Wl,-shared \ -Wl,--warn-common -Wl,--warn-once -Wl,-z,combreloc @@ -418,12 +511,11 @@ LDFLAGS_GNUHASH:=$(call check_ld,--hash-style=gnu) ifeq ($(LDFLAGS_GNUHASH),) $(error Your binutils don't support --hash-style option, while you want to use it) else -LDFLAGS_NOSTRIP += $(LDFLAGS_GNUHASH) +LDFLAGS_NOSTRIP += -Wl,$(LDFLAGS_GNUHASH) endif endif LDFLAGS:=$(LDFLAGS_NOSTRIP) -Wl,-z,defs - ifeq ($(DODEBUG),y) #CFLAGS += -g3 CFLAGS += -O0 -g3 -DDEBUG @@ -451,6 +543,10 @@ else DOMULTI:=n endif +ifneq ($(strip $(UCLIBC_EXTRA_LDFLAGS)),"") +LDFLAGS += $(subst ",, $(UCLIBC_EXTRA_LDFLAGS)) +endif + ifeq ($(UCLIBC_HAS_THREADS),y) ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) PTNAME := nptl @@ -462,7 +558,6 @@ else endif endif PTDIR := $(top_builddir)libpthread/$(PTNAME) - # set up system dependencies include dirs (NOTE: order matters!) ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) PTINC:= -I$(PTDIR) \ @@ -508,14 +603,18 @@ else endif CFLAGS += -I$(KERNEL_HEADERS) -# Sigh, some stupid versions of gcc can't seem to cope with '-iwithprefix include' -#CFLAGS+=-iwithprefix include -CFLAGS+=-isystem $(shell $(CC) -print-file-name=include) +#CFLAGS += -iwithprefix include-fixed -iwithprefix include +CC_IPREFIX:=$(shell $(CC) --print-file-name=include) +CFLAGS += -I$(dir $(CC_IPREFIX))/include-fixed -I$(CC_IPREFIX) ifneq ($(DOASSERTS),y) CFLAGS+=-DNDEBUG endif +ifeq ($(SYMBOL_PREFIX),_) +CFLAGS+=-D__UCLIBC_UNDERSCORES__ +endif + # Keep the check_as from being needlessly executed ifndef ASFLAGS_NOEXEC ifeq ($(UCLIBC_BUILD_NOEXECSTACK),y) @@ -535,3 +634,5 @@ ifeq ($(UCLIBC_CTOR_DTOR),y) SHARED_START_FILES:=$(top_builddir)lib/crti.o $(LIBGCC_DIR)crtbeginS.o SHARED_END_FILES:=$(LIBGCC_DIR)crtendS.o $(top_builddir)lib/crtn.o endif + +LOCAL_INSTALL_PATH := install_dir diff --git a/ldso/ldso/Makefile.in b/ldso/ldso/Makefile.in index 229a9cea9..db5dbdadc 100644 --- a/ldso/ldso/Makefile.in +++ b/ldso/ldso/Makefile.in @@ -22,7 +22,7 @@ endif CFLAGS-ldso/ldso/$(TARGET_ARCH)/ := $(CFLAGS-ldso) -CFLAGS-ldso.c := -DLDSO_ELFINTERP=\"$(TARGET_ARCH)/elfinterp.c\" +CFLAGS-ldso.c := -DLDSO_ELFINTERP=\"$(TARGET_ARCH)/elfinterp.c\" $(CFLAGS-ldso) ifneq ($(SUPPORT_LD_DEBUG),y) LDFLAGS-$(UCLIBC_LDSO_NAME).so := $(LDFLAGS) @@ -37,6 +37,13 @@ $(UCLIBC_LDSO_NAME)_DIR := $(top_srcdir)ldso/ldso $(UCLIBC_LDSO_NAME)_OUT := $(top_builddir)ldso/ldso $(UCLIBC_LDSO_NAME)_CSRC := $($(UCLIBC_LDSO_NAME)_DIR)/ldso.c +# prerequesites +$($(UCLIBC_LDSO_NAME)_OUT)/ldso.o $($(UCLIBC_LDSO_NAME)_OUT)/ldso.oS: \ + $($(UCLIBC_LDSO_NAME)_DIR)/dl-debug.c \ + $($(UCLIBC_LDSO_NAME)_DIR)/dl-startup.c \ + $($(UCLIBC_LDSO_NAME)_DIR)/dl-array.c \ + $($(UCLIBC_LDSO_NAME)_DIR)/dl-hash.c \ + $($(UCLIBC_LDSO_NAME)_DIR)/dl-elf.c $(UCLIBC_LDSO_NAME)_COBJ := $(patsubst $($(UCLIBC_LDSO_NAME)_DIR)/%.c,$($(UCLIBC_LDSO_NAME)_OUT)/%.o,$($(UCLIBC_LDSO_NAME)_CSRC)) $(UCLIBC_LDSO_NAME)_SSRC := $(wildcard $($(UCLIBC_LDSO_NAME)_DIR)/$(TARGET_ARCH)/*.S) @@ -55,8 +62,8 @@ $(ldso:.$(MAJOR_VERSION)=): $($(UCLIBC_LDSO_NAME)_OUT)/$(UCLIBC_LDSO_NAME)_so.a $($(UCLIBC_LDSO_NAME)_OUT)/$(UCLIBC_LDSO_NAME)_so.a: $(ldso-y) $(Q)$(RM) $@ - $(do_strip) $(do_ar) + $(do_t_strip) $(UCLIBC_LDSO_NAME)_clean: $(RM) $($(UCLIBC_LDSO_NAME)_OUT)/*.{o,os,oS,a} $($(UCLIBC_LDSO_NAME)_OUT)/*/*.{o,os,oS} diff --git a/ldso/libdl/Makefile.in b/ldso/libdl/Makefile.in index 7a525375a..41cec858f 100644 --- a/ldso/libdl/Makefile.in +++ b/ldso/libdl/Makefile.in @@ -11,6 +11,10 @@ CFLAGS-libdl += -I$(top_srcdir)ldso/ldso/$(TARGET_ARCH) -I$(top_srcdir)ldso/incl CFLAGS-libdl += -DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" +ifeq ($(SUPPORT_LD_DEBUG),y) +CFLAGS-libdl += -D__SUPPORT_LD_DEBUG__ +endif + CFLAGS-libdl.c := -DLDSO_ELFINTERP=\"$(TARGET_ARCH)/elfinterp.c\" LDFLAGS-libdl.so := $(LDFLAGS) -Wl,-fini,dl_cleanup @@ -37,18 +41,16 @@ lib-a-$(HAVE_SHARED) += $(top_builddir)lib/libdl.a lib-so-y += $(top_builddir)lib/libdl.so objclean-y += libdl_clean -$(top_builddir)lib/libdl.so: $(libdl_OUT)/libdl_so.a $(libc) +$(top_builddir)lib/libdl.so: $(libdl_OUT)/libdl_so.a $(libc.depend) $(call link.so,$(libdl_FULL_NAME),$(MAJOR_VERSION)) $(libdl_OUT)/libdl_so.a: $(libdl-so-y) $(Q)$(RM) $@ - $(do_strip) $(do_ar) $(top_builddir)lib/libdl.a: $(libdl-a-y) $(Q)$(INSTALL) -d $(dir $@) $(Q)$(RM) $@ - $(do_strip) $(do_ar) libdl_clean: diff --git a/libc/Makefile.in b/libc/Makefile.in index cd6e316ae..23587334d 100644 --- a/libc/Makefile.in +++ b/libc/Makefile.in @@ -53,17 +53,16 @@ endif lib-a-y += $(top_builddir)lib/libc.a lib-gdb-y += $(top_builddir)lib/libc.gdb -lib-so-y += $(libc) +lib-so-y += $(libc.depend) objclean-y += libc_clean OUTPUT_FORMAT = $(CC) $(CFLAGS) -Wl,--verbose 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/OUTPUT_FORMAT ( \1 )/p' ifeq ($(DOMULTI),n) -$(libc:.$(MAJOR_VERSION)=): $(libc_OUT)/libc_so.a $(LIBS-libc.so) +$(libc.depend): $(libc_OUT)/libc_so.a $(LIBS-libc.so) $(call link.so,$(libc_FULL_NAME),$(MAJOR_VERSION)) else -$(libc:.$(MAJOR_VERSION)=): $(libc_OUT)/libc.oS $(libc-nomulti-y:.o=.oS) | $(LIBS-libc.so) - $(do_strip) +$(libc.depend): $(libc_OUT)/libc.oS $(libc-nomulti-y:.o=.oS) | $(LIBS-libc.so) $(call linkm.so,$(libc_FULL_NAME),$(MAJOR_VERSION)) endif $(Q)$(RM) $@ @@ -87,12 +86,10 @@ endif $(libc_OUT)/libc.oS: $(libc-multi-y) | $(top_builddir)lib/libc.a $(top_builddir)lib/$(NONSHARED_LIBNAME) $(Q)$(RM) $@ $(compile-m) - #(do_t_strip) $(top_builddir)lib/libc.a: $(libc-a-y) | $(crt-y) $(Q)$(INSTALL) -d $(dir $@) $(Q)$(RM) $@ - $(do_strip) $(do_ar) # We use libc_so.a so that we can compile the shared library with special diff --git a/libc/inet/Makefile.in b/libc/inet/Makefile.in index a61d38ee0..3866dfd66 100644 --- a/libc/inet/Makefile.in +++ b/libc/inet/Makefile.in @@ -7,31 +7,50 @@ include $(top_srcdir)libc/inet/rpc/Makefile.in -CSRC := getservice.c getproto.c hostid.c getnetent.c getnetbynm.c getnetbyad.c \ - inet_net.c ntop.c herror.c if_index.c gai_strerror.c getaddrinfo.c \ - in6_addr.c ether_addr.c ntohl.c opensock.c ifaddrs.c +INET_DIR := $(top_srcdir)libc/inet +INET_OUT := $(top_builddir)libc/inet + +CSRC := +ifneq ($(UCLIBC_HAS_IPV4)$(UCLIBC_HAS_IPV6),) +CSRC += getservice.c getproto.c hostid.c getnetent.c getnetbynm.c getnetbyad.c \ + inet_net.c herror.c if_index.c gai_strerror.c getaddrinfo.c \ + ether_addr.c ntohl.c ifaddrs.c ntop.c +endif +ifeq ($(UCLIBC_HAS_IPV6),y) +CSRC += in6_addr.c +endif # multi source addr.c -CSRC += inet_aton.c inet_addr.c inet_ntoa.c inet_makeaddr.c inet_lnaof.c \ - inet_netof.c +addr_CSRC := inet_aton.c inet_addr.c inet_ntoa.c inet_makeaddr.c \ + inet_lnaof.c inet_netof.c +ifneq ($(UCLIBC_HAS_IPV4)$(UCLIBC_HAS_IPV6),) +CSRC += $(addr_CSRC) +endif # multi source resolv.c -CSRC += encodeh.c decodeh.c encoded.c decoded.c lengthd.c encodeq.c \ - decodeq.c lengthq.c encodea.c decodea.c encodep.c decodep.c \ - formquery.c dnslookup.c resolveaddress.c opennameservers.c \ +resolv_CSRC += encodeh.c decodeh.c encoded.c decoded.c lengthd.c encodeq.c \ + decodeq.c lengthq.c encodea.c decodea.c \ + dnslookup.c resolveaddress.c opennameservers.c \ closenameservers.c resolvename.c gethostbyname.c res_init.c \ res_query.c gethostbyaddr.c read_etc_hosts_r.c get_hosts_byname_r.c \ get_hosts_byaddr_r.c gethostbyname2.c getnameinfo.c gethostent.c \ gethostbyname_r.c gethostbyname2_r.c gethostbyaddr_r.c \ - res_comp.c ns_name.c _res_state.c + res_comp.c ns_name.c ethers.c _res_state.c +ifneq ($(UCLIBC_HAS_IPV4)$(UCLIBC_HAS_IPV6),) +CSRC += $(resolv_CSRC) -# multi source socketcalls.c -CSRC += accept.c bind.c connect.c getpeername.c getsockname.c getsockopt.c \ - listen.c recv.c recvfrom.c recvmsg.c send.c sendmsg.c sendto.c \ - setsockopt.c shutdown.c socket.c socketpair.c +# unused ATM +CSRC += encodep.c decodep.c formquery.c +endif -INET_DIR := $(top_srcdir)libc/inet -INET_OUT := $(top_builddir)libc/inet + +# multi source socketcalls.c +socketcalls_CSRC += accept.c bind.c connect.c getpeername.c getsockname.c \ + getsockopt.c listen.c recv.c recvfrom.c recvmsg.c send.c sendmsg.c \ + sendto.c setsockopt.c shutdown.c socket.c socketpair.c +ifeq ($(UCLIBC_HAS_SOCKET),y) +CSRC += $(socketcalls_CSRC) opensock.c +endif INET_SRC := $(patsubst %.c,$(INET_DIR)/%.c,$(CSRC)) INET_OBJ := $(patsubst %.c,$(INET_OUT)/%.o,$(CSRC)) diff --git a/libc/misc/dirent/Makefile.in b/libc/misc/dirent/Makefile.in index 89a00ed5e..b35efa0b1 100644 --- a/libc/misc/dirent/Makefile.in +++ b/libc/misc/dirent/Makefile.in @@ -5,8 +5,8 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -CSRC := alphasort.c closedir.c dirfd.c opendir.c readdir.c rewinddir.c scandir.c \ - seekdir.c telldir.c readdir_r.c +CSRC := alphasort.c closedir.c dirfd.c opendir.c readdir.c rewinddir.c \ + scandir.c seekdir.c telldir.c readdir_r.c ifeq ($(UCLIBC_HAS_LFS),y) CSRC += readdir64.c alphasort64.c scandir64.c readdir64_r.c diff --git a/libc/misc/error/Makefile.in b/libc/misc/error/Makefile.in index c529e955e..9facacff0 100644 --- a/libc/misc/error/Makefile.in +++ b/libc/misc/error/Makefile.in @@ -5,7 +5,13 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -CSRC := error.c err.c +CSRC := +ifeq ($(UCLIBC_HAS_BSD_ERR),y) +CSRC += err.c +endif +ifeq ($(UCLIBC_HAS_GNU_ERROR),y) +CSRC += error.c +endif MISC_ERROR_DIR := $(top_srcdir)libc/misc/error MISC_ERROR_OUT := $(top_builddir)libc/misc/error diff --git a/libc/misc/locale/Makefile.in b/libc/misc/locale/Makefile.in index b51fe0376..1991d04e3 100644 --- a/libc/misc/locale/Makefile.in +++ b/libc/misc/locale/Makefile.in @@ -25,4 +25,4 @@ libc-y += $(MISC_LOCALE_OBJ) objclean-y += misc_locale_objclean misc_locale_objclean: - $(RM) $(MISC_LOCALE_OUT)/{*.{o,os}} + $(RM) $(MISC_LOCALE_OUT)/*.{o,os} diff --git a/libc/misc/pthread/Makefile.in b/libc/misc/pthread/Makefile.in index bc43d5275..2030237f7 100644 --- a/libc/misc/pthread/Makefile.in +++ b/libc/misc/pthread/Makefile.in @@ -8,9 +8,9 @@ MISC_PTHREAD_DIR := $(top_srcdir)libc/misc/pthread MISC_PTHREAD_OUT := $(top_builddir)libc/misc/pthread -libc-$(UCLIBC_HAS_THREADS) += $(MISC_PTHREAD_OUT)/unlock.o -libc-static-$(UCLIBC_HAS_THREADS) += $(MISC_PTHREAD_OUT)/weaks.o libc-shared-$(UCLIBC_HAS_THREADS) += $(MISC_PTHREAD_OUT)/tsd.os +libc-$(UCLIBC_HAS_THREADS) += $(MISC_PTHREAD_OUT)/unlock.o +libc-$(UCLIBC_HAS_THREADS) += $(MISC_PTHREAD_OUT)/weaks.o objclean-y += misc_pthread_objclean diff --git a/libc/misc/syslog/Makefile.in b/libc/misc/syslog/Makefile.in index fd9ae198f..8355ac0cd 100644 --- a/libc/misc/syslog/Makefile.in +++ b/libc/misc/syslog/Makefile.in @@ -13,7 +13,9 @@ MISC_SYSLOG_OUT := $(top_builddir)libc/misc/syslog MISC_SYSLOG_SRC := $(patsubst %.c,$(MISC_SYSLOG_DIR)/%.c,$(CSRC)) MISC_SYSLOG_OBJ := $(patsubst %.c,$(MISC_SYSLOG_OUT)/%.o,$(CSRC)) +ifeq ($(UCLIBC_HAS_SYSLOG),y) libc-y += $(MISC_SYSLOG_OBJ) +endif objclean-y += misc_syslog_objclean diff --git a/libc/misc/sysvipc/Makefile.in b/libc/misc/sysvipc/Makefile.in index 44707d643..6b88ad6f0 100644 --- a/libc/misc/sysvipc/Makefile.in +++ b/libc/misc/sysvipc/Makefile.in @@ -1,15 +1,14 @@ # Makefile for uClibc # -# Copyright (C) 2000 by Lineo, inc. # Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org> # # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -CSRC := ftok.c +CSRC := ftok.c __syscall_ipc.c # multi source sem.c -CSRC += semget.c semctl.c semop.c +CSRC += semget.c semctl.c semop.c semtimedop.c # multi source shm.c CSRC += shmat.c shmctl.c shmdt.c shmget.c diff --git a/libc/misc/time/Makefile.in b/libc/misc/time/Makefile.in index b90b9b48f..4c4d510b1 100644 --- a/libc/misc/time/Makefile.in +++ b/libc/misc/time/Makefile.in @@ -5,8 +5,10 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -CSRC := adjtime.c ftime.c - +CSRC := adjtime.c +ifeq ($(UCLIBC_SUSV3_LEGACY),y) +CSRC += ftime.c +endif # multi source time.c CSRC += asctime.c asctime_r.c clock.c ctime.c ctime_r.c gmtime.c gmtime_r.c \ localtime.c localtime_r.c mktime.c strftime.c strptime.c tzset.c \ diff --git a/libc/signal/Makefile.in b/libc/signal/Makefile.in index 18b4a8675..c96c554a2 100644 --- a/libc/signal/Makefile.in +++ b/libc/signal/Makefile.in @@ -5,14 +5,19 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -CSRC := allocrtsig.c killpg.c raise.c sigaddset.c sigandset.c \ - sigblock.c sigdelset.c sigempty.c sigfillset.c siggetmask.c sighold.c \ - sigignore.c sigintr.c sigisempty.c sigismem.c sigjmp.c signal.c \ - sigorset.c sigpause.c sigrelse.c sigset.c sigsetmask.c sigsetops.c \ - sysv_signal.c sigwait.c +CSRC := allocrtsig.c killpg.c raise.c sigaction.c sigaddset.c sigandset.c \ + sigblock.c sigdelset.c sigempty.c sigfillset.c siggetmask.c \ + sigintr.c sigisempty.c sigismem.c sigjmp.c signal.c \ + sigorset.c sigpause.c sigsetmask.c sigsetops.c sigwait.c +ifeq ($(UCLIBC_HAS_OBSOLETE_BSD_SIGNAL),y) +CSRC += sighold.c sigignore.c sigrelse.c sigset.c +endif +ifeq ($(UCLIBC_HAS_OBSOLETE_SYSV_SIGNAL),y) +CSRC += sysv_signal.c +endif ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) -CSRC:=$(filter-out raise.c,$(CSRC)) +CSRC:=$(filter-out raise.c sigaction.c,$(CSRC)) endif ifneq ($(strip $(ARCH_OBJS)),) diff --git a/libc/stdio/Makefile.in b/libc/stdio/Makefile.in index d6134cb06..74f6d9aed 100644 --- a/libc/stdio/Makefile.in +++ b/libc/stdio/Makefile.in @@ -59,6 +59,7 @@ CUSRC := \ ifneq ($(USE_OLD_VFPRINTF),y) VF_CSRC := \ vfprintf.c \ + _vfprintf_internal.c \ _ppfs_init.c _ppfs_prepargs.c _ppfs_setargs.c _ppfs_parsespec.c \ register_printf_function.c parse_printf_format.c CSRC += $(VF_CSRC) @@ -77,7 +78,7 @@ CSRC += _wfwrite.c fwprintf.c swprintf.c vswprintf.c vwprintf.c wprintf.c \ CUSRC += fgetwc.c getwchar.c fgetws.c fputwc.c putwchar.c fputws.c # getwc (fgetwc alias) getwc_unlocked (fgetwc_unlocked alias) # putwc (fputwc alias) putwc_unlocked (fputwc_unlocked alias) -CSRC += vfwprintf.c +CSRC += vfwprintf.c _vfwprintf_internal.c CSRC += wscanf.c swscanf.c fwscanf.c vwscanf.c vswscanf.c vfwscanf.c endif diff --git a/libc/stdlib/Makefile.in b/libc/stdlib/Makefile.in index 2914d4ba6..4ae75622b 100644 --- a/libc/stdlib/Makefile.in +++ b/libc/stdlib/Makefile.in @@ -12,10 +12,16 @@ include $(top_srcdir)libc/stdlib/malloc-standard/Makefile.in CSRC := \ abort.c getenv.c mkdtemp.c mktemp.c realpath.c mkstemp.c \ rand.c random.c random_r.c setenv.c div.c ldiv.c lldiv.c \ - getpt.c ptsname.c grantpt.c unlockpt.c drand48-iter.c jrand48.c \ + getpt.c drand48-iter.c jrand48.c \ jrand48_r.c lrand48.c lrand48_r.c mrand48.c mrand48_r.c nrand48.c \ nrand48_r.c rand_r.c srand48.c srand48_r.c seed48.c seed48_r.c \ - valloc.c posix_memalign.c a64l.c l64a.c + valloc.c a64l.c l64a.c __uc_malloc.c +ifeq ($(UCLIBC_HAS_ADVANCED_REALTIME),y) +CSRC += posix_memalign.c +endif +ifeq ($(UCLIBC_HAS_PTY),y) +CSRC += grantpt.c unlockpt.c ptsname.c +endif ifeq ($(UCLIBC_HAS_ARC4RANDOM),y) CSRC += arc4random.c endif diff --git a/libc/sysdeps/linux/Makefile.commonarch b/libc/sysdeps/linux/Makefile.commonarch index ea4ba53b3..ff3e90aa7 100644 --- a/libc/sysdeps/linux/Makefile.commonarch +++ b/libc/sysdeps/linux/Makefile.commonarch @@ -15,7 +15,7 @@ ARCH_SOBJ := $(patsubst %.s,$(ARCH_OUT)/%.o,$(patsubst %.S,$(ARCH_OUT)/%.o,$(SSR ARCH_OBJS := $(ARCH_COBJ) $(ARCH_SOBJ) -crt-y := create +crt-y := FORCE libc-y += $(ARCH_OBJS) libc-nomulti-y += $(ARCH_SOBJ) objclean-y += arch_objclean @@ -28,13 +28,10 @@ ifneq ($(ARCH_HEADERS),) ARCH_HEADERS_IN := $(patsubst %,../libc/sysdeps/linux/$(TARGET_ARCH)/%,$(ARCH_HEADERS)) ARCH_HEADERS_OUT := $(patsubst %,$(top_builddir)include/%,$(ARCH_HEADERS)) -headers-y += arch_headers -arch_headers: - $(SECHO) $(LN) -fs $(ARCH_HEADERS) $(top_builddir)include/ - @for h in $(ARCH_HEADERS_IN) ; do \ - $(LN) -fs $$h $(top_builddir)include/ ; \ - done +$(ARCH_HEADERS_OUT): + $(do_ln) -fs ../libc/sysdeps/linux/$(TARGET_ARCH)/$(@F) $@ +headers-y += $(ARCH_HEADERS_OUT) headers_clean-y += arch_headers_clean arch_headers_clean: $(RM) $(ARCH_HEADERS_OUT) diff --git a/libc/sysdeps/linux/common/Makefile.in b/libc/sysdeps/linux/common/Makefile.in index 600a9adb8..6b01c653a 100644 --- a/libc/sysdeps/linux/common/Makefile.in +++ b/libc/sysdeps/linux/common/Makefile.in @@ -24,16 +24,66 @@ ifneq ($(UCLIBC_HAS_SSP),y) CSRC := $(filter-out ssp.c,$(CSRC)) endif +ifneq ($(UCLIBC_LINUX_MODULE_24),y) +CSRC := $(filter-out create_module.c delete_module.c init_module.c \ + query_module.c get_kernel_syms.c,$(CSRC)) +endif + +ifneq ($(UCLIBC_LINUX_SPECIFIC),y) +# we need these internally: fstatfs.c statfs.c +CSRC := $(filter-out inotify.c ioperm.c iopl.c madvise.c \ + modify_ldt.c personality.c prctl.c readahead.c reboot.c \ + remap_file_pages.c sched_getaffinity.c sched_setaffinity.c \ + sendfile64.c sendfile.c setfsgid.c setfsuid.c setresuid.c \ + splice.c vmsplice.c tee.c swapoff.c swapon.c sysctl.c sysinfo.c \ + uselib.c vhangup.c,$(CSRC)) +endif + ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) CSRC := $(filter-out fork.c getpid.c raise.c open.c close.c read.c write.c waitpid.c, $(CSRC)) +endif + +ifneq ($(UCLIBC_BSD_SPECIFIC),y) +# we need these internally: getdomainname.c +CSRC := $(filter-out mincore.c setdomainname.c,$(CSRC)) +endif +ifneq ($(UCLIBC_NTP_LEGACY),y) +CSRC := $(filter-out ntp_gettime.c,$(CSRC)) +endif + + +ifneq ($(UCLIBC_HAS_REALTIME),y) +# aio_cancel|aio_error|aio_fsync|aio_read|aio_return|aio_suspend|aio_write|clock_getres|clock_gettime|clock_settime|clock_settime|fdatasync|lio_listio|mlockall|munlockall|mlock|munlock|mq_close|mq_getattr|mq_notify|mq_open|mq_receive|mq_timedreceive|mq_send|mq_timedsend|mq_setattr|mq_unlink|nanosleep|sched_getparam|sched_get_priority_max|sched_get_priority_min|sched_getscheduler|sched_rr_get_interval|sched_setparam|sched_setscheduler|sem_close|sem_destroy|sem_getvalue|sem_init|sem_open|sem_post|sem_trywait|sem_wait|sem_unlink|sem_wait|shm_open|shm_unlink|sigqueue|sigtimedwait|sigwaitinfo|sigwaitinfo|timer_create|timer_delete|timer_getoverrun|timer_gettime|timer_settime +CSRC := $(filter-out clock_getres.c clock_gettime.c clock_settime.c fdatasync.c Makefile.in mlockall.c mlock.c munlockall.c munlock.c nanosleep.c __rt_sigtimedwait.c sched_getparam.c sched_get_priority_max.c sched_get_priority_min.c sched_getscheduler.c sched_rr_get_interval.c sched_setparam.c sched_setscheduler.c sigqueue.c,$(CSRC)) +endif + + +ifneq ($(UCLIBC_HAS_ADVANCED_REALTIME),y) +# clock_getcpuclockid|clock_nanosleep|mq_timedreceive|mq_timedsend|posix_fadvise|posix_fallocate|posix_madvise|posix_memalign|posix_mem_offset|posix_spawnattr_destroy|posix_spawnattr_init|posix_spawnattr_getflags|posix_spawnattr_setflags|posix_spawnattr_getpgroup|posix_spawnattr_setpgroup|posix_spawnattr_getschedparam|posix_spawnattr_setschedparam|posix_spawnattr_getschedpolicy|posix_spawnattr_setschedpolicy|posix_spawnattr_getsigdefault|posix_spawnattr_setsigdefault|posix_spawnattr_getsigmask|posix_spawnattr_setsigmask|posix_spawnattr_init|posix_spawnattr_setflags|posix_spawnattr_setpgroup|posix_spawnattr_setschedparam|posix_spawnattr_setschedpolicy|posix_spawnattr_setsigdefault|posix_spawnattr_setsigmask|posix_spawn_file_actions_addclose|posix_spawn_file_actions_addopen|posix_spawn_file_actions_adddup2|posix_spawn_file_actions_addopen|posix_spawn_file_actions_destroy|posix_spawn_file_actions_init|posix_spawn_file_actions_init|posix_spawn|posix_spawnp|posix_spawnp|posix_typed_mem_get_info|pthread_mutex_timedlock|sem_timedwait +CSRC := $(filter-out posix_fadvise64.c posix_fadvise.c,$(CSRC)) +endif + +ifneq ($(UCLIBC_HAS_EPOLL),y) +CSRC := $(filter-out epoll.c,$(CSRC)) +endif + +ifneq ($(UCLIBC_HAS_XATTR),y) +CSRC := $(filter-out xattr.c,$(CSRC)) +endif + +ifneq ($(UCLIBC_HAS_PROFILING),y) +CSRC := $(filter-out noophooks.c pcprofile.c,$(CSRC)) +endif + +ifneq ($(UCLIBC_SV4_DEPRECATED),y) +CSRC := $(filter-out ustat.c,$(CSRC)) endif ifeq ($(TARGET_ARCH),sh) CSRC := $(filter-out longjmp.c vfork.c,$(CSRC)) endif - # fails for some reason ifneq ($(strip $(ARCH_OBJS)),) CSRC := $(filter-out $(notdir $(ARCH_OBJS:.o=.c)),$(CSRC)) @@ -49,7 +99,10 @@ libc-y += $(COMMON_OBJ) libc-static-$(UCLIBC_HAS_SSP) += $(COMMON_OUT)/ssp-local.o libc-nonshared-$(UCLIBC_HAS_SSP) += $(COMMON_OUT)/ssp-local.os -libc-nomulti-y += $(COMMON_OUT)/__syscall_rt_sigaction.o $(COMMON_OUT)/__syscall_sigaction.o +libc-nomulti-y += $(COMMON_OUT)/__syscall_rt_sigaction.o \ + $(COMMON_OUT)/__syscall_sigaction.o \ + $(COMMON_OUT)/mremap.o \ + $(COMMON_OUT)/stat.o libc-nomulti-$(UCLIBC_HAS_SSP) += $(COMMON_OUT)/ssp.o objclean-y += common_objclean diff --git a/libcrypt/Makefile.in b/libcrypt/Makefile.in index 7364d3e71..a74e4ec0c 100644 --- a/libcrypt/Makefile.in +++ b/libcrypt/Makefile.in @@ -16,7 +16,14 @@ libcrypt_FULL_NAME := libcrypt-$(VERSION).so libcrypt_DIR := $(top_srcdir)libcrypt libcrypt_OUT := $(top_builddir)libcrypt -libcrypt_SRC := $(wildcard $(libcrypt_DIR)/*.c) +ifeq ($(UCLIBC_HAS_CRYPT_IMPL),y) +CSRC := crypt.c des.c md5.c +endif +ifeq ($(UCLIBC_HAS_CRYPT_STUB),y) +CSRC := crypt_stub.c +endif + +libcrypt_SRC := $(addprefix $(libcrypt_DIR)/,$(CSRC)) libcrypt_OBJ := $(patsubst $(libcrypt_DIR)/%.c,$(libcrypt_OUT)/%.o,$(libcrypt_SRC)) ifeq ($(DOPIC),y) @@ -26,36 +33,35 @@ libcrypt-a-y := $(libcrypt_OBJ) endif libcrypt-so-y := $(libcrypt_OBJ:.o=.os) +ifeq ($(UCLIBC_HAS_CRYPT),y) lib-a-y += $(top_builddir)lib/libcrypt.a lib-so-y += $(top_builddir)lib/libcrypt.so +endif objclean-y += libcrypt_clean ifeq ($(DOMULTI),n) ifeq ($(DOPIC),y) -$(top_builddir)lib/libcrypt.so: $(top_builddir)lib/libcrypt.a $(libc) +$(top_builddir)lib/libcrypt.so: $(top_builddir)lib/libcrypt.a $(libc.depend) else -$(top_builddir)lib/libcrypt.so: $(libcrypt_OUT)/libcrypt_so.a $(libc) +$(top_builddir)lib/libcrypt.so: $(libcrypt_OUT)/libcrypt_so.a $(libc.depend) endif $(call link.so,$(libcrypt_FULL_NAME),$(MAJOR_VERSION)) else -$(top_builddir)lib/libcrypt.so: $(libcrypt_OUT)/libcrypt.oS | $(libc) +$(top_builddir)lib/libcrypt.so: $(libcrypt_OUT)/libcrypt.oS | $(libc.depend) $(call linkm.so,$(libcrypt_FULL_NAME),$(MAJOR_VERSION)) endif $(libcrypt_OUT)/libcrypt_so.a: $(libcrypt-so-y) $(Q)$(RM) $@ - $(do_strip) $(do_ar) $(libcrypt_OUT)/libcrypt.oS: $(libcrypt_SRC) $(Q)$(RM) $@ $(compile-m) - $(do_t_strip) $(top_builddir)lib/libcrypt.a: $(libcrypt-a-y) $(Q)$(INSTALL) -d $(dir $@) $(Q)$(RM) $@ - $(do_strip) $(do_ar) libcrypt_clean: diff --git a/libintl/Makefile.in b/libintl/Makefile.in index 8a64a7615..238ad4466 100644 --- a/libintl/Makefile.in +++ b/libintl/Makefile.in @@ -53,18 +53,15 @@ endif $(libintl_OUT)/libintl_so.a: $(libintl-so-y) $(Q)$(RM) $@ - $(do_strip) $(do_ar) $(libintl_OUT)/libintl.oS: $(libintl_MSRC) $(Q)$(RM) $@ $(compile-m) - $(do_t_strip) $(top_builddir)lib/libintl.a: $(libintl-a-y) $(Q)$(INSTALL) -d $(dir $@) $(Q)$(RM) $@ - $(do_strip) $(do_ar) $(libintl_MOBJ): $(libintl_MSRC) diff --git a/libnsl/Makefile.in b/libnsl/Makefile.in index 15b07ee7b..a66b90c6f 100644 --- a/libnsl/Makefile.in +++ b/libnsl/Makefile.in @@ -31,21 +31,19 @@ lib-so-y += $(top_builddir)lib/libnsl.so objclean-y += libnsl_clean ifeq ($(DOPIC),y) -$(top_builddir)lib/libnsl.so: $(top_builddir)lib/libnsl.a $(libc) +$(top_builddir)lib/libnsl.so: $(top_builddir)lib/libnsl.a $(libc.depend) else -$(top_builddir)lib/libnsl.so: $(libnsl_OUT)/libnsl_so.a $(libc) +$(top_builddir)lib/libnsl.so: $(libnsl_OUT)/libnsl_so.a $(libc.depend) endif $(call link.so,$(libnsl_FULL_NAME),$(MAJOR_VERSION)) $(libnsl_OUT)/libnsl_so.a: $(libnsl-so-y) $(Q)$(RM) $@ - $(do_strip) $(do_ar) $(top_builddir)lib/libnsl.a: $(libnsl-a-y) $(Q)$(INSTALL) -d $(dir $@) $(Q)$(RM) $@ - $(do_strip) $(do_ar) libnsl_clean: diff --git a/libpthread/nptl/Makefile.in b/libpthread/nptl/Makefile.in index 4e1db3dcc..48ca3412d 100644 --- a/libpthread/nptl/Makefile.in +++ b/libpthread/nptl/Makefile.in @@ -209,7 +209,7 @@ else LDFLAGS-libpthread.so := $(LDFLAGS) endif -LDFLAGS-libpthread.so += $(top_builddir)lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so $(top_builddir)lib/libdl-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so +LDFLAGS-libpthread.so += $(top_builddir)lib/ld-uClibc-$(VERSION).so $(top_builddir)lib/libdl-$(VERSION).so LIBS-libpthread.so := $(LIBS) @@ -218,7 +218,7 @@ START_FILE-libpthread.so := $(top_builddir)/libpthread/nptl/sysdeps/pthread/crti END_FILE-libpthread.so := $(SHARED_END_FILES) $(top_builddir)/libpthread/nptl/sysdeps/pthread/crtn.o endif -libpthread_FULL_NAME := libpthread-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so +libpthread_FULL_NAME := libpthread-$(VERSION).so PTHREAD_DIR := $(top_srcdir)libpthread/nptl PTHREAD_OUT := $(top_builddir)libpthread/nptl @@ -287,29 +287,39 @@ endif CFLAGS-pthread-errnos.c = -S $(PTHREAD_OUT)/pthread-errnos.c: $(PTHREAD_DIR)/pthread-errnos.sym - awk -f $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ + $(do_awk) $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ $(PTHREAD_OUT)/pthread-errnos.s: $(PTHREAD_OUT)/pthread-errnos.c $(compile.c) $(PTHREAD_OUT)/pthread-errnos.h: $(PTHREAD_OUT)/pthread-errnos.s - @sed -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$\/#define \1 \2/p" $< > $(PTHREAD_OUT)/pthread-errnos.h - -nptl_headers_bootstrap: + @sed -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$\/#define \1 \2/p" $< > $@ + + +headers-$(UCLIBC_HAS_THREADS_NATIVE) += nptl_headers_bootstrap + +include/pthread.h: + $(do_ln) ../$(PTDIR)/sysdeps/pthread/$(@F) $(top_builddir)$@ +include/semaphore.h: + $(do_ln) ../$(PTDIR)/$(@F) $(top_builddir)$@ +include/bits/semaphore.h: | include/bits + $(do_ln) ../../$(PTDIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH)/bits/$(@F) $(top_builddir)$@ +include/bits/pthreadtypes.h: | include/bits + $(do_ln) ../../$(PTDIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH)/bits/$(@F) $(top_builddir)$@ +include/bits/libc-lock.h: | include/bits + $(do_ln) ../../$(PTDIR)/sysdeps/pthread/bits/$(@F) $(top_builddir)$@ +include/bits/stdio-lock.h: | include/bits + $(do_ln) ../../$(PTDIR)/sysdeps/pthread/bits/$(@F) $(top_builddir)$@ +$(PTDIR)/banner.h: @sed 's/\(.*\)/"\1\\n"/' $(PTDIR)/Banner > $(PTDIR)/banner.h +$(PTDIR)/version.h: @echo "#define VERSION \""$(VERSION)"\"" > $(PTDIR)/version.h - $(LN) -sf ../$(PTDIR)/sysdeps/pthread/pthread.h $(top_builddir)include/ - $(LN) -sf ../$(PTDIR)/semaphore.h $(top_builddir)include/ - $(INSTALL) -d $(top_builddir)include/bits - $(LN) -sf ../../$(PTDIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH)/bits/semaphore.h $(top_builddir)include/bits/ - $(LN) -sf ../../$(PTDIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH)/bits/pthreadtypes.h $(top_builddir)include/bits/ - $(LN) -sf ../../$(PTDIR)/sysdeps/pthread/bits/libc-lock.h $(top_builddir)include/bits/ - $(LN) -sf ../../$(PTDIR)/sysdeps/pthread/bits/stdio-lock.h $(top_builddir)include/bits/ - -nptl_headers: -ifeq ($(shell $(CC) --help >& /dev/null && echo yes),yes) - $(MAKE) $(PTHREAD_OUT)/pthread-errnos.h -endif + +nptl_headers_bootstrap: include/pthread.h include/semaphore.h include/bits/semaphore.h include/bits/pthreadtypes.h \ + include/bits/libc-lock.h include/bits/stdio-lock.h \ + $(PTDIR)/banner.h $(PTDIR)/version.h + +nptl_headers: $(PTHREAD_OUT)/pthread-errnos.h nptl_headers_clean: $(RM) $(PTDIR)/banner.h $(top_builddir)include/pthread.h \ diff --git a/libpthread/nptl/sysdeps/generic/Makefile.in b/libpthread/nptl/sysdeps/generic/Makefile.in index 79af336d2..87115570d 100644 --- a/libpthread/nptl/sysdeps/generic/Makefile.in +++ b/libpthread/nptl/sysdeps/generic/Makefile.in @@ -10,9 +10,8 @@ # their architecture specific directory which will override # the one here. # -libc_a_CSRC = dl-support.c dl-tls.c libc-tls.c +libc_a_CSRC = dl-tls.c libc-tls.c -CFLAGS-dl-support.c = -D_GNU_SOURCE CFLAGS-generic = $(SSP_ALL_CFLAGS) #CFLAGS:=$(CFLAGS:-O1=-O2) diff --git a/libpthread/nptl/sysdeps/pthread/Makefile.in b/libpthread/nptl/sysdeps/pthread/Makefile.in index 068316b96..59076006d 100644 --- a/libpthread/nptl/sysdeps/pthread/Makefile.in +++ b/libpthread/nptl/sysdeps/pthread/Makefile.in @@ -18,7 +18,8 @@ libpthread_CSRC = pthread_barrier_wait.c pthread_cond_broadcast.c \ pthread_rwlock_wrlock.c pthread_sigmask.c \ pthread_spin_destroy.c pthread_spin_init.c \ pthread_spin_unlock.c pt-sigfillset.c \ - unwind-forcedunwind.c pt-longjmp.c + pt-longjmp.c + ifeq ($(TARGET_ARCH),i386) libpthread_CSRC += pthread_once.c @@ -68,7 +69,7 @@ CFLAGS-pt-sigfillset.c = $(CFLAGS-pt-common) -DIS_IN_libpthread=1 \ -I$(top_srcdir)libc/signal CFLAGS-pt-sigprocmask.c = $(CFLAGS-pt-common) -DIS_IN_libpthread=1 \ -I$(top_srcdir)libc/sysdeps/linux/common -CFLAGS-unwind-forcedunwind.c = $(CFLAGS-pt-common) -DIS_IN_libpthread=1 +CFLAGS-unwind-forcedunwind.c = $(CFLAGS-pt-common) -DIS_IN_libpthread=1 -fexceptions -fasynchronous-unwind-tables CFLAGS-librt-cancellation.c = -DIS_IN_librt=1 $(CFLAGS-pt-common) \ -fexceptions -fasynchronous-unwind-tables CFLAGS-rt-unwind-resume.c = -DIS_IN_librt=1 $(CFLAGS-pt-common) \ @@ -84,7 +85,8 @@ pthread_OBJ = $(patsubst %.c, $(pthread_OUT)/%.o, $(libpthread_CSRC)) libpthread-a-y += $(pthread_OBJ) libpthread-so-y += $(pthread_OBJ:.o=.oS) -libpthread-so-y += $(pthread_OUT)/pt-sigaction.oS $(pthread_OUT)/pt-sigprocmask.oS +libpthread-so-y += $(pthread_OUT)/pt-sigaction.oS $(pthread_OUT)/pt-sigprocmask.oS \ + $(pthread_OUT)/unwind-forcedunwind.oS CFLAGS-sigaction.c = -I$(top_srcdir)libc/signal libc-y += $(pthread_OUT)/sigaction.o diff --git a/libpthread/nptl/sysdeps/sh/Makefile.arch b/libpthread/nptl/sysdeps/sh/Makefile.arch index f0669dc3d..84385bd36 100644 --- a/libpthread/nptl/sysdeps/sh/Makefile.arch +++ b/libpthread/nptl/sysdeps/sh/Makefile.arch @@ -35,13 +35,15 @@ headers_clean-y += nptl_arch_headers_clean CFLAGS-tcb-offsets.c = -S $(PTHREAD_ARCH_OUT)/tcb-offsets.c: $(PTHREAD_ARCH_DIR)/tcb-offsets.sym - awk -f $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ + $(do_awk) $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ $(PTHREAD_ARCH_OUT)/tcb-offsets.s: $(PTHREAD_ARCH_OUT)/tcb-offsets.c $(compile.c) -nptl_arch_headers: $(PTHREAD_ARCH_OUT)/tcb-offsets.s - @sed -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$\/#define \1 \2/p" $< > $(PTHREAD_ARCH_OUT)/tcb-offsets.h +$(PTHREAD_ARCH_OUT)/tcb-offsets.h: $(PTHREAD_ARCH_OUT)/tcb-offsets.s + @sed -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$\/#define \1 \2/p" $< > $@ + +nptl_arch_headers: $(PTHREAD_ARCH_OUT)/tcb-offsets.h nptl_arch_headers_clean: $(RM) $(PTHREAD_ARCH_OUT)/tcb-offsets.c \ diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in index 842452856..06ef1a77f 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.in @@ -138,16 +138,16 @@ CFLAGS-lowlevelrwlock.c = -S CFLAGS-unwindbuf.c = -S $(PTHREAD_LINUX_OUT)/lowlevelbarrier.c: $(PTHREAD_LINUX_DIR)/lowlevelbarrier.sym - awk -f $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ + $(do_awk) $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ $(PTHREAD_LINUX_OUT)/lowlevelcond.c: $(PTHREAD_LINUX_DIR)/lowlevelcond.sym - awk -f $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ + $(do_awk) $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ $(PTHREAD_LINUX_OUT)/lowlevelrwlock.c: $(PTHREAD_LINUX_DIR)/lowlevelrwlock.sym - awk -f $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ + $(do_awk) $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ $(PTHREAD_LINUX_OUT)/unwindbuf.c: $(PTHREAD_LINUX_DIR)/unwindbuf.sym - awk -f $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ + $(do_awk) $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ $(PTHREAD_LINUX_OUT)/lowlevelbarrier.s: $(PTHREAD_LINUX_OUT)/lowlevelbarrier.c $(compile.c) @@ -176,15 +176,17 @@ $(PTHREAD_LINUX_OUT)/unwindbuf.h: $(PTHREAD_LINUX_OUT)/unwindbuf.s $(PTHREAD_LINUX_DIR)/pt-sleep.c: $(LN) -s sleep.c $@ -nptl_linux_headers: - $(MAKE) $(PTHREAD_LINUX_OUT)/lowlevelbarrier.h - $(MAKE) $(PTHREAD_LINUX_OUT)/lowlevelcond.h - $(MAKE) $(PTHREAD_LINUX_OUT)/lowlevelrwlock.h - $(MAKE) $(PTHREAD_LINUX_OUT)/unwindbuf.h - -nptl_linux_headers_bootstrap: - $(LN) -sf ../../$(PTHREAD_LINUX_DIR)/bits/local_lim.h $(top_builddir)include/bits +nptl_linux_headers: $(PTHREAD_LINUX_OUT)/lowlevelbarrier.h \ + $(PTHREAD_LINUX_OUT)/lowlevelcond.h \ + $(PTHREAD_LINUX_OUT)/lowlevelrwlock.h \ + $(PTHREAD_LINUX_OUT)/unwindbuf.h + +HEADERS_BITS_PTHREAD := $(notdir $(wildcard $(PTHREAD_LINUX_DIR)/bits/*.h)) +ALL_HEADERS_BITS_PTHREAD := $(addprefix include/bits/,$(HEADERS_BITS_PTHREAD)) +$(ALL_HEADERS_BITS_PTHREAD): + $(do_ln) ../../$(PTHREAD_LINUX_DIR)/bits/$(@F) $(top_builddir)$@ + nptl_linux_headers_clean: $(RM) $(PTHREAD_LINUX_OUT)/lowlevelbarrier.{c,h,s} \ $(RM) $(PTHREAD_LINUX_OUT)/lowlevelcond.{c,h,s} \ diff --git a/libpthread/nptl_db/Makefile.in b/libpthread/nptl_db/Makefile.in index 18503339c..0b1ac3b87 100644 --- a/libpthread/nptl_db/Makefile.in +++ b/libpthread/nptl_db/Makefile.in @@ -14,7 +14,7 @@ LDFLAGS-libthread_db.so := $(LDFLAGS_NOSTRIP) -s --warn-unresolved-symbols LIBS-libthread_db.so := $(LIBS) -libthread_db_FULL_NAME := libthread_db-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so +libthread_db_FULL_NAME := libthread_db-$(VERSION).so libthread_db_DIR := $(top_srcdir)libpthread/nptl_db libthread_db_OUT := $(top_builddir)libpthread/nptl_db @@ -57,8 +57,10 @@ $(top_builddir)lib/libthread_db.a: $(libthread_db-a-y) $(do_strip) $(do_ar) -nptl_db_headers: - $(LN) -sf ../$(PTDIR)_db/thread_db.h $(top_builddir)include/ +include/thread_db.h: + $(do_ln) ../$(PTDIR)_db/$(@F) $(top_builddir)$@ + +nptl_db_headers: include/thread_db.h nptl_db_headers_clean: $(RM) $(top_builddir)include/thread_db.h diff --git a/libresolv/Makefile.in b/libresolv/Makefile.in index 4afff4cdb..cfcb9d78b 100644 --- a/libresolv/Makefile.in +++ b/libresolv/Makefile.in @@ -31,21 +31,19 @@ lib-so-y += $(top_builddir)lib/libresolv.so objclean-y += libresolv_clean ifeq ($(DOPIC),y) -$(top_builddir)lib/libresolv.so: $(top_builddir)lib/libresolv.a $(libc) +$(top_builddir)lib/libresolv.so: $(top_builddir)lib/libresolv.a $(libc.depend) else -$(top_builddir)lib/libresolv.so: $(libresolv_OUT)/libresolv_so.a $(libc) +$(top_builddir)lib/libresolv.so: $(libresolv_OUT)/libresolv_so.a $(libc.depend) endif $(call link.so,$(libresolv_FULL_NAME),$(MAJOR_VERSION)) $(libresolv_OUT)/libresolv_so.a: $(libresolv-so-y) $(Q)$(RM) $@ - $(do_strip) $(do_ar) $(top_builddir)lib/libresolv.a: $(libresolv-a-y) $(Q)$(INSTALL) -d $(dir $@) $(Q)$(RM) $@ - $(do_strip) $(do_ar) libresolv_clean: diff --git a/librt/Makefile.in b/librt/Makefile.in index 1062cf470..5234b680f 100644 --- a/librt/Makefile.in +++ b/librt/Makefile.in @@ -46,25 +46,25 @@ librt-so-y += $(librt_OBJ:.o=.oS) lib-a-y += $(top_builddir)lib/librt.a lib-so-y += $(top_builddir)lib/librt.so -objclean-y += librt_clean + ifeq ($(DOPIC)$(UCLIBC_HAS_THREADS_NATIVE),yn) -$(top_builddir)lib/librt.so: $(top_builddir)lib/librt.a $(libc) +$(top_builddir)lib/librt.so: $(top_builddir)lib/librt.a $(libc.dpend) else -$(top_builddir)lib/librt.so: $(librt_OUT)/librt_so.a $(libc) +$(top_builddir)lib/librt.so: $(librt_OUT)/librt_so.a $(libc.depend) endif $(call link.so,$(librt_FULL_NAME),$(MAJOR_VERSION)) $(librt_OUT)/librt_so.a: $(librt-so-y) $(Q)$(RM) $@ - $(do_strip) $(do_ar) $(top_builddir)lib/librt.a: $(librt-a-y) $(Q)$(INSTALL) -d $(dir $@) $(Q)$(RM) $@ - $(do_strip) $(do_ar) +objclean-y += librt_clean + librt_clean: $(RM) $(librt_OUT)/*.{o,os,oS,a} diff --git a/libutil/Makefile.in b/libutil/Makefile.in index c9f94c1f6..ef3169906 100644 --- a/libutil/Makefile.in +++ b/libutil/Makefile.in @@ -20,6 +20,10 @@ libutil_SRC := $(wildcard $(libutil_DIR)/*.c) ifneq ($(ARCH_USE_MMU),y) libutil_SRC := $(filter-out $(libutil_DIR)/forkpty.c,$(libutil_SRC)) endif +ifneq ($(UCLIBC_HAS_PTY),y) +libutil_SRC := $(filter-out $(libutil_DIR)/openpty.c $(libutil_DIR)/forkpty.c \ + ,$(libutil_SRC)) +endif libutil_OBJ := $(patsubst $(libutil_DIR)/%.c,$(libutil_OUT)/%.o,$(libutil_SRC)) ifeq ($(DOPIC),y) @@ -35,30 +39,27 @@ objclean-y += libutil_clean ifeq ($(DOMULTI),n) ifeq ($(DOPIC),y) -$(top_builddir)lib/libutil.so: $(top_builddir)lib/libutil.a $(libc) +$(top_builddir)lib/libutil.so: $(top_builddir)lib/libutil.a $(libc.depend) else -$(top_builddir)lib/libutil.so: $(libutil_OUT)/libutil_so.a $(libc) +$(top_builddir)lib/libutil.so: $(libutil_OUT)/libutil_so.a $(libc.depend) endif $(call link.so,$(libutil_FULL_NAME),$(MAJOR_VERSION)) else -$(top_builddir)lib/libutil.so: $(libutil_OUT)/libutil.oS | $(libc) +$(top_builddir)lib/libutil.so: $(libutil_OUT)/libutil.oS | $(libc.depend) $(call linkm.so,$(libutil_FULL_NAME),$(MAJOR_VERSION)) endif $(libutil_OUT)/libutil_so.a: $(libutil-so-y) $(Q)$(RM) $@ - $(do_strip) $(do_ar) $(libutil_OUT)/libutil.oS: $(libutil_SRC) $(Q)$(RM) $@ $(compile-m) - $(do_t_strip) $(top_builddir)lib/libutil.a: $(libutil-a-y) $(Q)$(INSTALL) -d $(dir $@) $(Q)$(RM) $@ - $(do_strip) $(do_ar) libutil_clean: diff --git a/test/Makefile b/test/Makefile index 4505e8959..5f599aa83 100644 --- a/test/Makefile +++ b/test/Makefile @@ -33,9 +33,9 @@ endif test check all: run -run: compile subdirs_run +run: subdirs_run -compile:subdirs_compile +compile: subdirs_compile tags: ctags -R diff --git a/test/Rules.mak b/test/Rules.mak index 714a9786a..984221cd3 100644 --- a/test/Rules.mak +++ b/test/Rules.mak @@ -57,7 +57,6 @@ export TARGET_ARCH CROSS = $(subst ",, $(strip $(CROSS_COMPILER_PREFIX))) CC = $(CROSS)gcc -STRIPTOOL = $(CROSS)strip RM = rm -f # Select the compiler needed to build binaries for your development system @@ -80,7 +79,11 @@ endif XWARNINGS := $(subst ",, $(strip $(WARNINGS))) -Wstrict-prototypes XARCH_CFLAGS := $(subst ",, $(strip $(ARCH_CFLAGS))) $(CPU_CFLAGS) XCOMMON_CFLAGS := -D_GNU_SOURCE -I$(top_builddir)test -CFLAGS += $(XWARNINGS) $(OPTIMIZATION) $(XCOMMON_CFLAGS) $(XARCH_CFLAGS) -I$(top_builddir)include $(PTINC) +CFLAGS := $(XWARNINGS) $(OPTIMIZATION) $(XCOMMON_CFLAGS) $(XARCH_CFLAGS) -nostdinc -I$(top_builddir)$(LOCAL_INSTALL_PATH)/usr/include + +CC_IPREFIX:=$(shell $(CC) --print-file-name=include) +CFLAGS += -I$(CC_IPREFIX) + HOST_CFLAGS += $(XWARNINGS) $(OPTIMIZATION) $(XCOMMON_CFLAGS) LDFLAGS := $(CPU_LDFLAGS) @@ -98,14 +101,15 @@ ifeq ($(strip $(UCLIBC_STATIC)),y) STATIC_LDFLAGS := -static HOST_LDFLAGS += -static endif + LDFLAGS += -B$(top_builddir)lib -Wl,-rpath,$(top_builddir)lib -Wl,-rpath-link,$(top_builddir)lib UCLIBC_LDSO_ABSPATH=$(shell pwd) ifdef TEST_INSTALLED_UCLIBC LDFLAGS += -Wl,-rpath,./ -UCLIBC_LDSO_ABSPATH=/lib +UCLIBC_LDSO_ABSPATH=$(SHARED_LIB_LOADER_PREFIX) endif -ifeq ($(findstring -static,$(STATIC_LDFLAGS)),) +ifeq ($(findstring -static,$(LDFLAGS)),) LDFLAGS += -Wl,--dynamic-linker,$(UCLIBC_LDSO_ABSPATH)/$(UCLIBC_LDSO) endif diff --git a/test/Test.mak b/test/Test.mak index 69291a61e..189e3368b 100644 --- a/test/Test.mak +++ b/test/Test.mak @@ -32,8 +32,8 @@ TARGETS += $(G_TARGETS) endif CLEAN_TARGETS := $(U_TARGETS) $(G_TARGETS) COMPILE_TARGETS := $(TARGETS) -TARGETS += $(SHELL_TESTS) RUN_TARGETS := $(patsubst %,%.exe,$(TARGETS)) +TARGETS += $(SHELL_TESTS) define binary_name $(patsubst %.exe,%,$@) @@ -71,15 +71,13 @@ define exec_test endef test check all: run -run: $(RUN_TARGETS) compile -$(RUN_TARGETS): $(TARGETS) -ifeq ($(shell echo "$(SHELL_TESTS)"|grep "$(binary_name)"),) +run: $(RUN_TARGETS) +$(RUN_TARGETS): $(exec_test) $(diff_test) ifeq ($(UCLIBC_ONLY),) $(uclibc_glibc_diff_test) endif -endif compile: $(COMPILE_TARGETS) diff --git a/test/math/Makefile b/test/math/Makefile index 9e200269f..e65f1700e 100644 --- a/test/math/Makefile +++ b/test/math/Makefile @@ -22,5 +22,5 @@ PERL := /usr/bin/perl ulps-file := $(firstword $(wildcard $(config-sysdirs:%=$(..)%/libm-test-ulps))) libm-test.c: $(ulps-file) libm-test.inc gen-libm-test.pl $(Q)$(PERL) ./gen-libm-test.pl -u $< ./libm-test.inc -o "." 2>&1 > /dev/null -EXTRA_CLEAN := libm-test.c +EXTRA_CLEAN := libm-test.c libm-test-ulps.h $(TARGETS): libm-test.c diff --git a/test/nptl/Makefile b/test/nptl/Makefile index b3ca887f2..605347f0d 100644 --- a/test/nptl/Makefile +++ b/test/nptl/Makefile @@ -42,12 +42,16 @@ TESTS += tst-clock tst-clock_nanosleep tst-cpuclock1 tst-cpuclock2 \ tst-mqueue7 tst-mqueue8 tst-mqueue9 tst-timer2 tst-timer3 \ tst-timer4 tst-timer5 +ifeq ($(UCLIBC_HAS_OBSOLETE_BSD_SIGNAL),) +TESTS_DISABLED := tst-exec2 tst-exec3 tst-exec4 +endif + include ../Test.mak TARGET_ARCH := $(strip $(subst ",, $(strip $(TARGET_ARCH)))) PTDIR := $(top_builddir)libpthread/nptl -EXTRA_CFLAGS := -DNOT_IN_libc=1 -D_LIBC -D__USE_GNU -std=gnu99 -I. \ +EXTRA_CFLAGS := -DNOT_IN_libc=1 -D_LIBC -D__USE_GNU -std=gnu99 \ -I$(PTDIR) -I$(PTDIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH) \ -I$(PTDIR)/sysdeps/$(TARGET_ARCH) \ -I$(PTDIR)/sysdeps/unix/sysv/linux \ @@ -80,7 +84,7 @@ CFLAGS_tst-tls5modd.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc CFLAGS_tst-tls5mode.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc CFLAGS_tst-tls5modf.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc -EXTRA_LDFLAGS := -L$(top_builddir)lib -lpthread +EXTRA_LDFLAGS := -lpthread LDFLAGS_tst-cleanup4 := tst-cleanup4aux.o LDFLAGS_tst-clock2 := -lrt @@ -134,6 +138,7 @@ tst-tls5: tst-tls5mod.so tst-tls5moda.so tst-tls5modb.so \ tst-tls5modc.so tst-tls5modd.so tst-tls5mode.so tst-tls5modf.so OPTS_tst-cancel7 = --command ./tst-cancel7 +OPTS_tst-mqueue7 = -- ./tst-mqueue7 OPTS_tst-exec4 = ./tst-exec4 RET_tst-clock2 := 1 diff --git a/utils/Makefile.in b/utils/Makefile.in index 57a00b307..21114f563 100644 --- a/utils/Makefile.in +++ b/utils/Makefile.in @@ -5,7 +5,13 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -CFLAGS-utils := -DNOT_IN_libc $(SSP_ALL_CFLAGS) -B$(top_builddir)lib -Wl,-rpath-link,$(top_builddir)lib +ifdef UCLIBC_LDSO +ifeq (,$(findstring /,$(UCLIBC_LDSO))) +UCLIBC_LDSO := $(RUNTIME_PREFIX)lib/$(UCLIBC_LDSO) +endif +endif + +CFLAGS-utils := -DNOT_IN_libc $(SSP_ALL_CFLAGS) -B$(top_builddir)lib -Wl,-rpath-link,$(top_builddir)lib -Wl,--dynamic-linker,$(UCLIBC_LDSO) CFLAGS-utils-common := -I$(top_srcdir)ldso/include -DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" -DUCLIBC_LDSO=$(UCLIBC_LDSO) CFLAGS-utils-shared := $(PIEFLAG) $(LDPIEFLAG) @@ -25,6 +31,8 @@ CFLAGS-iconv := $(CFLAGS-utils) $(CFLAGS-utils-shared) -DL_iconv_main CFLAGS-readelf := $(CFLAGS-utils-shared) +CFLAGS-locale := $(CFLAGS-utils) + BUILD_CFLAGS-utils := -include $(top_srcdir)include/elf.h BUILD_CFLAGS-utils-common := $(CFLAGS-utils-common) @@ -51,15 +59,17 @@ utils_OBJ += ldconfig ldd endif utils_ICONV_OBJ = +utils_LOCALE_OBJ = ifeq ($(UCLIBC_HAS_LOCALE),y) utils_ICONV_OBJ := $(utils_OUT)/iconv +utils_LOCALE_OBJ := $(utils_OUT)/locale endif utils_OBJ := $(patsubst %,$(utils_OUT)/%,$(utils_OBJ)) hostutils_OBJ := $(patsubst %,%.host,$(utils_OBJ)) -utils: $(utils_OBJ) $(utils_ICONV_OBJ) +utils: $(utils_OBJ) $(utils_ICONV_OBJ) $(utils_LOCALE_OBJ) # NOTE: We build the utils AFTER we have a uClibc-targeted toolchain. @@ -69,6 +79,9 @@ $(utils_OBJ): $(utils_OUT)/% : $(utils_DIR)/%.c | $(libc) $(utils_OUT)/iconv: $(top_srcdir)libc/misc/wchar/wchar.c | $(libc) $(compile.u) +$(utils_OUT)/locale: $(top_srcdir)extra/locale/programs/locale.c | $(libc) + $(compile.u) + hostutils: $(hostutils_OBJ) $(hostutils_OBJ): $(utils_OUT)/%.host : $(utils_DIR)/%.c @@ -86,9 +99,10 @@ ifeq ($(HAVE_SHARED),y) endif ifeq ($(UCLIBC_HAS_LOCALE),y) $(INSTALL) -m 755 $(utils_OUT)/iconv $(PREFIX)$(RUNTIME_PREFIX)usr/bin/iconv + $(INSTALL) -m 755 $(utils_OUT)/locale $(PREFIX)$(RUNTIME_PREFIX)usr/bin/locale endif objclean-y += utils_clean utils_clean: - $(RM) $(utils_OUT)/{ldconfig,ldd,readelf,iconv,*.host} + $(RM) $(utils_OUT)/{ldconfig,ldd,readelf,iconv,locale,*.host} |
