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