## Copyright 2008, The Android Open Source Project
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
##
LOCAL_PATH := $(call my-dir)
ifneq ($(TARGET_SIMULATOR),true)
ifeq ($(TARGET_ARCH),x86)
include $(CLEAR_VARS)
############################
# First, build stage1
LOCAL_SRC_FILES := \
stage1/stage1.S
LOCAL_CFLAGS := \
-Wall -Wmissing-prototypes -Wunused -Wshadow \
-Wpointer-arith -falign-jumps=1 -falign-loops=1 \
-falign-functions=1 -Wundef
LOCAL_CFLAGS += -m32 -O2 -fno-builtin -nostdinc
LOCAL_C_INCLUDES := $(LOCAL_PATH)/stage1
LOCAL_MODULE := grub_stage1
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/grub
LOCAL_SYSTEM_SHARED_LIBRARIES :=
LOCAL_SHARED_LIBRARIES :=
include $(BUILD_RAW_EXECUTABLE)
$(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT :=
$(LOCAL_BUILT_MODULE) : PRIVATE_LIBS :=
$(LOCAL_BUILT_MODULE) : PRIVATE_RAW_EXECUTABLE_LDFLAGS := \
-nostdlib -N -Ttext=7C00 -melf_i386
###################################################################
###################################################################
## For stage2, we have to do it in several parts.
## 1) Build pre_stage2 that contains all the source.
## 2) Get the size of pre_stage2 from (1) and generate a header file.
## 3) Build the "start sector" with the header file.
## 4) concatenate start + pre_stage2 into stage2.
###################################################################
###################################################################
###################################
## So, build pre_stage2 target (1)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
stage2/asm.S \
stage2/bios.c \
stage2/boot.c \
stage2/builtins.c \
stage2/char_io.c \
stage2/cmdline.c \
stage2/common.c \
stage2/console.c \
stage2/disk_io.c \
stage2/fsys_ext2fs.c \
stage2/gunzip.c \
stage2/serial.c \
stage2/smp-imps.c \
stage2/stage2.c \
stage2/terminfo.c \
stage2/tparm.c \
stage2/preset_menu.c
LOCAL_CFLAGS := \
-Wall -Wmissing-prototypes -Wunused -Wshadow \
-Wpointer-arith -falign-jumps=1 -falign-loops=1 \
-falign-functions=1 -Wundef
LOCAL_CFLAGS += -m32 -Os -fno-builtin -nostdinc
LOCAL_CFLAGS += -DHAVE_CONFIG_H -DFSYS_EXT2FS=1 -DSUPPORT_SERIAL=1
LOCAL_CFLAGS += -DPRESET_MENU_EXTERNAL
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/stage1 \
$(LOCAL_PATH)/stage2
LOCAL_MODULE := grub_pre_stage2
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/grub
LOCAL_SYSTEM_SHARED_LIBRARIES :=
LOCAL_SHARED_LIBRARIES :=
include $(BUILD_RAW_EXECUTABLE)
$(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT :=
$(LOCAL_BUILT_MODULE) : PRIVATE_LIBS :=
$(LOCAL_BUILT_MODULE) : PRIVATE_RAW_EXECUTABLE_LDFLAGS := \
-nostdlib -N -Ttext=8200 -melf_i386
#############################################
## Generate the stage2 start file (2) + (3)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
stage2/start.S
LOCAL_CFLAGS := \
-Wall -Wmissing-prototypes -Wunused -Wshadow \
-Wpointer-arith -falign-jumps=1 -falign-loops=1 \
-falign-functions=1 -Wundef
LOCAL_CFLAGS += -m32 -Os -fno-builtin -nostdinc
LOCAL_CFLAGS += -DHAVE_CONFIG_H -DFSYS_EXT2FS=1 -DSUPPORT_SERIAL=1
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/stage1 \
$(LOCAL_PATH)/stage2
LOCAL_SYSTEM_SHARED_LIBRARIES :=
LOCAL_SHARED_LIBRARIES :=
LOCAL_MODULE := grub_start_stage2
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/grub
# <generate the header file>
LOCAL_MODULE_CLASS := EXECUTABLES
intermediates := $(call local-intermediates-dir)
STAGE2_SIZE_OBJ := $(intermediates)/stage2_size.h
$(STAGE2_SIZE_OBJ) : PRIVATE_CUSTOM_TOOL = \
echo "\#define STAGE2_SIZE `stat -c '%s' $<`" > $@
LOCAL_GENERATED_SOURCES := $(STAGE2_SIZE_OBJ)
$(STAGE2_SIZE_OBJ): $(PRODUCT_OUT)/grub/grub_pre_stage2
@echo "target Generating: $@"
$(transform-generated-source)
# </generate the header file>
include $(BUILD_RAW_EXECUTABLE)
$(all_objects): $(STAGE2_SIZE_OBJ)
$(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT :=
$(LOCAL_BUILT_MODULE) : PRIVATE_LIBS :=
$(LOCAL_BUILT_MODULE) : PRIVATE_RAW_EXECUTABLE_LDFLAGS := \
-nostdlib -N -Ttext=8200 -melf_i386
#############################################
## Generate the real deal stage2 (4)
include $(CLEAR_VARS)
my_files := $(PRODUCT_OUT)/grub/grub_start_stage2 \
$(PRODUCT_OUT)/grub/grub_pre_stage2
file := $(PRODUCT_OUT)/grub/grub_stage2
$(file) : $(my_files)
@echo "target Creating: $@"
$(hide) cat $^ > $@
ALL_PREBUILT += $(file)
#############################################################################
## Generate a full stage1+stage2 bin that we can just drop @ offset 0 on disk
include $(CLEAR_VARS)
grub_stage1 := $(PRODUCT_OUT)/grub/grub_stage1
grub_stage2 := $(PRODUCT_OUT)/grub/grub_stage2
grub_full := $(PRODUCT_OUT)/grub/grub.bin
$(grub_full) : $(grub_stage1) $(grub_stage2)
@echo "target Generating GRUB bin: $@"
$(hide) rm -f $@
$(hide) dd if=$(grub_stage1) of=$@ bs=512 count=1 2>/dev/null
$(hide) dd if=$(grub_stage2) of=$@ bs=512 seek=1 2>/dev/null
ALL_PREBUILT += $(grub_full)
endif # x86
endif # ! sim