В Mon, 25 Nov 2013 19:19:00 +0100 Vladimir 'φ-coder/phcoder' Serbinenko <phco...@gmail.com> пишет:
> On 25.11.2013 19:13, Andrey Borzenkov wrote: > > Similar to check for target linking format, also check for efiemu64 > > instead of hardcoding -melf_x86_64. This fixes compilation on *BSD > > variants. We cannot easily reuse main target check because platforms > > are different (main target is 32 bit and efiemu64 - 64 bit). > > > > This commit adds EFIEMU64_LINK_FORMAT that contains detected > > link option and is used in efiemu64.o linking instead of hardcoded > > value. > Go ahead Committed with additional comment in grub-core/Makefile.am that -arch,x86_64 == Apple linker > > > > Reported-By: Beeblebrox <zap...@berentweb.com> > > --- > > configure.ac | 29 +++++++++++++++++++++++++++-- > > grub-core/Makefile.am | 9 ++++----- > > 2 files changed, 31 insertions(+), 7 deletions(-) > > > > diff --git a/configure.ac b/configure.ac > > index d1292c9..1989f87 100644 > > --- a/configure.ac > > +++ b/configure.ac > > @@ -654,6 +654,30 @@ if test x"$efiemu_excuse" = x ; then > > efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone > > -nostdlib" > > fi > > fi > > +if test x"$efiemu_excuse" = x ; then > > + AC_CACHE_CHECK([for efiemu64 linking format], > > [grub_cv_target_cc_efiemu64_link_format], [ > > + grub_cv_target_cc_efiemu64_link_format=unknown > > + for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd > > -melf_x86_64_haiku -arch,x86_64; do > > + CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone" > > + LDFLAGS="-m64 -Wl,$format -nostdlib -static" > > + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ > > + asm (".globl start; start:"); > > + asm (".globl _start; _start:"); > > + asm (".globl __start; __start:"); > > + void __main (void); > > + void __main (void) {} > > + ]], [[]])], [flag=1], [flag=0]) > > + if test x"$flag" = x1; then > > + grub_cv_target_cc_efiemu64_link_format="$format" > > + break; > > + fi > > + done]) > > + if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then > > + efiemu_excuse="no suitable link format for efiemu64 found" > > + else > > + EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format" > > + fi > > +fi > > if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then > > AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be > > compiled]) > > fi > > @@ -663,11 +687,12 @@ else > > enable_efiemu=no > > fi > > AC_SUBST([enable_efiemu]) > > +AC_SUBST([EFIEMU64_LINK_FORMAT]) > > > > CFLAGS="$TARGET_CFLAGS" > > > > if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then > > - AC_CACHE_CHECK([for linking format], [grub_cv_target_cc_link_format], [ > > + AC_CACHE_CHECK([for target linking format], > > [grub_cv_target_cc_link_format], [ > > grub_cv_target_cc_link_format=unknown > > for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd > > -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -m${target_cpu}pe > > -arch,${target_cpu}; do > > if test x${target_cpu} != xi386 && test x$format = x${target_cpu}pe; > > then > > @@ -681,7 +706,7 @@ if test x"$target_cpu" = xi386 || test x"$target_cpu" = > > xx86_64; then > > asm (".globl __start; __start:"); > > void __main (void); > > void __main (void) {} > > - ]], [[]])], [flag=1], []) > > + ]], [[]])], [flag=1], [flag=0]) > > if test x"$flag" = x1; then > > grub_cv_target_cc_link_format="$format" > > break; > > diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am > > index e2da083..3ca52ea 100644 > > --- a/grub-core/Makefile.am > > +++ b/grub-core/Makefile.am > > @@ -399,7 +399,7 @@ efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF) > > fi > > > > efiemu64_c.o: efiemu/runtime/efiemu.c > > - if test "x$(TARGET_APPLE_LINKER)" = x1; then \ > > + if test "x$(EFIEMU64_LINK_FORMAT)" = x-arch,x86_64; then \ > > $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) > > $(CPPFLAGS_DEFAULT) -m64 -nostdlib -Wall -Werror -mno-red-zone -c -o $@ $< > > || exit 1; \ > > else \ > > $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) > > $(CPPFLAGS_DEFAULT) -m64 -nostdlib -Wall -Werror -O2 -mcmodel=large > > -mno-red-zone -c -o $@ $< || exit 1; \ > > @@ -407,7 +407,7 @@ efiemu64_c.o: efiemu/runtime/efiemu.c > > > > efiemu64_s.o: efiemu/runtime/efiemu.S > > -rm -f $@ > > - if test "x$(TARGET_APPLE_LINKER)" = x1; then \ > > + if test "x$(EFIEMU64_LINK_FORMAT)" = x-arch,x86_64; then \ > > $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) > > $(CPPFLAGS_DEFAULT) -m64 -Wall -Werror -nostdlib -O2 -mno-red-zone -c -o $@ > > $< || exit 1; \ > > else \ > > $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) > > $(CPPFLAGS_DEFAULT) -m64 -Wall -Werror -nostdlib -O2 -mcmodel=large > > -mno-red-zone -c -o $@ $< || exit 1; \ > > @@ -415,14 +415,13 @@ efiemu64_s.o: efiemu/runtime/efiemu.S > > > > efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELEF) > > -rm -f $@; \ > > - if test "x$(TARGET_APPLE_LINKER)" = x1; then \ > > + if test "x$(EFIEMU64_LINK_FORMAT)" = x-arch,x86_64; then \ > > rm -f $@.bin; \ > > $(TARGET_CC) -m64 -Wl,-r -nostdlib -o $@.bin $^ || exit 1; \ > > $(TARGET_OBJCONV) -felf64 -nu -nd $@.bin $@ || exit 1; \ > > rm -f $@.bin; \ > > else \ > > - $(TARGET_CC) -m64 -Wl,-melf_x86_64 -nostdlib -Wl,-r -o $@ $^ || exit > > 1; \ > > - if test ! -z "$(TARGET_OBJ2ELF)"; then $(TARGET_OBJ2ELF) $@ || (rm -f > > $@; exit 1); fi; \ > > + $(TARGET_CC) -m64 $(EFIEMU64_LINK_FORMAT) -nostdlib -Wl,-r -o $@ $^ > > || exit 1; \ > > fi > > > > platform_DATA += efiemu32.o efiemu64.o > > > >
signature.asc
Description: PGP signature
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel