1LOCAL_PATH := $(call my-dir)
2
3ifeq ($(TARGET_BOARD_PLATFORM),moorefield)
4
5CMDLINE_SIZE ?= 0x400
6BOOTSTUB_SIZE ?= 8192
7
8BOOTSTUB_SRC_FILES := bootstub.c sfi.c ssp-uart.c imr_toc.c spi-uart.c
9BOOTSTUB_SRC_FILES_x86 := head.S e820_bios.S
10
11include $(CLEAR_VARS)
12
13# bootstub.bin
14LOCAL_SRC_FILES := $(BOOTSTUB_SRC_FILES)
15LOCAL_SRC_FILES_x86 := $(BOOTSTUB_SRC_FILES_x86)
16ANDROID_TOOLCHAIN_FLAGS := -m32 -ffreestanding
17LOCAL_CFLAGS := $(ANDROID_TOOLCHAIN_FLAGS) -Wall -O1 -DCMDLINE_SIZE=${CMDLINE_SIZE}
18LOCAL_MODULE := bootstub.bin
19LOCAL_MODULE_TAGS := optional
20LOCAL_MODULE_PATH := $(PRODUCT_OUT)
21LOCAL_MODULE_CLASS := EXECUTABLES
22LOCAL_FORCE_STATIC_EXECUTABLE := true
23
24
25include $(BUILD_SYSTEM)/binary.mk
26
27$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_GLOBAL_CFLAGS := $(LOCAL_CFLAGS)
28$(LOCAL_BUILT_MODULE) : PRIVATE_ELF_FILE := $(intermediates)/$(PRIVATE_MODULE).elf
29$(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT := $(LOCAL_PATH)/bootstub.lds
30$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(patsubst %.c, %.o , $(LOCAL_SRC_FILES))
31$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS += $(patsubst %.S, %.o , $(LOCAL_SRC_FILES_x86))
32$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(addprefix $(intermediates)/, $(BOOTSTUB_OBJS))
33
34$(LOCAL_BUILT_MODULE): $(all_objects)
35	@$(mkdir -p $(dir $@)
36	@echo "Generating bootstub.bin: $@"
37	$(hide) $(TARGET_LD) \
38		-m elf_i386 \
39		-T $(PRIVATE_LINK_SCRIPT) \
40		$(BOOTSTUB_OBJS) \
41		-o $(PRIVATE_ELF_FILE)
42	$(hide) $(TARGET_OBJCOPY) -O binary -R .note -R .comment -S $(PRIVATE_ELF_FILE) $@
43
44# Then assemble the final bootstub file
45bootstub_bin := $(PRODUCT_OUT)/bootstub.bin
46bootstub_full := $(PRODUCT_OUT)/bootstub
47
48CHECK_BOOTSTUB_SIZE : $(bootstub_bin)
49	$(hide) ACTUAL_SIZE=`$(call get-file-size,$(bootstub_bin))`; \
50	if [ "$$ACTUAL_SIZE" -gt "$(BOOTSTUB_SIZE)" ]; then \
51		echo "$(bootstub_bin): $$ACTUAL_SIZE exceeds size limit of $(BOOTSTUB_SIZE) bytes, aborting."; \
52		exit 1; \
53	fi
54
55$(bootstub_full) : CHECK_BOOTSTUB_SIZE
56	@echo "Generating bootstub: $@"
57	$(hide) cat $(bootstub_bin) /dev/zero | dd bs=$(BOOTSTUB_SIZE) count=1 > $@
58
59# build specific bootstub for GPT/AOSP image support
60include $(CLEAR_VARS)
61
62# 2ndbootloader.bin
63LOCAL_SRC_FILES := $(BOOTSTUB_SRC_FILES)
64LOCAL_SRC_FILES_x86 := $(BOOTSTUB_SRC_FILES_x86)
65ANDROID_TOOLCHAIN_FLAGS := -m32 -ffreestanding
66LOCAL_CFLAGS := $(ANDROID_TOOLCHAIN_FLAGS) -Wall -O1 -DCMDLINE_SIZE=${CMDLINE_SIZE} -DBUILD_RAMDUMP
67LOCAL_MODULE := 2ndbootloader.bin
68LOCAL_MODULE_TAGS := optional
69LOCAL_MODULE_PATH := $(PRODUCT_OUT)
70LOCAL_MODULE_CLASS := EXECUTABLES
71LOCAL_FORCE_STATIC_EXECUTABLE := true
72
73include $(BUILD_SYSTEM)/binary.mk
74
75$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_GLOBAL_CFLAGS := $(LOCAL_CFLAGS)
76$(LOCAL_BUILT_MODULE) : PRIVATE_ELF_FILE := $(intermediates)/$(PRIVATE_MODULE).elf
77$(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT := $(LOCAL_PATH)/2ndbootloader.lds
78$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(patsubst %.c, %.o , $(LOCAL_SRC_FILES))
79$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS += $(patsubst %.S, %.o , $(LOCAL_SRC_FILES_x86))
80$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(addprefix $(intermediates)/, $(BOOTSTUB_OBJS))
81
82$(LOCAL_BUILT_MODULE): $(all_objects)
83	@$(mkdir -p $(dir $@)
84	@echo "Generating bootstub $@"
85	$(hide) $(TARGET_LD) \
86		-m elf_i386 \
87		-T $(PRIVATE_LINK_SCRIPT) \
88		$(BOOTSTUB_OBJS) \
89		-o $(PRIVATE_ELF_FILE)
90	$(hide) $(TARGET_OBJCOPY) -O binary -R .note -R .comment -S $(PRIVATE_ELF_FILE) $@
91
92# Then assemble the final 2ndbootloader file
93bootstub_aosp_bin := $(PRODUCT_OUT)/2ndbootloader.bin
94bootstub_aosp_full := $(PRODUCT_OUT)/2ndbootloader
95
96CHECK_BOOTSTUB_AOSP_SIZE : $(bootstub_aosp_bin)
97	$(hide) ACTUAL_SIZE=`$(call get-file-size,$(bootstub_aosp_bin))`; \
98	if [ "$$ACTUAL_SIZE" -gt "$(BOOTSTUB_SIZE)" ]; then \
99		echo "$(bootstub_aosp_bin): $$ACTUAL_SIZE exceeds size limit of $(BOOTSTUB_SIZE) bytes, aborting."; \
100		exit 1; \
101	fi
102
103$(bootstub_aosp_full) : CHECK_BOOTSTUB_AOSP_SIZE
104	@echo "Generating bootstub $@"
105	$(hide) cat $(bootstub_aosp_bin) /dev/zero | dd bs=$(BOOTSTUB_SIZE) count=1 > $@
106
107endif #($(TARGET_BOARD_PLATFORM),moorefield)
108