diff --git a/user/mariadb/APKBUILD b/user/mariadb/APKBUILD
index 9c80ecff0369787e8fb08232ec886749549527e0..ddc4577a4b1e10971a1aeb2c0d4cbf5c00be3f2c 100644
--- a/user/mariadb/APKBUILD
+++ b/user/mariadb/APKBUILD
@@ -25,6 +25,10 @@ subpackages="$pkgname-client $pkgname-server $pkgname-libs $pkgname-embedded
 	$pkgname-common::noarch $pkgname-backup mytop::noarch $pkgname-openrc
 	$pkgname-doc $pkgname-dev"
 source="https://downloads.mariadb.org/interstitial/mariadb-$pkgver/source/mariadb-$pkgver.tar.gz
+	crc32-power.patch
+	gcc_builtins_ppc.h
+	libedit.patch
+	ppchax.patch
 	mariadb.initd
 	mariadb-server.limits
 	"
@@ -34,6 +38,12 @@ build() {
 		CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux"
 	fi
 
+	case "$CTARGET_ARCH" in
+		ppc)
+			cp "$srcdir"/gcc_builtins_ppc.h "$builddir"/include/atomic/gcc_builtins.h
+			;;
+	esac
+
 	local _release="\
 		-DBUILD_CONFIG=mysql_release \
 		-DCMAKE_BUILD_TYPE=Release \
@@ -102,6 +112,12 @@ build() {
 		-DWITH_EXTERNAL_ZLIB=YES \
 		-DCONC_WITH_EXTERNAL_ZLIB=YES "
 
+	# non-portable things, things that don't work on musl, BE, 32-bit etc
+	local _evil="\
+		-DPLUGIN_MROONGA=NO \
+		-DPLUGIN_ROCKSDB=NO \
+		-DPLUGIN_TOKUDB=NO "
+
 	local _system_paths="\
 		-DCMAKE_INSTALL_PREFIX=/usr \
 		-DSYSCONFDIR=/etc/mysql \
@@ -132,7 +148,7 @@ build() {
 		${_system_paths}\
 		${CMAKE_CROSSOPTS}" | tr -d '\t')
 	echo "Build Flags are: $_buildflags"
-	eval "cmake $_buildflags"
+	eval "cmake $_buildflags ."
 	make
 }
 
@@ -246,5 +262,9 @@ doc() {
 }
 
 sha512sums="b04c47f72de2473d7b5edd04b4785a1d7179bb1f429f30ba53ae6cfbbb413200d9803eff1072949b2e81fd7d2164ea34c68620d621d4181b913daa2293ae140c  mariadb-10.4.6.tar.gz
+03a4f60674cb45bcccb59971260c56f0f5f64eb79ad4078c485bc8112df2b9ee2b4eb08350530443b318440787b672b2947bc439783e813a32350f9179417cd0  crc32-power.patch
+15ae6d4564c5c8b8583502acd54bf0019e8a62ebcf87278015506e58848cb6996ff61ca055897f9192b8818808adeeac15b8f786065cfd071cc264ca1922f7e3  gcc_builtins_ppc.h
+41dc407cc16e7af5a8b9527489016a052a8bce85bd3d00f0d06b98b3fef16a693849d15a9a15136ee8148829fe4570d03df65dfb6fe9f0bccc447cab1bd666f4  libedit.patch
+0725c1c04ce01d6035d4fef5018709c8814228bf250503455c2aa7c972278fcb78b47e681a721cb42dc61508075e1485116d8c7ac924c584b4bf5ca6b27b6594  ppchax.patch
 1a2b058aad5fd6d6964db58b663591299a5bf82e7ad21a105d53a3e7ad1c3674c737caf3ee12799cce947cf8ead1f3e789dd8afcfc769891f08208b3006f9654  mariadb.initd
 d47324b34a87410eddb554f65199d145dfba9ae40407a62fb77df4e1ebf13087d15eb28e61e5e7cc9139eb42f093a0955136edae4020822652a1f0b4e219849e  mariadb-server.limits"
