1eb0fe859a6ef06b7fd93c7b5ba2cc98d7ac6760
[kvm-coreboot.git] / packages / uclibc / uclibc.mk
blob1eb0fe859a6ef06b7fd93c7b5ba2cc98d7ac6760
1 # Defaults, if not set in the platform config
2 ifeq ($(CONFIG_TARGET_64BIT),y)
4 #the version can be overriden by the target config
5 UCLIBC_VER ?= 0.9.29
6 UCLIBC_ARCH ?= x86_64
7 UCLIBC_CONFIG ?= defconfig-x86_64
8 else
9 UCLIBC_VER ?= 0.9.29
10 UCLIBC_ARCH ?= i386
11 UCLIBC_CONFIG ?= defconfig
12 endif
14 ifeq ($(findstring defconfig,$(UCLIBC_CONFIG)),defconfig)
15 ifeq ($(shell if [ -f $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
16 UCLIBC_CONFIG = customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)
17 endif
18 endif
20 UCLIBC_URL=http://www.uclibc.org/downloads
21 UCLIBC_SOURCE=uClibc-$(UCLIBC_VER).tar.bz2
22 UCLIBC_DIR=$(BUILD_DIR)/uclibc
23 UCLIBC_SRC_DIR=$(UCLIBC_DIR)/uClibc
24 UCLIBC_STAMP_DIR=$(UCLIBC_DIR)/stamps
25 UCLIBC_LOG_DIR=$(UCLIBC_DIR)/logs
27 UCLIBC_PATCHES=$(PACKAGE_DIR)/uclibc/patches
29 ifeq ($(CONFIG_VERBOSE),y)
30 UCLIBC_BUILD_LOG=/dev/stdout
31 UCLIBC_INSTALL_LOG=/dev/stdout
32 else
33 UCLIBC_BUILD_LOG=$(UCLIBC_LOG_DIR)/build.log
34 UCLIBC_INSTALL_LOG=$(UCLIBC_LOG_DIR)/install.log
35 endif
37 CC_IPREFIX:=$(shell $(CC) --print-file-name=include)
38 LIMITS_CFLAGS = -I$(dir $(CC_IPREFIX))/include-fixed -I$(CC_IPREFIX)
40 $(SOURCE_DIR)/$(UCLIBC_SOURCE):
41 @ echo "Downloading uclibc..."
42 @ mkdir -p $(SOURCE_DIR)
43 @ wget $(WGET_Q) -P $(SOURCE_DIR) $(UCLIBC_URL)/$(UCLIBC_SOURCE)
45 $(UCLIBC_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(UCLIBC_SOURCE) | $(UCLIBC_STAMP_DIR) $(UCLIBC_DIR)
46 @ echo "Unpacking uclibc..."
47 @ tar -C $(UCLIBC_DIR) -jxf $(SOURCE_DIR)/$(UCLIBC_SOURCE)
48 @ touch $@
50 $(UCLIBC_STAMP_DIR)/.patched: $(UCLIBC_STAMP_DIR)/.unpacked
51 @ echo "Patching uclibc..."
52 @ cp $(UCLIBC_PATCHES)/librt/* $(UCLIBC_SRC_DIR)/librt/
53 @ cp $(UCLIBC_PATCHES)/aio.h $(UCLIBC_SRC_DIR)/include/
54 @ #$(BIN_DIR)/doquilt.sh $(UCLIBC_SRC_DIR) $(UCLIBC_PATCHES)
55 @ touch $@
57 $(UCLIBC_SRC_DIR)/.config: $(UCLIBC_STAMP_DIR)/.patched
58 @ cat $(PACKAGE_DIR)/uclibc/conf/$(UCLIBC_CONFIG) | sed -e s:^KERNEL_HEADERS=.*:KERNEL_HEADERS=\"$(KERNEL_SRC_DIR)/include\": > $(UCLIBC_SRC_DIR)/.config
60 $(UCLIBC_SRC_DIR)/lib/libc.a: $(UCLIBC_SRC_DIR)/.config
61 @ echo "Building uclibc..."
62 ifneq ($(findstring defconfig,$(UCLIBC_CONFIG)),defconfig)
63 @ echo "Using custom config $(PACKAGE_DIR)/uclibc/conf/$(UCLIBC_CONFIG)"
64 endif
65 @ ( unset CFLAGS; unset LDFLAGS; \
66 $(MAKE) $(PARALLEL_MAKE) -C $(UCLIBC_SRC_DIR) TARGET_ARCH="$(UCLIBC_ARCH)" \
67 CC="$(CC) $(CROSS_CFLAGS) $(LIMITS_CFLAGS)" LD="$(LD) $(CROSS_LDFLAGS)" \
68 HOSTCC="$(HOST_CC)" KERNEL_SOURCE="$(KERNEL_SRC_DIR)" \
69 RUNTIME_PREFIX="/" \
70 SHARED_LIB_LOADER_PATH="/lib" \
71 SHARED_LIB_LOADER_PREFIX="/lib" \
72 all > $(UCLIBC_BUILD_LOG) 2>&1)
73 @ mkdir -p $(OUTPUT_DIR)/config/uclibc
74 @ cp $(UCLIBC_SRC_DIR)/.config $(OUTPUT_DIR)/config/uclibc/
76 $(STAGING_DIR)/lib/libc.a: $(UCLIBC_SRC_DIR)/lib/libc.a
77 @ $(MAKE) -C $(UCLIBC_SRC_DIR) \
78 PREFIX= \
79 DEVEL_PREFIX=$(STAGING_DIR)/ \
80 RUNTIME_PREFIX=$(STAGING_DIR)/ \
81 install_runtime install_dev > $(UCLIBC_INSTALL_LOG) 2>&1
83 $(UCLIBC_SRC_DIR)/utils/ldd: $(UCLIBC_SRC_DIR)/lib/libc.a
84 @ $(MAKE) -C $(UCLIBC_SRC_DIR)/utils ldd
86 $(STAGING_DIR)/bin/ldd: $(UCLIBC_SRC_DIR)/utils/ldd
87 @ install -m 755 -d $(STAGING_DIR)/bin
88 @ install -m 755 $< $@
90 $(UCLIBC_STAMP_DIR) $(UCLIBC_LOG_DIR) $(UCLIBC_DIR):
91 @ mkdir -p $@
93 uclibc: $(UCLIBC_STAMP_DIR) $(UCLIBC_LOG_DIR) $(STAGING_DIR)/lib/libc.a
95 uclibc-clean:
96 @ echo "Cleaning uclibc..."
97 ifneq ($(wildcard $(UCLIBC_SRC_DIR)/Makefile),)
98 @ $(MAKE) -C $(UCLIBC_SRC_DIR) clean > /dev/null 2>&1
99 endif
101 uclibc-distclean:
102 @ rm -rf $(UCLIBC_DIR)/*
104 uclibc-bom:
105 @ echo "Package: uclibc"
106 @ echo "Source: $(UCLIBC_URL)/$(UCLIBC_SOURCE)"
107 @ echo ""
109 uclibc-extract: $(UCLIBC_STAMP_DIR)/.unpacked
111 uclibc-config: | $(UCLIBC_SRC_DIR)/.config
112 ifeq ($(shell if [ -f $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
113 @ cp -f $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) $(UCLIBC_SRC_DIR)/.config
114 endif
115 ifeq (uclibc,$(filter uclibc,$(PAYLOAD-y)))
116 @ echo "Configure uclibc..."
117 @ $(MAKE) -C $(UCLIBC_SRC_DIR) TARGET_ARCH="$(UCLIBC_ARCH)" menuconfig
118 @ echo
119 ifeq ($(shell if [ -f $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
120 @ echo "Found an existing custom configuration file:"
121 @ echo " $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)"
122 @ echo "I've copied it back to the source directory for modification."
123 @ echo "Remove the above file and re-run this command if you want to create a new custom configuration from scratch for this payload/board."
124 @ echo
125 endif
126 @ cp -f $(UCLIBC_SRC_DIR)/.config $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)
127 @ echo "Your custom uclibc config file has been saved as $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)."
128 @ echo
129 else
130 @ echo "Your payload does not require uclibc."
131 endif