################################################################################
# Embtoolkit
# Copyright(C) 2009-2011 Abdoulaye Walsimou GAYE.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
################################################################################
#
# \file eglibc.mk
# \brief eglibc.mk of Embtoolkit
# \author Abdoulaye Walsimou GAYE
# \date May 2009
################################################################################
EGLIBC_VERSION := $(subst ",,$(strip $(CONFIG_EMBTK_EGLIBC_VERSION_STRING)))
EGLIBC_BRANCH := $(subst ",,$(strip $(CONFIG_EMBTK_EGLIBC_BRANCH_STRING)))
EGLIBC_SVN_REVISION := $(CONFIG_EMBTK_EGLIBC_SVN_REVISION)
EGLIBC_SITE := http://www.eglibc.org
EGLIBC_SVN_SITE := http://www.eglibc.org/svn
EGLIBC_PATCHES_SITE := ftp://ftp.embtoolkit.org/embtoolkit.org/eglibc/patches
EGLIBC_PACKAGE := eglibc-$(EGLIBC_VERSION).tar.bz2
EGLIBC_HEADERS_BUILD_DIR := $(TOOLS_BUILD)/eglibc-headers
EGLIBC_BUILD_DIR := $(TOOLS_BUILD)/eglibc
EMBTK_EGLIBC_CFLAGS := $(TARGET_CFLAGS) $(EMBTK_TARGET_MCPU)
EMBTK_EGLIBC_CFLAGS += $(EMBTK_TARGET_ABI) $(EMBTK_TARGET_FLOAT_CFLAGS)
EMBTK_EGLIBC_CFLAGS += $(EMBTK_TARGET_MARCH) -pipe
#Hard or soft floating point in eglibc?
ifeq ($(CONFIG_EMBTK_SOFTFLOAT),y)
EGLIBC_FLOAT_TYPE := --with-fp=no
else
EGLIBC_FLOAT_TYPE := --with-fp=yes
endif
# Versioning in eglibc
EGLIBC_VERSIONING_OPTION := \
$(if $(CONFIG_EMBTK_EGLIBC_DISABLE_VERSIONING),--disable-versioning,)
OPTION_GROUPS_FILE = $(EMBTK_ROOT)/mk/eglibc/eglibc-$(EGLIBC_VERSION)-options.mk
eglibc-headers_install: $(EGLIBC_HEADERS_BUILD_DIR)/.installed
eglibc_install: $(EGLIBC_BUILD_DIR)/.installed
$(EGLIBC_HEADERS_BUILD_DIR)/.installed: eglibc_download \
$(EGLIBC_HEADERS_BUILD_DIR)/.decompressed \
EGLIBC_OPTIONS_PARSE $(EGLIBC_HEADERS_BUILD_DIR)/.configured
$(call EMBTK_INSTALL_MSG,"headers eglibc-$(EGLIBC_VERSION)")
$(MAKE) -C $(EGLIBC_HEADERS_BUILD_DIR) install-headers \
install_root=$(SYSROOT) install-bootstrap-headers=yes && \
$(MAKE) -C $(EGLIBC_HEADERS_BUILD_DIR) csu/subdir_lib
@cp $(EGLIBC_HEADERS_BUILD_DIR)/csu/crt1.o $(SYSROOT)/usr/lib/
@cp $(EGLIBC_HEADERS_BUILD_DIR)/csu/crti.o $(SYSROOT)/usr/lib/
@cp $(EGLIBC_HEADERS_BUILD_DIR)/csu/crtn.o $(SYSROOT)/usr/lib/
$(TOOLS)/bin/$(STRICT_GNU_TARGET)-gcc -nostdlib -nostartfiles \
-shared -x c /dev/null -o $(SYSROOT)/usr/lib/libc.so
@touch $@
eglibc_download:
$(call EMBTK_GENERIC_MESSAGE,"downloading eglibc-$(EGLIBC_VERSION) \
if necessary ...")
ifeq ($(CONFIG_EMBTK_EGLIBC_VERSION_STRING),"trunk")
@cd $(EMBTK_ROOT)/src; \
svn co $(EGLIBC_SVN_SITE)/trunk \
-r$(EGLIBC_SVN_REVISION) eglibc-$(EGLIBC_VERSION)
else
@cd $(EMBTK_ROOT)/src; \
svn co $(EGLIBC_SVN_SITE)/branches/eglibc-$(EGLIBC_BRANCH) \
-r$(EGLIBC_SVN_REVISION) eglibc-$(EGLIBC_VERSION)
endif
@cd $(EMBTK_ROOT)/src; \
cd eglibc-$(EGLIBC_VERSION); touch `find . -name configure`; cd ../;\
test -e $(DOWNLOAD_DIR)/$(EGLIBC_PACKAGE) || \
tar cjvf $(EGLIBC_PACKAGE) eglibc-$(EGLIBC_VERSION); \
test -e $(DOWNLOAD_DIR)/$(EGLIBC_PACKAGE) || \
mv $(EGLIBC_PACKAGE) $(DOWNLOAD_DIR)
ifeq ($(CONFIG_EMBTK_EGLIBC_NEED_PATCH),y)
@test -e $(DOWNLOAD_DIR)/eglibc-$(EGLIBC_VERSION).patch || \
wget $(EGLIBC_PATCHES_SITE)/eglibc-$(EGLIBC_VERSION)-*.patch \
-O $(DOWNLOAD_DIR)/eglibc-$(EGLIBC_VERSION).patch
endif
$(EGLIBC_HEADERS_BUILD_DIR)/.decompressed:
$(call EMBTK_DECOMPRESS_MSG,$(EGLIBC_PACKAGE))
@tar -C $(TOOLS_BUILD) -xjf $(DOWNLOAD_DIR)/$(EGLIBC_PACKAGE)
ifeq ($(CONFIG_EMBTK_EGLIBC_NEED_PATCH),y)
cd $(TOOLS_BUILD)/eglibc-$(EGLIBC_VERSION); \
patch -p1 < $(DOWNLOAD_DIR)/eglibc-$(EGLIBC_VERSION).patch
endif
@cp -R $(TOOLS_BUILD)/eglibc-$(EGLIBC_VERSION)/ports \
$(TOOLS_BUILD)/eglibc-$(EGLIBC_VERSION)/libc/
@mkdir -p $(EGLIBC_HEADERS_BUILD_DIR)
@mkdir -p $(EGLIBC_BUILD_DIR)
@touch $@
$(EGLIBC_HEADERS_BUILD_DIR)/.configured:
$(call EMBTK_CONFIGURE_MSG,eglibc-$(EGLIBC_VERSION))
cd $(EGLIBC_HEADERS_BUILD_DIR); BUILD_CC=$(HOSTCC_CACHED) \
CFLAGS="$(EMBTK_EGLIBC_CFLAGS)" \
CC=$(TOOLS)/bin/$(STRICT_GNU_TARGET)-gcc \
CXX=$(TOOLS)/bin/$(STRICT_GNU_TARGET)-g++ \
AR=$(TOOLS)/bin/$(STRICT_GNU_TARGET)-ar \
RANLIB=$(TOOLS)/bin/$(STRICT_GNU_TARGET)-ranlib \
$(TOOLS_BUILD)/eglibc-$(EGLIBC_VERSION)/libc/configure --prefix=/usr \
--with-headers=$(SYSROOT)/usr/include \
--host=$(STRICT_GNU_TARGET) --build=$(HOST_BUILD) $(EGLIBC_FLOAT_TYPE) \
--disable-profile --without-gd --without-cvs --enable-add-ons \
--enable-kernel="2.6.0" $(EGLIBC_VERSIONING_OPTION) \
--with-bugurl=$(EMBTK_BUGURL)
@touch $@
$(EGLIBC_BUILD_DIR)/.installed: $(EGLIBC_BUILD_DIR)/.configured
$(call EMBTK_INSTALL_MSG,eglibc-$(EGLIBC_VERSION))
PATH=$(PATH):$(TOOLS)/bin/ $(MAKE) -C $(EGLIBC_BUILD_DIR) $(J)
PATH=$(PATH):$(TOOLS)/bin/ $(MAKE) -C $(EGLIBC_BUILD_DIR) install \
install_root=$(SYSROOT)
@touch $@
$(EGLIBC_BUILD_DIR)/.configured:
$(call EMBTK_CONFIGURE_MSG,eglibc-$(EGLIBC_VERSION))
cd $(EGLIBC_BUILD_DIR); BUILD_CC=$(HOSTCC_CACHED) \
CFLAGS="$(EMBTK_EGLIBC_CFLAGS)" \
CC=$(TARGETCC_CACHED) \
CXX=$(TARGETCXX_CACHED) \
AR=$(TARGETAR) \
RANLIB=$(TARGETRANLIB) \
$(TOOLS_BUILD)/eglibc-$(EGLIBC_VERSION)/libc/configure --prefix=/usr \
--with-headers=$(SYSROOT)/usr/include \
--host=$(STRICT_GNU_TARGET) --build=$(HOST_BUILD) $(EGLIBC_FLOAT_TYPE) \
--disable-profile --without-gd --without-cvs --enable-add-ons \
--enable-kernel="2.6.0" $(EGLIBC_VERSIONING_OPTION) \
--with-bugurl=$(EMBTK_BUGURL) \
--with-pkgversion="EGLIBC from embtoolkit-$(EMBTK_VERSION)"
@touch $@
EGLIBC_OPTIONS_PARSE:
$(call EMBTK_GENERIC_MESSAGE,"Parsing \
eglibc-$(EGLIBC_VERSION) option groups...")
@cat $(OPTION_GROUPS_FILE) > $(EGLIBC_HEADERS_BUILD_DIR)/option-groups.config
@echo "#######################################################" >> $(EGLIBC_HEADERS_BUILD_DIR)/option-groups.config
@echo "# From embtoolkit-$(EMBTK_VERSION) configuration menu #" >> $(EGLIBC_HEADERS_BUILD_DIR)/option-groups.config
@echo "#######################################################" >> $(EGLIBC_HEADERS_BUILD_DIR)/option-groups.config
@grep "CONFIG_KEMBTK_EGLIBC_" $(EMBTK_ROOT)/.config | \
sed -e 's/CONFIG_KEMBTK_EGLIBC_*//g' \
>> $(EGLIBC_HEADERS_BUILD_DIR)/option-groups.config
@sed -i 's/"//g' $(EGLIBC_HEADERS_BUILD_DIR)/option-groups.config
@cp $(EGLIBC_HEADERS_BUILD_DIR)/option-groups.config \
$(EGLIBC_BUILD_DIR)/option-groups.config