1# 2# C library Makefile 3# 4# Copyright 2006, Broadcom Corporation 5# All Rights Reserved. 6# 7# THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY 8# KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM 9# SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS 10# FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE. 11# 12# $Id: Makefile,v 1.1.1.1 2008/10/15 03:29:36 james26_jang Exp $ 13# 14 15include $(TOP)/.config 16 17# Extra libraries 18lib-$(CONFIG_LIBCRYPT) += libcrypt 19lib-$(CONFIG_LIBDL) += libdl 20lib-$(CONFIG_LIBM) += libm 21lib-$(CONFIG_LIBNSL) += libnsl 22lib-$(CONFIG_LIBPTHREAD) += libpthread 23lib-$(CONFIG_LIBRESOLV) += libresolv 24lib-$(CONFIG_LIBUTIL) += libutil 25 26ifeq ($(PLATFORM),mipsel) 27lib-y += libnss_dns 28endif 29 30ifeq ($(CONFIG_UCLIBC),y) 31 32# uClibc names 33LINKER := ld-uClibc.so.0 34LIBC := libc.so.0 35MAP := uClibc.map 36 37else 38 39# GNU libc names 40LINKER := $(foreach lib,ld.so.* ld-linux.so.*,$(notdir $(wildcard $(LIBDIR)/$(lib)))) 41LIBC := libc.so.6 42MAP := libc.map 43 44endif 45 46# Nothing to do until installation 47all: 48 49ifeq ($(CONFIG_LIBOPT),y) 50 51# Find all ELF binaries (including extra libraries) 52BINARIES := $(shell find $(TARGETDIR) -path $(TARGETDIR)/lib -prune -o -type f -print | file -f - | grep ELF | cut -d':' -f1) 53BINARIES += $(wildcard $(foreach lib,$(LINKER) $(lib-y),$(LIBDIR)/$(lib) $(LIBDIR)/$(lib).so.?)) 54#BINARIES += $(TOOLCHAIN)/lib/libstdc++.so.5.0.3 55BINARIES += $(TOOLCHAIN)/lib/libgcc_s.so.1 56#BINARIES += $(PLATFORMDIR)/target/usr/sbin/chat 57 58ifneq ($(wildcard $(LIBDIR)/optinfo),) 59# Try the toolchain directory first for precursors 60OPTINFO := $(LIBDIR)/optinfo 61else 62# Fall back on platform directory 63OPTINFO := $(PLATFORM) 64endif 65 66ifeq ($(CONFIG_UCLIBC),y) 67 68# uClibc precursors 69OBJS := $(wildcard $(foreach file,libgcc-need.a libc.a interp.o,$(OPTINFO)/$(file))) 70 71# uClibc link parameters 72ENTRY := __uClibc_init 73LDFLAGS := -s -shared --warn-common --warn-once -z combreloc -soname=$(LIBC) -init $(ENTRY) 74LIBGCC := $(shell $(CC) -print-libgcc-file-name) 75 76$(MAP): $(OPTINFO)/libc.a 77 $(NM) -o --defined-only --no-sort $< | cut -d' ' -f3 > $@ 78 79# Find all unresolved symbols that uClibc could resolve 80.symbols: $(MAP) $(BINARIES) 81 rm -f $@ 82 ./find_syms.pl --map $(MAP) $(addprefix --bin ,$(BINARIES)) > $@ 83 84# Re-link uClibc 85$(LIBC): .symbols $(OBJS) 86 xargs -t $(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBGCC) < .symbols 87 88else 89 90# GNU libc precursors 91OBJS := $(wildcard $(foreach file,soinit.os libc_pic.a sofini.os,$(OPTINFO)/$(file))) 92 93# GNU libc link parameters 94ENTRY := __libc_main 95CFLAGS := -shared -Wl,-O1 -Wl,-dynamic-linker=$(LINKER) -Wl,--version-script=$(MAP) -Wl,-soname=$(LIBC) -nostdlib -nostartfiles -e $(ENTRY) 96 97$(MAP): $(OPTINFO)/libc.map 98 cp $< $@ 99 100# Find all unresolved symbols that GNU libc could resolve 101.symbols: $(MAP) $(BINARIES) 102 ./find_syms.pl --map $(MAP) $(addprefix --bin ,$(BINARIES)) > $@ 103# rm -f $@ 104# for symbol in `$(NM) --dynamic -u --no-sort $(BINARIES) | sort -u` ; do \ 105# grep -q "$${symbol};" $(MAP) && echo "-u $${symbol}" >> $@ ; \ 106# done 107 108# Re-link GNU libc 109$(LIBC): .symbols $(OBJS) $(LIBDIR)/$(LINKER) 110 xargs $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBDIR)/$(LINKER) -lgcc < .symbols 111 112endif 113 114./libgcc_s.so.1: 115 cp $(TOOLCHAIN)/lib/libgcc_s.so.1 $@ 116 117#./libstdc++.so.5.0.3: 118# cp $(TOOLCHAIN)/lib/libstdc++.so.5.0.3 $@ 119 120# Install optimized C library 121install: $(LIBC) 122#install: ./libstdc++.so.5.0.3 123install: ./libgcc_s.so.1 124 125else 126 127# Install default C library 128install: $(LIBDIR)/$(LIBC) 129install: ./libgcc_s.so.1 130 131endif 132 133# Also install extra libraries 134install: $(wildcard $(foreach lib,$(LINKER) $(lib-y),$(LIBDIR)/$(lib) $(LIBDIR)/$(lib).so.?)) 135 install -d $(TARGETDIR)/lib 136 install $^ $(TARGETDIR)/lib/ 137 $(STRIP) $(TARGETDIR)/lib/*.so.* 138 echo $(OPTINFO) 139 140clean: 141 rm -f $(LIBC) $(MAP) .symbols 142