summaryrefslogtreecommitdiff
path: root/mk/uclibc.mk
blob: c0bb1489f6bcc8409ba3fc83d23ee8b3205f2d05 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
################################################################################
# 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 <http://www.gnu.org/licenses/>.
#
################################################################################
#
# \file         uclibc.mk
# \brief	uclibc.mk of Embtoolkit
# \author       Abdoulaye Walsimou GAYE <awg@embtoolkit.org>
# \date         August 2009
################################################################################

UCLIBC_NAME		:= uClibc
UCLIBC_VERSION		:= $(call embtk_get_pkgversion,uClibc)
UCLIBC_SITE		:= http://www.uclibc.org/downloads
UCLIBC_GIT_SITE		:= git://git.busybox.net/uClibc
UCLIBC_PACKAGE		:= uClibc-$(UCLIBC_VERSION).tar.bz2
UCLIBC_SRC_DIR		:= $(embtk_toolsb)/uClibc-$(UCLIBC_VERSION)
UCLIBC_BUILD_DIR	:= $(call __embtk_pkg_srcdir,uClibc)

UCLIBC_HEADERS_NAME		:= uClibc_headers
UCLIBC_HEADERS_VERSION		:= $(UCLIBC_VERSION)
UCLIBC_HEADERS_SITE		:= $(UCLIBC_SITE)
UCLIBC_HEADERS_GIT_SITE		:= $(UCLIBC_GIT_SITE)
UCLIBC_HEADERS_PACKAGE		:= $(UCLIBC_PACKAGE)
UCLIBC_HEADERS_SRC_DIR		:= $(UCLIBC_SRC_DIR)
UCLIBC_HEADERS_BUILD_DIR	:= $(UCLIBC_BUILD_DIR)
UCLIBC_HEADERS_KCONFIGS_NAME	:= UCLIBC

UCLIBC_DOTCONFIG	:= $(UCLIBC_BUILD_DIR)/.config
EMBTK_UCLIBC_CFLAGS	:= $(filter-out $(__clang_cflags),$(TARGET_CFLAGS))
EMBTK_UCLIBC_CFLAGS	+= $(EMBTK_TARGET_MCPU)
EMBTK_UCLIBC_CFLAGS	+= $(EMBTK_TARGET_ABI) $(EMBTK_TARGET_FLOAT_CFLAGS)
EMBTK_UCLIBC_CFLAGS	+= $(EMBTK_TARGET_MARCH) -pipe

#
# uClibc libraries make options.
#
UCLIBC_MAKE_OPTS	:= PREFIX="$(embtk_sysroot)/"
UCLIBC_MAKE_OPTS	+= CROSS_COMPILER_PREFIX="$(CROSS_COMPILE)"
UCLIBC_MAKE_OPTS	+= SHARED_LIB_LOADER_PREFIX="/$(LIBDIR)/"
UCLIBC_MAKE_OPTS	+= RUNTIME_PREFIX="/" DEVEL_PREFIX="/usr/"
UCLIBC_MAKE_OPTS	+= KERNEL_HEADERS="$(embtk_sysroot)/usr/include/"
UCLIBC_MAKE_OPTS	+= UCLIBC_EXTRA_CFLAGS="$(EMBTK_UCLIBC_CFLAGS)"

#
# uClibc libraries install
#
define embtk_install_uclibc
	$(call embtk_makeinstall_pkg,uclibc)
endef

#
# Uclibc headers install
#
define __embtk_install_uclibc_headers
	$(call embtk_pinfo,"Install uClibc-$(UCLIBC_VERSION) headers ...")
	$(call embtk_download_pkg,uClibc)
	$(call embtk_decompress_pkg,uClibc)
	$(MAKE) -C $(UCLIBC_BUILD_DIR) distclean
	$(embtk_configure_uclibc)
	$(MAKE) -C $(UCLIBC_BUILD_DIR) silentoldconfig
	$(MAKE) -C $(UCLIBC_BUILD_DIR) $(UCLIBC_MAKE_OPTS) install_headers
	$(MAKE) -C $(UCLIBC_BUILD_DIR) $(UCLIBC_MAKE_OPTS) install_startfiles
	$(MAKE) -C $(UCLIBC_BUILD_DIR) $(UCLIBC_MAKE_OPTS) install_startfiles
	$(TARGETGCC) -nostdlib -nostartfiles -shared -x c /dev/null		\
				-o $(embtk_sysroot)/usr/$(LIBDIR)/libc.so
	touch $(call __embtk_pkg_dotinstalled_f,uclibc_headers)
endef

define embtk_install_uclibc_headers
	[ -e $(call __embtk_pkg_dotinstalled_f,uclibc_headers) ] ||		\
		$(__embtk_install_uclibc_headers)
endef

#
# Clean up macros
#
define __embtk_cleanup_uclibc
	($(MAKE) -C $(UCLIBC_BUILD_DIR) distclean &&				\
	rm -rf $(call __embtk_pkg_dotinstalled_f,uclibc) &&			\
	rm -rf $(call __embtk_pkg_dotinstalled_f,uclibc_headers))
endef
define embtk_cleanup_uclibc
	if [ -d $(UCLIBC_BUILD_DIR) ]						\
		&& [ -e $(UCLIBC_BUILD_DIR)/Makefile ]; then			\
		$(__embtk_cleanup_uclibc)					\
	fi
endef

define embtk_cleanup_uclibc_headers
	$(embtk_cleanup_uclibc)
endef

#
# uClibc configuration macros and target
#
__embtk_get_uclibc_config=grep "CONFIG_KEMBTK_UCLIBC_" $(EMBTK_DOTCONFIG)
__embtk_set_uclibc_config=sed -e 's/CONFIG_KEMBTK_UCLIBC_*//g' > $(UCLIBC_DOTCONFIG)
define embtk_configure_uclibc
	$(call embtk_pinfo,"Configure uClibc")
	$(__embtk_get_uclibc_config) | $(__embtk_set_uclibc_config)
endef

#
# downloads
#
download_uclibc download_uclibc_headers:
	$(call embtk_download_pkg,uclibc)