Before the change to add arm to the --disable-spinlocks list the
postgres build on arm would error with:
gmake[4]: Entering directory
'/usr/pobj/postgresql-9.6.1/postgresql-9.6.1/src/backend/access/brin'
cc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement
-Wendif-labels -Wmissing-format-attribute -Wformat-security
-fno-strict-aliasing -fwrapv -O2 -pipe -I../../../../src/include
-I/usr/local/include -I/usr/local/include/libxml2 -I/usr/local/include -c -o
brin.o brin.c
In file included from ../../../../src/include/storage/lwlock.h:22,
from ../../../../src/include/storage/lock.h:23,
from ../../../../src/include/access/heapam.h:22,
from ../../../../src/include/nodes/execnodes.h:18,
from ../../../../src/include/access/brin.h:14,
from brin.c:18:
../../../../src/include/storage/s_lock.h:922:2: error: #error PostgreSQL does
not have native spinlock support on
this platform. To continue the compilation, rerun configure using
--disable-spinlocks. However, performance will be poor. Please report this to
[email protected].
In file included from ../../../../src/include/storage/lwlock.h:22,
from ../../../../src/include/storage/lock.h:23,
from ../../../../src/include/access/heapam.h:22,
from ../../../../src/include/nodes/execnodes.h:18,
from ../../../../src/include/access/brin.h:14,
from brin.c:18:
../../../../src/include/storage/s_lock.h:994: warning: type defaults to 'int'
in declaration of 'slock_t'
../../../../src/include/storage/s_lock.h:994: error: expected ';', ',' or ')'
before '*' token
../../../../src/include/storage/s_lock.h:1004: error: expected '=', ',', ';',
'asm' or '__attribute__' before 'dummy_spinlock'
../../../../src/include/storage/s_lock.h:1009: warning: type defaults to 'int'
in declaration of 'slock_t'
../../../../src/include/storage/s_lock.h:1009: error: expected ';', ',' or ')'
before '*' token
In file included from brin.c:23:
../../../../src/include/access/relscan.h:37: error: expected
specifier-qualifier-list before 'slock_t'
gmake[4]: *** [<builtin>: brin.o] Error 1
/*
* On ARM and ARM64, we use __sync_lock_test_and_set(int *, int) if available.
*
* We use the int-width variant of the builtin because it works on more chips
* than other widths.
*/
#if defined(__arm__) || defined(__arm) || defined(__aarch64__) ||
defined(__aarch64)
#ifdef HAVE_GCC__SYNC_INT32_TAS
#define HAS_TEST_AND_SET
#define TAS(lock) tas(lock)
typedef int slock_t;
static __inline__ int
tas(volatile slock_t *lock)
{
return __sync_lock_test_and_set(lock, 1);
}
#define S_UNLOCK(lock) __sync_lock_release(lock)
#endif /* HAVE_GCC__SYNC_INT32_TAS */
#endif /* __arm__ || __arm || __aarch64__ || __aarch64 */
The arm specific path in the header isn't used as base gcc does not
provide the atomic sync builtins on arm. Switch to ports gcc (which
currently targets mpcore/armv6k) to get the armv6+ atomic builtins.
ports llvm doesn't build on arm currently so that isn't an option.
Index: Makefile
===================================================================
RCS file: /cvs/ports/databases/postgresql/Makefile,v
retrieving revision 1.220
diff -u -p -r1.220 Makefile
--- Makefile 21 Dec 2016 07:43:57 -0000 1.220
+++ Makefile 21 Dec 2016 13:14:02 -0000
@@ -11,6 +11,7 @@ COMMENT-pg_upgrade=Support for upgrading
# in case a dump before / restore after pkg_add -u is required!
VERSION= 9.6.1
+REVISION= 0
DISTNAME= postgresql-${VERSION}
PKGNAME-main= postgresql-client-${VERSION}
PKGNAME-server= postgresql-server-${VERSION}
@@ -48,9 +49,12 @@ USE_GROFF= Yes
CONFIGURE_STYLE=gnu
-MODULES= lang/python
+MODULES= lang/python gcc4
MODPY_RUNDEP= No
+# for __sync_lock_test_and_set
+MODGCC4_ARCHS= arm
+
CONFIGURE_ENV= ac_cv_path_PYTHON=${MODPY_BIN} \
CPPFLAGS="-I${LOCALBASE}/include" \
LDFLAGS="-L${LOCALBASE}/lib"
@@ -76,7 +80,7 @@ CONFIGURE_ARGS= --disable-rpath --with-o
# a system to get this working, disable them for now. There is
# (apparently) a serious performance hit doing this.
-.if ${MACHINE_ARCH} == "hppa" || ${MACHINE_ARCH} == "alpha" || ${MACHINE_ARCH}
== "arm"
+.if ${MACHINE_ARCH} == "hppa" || ${MACHINE_ARCH} == "alpha"
CONFIGURE_ARGS+=--disable-spinlocks
.endif