Android.mk revision d48111f800dc67dec87e0da0648293c93beb4b39
1## Copyright 2008, The Android Open Source Project
2##
3## Licensed under the Apache License, Version 2.0 (the "License");
4## you may not use this file except in compliance with the License.
5## You may obtain a copy of the License at
6##
7##     http://www.apache.org/licenses/LICENSE-2.0
8##
9## Unless required by applicable law or agreed to in writing, software
10## distributed under the License is distributed on an "AS IS" BASIS,
11## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12## See the License for the specific language governing permissions and
13## limitations under the License.
14##
15
16
17LOCAL_PATH := $(call my-dir)
18
19ifneq ($(TARGET_SIMULATOR),true)
20ifeq ($(TARGET_ARCH),x86)
21
22include $(CLEAR_VARS)
23
24############################
25# First, build stage1
26
27LOCAL_SRC_FILES := \
28        stage1/stage1.S
29
30LOCAL_CFLAGS := \
31        -Wall -Wmissing-prototypes -Wunused -Wshadow \
32        -Wpointer-arith -falign-jumps=1 -falign-loops=1 \
33        -falign-functions=1 -Wundef
34LOCAL_CFLAGS += -m32 -O2 -fno-builtin -nostdinc
35
36LOCAL_C_INCLUDES := $(LOCAL_PATH)/stage1
37
38LOCAL_MODULE := grub_stage1
39LOCAL_MODULE_TAGS := eng
40LOCAL_MODULE_PATH := $(PRODUCT_OUT)/grub
41
42LOCAL_SYSTEM_SHARED_LIBRARIES :=
43LOCAL_SHARED_LIBRARIES :=
44
45include $(BUILD_RAW_EXECUTABLE)
46
47$(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT :=
48$(LOCAL_BUILT_MODULE) : PRIVATE_LIBS :=
49$(LOCAL_BUILT_MODULE) : PRIVATE_RAW_EXECUTABLE_LDFLAGS := \
50	-nostdlib -N -Ttext=7C00 -melf_i386
51
52###################################################################
53###################################################################
54## For stage2, we have to do it in several parts.
55##   1) Build pre_stage2 that contains all the source.
56##   2) Get the size of pre_stage2 from (1) and generate a header file.
57##   3) Build the "start sector" with the header file.
58##   4) concatenate start + pre_stage2 into stage2.
59###################################################################
60###################################################################
61
62###################################
63## So, build pre_stage2 target  (1)
64
65include $(CLEAR_VARS)
66
67LOCAL_SRC_FILES := \
68	stage2/asm.S \
69	stage2/bios.c \
70	stage2/boot.c \
71	stage2/builtins.c \
72	stage2/char_io.c \
73	stage2/cmdline.c \
74	stage2/common.c \
75	stage2/console.c \
76	stage2/disk_io.c \
77	stage2/fsys_ext2fs.c \
78	stage2/gunzip.c \
79	stage2/serial.c \
80	stage2/smp-imps.c \
81	stage2/stage2.c \
82	stage2/terminfo.c \
83	stage2/tparm.c \
84	stage2/preset_menu.c
85
86LOCAL_CFLAGS := \
87	-Wall -Wmissing-prototypes -Wunused -Wshadow \
88	-Wpointer-arith -falign-jumps=1 -falign-loops=1 \
89	-falign-functions=1 -Wundef
90
91LOCAL_CFLAGS += -m32 -Os -fno-builtin -nostdinc
92
93LOCAL_CFLAGS += -DHAVE_CONFIG_H -DFSYS_EXT2FS=1 -DSUPPORT_SERIAL=1
94
95LOCAL_CFLAGS += -DPRESET_MENU_EXTERNAL
96
97LOCAL_C_INCLUDES := \
98	$(LOCAL_PATH)/stage1 \
99	$(LOCAL_PATH)/stage2
100
101LOCAL_MODULE := grub_pre_stage2
102LOCAL_MODULE_TAGS := eng
103LOCAL_MODULE_PATH := $(PRODUCT_OUT)/grub
104
105LOCAL_SYSTEM_SHARED_LIBRARIES :=
106LOCAL_SHARED_LIBRARIES :=
107
108include $(BUILD_RAW_EXECUTABLE)
109
110$(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT :=
111$(LOCAL_BUILT_MODULE) : PRIVATE_LIBS :=
112$(LOCAL_BUILT_MODULE) : PRIVATE_RAW_EXECUTABLE_LDFLAGS := \
113	-nostdlib -N -Ttext=8200 -melf_i386
114
115#############################################
116## Generate the stage2 start file  (2) + (3)
117
118include $(CLEAR_VARS)
119
120LOCAL_SRC_FILES := \
121	stage2/start.S
122
123LOCAL_CFLAGS := \
124	-Wall -Wmissing-prototypes -Wunused -Wshadow \
125	-Wpointer-arith -falign-jumps=1 -falign-loops=1 \
126	-falign-functions=1 -Wundef
127
128LOCAL_CFLAGS += -m32 -Os -fno-builtin -nostdinc
129
130LOCAL_CFLAGS += -DHAVE_CONFIG_H -DFSYS_EXT2FS=1 -DSUPPORT_SERIAL=1
131
132LOCAL_C_INCLUDES := \
133	$(LOCAL_PATH)/stage1 \
134	$(LOCAL_PATH)/stage2
135
136LOCAL_SYSTEM_SHARED_LIBRARIES :=
137LOCAL_SHARED_LIBRARIES :=
138
139LOCAL_MODULE := grub_start_stage2
140LOCAL_MODULE_TAGS := eng
141LOCAL_MODULE_PATH := $(PRODUCT_OUT)/grub
142
143# <generate the header file>
144LOCAL_MODULE_CLASS := EXECUTABLES
145intermediates := $(call local-intermediates-dir)
146
147STAGE2_SIZE_OBJ := $(intermediates)/stage2_size.h
148$(STAGE2_SIZE_OBJ) : PRIVATE_CUSTOM_TOOL = \
149	echo "\#define STAGE2_SIZE `stat -c '%s' $<`" > $@
150
151LOCAL_GENERATED_SOURCES := $(STAGE2_SIZE_OBJ)
152$(STAGE2_SIZE_OBJ): $(PRODUCT_OUT)/grub/grub_pre_stage2
153	@echo "target Generating: $@" 
154	$(transform-generated-source)
155# </generate the header file>
156
157include $(BUILD_RAW_EXECUTABLE)
158
159$(all_objects): $(STAGE2_SIZE_OBJ)
160$(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT :=
161$(LOCAL_BUILT_MODULE) : PRIVATE_LIBS :=
162$(LOCAL_BUILT_MODULE) : PRIVATE_RAW_EXECUTABLE_LDFLAGS := \
163	-nostdlib -N -Ttext=8200 -melf_i386
164
165#############################################
166## Generate the real deal stage2  (4)
167
168include $(CLEAR_VARS)
169
170my_files := $(PRODUCT_OUT)/grub/grub_start_stage2 \
171	$(PRODUCT_OUT)/grub/grub_pre_stage2
172
173file := $(PRODUCT_OUT)/grub/grub_stage2
174$(file) : $(my_files) 
175	@echo "target Creating: $@"
176	$(hide) cat $^ > $@
177#ALL_PREBUILT += $(file)
178
179
180#############################################################################
181## Generate a full stage1+stage2 bin that we can just drop @ offset 0 on disk
182include $(CLEAR_VARS)
183grub_stage1 := $(PRODUCT_OUT)/grub/grub_stage1
184grub_stage2 := $(PRODUCT_OUT)/grub/grub_stage2
185grub_full := $(PRODUCT_OUT)/grub/grub.bin
186
187$(grub_full) : $(grub_stage1) $(grub_stage2)
188	@echo "target Generating GRUB bin: $@"
189	$(hide) rm -f $@
190	$(hide) dd if=$(grub_stage1) of=$@ bs=512 count=1 2>/dev/null
191	$(hide) dd if=$(grub_stage2) of=$@ bs=512 seek=1 2>/dev/null
192#ALL_PREBUILT += $(grub_full)
193
194endif # x86
195endif # ! sim
196