• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 LOCAL_PATH := $(call my-dir)
18 
19 ifeq ($(TARGET_ARCH),x86)
20 
21 include $(CLEAR_VARS)
22 
23 ############################
24 # First, build stage1
25 
26 LOCAL_SRC_FILES := \
27         stage1/stage1.S
28 
29 LOCAL_CFLAGS := \
30         -Wall -Wmissing-prototypes -Wunused -Wshadow \
31         -Wpointer-arith -falign-jumps=1 -falign-loops=1 \
32         -falign-functions=1 -Wundef
33 LOCAL_CFLAGS += -m32 -O2 -fno-builtin -nostdinc -fno-reorder-functions -fno-stack-protector
34 
35 LOCAL_C_INCLUDES := $(LOCAL_PATH)/stage1
36 
37 LOCAL_MODULE := grub_stage1
38 LOCAL_MODULE_TAGS := eng
39 LOCAL_MODULE_PATH := $(PRODUCT_OUT)/grub
40 
41 LOCAL_SYSTEM_SHARED_LIBRARIES :=
42 LOCAL_SHARED_LIBRARIES :=
43 
44 include $(BUILD_RAW_EXECUTABLE)
45 
46 $(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT :=
47 $(LOCAL_BUILT_MODULE) : PRIVATE_LIBS :=
48 $(LOCAL_BUILT_MODULE) : PRIVATE_RAW_EXECUTABLE_LDFLAGS := \
49 	-nostdlib -N -Ttext=0x7C00 -melf_i386
50 
51 ###################################################################
52 ###################################################################
53 ## For stage2, we have to do it in several parts.
54 ##   1) Build pre_stage2 that contains all the source.
55 ##   2) Get the size of pre_stage2 from (1) and generate a header file.
56 ##   3) Build the "start sector" with the header file.
57 ##   4) concatenate start + pre_stage2 into stage2.
58 ###################################################################
59 ###################################################################
60 
61 ###################################
62 ## So, build pre_stage2 target  (1)
63 
64 include $(CLEAR_VARS)
65 
66 LOCAL_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 
85 LOCAL_CFLAGS := \
86 	-Wall -Wmissing-prototypes -Wunused -Wshadow \
87 	-Wpointer-arith -falign-jumps=1 -falign-loops=1 \
88 	-falign-functions=1 -Wundef
89 
90 LOCAL_CFLAGS += -m32 -Os -fno-builtin -nostdinc -fno-reorder-functions -fno-stack-protector
91 
92 LOCAL_CFLAGS += -DHAVE_CONFIG_H -DFSYS_EXT2FS=1 -DSUPPORT_SERIAL=1
93 
94 LOCAL_CFLAGS += -DPRESET_MENU_EXTERNAL
95 
96 LOCAL_C_INCLUDES := \
97 	$(LOCAL_PATH)/stage1 \
98 	$(LOCAL_PATH)/stage2
99 
100 LOCAL_MODULE := grub_pre_stage2
101 LOCAL_MODULE_TAGS := eng
102 LOCAL_MODULE_PATH := $(PRODUCT_OUT)/grub
103 
104 LOCAL_SYSTEM_SHARED_LIBRARIES :=
105 LOCAL_SHARED_LIBRARIES :=
106 
107 include $(BUILD_RAW_EXECUTABLE)
108 
109 $(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT :=
110 $(LOCAL_BUILT_MODULE) : PRIVATE_LIBS :=
111 $(LOCAL_BUILT_MODULE) : PRIVATE_RAW_EXECUTABLE_LDFLAGS := \
112 	-nostdlib -N -Ttext=0x8200 -melf_i386
113 
114 #############################################
115 ## Generate the stage2 start file  (2) + (3)
116 
117 include $(CLEAR_VARS)
118 
119 LOCAL_SRC_FILES := \
120 	stage2/start.S
121 
122 LOCAL_CFLAGS := \
123 	-Wall -Wmissing-prototypes -Wunused -Wshadow \
124 	-Wpointer-arith -falign-jumps=1 -falign-loops=1 \
125 	-falign-functions=1 -Wundef
126 
127 LOCAL_CFLAGS += -m32 -Os -fno-builtin -nostdinc -fno-reorder-functions -fno-stack-protector
128 
129 LOCAL_CFLAGS += -DHAVE_CONFIG_H -DFSYS_EXT2FS=1 -DSUPPORT_SERIAL=1
130 
131 LOCAL_C_INCLUDES := \
132 	$(LOCAL_PATH)/stage1 \
133 	$(LOCAL_PATH)/stage2
134 
135 LOCAL_SYSTEM_SHARED_LIBRARIES :=
136 LOCAL_SHARED_LIBRARIES :=
137 
138 LOCAL_MODULE := grub_start_stage2
139 LOCAL_MODULE_TAGS := eng
140 LOCAL_MODULE_PATH := $(PRODUCT_OUT)/grub
141 
142 # <generate the header file>
143 LOCAL_MODULE_CLASS := EXECUTABLES
144 intermediates := $(call local-intermediates-dir)
145 
146 STAGE2_SIZE_OBJ := $(intermediates)/stage2_size.h
147 $(STAGE2_SIZE_OBJ) : PRIVATE_CUSTOM_TOOL = \
148 	echo "\#define STAGE2_SIZE `stat -c '%s' $<`" > $@
149 
150 LOCAL_GENERATED_SOURCES := $(STAGE2_SIZE_OBJ)
151 $(STAGE2_SIZE_OBJ): $(PRODUCT_OUT)/grub/grub_pre_stage2
152 	@echo "target Generating: $@"
153 	$(transform-generated-source)
154 # </generate the header file>
155 
156 include $(BUILD_RAW_EXECUTABLE)
157 
158 $(all_objects): $(STAGE2_SIZE_OBJ)
159 $(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT :=
160 $(LOCAL_BUILT_MODULE) : PRIVATE_LIBS :=
161 $(LOCAL_BUILT_MODULE) : PRIVATE_RAW_EXECUTABLE_LDFLAGS := \
162 	-nostdlib -N -Ttext=0x8200 -melf_i386
163 
164 #############################################
165 ## Generate the real deal stage2  (4)
166 
167 include $(CLEAR_VARS)
168 
169 my_files := $(PRODUCT_OUT)/grub/grub_start_stage2 \
170 	$(PRODUCT_OUT)/grub/grub_pre_stage2
171 
172 file := $(PRODUCT_OUT)/grub/grub_stage2
173 $(file) : $(my_files)
174 	@echo "target Creating: $@"
175 	$(hide) cat $^ > $@
176 #ALL_PREBUILT += $(file)
177 
178 
179 #############################################################################
180 ## Generate a full stage1+stage2 bin that we can just drop @ offset 0 on disk
181 include $(CLEAR_VARS)
182 grub_stage1 := $(PRODUCT_OUT)/grub/grub_stage1
183 grub_stage2 := $(PRODUCT_OUT)/grub/grub_stage2
184 grub_full := $(PRODUCT_OUT)/grub/grub.bin
185 
186 $(grub_full) : $(grub_stage1) $(grub_stage2)
187 	@echo "target Generating GRUB bin: $@"
188 	$(hide) rm -f $@
189 	$(hide) dd if=$(grub_stage1) of=$@ bs=512 count=1 2>/dev/null
190 	$(hide) dd if=$(grub_stage2) of=$@ bs=512 seek=1 2>/dev/null
191 #ALL_PREBUILT += $(grub_full)
192 
193 endif # x86
194