diff --git a/user/mariadb/crc32-power.patch b/user/mariadb/crc32-power.patch
new file mode 100644
index 0000000000000000000000000000000000000000..aa269a5999b2b6238fce7db0f48ea0936ddbaa5c
--- /dev/null
+++ b/user/mariadb/crc32-power.patch
@@ -0,0 +1,8 @@
+--- mariadb-10.4.6/cmake/crc32.cmake.old	2019-06-17 22:00:31.000000000 +0000
++++ mariadb-10.4.6/cmake/crc32.cmake	2019-07-06 22:02:39.704198796 +0000
+@@ -1,4 +1,4 @@
+-IF(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64")
++IF(FALSE)
+     SET(HAVE_CRC32_VPMSUM 1)
+     SET(CRC32_LIBRARY crc32-vpmsum)
+     ADD_SUBDIRECTORY(extra/crc32-vpmsum)
diff --git a/user/mariadb/gcc_builtins_ppc.h b/user/mariadb/gcc_builtins_ppc.h
new file mode 100644
index 0000000000000000000000000000000000000000..8e492c58a62a2f6986170faeb6c6f5b64b347d0a
--- /dev/null
+++ b/user/mariadb/gcc_builtins_ppc.h
@@ -0,0 +1,78 @@
+#ifndef ATOMIC_GCC_BUILTINS_INCLUDED
+#define ATOMIC_GCC_BUILTINS_INCLUDED
+
+/* Copyright (c) 2017 MariaDB Foundation
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; version 2 of the License.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335  USA */
+
+
+#define MY_MEMORY_ORDER_RELAXED __ATOMIC_RELAXED
+#define MY_MEMORY_ORDER_CONSUME __ATOMIC_CONSUME
+#define MY_MEMORY_ORDER_ACQUIRE __ATOMIC_ACQUIRE
+#define MY_MEMORY_ORDER_RELEASE __ATOMIC_RELEASE
+#define MY_MEMORY_ORDER_ACQ_REL __ATOMIC_ACQ_REL
+#define MY_MEMORY_ORDER_SEQ_CST __ATOMIC_SEQ_CST
+
+#define my_atomic_store32_explicit(P, D, O) __atomic_store_4((P), (D), (O))
+#define my_atomic_store64_explicit(P, D, O) __atomic_store_8((P), (D), (O))
+#define my_atomic_storeptr_explicit(P, D, O) __atomic_store_4((P), (unsigned int)(D), (O))
+
+#define my_atomic_load32_explicit(P, O) __atomic_load_4((P), (O))
+#define my_atomic_load64_explicit(P, O) __atomic_load_8((P), (O))
+#define my_atomic_loadptr_explicit(P, O) __atomic_load_4((P), (O))
+
+#define my_atomic_fas32_explicit(P, D, O) __atomic_exchange_4((P), (D), (O))
+#define my_atomic_fas64_explicit(P, D, O) __atomic_exchange_8((P), (D), (O))
+#define my_atomic_fasptr_explicit(P, D, O) __atomic_exchange_4((P), (D), (O))
+
+#define my_atomic_add32_explicit(P, A, O) __atomic_fetch_add_4((P), (A), (O))
+#define my_atomic_add64_explicit(P, A, O) __atomic_fetch_add_8((P), (A), (O))
+
+#define my_atomic_cas32_weak_explicit(P, E, D, S, F) \
+  __atomic_compare_exchange_4((P), (E), (D), 1, (S), (F))
+#define my_atomic_cas64_weak_explicit(P, E, D, S, F) \
+  __atomic_compare_exchange_8((P), (E), (D), 1, (S), (F))
+#define my_atomic_casptr_weak_explicit(P, E, D, S, F) \
+  __atomic_compare_exchange_4((P), (E), (D), 1, (S), (F))
+
+#define my_atomic_cas32_strong_explicit(P, E, D, S, F) \
+  __atomic_compare_exchange_4((P), (E), (D), 0, (S), (F))
+#define my_atomic_cas64_strong_explicit(P, E, D, S, F) \
+  __atomic_compare_exchange_8((P), (E), (D), 0, (S), (F))
+#define my_atomic_casptr_strong_explicit(P, E, D, S, F) \
+  __atomic_compare_exchange_4((P), (E), (D), 0, (S), (F))
+
+#define my_atomic_store32(P, D) __atomic_store_4((P), (D), __ATOMIC_SEQ_CST)
+#define my_atomic_store64(P, D) __atomic_store_8((P), (D), __ATOMIC_SEQ_CST)
+#define my_atomic_storeptr(P, D) __atomic_store_4((P), (D), __ATOMIC_SEQ_CST)
+
+#define my_atomic_load32(P) __atomic_load_4((P), __ATOMIC_SEQ_CST)
+#define my_atomic_load64(P) __atomic_load_8((P), __ATOMIC_SEQ_CST)
+#define my_atomic_loadptr(P) __atomic_load_4((P), __ATOMIC_SEQ_CST)
+
+#define my_atomic_fas32(P, D) __atomic_exchange_4((P), (D), __ATOMIC_SEQ_CST)
+#define my_atomic_fas64(P, D) __atomic_exchange_8((P), (D), __ATOMIC_SEQ_CST)
+#define my_atomic_fasptr(P, D) __atomic_exchange_4((P), (D), __ATOMIC_SEQ_CST)
+
+#define my_atomic_add32(P, A) __atomic_fetch_add_4((P), (A), __ATOMIC_SEQ_CST)
+#define my_atomic_add64(P, A) __atomic_fetch_add_8((P), (A), __ATOMIC_SEQ_CST)
+
+#define my_atomic_cas32(P, E, D) \
+  __atomic_compare_exchange_4((P), (E), (D), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
+#define my_atomic_cas64(P, E, D) \
+  __atomic_compare_exchange_8((P), (E), (D), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
+#define my_atomic_casptr(P, E, D) \
+  __atomic_compare_exchange_4((P), (E), (D), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
+
+#endif /* ATOMIC_GCC_BUILTINS_INCLUDED */
diff --git a/user/mariadb/libedit.patch b/user/mariadb/libedit.patch
new file mode 100644
index 0000000000000000000000000000000000000000..14dc9db491506f82f3ce5b6a0eb27c6ba4fab8cd
--- /dev/null
+++ b/user/mariadb/libedit.patch
@@ -0,0 +1,57 @@
+From d9342e88289fa588ea2f1a094dbfc32f0693e23d Mon Sep 17 00:00:00 2001
+From: Sebastian Kemper <sebastian_ml@gmx.net>
+Date: Tue, 9 Apr 2019 22:28:10 +0200
+Subject: [PATCH] cmake: support new libedit interface
+
+libedit changed it's interface a while ago. MariaDB's cmake file doesn't
+recognize the new interface, the compile test fails:
+
+/mariadb-10.2.19/CMakeFiles/CMakeTmp/src.cxx: In function 'int main(int, char**)':
+/mariadb-10.2.19/CMakeFiles/CMakeTmp/src.cxx:6:47: error: invalid conversion from 'char*' to 'int' [-fpermissive]
+  int res= (*rl_completion_entry_function)(0,0);
+           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
+
+Fix this by adding a detection for the new interface as well.
+
+Run-tested on a MIPS machine.
+
+Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
+---
+ cmake/readline.cmake | 17 +++++++++++++++--
+ 1 file changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/readline.cmake b/cmake/readline.cmake
+index 12a8980b6a90..a2b2cc4c241f 100644
+--- a/cmake/readline.cmake
++++ b/cmake/readline.cmake
+@@ -160,8 +160,20 @@ MACRO (MYSQL_FIND_SYSTEM_LIBEDIT)
+       int res= (*rl_completion_entry_function)(0,0);
+       completion_matches(0,0);
+     }"
+-    LIBEDIT_INTERFACE)
+-    SET(USE_LIBEDIT_INTERFACE ${LIBEDIT_INTERFACE})
++    LIBEDIT_HAVE_COMPLETION_INT)
++
++    CHECK_CXX_SOURCE_COMPILES("
++    #include <stdio.h>
++    #include <readline.h>
++    int main(int argc, char **argv)
++    {
++      char res= *(*rl_completion_entry_function)(0,0);
++      completion_matches(0,0);
++    }"
++    LIBEDIT_HAVE_COMPLETION_CHAR)
++    IF(LIBEDIT_HAVE_COMPLETION_INT OR LIBEDIT_HAVE_COMPLETION_CHAR)
++      SET(USE_LIBEDIT_INTERFACE 1)
++    ENDIF()
+   ENDIF()
+ ENDMACRO()
+ 
+@@ -187,6 +199,7 @@ MACRO (MYSQL_CHECK_READLINE)
+         IF(USE_LIBEDIT_INTERFACE)
+           SET(MY_READLINE_INCLUDE_DIR ${LIBEDIT_INCLUDE_DIR})
+           SET(MY_READLINE_LIBRARY ${LIBEDIT_LIBRARY} ${CURSES_LIBRARY})
++          SET(USE_NEW_READLINE_INTERFACE ${LIBEDIT_HAVE_COMPLETION_CHAR})
+         ELSE()
+           MYSQL_USE_BUNDLED_READLINE()
+         ENDIF()
diff --git a/user/mariadb/ppchax.patch b/user/mariadb/ppchax.patch
new file mode 100644
index 0000000000000000000000000000000000000000..26ffb5189fcffacd032b27632ded30a79b2499c2
--- /dev/null
+++ b/user/mariadb/ppchax.patch
@@ -0,0 +1,26 @@
+--- mariadb-10.4.6/configure.cmake.old	2019-06-17 22:00:31.000000000 +0000
++++ mariadb-10.4.6/configure.cmake	2019-07-06 23:21:57.705655766 +0000
+@@ -922,6 +922,10 @@
+   return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
+ }"
+ HAVE_GCC_C11_ATOMICS)
++IF(NOT HAVE_GCC_C11_ATOMICS AND CMAKE_SYSTEM_PROCESSOR MATCHES "ppc")
++  SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} atomic)
++  SET(HAVE_GCC_C11_ATOMICS 1)
++ENDIF()
+ 
+ IF(WITH_VALGRIND)
+   SET(HAVE_valgrind 1)
+--- mariadb-10.4.6/mysys/CMakeLists.txt.old	2019-06-17 22:00:32.000000000 +0000
++++ mariadb-10.4.6/mysys/CMakeLists.txt	2019-07-07 00:03:56.956394100 +0000
+@@ -91,6 +91,10 @@
+   TARGET_LINK_LIBRARIES(mysys pthread)
+ ENDIF()
+ 
++IF(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc")
++  TARGET_LINK_LIBRARIES(mysys atomic)
++ENDIF()
++
+ ADD_EXECUTABLE(thr_lock thr_lock.c)
+ TARGET_LINK_LIBRARIES(thr_lock mysys)
+ SET_TARGET_PROPERTIES(thr_lock PROPERTIES COMPILE_FLAGS "-DMAIN")