Android.mk revision 5b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4
18a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block## Copyright 2008, The Android Open Source Project
28a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block##
38a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block## Licensed under the Apache License, Version 2.0 (the "License");
48a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block## you may not use this file except in compliance with the License.
58a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block## You may obtain a copy of the License at
68a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block##
78a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block##     http://www.apache.org/licenses/LICENSE-2.0
88a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block##
98a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block## Unless required by applicable law or agreed to in writing, software
108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block## distributed under the License is distributed on an "AS IS" BASIS,
118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block## See the License for the specific language governing permissions and
138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block## limitations under the License.
148a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block##
158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockLOCAL_PATH := $(call my-dir)
188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockifneq ($(TARGET_SIMULATOR),true)
208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockifeq ($(TARGET_ARCH),x86)
218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockinclude $(CLEAR_VARS)
238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block############################
258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block# First, build stage1
268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockLOCAL_SRC_FILES := \
288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        stage1/stage1.S
298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockLOCAL_CFLAGS := \
315ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        -Wall -Wmissing-prototypes -Wunused -Wshadow \
325ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        -Wpointer-arith -falign-jumps=1 -falign-loops=1 \
338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        -falign-functions=1 -Wundef
3468513a70bcd92384395513322f1b801e7bf9c729Steve BlockLOCAL_CFLAGS += -m32 -O2 -fno-builtin -nostdinc
358a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenLOCAL_C_INCLUDES := $(LOCAL_PATH)/stage1
37f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
388a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockLOCAL_MODULE := grub_stage1
39f486d19d62f1bc33246748b14b14a9dfa617b57fIain MerrickLOCAL_MODULE_PATH := $(PRODUCT_OUT)/grub
408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
415ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenLOCAL_SYSTEM_SHARED_LIBRARIES :=
42f486d19d62f1bc33246748b14b14a9dfa617b57fIain MerrickLOCAL_SHARED_LIBRARIES :=
435ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
44f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickinclude $(BUILD_RAW_EXECUTABLE)
455ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
465ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen$(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT :=
475ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen$(LOCAL_BUILT_MODULE) : PRIVATE_LIBS :=
485ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen$(LOCAL_BUILT_MODULE) : PRIVATE_RAW_EXECUTABLE_LDFLAGS := \
495ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen	-nostdlib -N -Ttext=7C00 -melf_i386
504576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
514576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang###################################################################
524576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang###################################################################
534576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang## For stage2, we have to do it in several parts.
548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block##   1) Build pre_stage2 that contains all the source.
55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block##   2) Get the size of pre_stage2 from (1) and generate a header file.
56f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick##   3) Build the "start sector" with the header file.
57f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick##   4) concatenate start + pre_stage2 into stage2.
5868513a70bcd92384395513322f1b801e7bf9c729Steve Block###################################################################
595ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen###################################################################
605ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block###################################
62## So, build pre_stage2 target  (1)
63
64include $(CLEAR_VARS)
65
66LOCAL_SRC_FILES := \
67	stage2/asm.S \
68	stage2/bios.c \
69	stage2/boot.c \
70	stage2/builtins.c \
71	stage2/char_io.c \
72	stage2/cmdline.c \
73	stage2/common.c \
74	stage2/console.c \
75	stage2/disk_io.c \
76	stage2/fsys_ext2fs.c \
77	stage2/gunzip.c \
78	stage2/serial.c \
79	stage2/smp-imps.c \
80	stage2/stage2.c \
81	stage2/terminfo.c \
82	stage2/tparm.c \
83	stage2/preset_menu.c
84
85LOCAL_CFLAGS := \
86	-Wall -Wmissing-prototypes -Wunused -Wshadow \
87	-Wpointer-arith -falign-jumps=1 -falign-loops=1 \
88	-falign-functions=1 -Wundef
89
90LOCAL_CFLAGS += -m32 -Os -fno-builtin -nostdinc
91
92LOCAL_CFLAGS += -DHAVE_CONFIG_H -DFSYS_EXT2FS=1 -DSUPPORT_SERIAL=1
93
94LOCAL_CFLAGS += -DPRESET_MENU_EXTERNAL
95
96LOCAL_C_INCLUDES := \
97	$(LOCAL_PATH)/stage1 \
98	$(LOCAL_PATH)/stage2
99
100LOCAL_MODULE := grub_pre_stage2
101LOCAL_MODULE_PATH := $(PRODUCT_OUT)/grub
102
103LOCAL_SYSTEM_SHARED_LIBRARIES :=
104LOCAL_SHARED_LIBRARIES :=
105
106include $(BUILD_RAW_EXECUTABLE)
107
108$(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT :=
109$(LOCAL_BUILT_MODULE) : PRIVATE_LIBS :=
110$(LOCAL_BUILT_MODULE) : PRIVATE_RAW_EXECUTABLE_LDFLAGS := \
111	-nostdlib -N -Ttext=8200 -melf_i386
112
113#############################################
114## Generate the stage2 start file  (2) + (3)
115
116include $(CLEAR_VARS)
117
118LOCAL_SRC_FILES := \
119	stage2/start.S
120
121LOCAL_CFLAGS := \
122	-Wall -Wmissing-prototypes -Wunused -Wshadow \
123	-Wpointer-arith -falign-jumps=1 -falign-loops=1 \
124	-falign-functions=1 -Wundef
125
126LOCAL_CFLAGS += -m32 -Os -fno-builtin -nostdinc
127
128LOCAL_CFLAGS += -DHAVE_CONFIG_H -DFSYS_EXT2FS=1 -DSUPPORT_SERIAL=1
129
130LOCAL_C_INCLUDES := \
131	$(LOCAL_PATH)/stage1 \
132	$(LOCAL_PATH)/stage2
133
134LOCAL_SYSTEM_SHARED_LIBRARIES :=
135LOCAL_SHARED_LIBRARIES :=
136
137LOCAL_MODULE := grub_start_stage2
138LOCAL_MODULE_PATH := $(PRODUCT_OUT)/grub
139
140# <generate the header file>
141LOCAL_MODULE_CLASS := EXECUTABLES
142intermediates := $(call local-intermediates-dir)
143
144STAGE2_SIZE_OBJ := $(intermediates)/stage2_size.h
145$(STAGE2_SIZE_OBJ) : PRIVATE_CUSTOM_TOOL = \
146	echo "\#define STAGE2_SIZE `stat -c '%s' $<`" > $@
147
148LOCAL_GENERATED_SOURCES := $(STAGE2_SIZE_OBJ)
149$(STAGE2_SIZE_OBJ): $(PRODUCT_OUT)/grub/grub_pre_stage2
150	@echo "target Generating: $@" 
151	$(transform-generated-source)
152# </generate the header file>
153
154include $(BUILD_RAW_EXECUTABLE)
155
156$(all_objects): $(STAGE2_SIZE_OBJ)
157$(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT :=
158$(LOCAL_BUILT_MODULE) : PRIVATE_LIBS :=
159$(LOCAL_BUILT_MODULE) : PRIVATE_RAW_EXECUTABLE_LDFLAGS := \
160	-nostdlib -N -Ttext=8200 -melf_i386
161
162#############################################
163## Generate the real deal stage2  (4)
164
165include $(CLEAR_VARS)
166
167my_files := $(PRODUCT_OUT)/grub/grub_start_stage2 \
168	$(PRODUCT_OUT)/grub/grub_pre_stage2
169
170file := $(PRODUCT_OUT)/grub/grub_stage2
171$(file) : $(my_files) 
172	@echo "target Creating: $@"
173	$(hide) cat $^ > $@
174ALL_PREBUILT += $(file)
175
176
177#############################################################################
178## Generate a full stage1+stage2 bin that we can just drop @ offset 0 on disk
179include $(CLEAR_VARS)
180grub_stage1 := $(PRODUCT_OUT)/grub/grub_stage1
181grub_stage2 := $(PRODUCT_OUT)/grub/grub_stage2
182grub_full := $(PRODUCT_OUT)/grub/grub.bin
183
184$(grub_full) : $(grub_stage1) $(grub_stage2)
185	@echo "target Generating GRUB bin: $@"
186	$(hide) rm -f $@
187	$(hide) dd if=$(grub_stage1) of=$@ bs=512 count=1 2>/dev/null
188	$(hide) dd if=$(grub_stage2) of=$@ bs=512 seek=1 2>/dev/null
189ALL_PREBUILT += $(grub_full)
190
191endif # x86
192endif # ! sim
193