Home | History | Annotate | Download | only in grub
      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