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 ifneq ($(TARGET_SIMULATOR),true) 20 ifeq ($(TARGET_ARCH),x86) 21 22 include $(CLEAR_VARS) 23 24 ############################ 25 # First, build stage1 26 27 LOCAL_SRC_FILES := \ 28 stage1/stage1.S 29 30 LOCAL_CFLAGS := \ 31 -Wall -Wmissing-prototypes -Wunused -Wshadow \ 32 -Wpointer-arith -falign-jumps=1 -falign-loops=1 \ 33 -falign-functions=1 -Wundef 34 LOCAL_CFLAGS += -m32 -O2 -fno-builtin -nostdinc 35 36 LOCAL_C_INCLUDES := $(LOCAL_PATH)/stage1 37 38 LOCAL_MODULE := grub_stage1 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=7C00 -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 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_PATH := $(PRODUCT_OUT)/grub 102 103 LOCAL_SYSTEM_SHARED_LIBRARIES := 104 LOCAL_SHARED_LIBRARIES := 105 106 include $(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 116 include $(CLEAR_VARS) 117 118 LOCAL_SRC_FILES := \ 119 stage2/start.S 120 121 LOCAL_CFLAGS := \ 122 -Wall -Wmissing-prototypes -Wunused -Wshadow \ 123 -Wpointer-arith -falign-jumps=1 -falign-loops=1 \ 124 -falign-functions=1 -Wundef 125 126 LOCAL_CFLAGS += -m32 -Os -fno-builtin -nostdinc 127 128 LOCAL_CFLAGS += -DHAVE_CONFIG_H -DFSYS_EXT2FS=1 -DSUPPORT_SERIAL=1 129 130 LOCAL_C_INCLUDES := \ 131 $(LOCAL_PATH)/stage1 \ 132 $(LOCAL_PATH)/stage2 133 134 LOCAL_SYSTEM_SHARED_LIBRARIES := 135 LOCAL_SHARED_LIBRARIES := 136 137 LOCAL_MODULE := grub_start_stage2 138 LOCAL_MODULE_PATH := $(PRODUCT_OUT)/grub 139 140 # <generate the header file> 141 LOCAL_MODULE_CLASS := EXECUTABLES 142 intermediates := $(call local-intermediates-dir) 143 144 STAGE2_SIZE_OBJ := $(intermediates)/stage2_size.h 145 $(STAGE2_SIZE_OBJ) : PRIVATE_CUSTOM_TOOL = \ 146 echo "\#define STAGE2_SIZE `stat -c '%s' $<`" > $@ 147 148 LOCAL_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 154 include $(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 165 include $(CLEAR_VARS) 166 167 my_files := $(PRODUCT_OUT)/grub/grub_start_stage2 \ 168 $(PRODUCT_OUT)/grub/grub_pre_stage2 169 170 file := $(PRODUCT_OUT)/grub/grub_stage2 171 $(file) : $(my_files) 172 @echo "target Creating: $@" 173 $(hide) cat $^ > $@ 174 ALL_PREBUILT += $(file) 175 176 177 ############################################################################# 178 ## Generate a full stage1+stage2 bin that we can just drop @ offset 0 on disk 179 include $(CLEAR_VARS) 180 grub_stage1 := $(PRODUCT_OUT)/grub/grub_stage1 181 grub_stage2 := $(PRODUCT_OUT)/grub/grub_stage2 182 grub_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 189 ALL_PREBUILT += $(grub_full) 190 191 endif # x86 192 endif # ! sim 193