svn commit: r525666 - head/devel/pecl-grpc/files
Piotr Kubaj
pkubaj at FreeBSD.org
Sun Feb 9 17:20:06 UTC 2020
Author: pkubaj
Date: Sun Feb 9 17:20:05 2020
New Revision: 525666
URL: https://svnweb.freebsd.org/changeset/ports/525666
Log:
devel/pecl-grpc: fix build on powerpc64 elfv2
Clang doesn't have sys/platform/ppc.h:
/wrkdirs/usr/ports/devel/pecl-grpc/work-php74/grpc-1.27.0/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc:24:10: fatal error: 'sys/platform/ppc.h' file not found
#include <sys/platform/ppc.h>
^~~~~~~~~~~~~~~~~~~~
1 error generated.
__ppc_get_timebase() and __ppc_get_timebase_freq() are not supported on FreeBSD.
PR: 243995
Approved by: vanilla (maintainer)
Added:
head/devel/pecl-grpc/files/patch-third__party_abseil-cpp_absl_base_internal_unscaledcycleclock.cc (contents, props changed)
Added: head/devel/pecl-grpc/files/patch-third__party_abseil-cpp_absl_base_internal_unscaledcycleclock.cc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/devel/pecl-grpc/files/patch-third__party_abseil-cpp_absl_base_internal_unscaledcycleclock.cc Sun Feb 9 17:20:05 2020 (r525666)
@@ -0,0 +1,55 @@
+--- third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc.orig 2020-02-04 17:37:57 UTC
++++ third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc
+@@ -20,10 +20,16 @@
+ #include <intrin.h>
+ #endif
+
+-#if defined(__powerpc__) || defined(__ppc__)
++#if (defined(__powerpc__) || defined(__ppc__)) && !defined(__clang__)
+ #include <sys/platform/ppc.h>
++
+ #endif
+
++#if (defined(__powerpc__) || defined(__ppc__)) && defined(__clang__) && defined(__FreeBSD__)
++#include <sys/types.h>
++#include <sys/sysctl.h>
++#endif
++
+ #include "absl/base/internal/sysinfo.h"
+
+ namespace absl {
+@@ -57,11 +62,34 @@ double UnscaledCycleClock::Frequency() {
+ #elif defined(__powerpc__) || defined(__ppc__)
+
+ int64_t UnscaledCycleClock::Now() {
++#ifdef __GLIBC__
+ return __ppc_get_timebase();
++#elif defined(__FreeBSD__)
++ union { long long complete; unsigned int part[2]; } ticks;
++ unsigned int tmp;
++ asm volatile(
++ "0:\n"
++ "mftbu %[hi32]\n"
++ "mftb %[lo32]\n"
++ "mftbu %[tmp]\n"
++ "cmpw %[tmp],%[hi32]\n"
++ "bne 0b\n"
++ : [hi32] "=r"(ticks.part[0]), [lo32] "=r"(ticks.part[1]),
++ [tmp] "=r"(tmp)
++ );
++ return ticks.complete;
++#endif
+ }
+
+ double UnscaledCycleClock::Frequency() {
++#ifdef __GLIBC__
+ return __ppc_get_timebase_freq();
++#elif defined(__FreeBSD__)
++ double timebaseFrequency = 0;
++ size_t length = sizeof(timebaseFrequency);
++ sysctlbyname("kern.timecounter.tc.timebase.frequency", &timebaseFrequency, &length, NULL, 0);
++ return timebaseFrequency;
++#endif
+ }
+
+ #elif defined(__aarch64__)
More information about the svn-ports-head
mailing list