lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | # Makefile for uClibc |
| 2 | # |
| 3 | # Copyright (C) 2000-2008 Erik Andersen <andersen@uclibc.org> |
| 4 | # |
| 5 | # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. |
| 6 | # |
| 7 | |
| 8 | libc_DIR := $(top_srcdir)libc |
| 9 | libc_OUT := $(top_builddir)libc |
| 10 | |
| 11 | # Check if the target architecture has a version script for |
| 12 | # libc, and if so, include it when linking. |
| 13 | VERSION_SCRIPT := $(wildcard $(libc_DIR)/sysdeps/linux/$(TARGET_ARCH)/libc.map) |
| 14 | ifneq ($(VERSION_SCRIPT),) |
| 15 | VERSION_SCRIPT := -Wl,--version-script,$(VERSION_SCRIPT) |
| 16 | endif |
| 17 | |
| 18 | LDFLAGS-$(UCLIBC_FORMAT_DSBT_ELF)-libc.so := -Wl,--dsbt-index=2 |
| 19 | LDFLAGS-libc.so := $(LDFLAGS) $(VERSION_SCRIPT) -Wl,-init,$(SYMBOL_PREFIX)__uClibc_init |
| 20 | ifeq ($(UCLIBC_HAS_STDIO_FUTEXES),y) |
| 21 | CFLAGS += -D__USE_STDIO_FUTEXES__ |
| 22 | endif |
| 23 | LIBS-libc.so := $(interp) $(ldso) $(top_builddir)lib/$(NONSHARED_LIBNAME) |
| 24 | |
| 25 | # we have SHARED_LIBNAME=libc.so.$(ABI_VERSION) defined in Rules.mak |
| 26 | libc_FULL_NAME := libuClibc-$(VERSION).so |
| 27 | |
| 28 | # this comes first, so duplicate removal works correctly |
| 29 | include $(libc_DIR)/sysdeps/Makefile.in |
| 30 | |
| 31 | include $(libc_DIR)/misc/Makefile.in |
| 32 | include $(libc_DIR)/pwd_grp/Makefile.in |
| 33 | include $(libc_DIR)/stdio/Makefile.in |
| 34 | include $(libc_DIR)/string/Makefile.in |
| 35 | include $(libc_DIR)/termios/Makefile.in |
| 36 | include $(libc_DIR)/inet/Makefile.in |
| 37 | include $(libc_DIR)/signal/Makefile.in |
| 38 | include $(libc_DIR)/stdlib/Makefile.in |
| 39 | include $(libc_DIR)/unistd/Makefile.in |
| 40 | |
| 41 | ifeq ($(DOPIC),y) |
| 42 | libc-a-y = $(libc-y:.o=.os) $(libc-static-y:.o=.os) |
| 43 | else |
| 44 | libc-a-y = $(libc-y) $(libc-static-y) |
| 45 | endif |
| 46 | |
| 47 | ifeq ($(DOMULTI),n) |
| 48 | libc-so-y = $(libc-y:.o=.os) $(libc-shared-y) |
| 49 | else |
| 50 | all_sources = $(libc-y:.o=.c) |
| 51 | all_sources += $(libc-shared-y:.oS=.c) |
| 52 | libc-multi-y = $(filter-out $(libc-nomulti-y:.o=.c),$(all_sources)) |
| 53 | endif |
| 54 | |
| 55 | lib-a-y += $(top_builddir)lib/libc.a |
| 56 | lib-gdb-y += $(top_builddir)lib/libc.gdb |
| 57 | lib-so-y += $(libc.depend) |
| 58 | objclean-y += CLEAN_libc |
| 59 | |
| 60 | OUTPUT_FORMAT = $(CC) $(CFLAGS) -Wl,--verbose 2>&1 | $(SED) -n '/OUTPUT_FORMAT/,/)/p' |
| 61 | |
| 62 | ifeq ($(DOMULTI),n) |
| 63 | $(libc.depend): $(libc_OUT)/libc_so.a $(LIBS-libc.so) |
| 64 | $(call link.so,$(libc_FULL_NAME),$(ABI_VERSION)) |
| 65 | else |
| 66 | $(libc.depend): $(libc_OUT)/libc.oS $(libc-nomulti-y:.o=.oS) | $(LIBS-libc.so) |
| 67 | $(call linkm.so,$(libc_FULL_NAME),$(ABI_VERSION)) |
| 68 | endif |
| 69 | $(Q)$(RM) $@ |
| 70 | $(Q)cat $(top_srcdir)extra/scripts/format.lds > $@.tmp |
| 71 | $(Q)$(OUTPUT_FORMAT) >> $@.tmp |
| 72 | ifeq ($(COMPAT_ATEXIT),y) |
| 73 | $(Q)echo "GROUP ( $(NONSHARED_LIBNAME) $(SHARED_LIBNAME) $(ASNEEDED) )" >> $@.tmp |
| 74 | else |
| 75 | $(Q)echo "GROUP ( $(SHARED_LIBNAME) $(NONSHARED_LIBNAME) $(ASNEEDED) )" >> $@.tmp |
| 76 | endif |
| 77 | $(Q)mv $@.tmp $@ |
| 78 | |
| 79 | $(libc_OUT)/libc_so.a: $(libc-so-y) | $(top_builddir)lib/libc.a $(top_builddir)lib/$(NONSHARED_LIBNAME) |
| 80 | $(Q)$(RM) $@ |
| 81 | ifeq ($(DOPIC),y) |
| 82 | $(Q)$(STRIPTOOL) $(STRIP_FLAGS) $(libc-shared-y) |
| 83 | else |
| 84 | $(do_strip) |
| 85 | endif |
| 86 | $(do_ar) |
| 87 | |
| 88 | $(libc_OUT)/libc.oS: $(libc-multi-y) | $(top_builddir)lib/libc.a $(top_builddir)lib/$(NONSHARED_LIBNAME) |
| 89 | $(Q)$(RM) $@ |
| 90 | $(compile-m) |
| 91 | |
| 92 | $(top_builddir)lib/libc.a: $(libc-a-y) | $(crt-y) |
| 93 | $(Q)$(INSTALL) -d $(dir $@) |
| 94 | $(Q)$(RM) $@ |
| 95 | $(do_ar) |
| 96 | |
| 97 | # We use libc_so.a so that we can compile the shared library with special |
| 98 | # flags - i.e. -mleaf-id-shared-library. The static libc.a needs to be |
| 99 | # compiled without it. |
| 100 | $(top_builddir)lib/libc.gdb: $(libc_OUT)/libc_so.a $(LINK_FLAT_CRTS) |
| 101 | $(call link-flat.so,$(@:.gdb=),$(UCLIBC_SHARED_FLAT_ID)) |
| 102 | |
| 103 | CLEAN_libc: |
| 104 | $(do_rm) $(addprefix $(libc_OUT)/*., o os oS a) |