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"
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel