On 30.06.2015 20:28, Andrei Borzenkov wrote:
> В Tue, 30 Jun 2015 15:05:46 -0300
> Paulo Flabiano Smorigo <pfsmor...@linux.vnet.ibm.com> пишет:
> 
>> On 2015-06-30 11:33, Vladimir 'phcoder' Serbinenko wrote:
>>> What about clang?
>>
>> Not good news about clang support. This is what the toolchain team said 
>> about it:
>>
>> The -mbig-endian option was added around April 10th, 2014. 
>> Unfortunately, those who implemented it only implemented it for ARM and 
>> one other architecture.
>>
>> The option is currently accepted on Power systems, but does not have any 
>> affect on the code generation for Power.
>>
>>
>> So, what can we do here? Maybe add a constrain in the configure file 
>> saying that it's not possible to build GRUB in a LE environment using clang.
> 
> If I understand it correctly, it is possible to build for big-endian
> PowerPC using
> 
> clang -target=powerpc
> 
@pfsmorigo. Please try attached patch
> but then we depend on clang being built with BE target support; and
> e.g. openSUSE builds it with
> 
> cmake -G "Ninja" \
>       -DBUILD_SHARED_LIBS=OFF \
>       -DCMAKE_BUILD_TYPE=Release \
>       -DLLVM_ENABLE_ASSERTIONS=OFF \
>       -DLLVM_TARGETS_TO_BUILD=host \
>       -DCMAKE_C_FLAGS="-O0" \
>       -DCMAKE_CXX_FLAGS="-O0" \
>       -DLLVM_HOST_TRIPLE=%{host_triple} \
> 
> so as I understand on ppc64le it does not build support for any other
> target. Actually openSUSE does not even build clang on ppc at all.
> 
> 
> 
>>>
>>> Le 30 juin 2015 16:30, "Andrei Borzenkov" <arvidj...@gmail.com
>>> <mailto:arvidj...@gmail.com>> a écrit :
>>>
>>>     On Tue, Jun 30, 2015 at 5:03 PM, Vladimir 'phcoder' Serbinenko
>>>     <phco...@gmail.com <mailto:phco...@gmail.com>> wrote:
>>>      > Which compilers support these flags? I'm concerned of breaking
>>>     old compilers
>>>      >
>>>
>>>     -static and -mbig-endian are listed in gcc 2.95.3 documentation for PPC.
>>>
>>>      > Le 30 juin 2015 14:57, "Paulo Flabiano Smorigo"
>>>      > <pfsmor...@linux.vnet.ibm.com
>>>     <mailto:pfsmor...@linux.vnet.ibm.com>> a écrit :
>>>      >>
>>>      >> libgcc dependency was removed *just* for this target because
>>>      >> the distros that use ppc64el doesn't have 32-bit support on it.
>>>      >>
>>>      >> * configure.ac <http://configure.ac>: Add targets for
>>>     powerpc64el and skip libgcc.
>>>      >> * Makefile.am: Likewise.
>>>      >> ---
>>>      >> configure.ac <http://configure.ac> | 8 ++++++++
>>>      >>  1 file changed, 8 insertions(+)
>>>      >>
>>>      >> diff --git a/configure.ac <http://configure.ac> b/configure.ac
>>>     <http://configure.ac>
>>>      >> index fd8a62e..0a79fad 100644
>>>      >> --- a/configure.ac <http://configure.ac>
>>>      >> +++ b/configure.ac <http://configure.ac>
>>>      >> @@ -116,6 +116,7 @@ if test "x$with_platform" = x; then
>>>      >>      x86_64-*) platform=pc ;;
>>>      >>      powerpc-*) platform=ieee1275 ;;
>>>      >>      powerpc64-*) platform=ieee1275 ;;
>>>      >> +    powerpc64le-*) platform=ieee1275 ;;
>>>      >>      sparc64-*) platform=ieee1275 ;;
>>>      >>      mipsel-*) platform=loongson ;;
>>>      >>      mips-*) platform=arc ;;
>>>      >> @@ -138,6 +139,7 @@ case "$target_cpu"-"$platform" in
>>>      >>    x86_64-none) ;;
>>>      >>    x86_64-*) target_cpu=i386 ;;
>>>      >>    powerpc64-ieee1275) target_cpu=powerpc ;;
>>>      >> +  powerpc64le-ieee1275) target_cpu=powerpc ;;
>>>      >>  esac
>>>      >>
>>>      >>  # Check if the platform is supported, make final adjustments.
>>>      >> @@ -601,6 +603,12 @@ if test "x$target_cpu" = xi386 && test
>>>     "x$platform"
>>>      >> != xemu; then
>>>      >>    TARGET_CFLAGS="$TARGET_CFLAGS -march=i386"
>>>      >>  fi
>>>      >>
>>>      >> +if test x$target_cpu = xpowerpc; then
>>>      >> +  TARGET_CFLAGS="$TARGET_CFLAGS -mbig-endian"
>>>      >> +  TARGET_CCASFLAGS="$TARGET_CCASFLAGS -mbig-endian"
>>>      >> +  TARGET_LDFLAGS="$TARGET_LDFLAGS -static -mbig-endian"
>>>      >> +fi
>>>      >> +
>>>      >>  if test "x$target_m32" = x1; then
>>>      >>    # Force 32-bit mode.
>>>      >>    TARGET_CFLAGS="$TARGET_CFLAGS -m32"
>>>      >> --
>>>      >> 2.1.0
>>>      >>
>>>      >>
>>>      >> _______________________________________________
>>>      >> Grub-devel mailing list
>>>      >> Grub-devel@gnu.org <mailto:Grub-devel@gnu.org>
>>>      >> https://lists.gnu.org/mailman/listinfo/grub-devel
>>>      >
>>>      >
>>>      > _______________________________________________
>>>      > Grub-devel mailing list
>>>      > Grub-devel@gnu.org <mailto:Grub-devel@gnu.org>
>>>      > https://lists.gnu.org/mailman/listinfo/grub-devel
>>>      >
>>>
>>>     _______________________________________________
>>>     Grub-devel mailing list
>>>     Grub-devel@gnu.org <mailto:Grub-devel@gnu.org>
>>>     https://lists.gnu.org/mailman/listinfo/grub-devel
>>>
>>>
>>>
>>> _______________________________________________
>>> Grub-devel mailing list
>>> Grub-devel@gnu.org
>>> https://lists.gnu.org/mailman/listinfo/grub-devel
>>>
>>
>>
> 
> 
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
> 

