grub: compile fixes for Mac OS X (based on patches by Jukka Ylitalo)

SVN-Revision: 21608
This commit is contained in:
Felix Fietkau 2010-05-28 19:48:05 +00:00
parent c24397b385
commit 93dd5cdde9
4 changed files with 118 additions and 0 deletions

View File

@ -44,6 +44,11 @@ CONFIGURE_ARGS += $(MY_CONFIGURE_ARGS)
CONFIGURE_VARS += $(MY_CONFIGURE_VARS)
ifeq ($(HOST_OS),Darwin)
HOST_CFLAGS += $(call host-cc-option,-m32)
HOST_CFLAGS += $(call host-cc-option,-fnested-functions)
endif
HOST_CFLAGS += $(call host-cc-option,-fno-stack-protector)
HOST_CFLAGS += $(call host-cc-option,-U_FORTIFY_SOURCE)
@ -53,6 +58,22 @@ HOST_CONFIGURE_ARGS += $(MY_CONFIGURE_ARGS) \
HOST_CONFIGURE_VARS += $(MY_CONFIGURE_VARS)
define Host/Configure
(cd $(HOST_BUILD_DIR); aclocal && autoconf && automake)
$(call Host/Configure/Default)
endef
ifeq ($(HOST_OS),Darwin)
define Host/Compile
$(MAKE) -C $(HOST_BUILD_DIR)/lib
$(MAKE) -C $(HOST_BUILD_DIR)/stage2 libgrub.a
$(MAKE) -C $(HOST_BUILD_DIR)/grub
endef
define Host/Install
$(MAKE) -C $(HOST_BUILD_DIR)/grub install
endef
endif
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/grub $(1)/usr/lib/

View File

@ -0,0 +1,11 @@
--- a/configure.ac
+++ b/configure.ac
@@ -56,6 +56,8 @@ fi
AC_CHECK_TOOL(CC, gcc)
AC_PROG_CC
+AM_PROG_CC_C_O
+AM_PROG_AS
# We need this for older versions of Autoconf.
_AM_DEPENDENCIES(CC)

View File

@ -0,0 +1,38 @@
--- a/configure.ac
+++ b/configure.ac
@@ -177,26 +177,22 @@ grub_ASM_ABSOLUTE_WITHOUT_ASTERISK
grub_CHECK_START_SYMBOL
grub_CHECK_USCORE_START_SYMBOL
-if test "x$grub_cv_check_start_symbol" != "xyes" \
- -a "x$grub_cv_check_uscore_start_symbol" != "xyes"; then
- AC_MSG_ERROR([Neither start nor _start is defined])
-fi
grub_CHECK_USCORE_USCORE_BSS_START_SYMBOL
grub_CHECK_USCORE_EDATA_SYMBOL
grub_CHECK_EDATA_SYMBOL
-if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" != "xyes" \
- -a "x$grub_cv_check_uscore_edata_symbol" != "xyes" \
- -a "x$grub_cv_check_edata_symbol" != "xyes"; then
- AC_MSG_ERROR([None of __bss_start, _edata, edata defined])
-fi
+# if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" != "xyes" \
+# -a "x$grub_cv_check_uscore_edata_symbol" != "xyes" \
+# -a "x$grub_cv_check_edata_symbol" != "xyes"; then
+# AC_MSG_ERROR([None of __bss_start, _edata, edata defined])
+# fi
grub_CHECK_END_SYMBOL
grub_CHECK_USCORE_END_SYMBOL
-if test "x$grub_cv_check_end_symbol" != "xyes" \
- -a "x$grub_cv_check_uscore_end_symbol" != "xyes"; then
- AC_MSG_ERROR([Neither end nor _end is defined])
-fi
+#if test "x$grub_cv_check_end_symbol" != "xyes" \
+# -a "x$grub_cv_check_uscore_end_symbol" != "xyes"; then
+# AC_MSG_ERROR([Neither end nor _end is defined])
+#fi
# Check for curses libraries.
AC_ARG_WITH(curses,

View File

@ -0,0 +1,48 @@
--- a/stage2/asm.S
+++ b/stage2/asm.S
@@ -95,14 +95,16 @@ VARIABLE(stage2_id)
VARIABLE(force_lba)
.byte 0
VARIABLE(version_string)
- .string VERSION
+ .ascii VERSION
+ .byte 0
VARIABLE(config_file)
#ifndef STAGE1_5
- .string "/boot/grub/menu.lst"
+ .ascii "/boot/grub/menu.lst"
#else /* STAGE1_5 */
.long 0xffffffff
- .string "/boot/grub/stage2"
+ .ascii "/boot/grub/stage2"
#endif /* STAGE1_5 */
+ .byte 0
/*
* Leave some breathing room for the config file name.
@@ -762,7 +764,9 @@ ENTRY(chain_stage1)
call EXT_C(prot_to_real)
.code16
-#ifdef ABSOLUTE_WITHOUT_ASTERISK
+#ifdef __APPLE__
+ DATA32 ADDR32 ljmp offset
+#elif defined(ABSOLUTE_WITHOUT_ASTERISK)
DATA32 ADDR32 ljmp (offset)
#else
DATA32 ADDR32 ljmp *(offset)
--- a/stage2/char_io.c
+++ b/stage2/char_io.c
@@ -1345,5 +1345,12 @@ grub_strcpy (char *dest, const char *src
#ifndef GRUB_UTIL
# undef memcpy
/* GCC emits references to memcpy() for struct copies etc. */
+#ifdef __APPLE__
+void *memcpy (void *dest, const void *src, int n)
+{
+ return grub_memmove(dest, src, n);
+}
+#else
void *memcpy (void *dest, const void *src, int n) __attribute__ ((alias ("grub_memmove")));
#endif
+#endif