grub2: add EFI support for loongarch64
[openwrt/openwrt.git] / package / boot / grub2 / Makefile
1 # SPDX-License-Identifier: GPL-2.0-only
2 #
3 # Copyright (C) 2006-2021 OpenWrt.org
4
5 include $(TOPDIR)/rules.mk
6 include $(INCLUDE_DIR)/kernel.mk
7
8 PKG_NAME:=grub
9 PKG_VERSION:=2.12
10 PKG_RELEASE:=1
11
12 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
13 PKG_SOURCE_URL:=@GNU/grub
14 PKG_HASH:=f3c97391f7c4eaa677a78e090c7e97e6dc47b16f655f04683ebd37bef7fe0faa
15
16 PKG_LICENSE:=GPL-3.0-or-later
17 PKG_CPE_ID:=cpe:/a:gnu:grub2
18
19 HOST_BUILD_PARALLEL:=1
20 PKG_BUILD_DEPENDS:=grub2/host
21
22 ifneq ($(BUILD_VARIANT),none)
23 PKG_ASLR_PIE:=0
24 PKG_SSP:=0
25 endif
26
27 PKG_FLAGS:=nonshared
28 PKG_BUILD_FLAGS:=no-gc-sections no-lto no-mold
29
30 include $(INCLUDE_DIR)/host-build.mk
31 include $(INCLUDE_DIR)/package.mk
32
33 define Package/grub2/Default
34 CATEGORY:=Boot Loaders
35 SECTION:=boot
36 TITLE:=GRand Unified Bootloader ($(2))
37 URL:=http://www.gnu.org/software/grub/
38 DEPENDS:=@TARGET_$(1)
39 VARIANT:=$(2)
40 endef
41
42 Package/grub2=$(call Package/grub2/Default,x86,pc)
43 Package/grub2-efi=$(call Package/grub2/Default,x86,efi)
44 Package/grub2-efi-arm=$(call Package/grub2/Default,armsr,efi)
45 Package/grub2-efi-loongarch64=$(call Package/grub2/Default,loongarch64,efi)
46
47 define Package/grub2-editenv
48 CATEGORY:=Utilities
49 SECTION:=utils
50 SUBMENU:=Boot Loaders
51 TITLE:=Grub2 Environment editor
52 URL:=http://www.gnu.org/software/grub/
53 DEPENDS:=@TARGET_x86
54 VARIANT:=none
55 endef
56
57 define Package/grub2-editenv/description
58 Edit grub2 environment files.
59 endef
60
61 define Package/grub2-bios-setup
62 CATEGORY:=Utilities
63 SECTION:=utils
64 SUBMENU:=Boot Loaders
65 TITLE:=Grub2 BIOS boot setup tool
66 URL:=http://www.gnu.org/software/grub/
67 DEPENDS:=@TARGET_x86
68 VARIANT:=none
69 endef
70
71 define Package/grub2-bios-setup/description
72 Set up images to bootable.
73 endef
74
75 HOST_BUILD_PREFIX := $(STAGING_DIR_HOST)
76
77 CONFIGURE_VARS += \
78 grub_build_mkfont_excuse="don't want fonts"
79
80 CONFIGURE_ARGS += \
81 --target=$(REAL_GNU_TARGET_NAME) \
82 --disable-werror \
83 --disable-nls \
84 --disable-device-mapper \
85 --disable-libzfs \
86 --disable-liblzma \
87 --disable-grub-mkfont \
88 --with-platform=$(BUILD_VARIANT)
89
90 HOST_CONFIGURE_VARS += \
91 grub_build_mkfont_excuse="don't want fonts"
92
93 HOST_CONFIGURE_ARGS += \
94 --disable-grub-mkfont \
95 --target=$(REAL_GNU_TARGET_NAME) \
96 --sbindir="$(STAGING_DIR_HOST)/bin" \
97 --disable-werror \
98 --disable-libzfs \
99 --disable-nls \
100 --with-platform=none
101
102 HOST_MAKE_FLAGS += \
103 TARGET_RANLIB=$(TARGET_RANLIB) \
104 LIBLZMA=$(STAGING_DIR_HOST)/lib/liblzma.a
105
106
107 ifneq ($(BUILD_VARIANT),none)
108 TARGET_CFLAGS := $(filter-out -O2 -O3 -fno-plt,$(TARGET_CFLAGS))
109 MAKE_PATH := grub-core
110 endif
111
112 ifeq ($(CONFIG_arm),y)
113 TARGET_CFLAGS := $(filter-out -mfloat-abi=hard,$(TARGET_CFLAGS))
114 endif
115
116 define Host/Configure
117 $(SED) 's,(RANLIB),(TARGET_RANLIB),' $(HOST_BUILD_DIR)/grub-core/Makefile.in
118 $(Host/Configure/Default)
119 endef
120
121 define Package/grub2/install
122 $(INSTALL_DIR) $(STAGING_DIR_IMAGE)/grub2
123 $(CP) $(PKG_BUILD_DIR)/grub-core/boot.img $(STAGING_DIR_IMAGE)/grub2/
124 $(CP) $(PKG_BUILD_DIR)/grub-core/cdboot.img $(STAGING_DIR_IMAGE)/grub2/
125 sed 's#msdos1#gpt1#g' ./files/grub-early.cfg >$(PKG_BUILD_DIR)/grub-early.cfg
126 $(STAGING_DIR_HOST)/bin/grub-mkimage \
127 -d $(PKG_BUILD_DIR)/grub-core \
128 -p /boot/grub \
129 -O i386-pc \
130 -c $(PKG_BUILD_DIR)/grub-early.cfg \
131 -o $(STAGING_DIR_IMAGE)/grub2/gpt-core.img \
132 at_keyboard biosdisk boot chain configfile fat linux ls part_gpt reboot search serial test vga
133 $(STAGING_DIR_HOST)/bin/grub-mkimage \
134 -d $(PKG_BUILD_DIR)/grub-core \
135 -p /boot/grub \
136 -O i386-pc \
137 -c ./files/grub-early.cfg \
138 -o $(STAGING_DIR_IMAGE)/grub2/generic-core.img \
139 at_keyboard biosdisk boot chain configfile ext2 linux ls part_msdos reboot search serial test vga
140 $(STAGING_DIR_HOST)/bin/grub-mkimage \
141 -d $(PKG_BUILD_DIR)/grub-core \
142 -p /boot/grub \
143 -O i386-pc \
144 -c ./files/grub-early.cfg \
145 -o $(STAGING_DIR_IMAGE)/grub2/eltorito.img \
146 at_keyboard biosdisk boot chain configfile iso9660 linux ls part_msdos reboot search serial test vga
147 $(STAGING_DIR_HOST)/bin/grub-mkimage \
148 -d $(PKG_BUILD_DIR)/grub-core \
149 -p /boot/grub \
150 -O i386-pc \
151 -c ./files/grub-early.cfg \
152 -o $(STAGING_DIR_IMAGE)/grub2/legacy-core.img \
153 biosdisk boot chain configfile ext2 linux ls part_msdos reboot search serial vga
154 endef
155
156 define Package/grub2-efi/install
157 sed 's#msdos1#gpt1#g' ./files/grub-early.cfg >$(PKG_BUILD_DIR)/grub-early.cfg
158 $(STAGING_DIR_HOST)/bin/grub-mkimage \
159 -d $(PKG_BUILD_DIR)/grub-core \
160 -p /boot/grub \
161 -O $(CONFIG_ARCH)-efi \
162 -c $(PKG_BUILD_DIR)/grub-early.cfg \
163 -o $(STAGING_DIR_IMAGE)/grub2/boot$(if $(CONFIG_x86_64),x64,ia32).efi \
164 at_keyboard boot chain configfile fat linux ls part_gpt reboot serial test efi_gop efi_uga
165 $(STAGING_DIR_HOST)/bin/grub-mkimage \
166 -d $(PKG_BUILD_DIR)/grub-core \
167 -p /boot/grub \
168 -O $(CONFIG_ARCH)-efi \
169 -c ./files/grub-early.cfg \
170 -o $(STAGING_DIR_IMAGE)/grub2/iso-boot$(if $(CONFIG_x86_64),x64,ia32).efi \
171 boot chain configfile fat iso9660 linux ls part_msdos part_gpt reboot serial test efi_gop efi_uga
172 endef
173
174 define Package/grub2-efi-arm/install
175 $(INSTALL_DIR) $(STAGING_DIR_IMAGE)/grub2
176 cp ./files/grub-early-gpt.cfg $(PKG_BUILD_DIR)/grub-early.cfg
177 $(STAGING_DIR_HOST)/bin/grub-mkimage \
178 -d $(PKG_BUILD_DIR)/grub-core \
179 -p /boot/grub \
180 -O arm$(if $(CONFIG_aarch64),64,)-efi \
181 -c $(PKG_BUILD_DIR)/grub-early.cfg \
182 -o $(STAGING_DIR_IMAGE)/grub2/boot$(if $(CONFIG_aarch64),aa64,arm).efi \
183 boot chain configfile fat linux ls part_gpt part_msdos reboot search \
184 search_fs_uuid search_label serial efi_gop lsefi minicmd ext2
185 $(STAGING_DIR_HOST)/bin/grub-mkimage \
186 -d $(PKG_BUILD_DIR)/grub-core \
187 -p /boot/grub \
188 -O arm$(if $(CONFIG_aarch64),64,)-efi \
189 -c ./files/grub-early.cfg \
190 -o $(STAGING_DIR_IMAGE)/grub2/iso-bootaa$(if $(CONFIG_aarch64),aa64,arm).efi \
191 boot chain configfile fat iso9660 linux ls lsefi minicmd part_msdos part_gpt \
192 reboot serial test efi_gop
193 endef
194
195 define Package/grub2-efi-loongarch64/install
196 $(INSTALL_DIR) $(STAGING_DIR_IMAGE)/grub2
197 cp ./files/grub-early-gpt.cfg $(PKG_BUILD_DIR)/grub-early.cfg
198 $(STAGING_DIR_HOST)/bin/grub-mkimage \
199 -d $(PKG_BUILD_DIR)/grub-core \
200 -p /boot/grub \
201 -O loongarch64-efi \
202 -c $(PKG_BUILD_DIR)/grub-early.cfg \
203 -o $(STAGING_DIR_IMAGE)/grub2/bootloongarch64.efi \
204 boot chain configfile fat linux ls lsefi minicmd part_gpt part_msdos reboot search \
205 search_fs_uuid search_label serial efi_gop all_video gfxterm ext2
206 endef
207
208
209 define Package/grub2-editenv/install
210 $(INSTALL_DIR) $(1)/usr/sbin
211 $(INSTALL_BIN) $(PKG_BUILD_DIR)/grub-editenv $(1)/usr/sbin/
212 endef
213
214 define Package/grub2-bios-setup/install
215 $(INSTALL_DIR) $(1)/usr/sbin
216 $(INSTALL_BIN) $(PKG_BUILD_DIR)/grub-bios-setup $(1)/usr/sbin/
217 endef
218
219 $(eval $(call HostBuild))
220 $(eval $(call BuildPackage,grub2))
221 $(eval $(call BuildPackage,grub2-efi))
222 $(eval $(call BuildPackage,grub2-efi-arm))
223 $(eval $(call BuildPackage,grub2-efi-loongarch64))
224 $(eval $(call BuildPackage,grub2-editenv))
225 $(eval $(call BuildPackage,grub2-bios-setup))