diff --git a/configure.ac b/configure.ac
index fd8a62e..a4ee419 100644
--- a/configure.ac
+++ b/configure.ac
@@ -116,6 +116,7 @@ if test "x$with_platform" = x; then
     x86_64-*) platform=pc ;;
     powerpc-*) platform=ieee1275 ;;
     powerpc64-*) platform=ieee1275 ;;
+    powerpc64le-*) platform=ieee1275 ;;
     sparc64-*) platform=ieee1275 ;;
     mipsel-*) platform=loongson ;;
     mips-*) platform=arc ;;
@@ -138,6 +139,7 @@ case "$target_cpu"-"$platform" in
   x86_64-none) ;;
   x86_64-*) target_cpu=i386 ;;
   powerpc64-ieee1275) target_cpu=powerpc ;;
+  powerpc64le-ieee1275) target_cpu=powerpc ;;
 esac
 
 # Check if the platform is supported, make final adjustments.
@@ -601,6 +603,33 @@ if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then
   TARGET_CFLAGS="$TARGET_CFLAGS -march=i386"
 fi
 
+if test x$target_cpu = xpowerpc; then
+  AC_CACHE_CHECK([for options to get big-endian compilation], grub_cv_target_cc_big_endian, [
+    grub_cv_target_cc_big_endian=no
+    for cand in "-target powerpc" \
+		"-mbig-endian"; do
+      if test x"$grub_cv_target_cc_big_endian" != xno ; then
+        break
+      fi
+      CFLAGS="$TARGET_CFLAGS $cand -Werror"
+      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ != __BYTE_ORDER__)
+#error still little endian
+#endif
+]], [[]])],
+		        [grub_cv_target_cc_big_endian="$cand"], [])
+    done
+  ])
+
+  if test x"$grub_cv_target_cc_big_endian" = xno ; then
+    AC_MSG_ERROR([could not force big-endian])
+  fi
+
+  TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_big_endian"
+  TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_big_endian"
+  TARGET_LDFLAGS="$TARGET_LDFLAGS -static $grub_cv_target_cc_big_endian"
+fi
+
 if test "x$target_m32" = x1; then
   # Force 32-bit mode.
   TARGET_CFLAGS="$TARGET_CFLAGS -m32"

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to