mariadb: new package

MariaDB is a drop-in replacement for MySQL. This commit adds a current
and stable version of MariaDB to the tree.

Quite a few ideas/patches were copied from Alpine Linux, Busybox Buildroot
and Debian.

Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
This commit is contained in:
Sebastian Kemper 2018-04-09 20:35:47 +02:00
parent aacb04dc3f
commit 1b73f267ea
11 changed files with 1165 additions and 0 deletions

542
utils/mariadb/Makefile Normal file
View File

@ -0,0 +1,542 @@
#
# Copyright (C) 2018 Sebastian Kemper <sebastian_ml@gmx.net>
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=mariadb
PKG_VERSION:=10.1.32
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://downloads.mariadb.org/interstitial/$(PKG_NAME)-$(PKG_VERSION)/source
PKG_HASH:=0e2aae6a6a190d07c8e36e87dd43377057fa82651ca3c583462563f3e9369096
PKG_MAINTAINER:=Sebastian Kemper <sebastian_ml@gmx.net>
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
HOST_BUILD_PARALLEL:=1
PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0
HOST_BUILD_DEPENDS:=libxml2/host
PKG_BUILD_DEPENDS:=mariadb/host
CMAKE_INSTALL:=1
PLUGIN_DIR:=/usr/lib/mysql/plugin
MARIADB_COMMON_DEPENDS := \
+libatomic \
+libopenssl \
+libstdcpp \
+zlib
MARIADB_SERVER_PLUGINS := \
adt_null \
auth_0x0100 \
auth_ed25519 \
auth_socket \
auth_test_plugin \
client_ed25519 \
debug_key_management \
dialog_examples \
disks \
example_key_management \
feedback \
file_key_management \
ha_archive \
ha_blackhole \
ha_connect \
ha_example \
ha_federated \
ha_federatedx \
ha_innodb \
ha_spider \
ha_test_sql_discovery \
handlersocket \
libdaemon_example \
locales \
metadata_lock_info \
mypluglib \
qa_auth_client \
qa_auth_interface \
qa_auth_server \
query_cache_info \
query_response_time \
semisync_master \
semisync_slave \
server_audit \
simple_password_check \
sql_errlog \
wsrep_info
PKG_CONFIG_DEPENDS := \
$(patsubst %,CONFIG_PACKAGE_$(PKG_NAME)-server-plugin-%,$(subst _,-,$(MARIADB_SERVER_PLUGINS))) \
CONFIG_PACKAGE_mariadb-server
plugin-adt_null := PLUGIN_AUDIT_NULL
plugin-auth_0x0100 := PLUGIN_AUTH_0X0100
plugin-auth_ed25519 := PLUGIN_AUTH_ED25519
plugin-auth_socket := PLUGIN_AUTH_SOCKET
plugin-auth_test_plugin := PLUGIN_AUTH_TEST_PLUGIN
plugin-client_ed25519 := PLUGIN_CLIENT_ED25519
plugin-debug_key_management := PLUGIN_DEBUG_KEY_MANAGEMENT
plugin-dialog_examples := PLUGIN_DIALOG_EXAMPLES
plugin-disks := PLUGIN_DISKS
plugin-example_key_management := PLUGIN_EXAMPLE_KEY_MANAGEMENT
plugin-feedback := PLUGIN_FEEDBACK
plugin-file_key_management := PLUGIN_FILE_KEY_MANAGEMENT
plugin-ha_archive := PLUGIN_ARCHIVE
plugin-ha_blackhole := PLUGIN_BLACKHOLE
plugin-ha_connect := PLUGIN_CONNECT
plugin-ha_example := PLUGIN_EXAMPLE
plugin-ha_federated := PLUGIN_FEDERATED
plugin-ha_federatedx := PLUGIN_FEDERATEDX
plugin-ha_innodb := PLUGIN_INNOBASE
plugin-ha_spider := PLUGIN_SPIDER
plugin-ha_test_sql_discovery := PLUGIN_TEST_SQL_DISCOVERY
plugin-handlersocket := PLUGIN_HANDLERSOCKET
plugin-libdaemon_example := PLUGIN_DAEMON_EXAMPLE
plugin-locales := PLUGIN_LOCALES
plugin-metadata_lock_info := PLUGIN_METADATA_LOCK_INFO
plugin-mypluglib := PLUGIN_FTEXAMPLE
plugin-qa_auth_client := PLUGIN_QA_AUTH_CLIENT
plugin-qa_auth_interface := PLUGIN_QA_AUTH_INTERFACE
plugin-qa_auth_server := PLUGIN_QA_AUTH_SERVER
plugin-query_cache_info := PLUGIN_QUERY_CACHE_INFO
plugin-query_response_time := PLUGIN_QUERY_RESPONSE_TIME
plugin-semisync_master := PLUGIN_SEMISYNC_MASTER
plugin-semisync_slave := PLUGIN_SEMISYNC_SLAVE
plugin-server_audit := PLUGIN_SERVER_AUDIT
plugin-simple_password_check := PLUGIN_SIMPLE_PASSWORD_CHECK
plugin-sql_errlog := PLUGIN_SQL_ERRLOG
plugin-wsrep_info := PLUGIN_WSREP_INFO
MARIADB_CLIENT := \
mysql \
mysqlcheck
MARIADB_CLIENT_EXTRA := \
mysql_find_rows \
mysql_waitpid \
mysqlaccess \
mysqladmin \
mysqldump \
mysqlimport \
mysqlshow \
mysqlslap \
mytop
MARIADB_SERVER := \
innochecksum \
my_print_defaults \
mysql_install_db \
mysql_upgrade \
mysqld
MARIADB_SERVER_EXTRA := \
aria* \
mariabackup \
msql2mysql \
myisam_ftdump \
myisamchk \
myisamlog \
myisampack \
mysql_convert_table_format \
mysql_fix_extensions \
mysql_plugin \
mysql_secure_installation \
mysql_setpermission \
mysql_tzinfo_to_sql \
mysqlbinlog \
mysqld_multi \
mysqld_safe \
mysqld_safe_helper \
mysqldumpslow \
mysqlhotcopy \
perror \
replace \
resolve_stack_dump
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/cmake.mk
define Package/mariadb/install/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/$(2) $(1)/usr/bin
endef
define Package/mariadb/description/Default
MariaDB is a fast, stable and true multi-user, multi-threaded SQL
database server. SQL (Structured Query Language) is the most popular
database query language in the world. The main goals of MariaDB are
speed, robustness and ease of use.
endef
define Package/libmariadbclient
SECTION:=libs
CATEGORY:=Libraries
DEPENDS:=$(MARIADB_COMMON_DEPENDS)
TITLE:=MariaDB database client library
URL:=https://mariadb.org/
PROVIDES:=libmysqlclient libmysqlclient-r
endef
define Package/libmariadbclient/description
$(call Package/mariadb/description/Default)
This package includes the client library.
endef
define Package/mariadb/Default
SECTION:=utils
CATEGORY:=Utilities
URL:=https://mariadb.org/
SUBMENU:=database
endef
define Package/mariadb-client
$(call Package/mariadb/Default)
TITLE:=MariaDB database core client binaries
DEPENDS:= \
$(MARIADB_COMMON_DEPENDS) \
+libncursesw
endef
define Package/mariadb-client/description
$(call Package/mariadb/description/Default)
This package includes the following core client binaries:
$(subst $(space),$(newline),$(MARIADB_CLIENT))
endef
define Package/mariadb-client-extra
$(call Package/mariadb/Default)
TITLE:=MariaDB database extra client binaries
DEPENDS:=mariadb-client
endef
define Package/mariadb-client-extra/description
$(call Package/mariadb/description/Default)
This package includes the following extra client binaries:
$(subst $(space),$(newline),$(MARIADB_CLIENT_EXTRA))
endef
define Package/mariadb-extra-charsets
$(call Package/mariadb/Default)
TITLE:=MariaDB database extra character sets
DEPENDS:=mariadb-server
endef
define Package/mariadb-extra-charsets/description
$(call Package/mariadb/description/Default)
The MariaDB server packaged by OpenWrt only provides support for UTF-8.
This package contains single Byte character sets and collations that can
be added at run time.
endef
define Package/mariadb-server
$(call Package/mariadb/Default)
DEPENDS:= \
$(MARIADB_COMMON_DEPENDS) \
+!arc:libaio \
+liblzma \
+libpcre \
+resolveip
TITLE:=MariaDB database core server binaries
MENU:=1
PROVIDES:=mysql-server
endef
define Package/mariadb-server/description
$(call Package/mariadb/description/Default)
This package includes the following core server binaries:
$(subst $(space),$(newline),$(MARIADB_SERVER))
endef
define Package/mariadb-server-extra
$(call Package/mariadb/Default)
TITLE:=MariaDB database extra server binaries
DEPENDS:=mariadb-server
endef
define Package/mariadb-server-extra/description
$(call Package/mariadb/description/Default)
This package includes the following extra server binaries:
$(subst $(space),$(newline),$(MARIADB_SERVER_EXTRA))
endef
# We won't need unit tests
CMAKE_OPTIONS += -DWITH_UNIT_TESTS=0
# This value is determined automatically during straight compile by compiling
# and running a test code. You cannot do that during cross-compile. However the
# stack grows downward in most if not all modern systems. The only exception
# according to buildroot is PA-RISC which is not supported by OpenWrt as far as
# I know. Therefore it makes sense to hardcode the value. If an arch is added
# the stack of which grows up one should expect unpredictable behavior at run
# time.
CMAKE_OPTIONS += -DSTACK_DIRECTION=-1
# Jemalloc was added for TokuDB. Since its configure script seems somewhat broken
# when it comes to cross-compilation we shall disable it and also disable TokuDB.
CMAKE_OPTIONS += -DWITH_JEMALLOC=no -DWITHOUT_TOKUDB=1
# Make it explicit that we are cross-compiling
CMAKE_OPTIONS += -DCMAKE_CROSSCOMPILING=1
# Explicitly disable dtrace to avoid detection of a host version
CMAKE_OPTIONS += -DENABLE_DTRACE=0
# Prevent mariadb from messing with OpenWrt's C(XX)FLAGS
CMAKE_OPTIONS += -DSECURITY_HARDENED=OFF
ifeq ($(CONFIG_PACKAGE_mariadb-server),)
CMAKE_OPTIONS += -DWITHOUT_SERVER=ON
else
CMAKE_OPTIONS += -DWITHOUT_SERVER=OFF
endif
CMAKE_OPTIONS += \
-DCONNECT_WITH_JDBC=NO \
-DCONNECT_WITH_LIBXML2=system \
-DCONNECT_WITH_ODBC=NO \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DDISABLE_SHARED=NO \
-DENABLED_PROFILING=OFF \
-DENABLE_STATIC_LIBS=OFF \
-DINSTALL_DOCDIR=share/doc/mariadb \
-DINSTALL_DOCREADMEDIR=share/doc/mariadb \
-DINSTALL_MANDIR=share/man \
-DINSTALL_MYSQLSHAREDIR=share/mysql \
-DINSTALL_MYSQLTESTDIR="" \
-DINSTALL_PLUGINDIR=lib/mysql/plugin \
-DINSTALL_SBINDIR=bin \
-DINSTALL_SCRIPTDIR=bin \
-DINSTALL_SQLBENCHDIR="" \
-DINSTALL_SUPPORTFILESDIR=share/mysql \
-DMYSQLD_USER=root \
-DMYSQL_DATADIR=/var/lib/mysql \
-DMYSQL_UNIX_ADDR=/var/run/mysqld.sock \
-DSKIP_TESTS=ON \
-DWITH_ASAN=OFF \
-DWITH_EMBEDDED_SERVER=OFF \
-DWITH_EXTRA_CHARSETS=none \
-DWITH_INNODB_BZIP2=OFF \
-DWITH_INNODB_LZ4=OFF \
-DWITH_INNODB_LZMA=ON \
-DWITH_INNODB_LZO=OFF \
-DWITH_INNODB_SNAPPY=OFF \
-DWITH_LIBEDIT=OFF \
-DWITH_LIBNUMA=NO \
-DWITH_LIBWRAP=OFF \
-DWITH_LIBWSEP=OFF \
-DWITH_MARIABACKUP=ON \
-DWITH_PCRE=system \
-DWITH_READLINE=OFF \
-DWITH_SAFEMALLOC=OFF \
-DWITH_SSL=system \
-DWITH_SYSTEMD=no \
-DWITH_VALGRIND=OFF \
-DWITH_ZLIB=system
# Default-disable some modules
CMAKE_OPTIONS += \
-DPLUGIN_CASSANDRA=NO \
-DPLUGIN_MROONGA=NO \
-DPLUGIN_OQGRAPH=NO \
-DPLUGIN_ROCKSDB=NO \
-DPLUGIN_SPHINX=NO \
-DPLUGIN_TOKUDB=NO \
-DPLUGIN_AUTH_PAM=NO \
-DPLUGIN_AUTH_GSSAPI=NO \
-DPLUGIN_AUTH_GSSAPI_CLIENT=NO \
-DPLUGIN_CRACKLIB_PASSWORD_CHECK=NO
CMAKE_OPTIONS += \
$(foreach p,$(MARIADB_SERVER_PLUGINS),-D$(plugin-$(p))=$(if $(CONFIG_PACKAGE_$(PKG_NAME)-server-plugin-$(subst _,-,$(p))),DYNAMIC,NO))
# Set CMAKE_FIND_ROOT_PATH_MODE_INCLUDE and CMAKE_FIND_ROOT_PATH_MODE_LIBRARY
# to BOTH as otherwise the host build will not find some required dependencies
# installed on the host machine, like ncurses.
#
# Add "$(STAGING_DIR_HOSTPKG)/lib" to the RPATH of the host helpers,
# otherwise they might not find the location of a library at run time.
CMAKE_HOST_OPTIONS += \
-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE \
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH \
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH \
-DCMAKE_INSTALL_RPATH="$(STAGING_DIR_HOSTPKG)/lib" \
-DCMAKE_SKIP_RPATH=FALSE \
-DWITHOUT_SERVER=OFF \
-DWITHOUT_TOKUDB=1
# Some helpers must be compiled for host in order to crosscompile mariadb for
# the target. They are then included by import_executables.cmake which is
# generated during the build of the host helpers. It is not necessary to build
# the whole host package, only the "import_executables" target.
# -DIMPORT_EXECUTABLES=$(HOST_BUILD_DIR)/import_executables.cmake
# must then be passed to cmake during target build.
# see also https://mariadb.com/kb/en/mariadb/cross-compiling-mariadb/
CMAKE_OPTIONS += -DIMPORT_EXECUTABLES=$(STAGING_DIR_HOSTPKG)/share/mariadb/import_executables.cmake
define Host/Compile
$(call Host/Compile/Default,import_executables)
endef
define Host/Install
$(SED) 's|$(HOST_BUILD_DIR)|$(STAGING_DIR_HOSTPKG)/share/mariadb|' $(HOST_BUILD_DIR)/import_executables.cmake
$(INSTALL_DIR) $(1)/share/mariadb/{dbug,extra,scripts,sql}
$(INSTALL_BIN) $(HOST_BUILD_DIR)/dbug/factorial $(1)/share/mariadb/dbug
$(INSTALL_BIN) $(HOST_BUILD_DIR)/extra/comp_err $(1)/share/mariadb/extra
$(INSTALL_BIN) $(HOST_BUILD_DIR)/scripts/comp_sql $(1)/share/mariadb/scripts
$(INSTALL_BIN) $(HOST_BUILD_DIR)/sql/{gen_lex_hash,gen_lex_token} $(1)/share/mariadb/sql
$(INSTALL_DATA) $(HOST_BUILD_DIR)/import_executables.cmake $(1)/share/mariadb
endef
define Build/InstallDev
$(INSTALL_DIR) $(2)/bin $(1)/usr/bin $(1)/usr/include $(1)/usr/lib/pkgconfig $(1)/usr/share/aclocal
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mysql_config $(1)/usr/bin/
$(LN) $(STAGING_DIR)/usr/bin/mysql_config $(2)/bin/
$(CP) $(PKG_INSTALL_DIR)/usr/include/mysql $(1)/usr/include/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libmysqlclient*.so* $(1)/usr/lib/
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/pkgconfig/mariadb.pc $(1)/usr/lib/pkgconfig
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/aclocal/mysql.m4 $(1)/usr/share/aclocal
endef
define Package/libmariadbclient/install
$(INSTALL_DIR) $(1)$(PLUGIN_DIR)
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libmysqlclient*.so* $(1)/usr/lib/
$(INSTALL_BIN) $(PKG_INSTALL_DIR)$(PLUGIN_DIR)/dialog.so $(1)$(PLUGIN_DIR)
$(INSTALL_BIN) $(PKG_INSTALL_DIR)$(PLUGIN_DIR)/mysql_clear_password.so $(1)$(PLUGIN_DIR)
endef
define Package/mariadb-client/install
$(INSTALL_DIR) $(1)/usr/bin
$(foreach b,$(MARIADB_CLIENT),$(call Package/mariadb/install/bin,$(1),$(b));)
endef
define Package/mariadb-client-extra/install
$(INSTALL_DIR) $(1)/usr/bin
$(foreach b,$(MARIADB_CLIENT_EXTRA),$(call Package/mariadb/install/bin,$(1),$(b));)
endef
define Package/mariadb-extra-charsets/install
$(INSTALL_DIR) $(1)/usr/share/mysql/charsets
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/charsets/* $(1)/usr/share/mysql/charsets
endef
define Package/mariadb-server/install
$(INSTALL_DIR) $(1)/usr/bin
$(foreach b,$(MARIADB_SERVER),$(call Package/mariadb/install/bin,$(1),$(b));)
$(INSTALL_DIR) $(1)/etc/init.d/
$(INSTALL_DIR) $(1)/etc/mysql
$(INSTALL_BIN) files/mysqld.init $(1)/etc/init.d/mysqld
$(INSTALL_CONF) conf/my.cnf $(1)/etc/mysql
$(INSTALL_DIR) $(1)$(PLUGIN_DIR)
$(INSTALL_CONF) $(PKG_INSTALL_DIR)$(PLUGIN_DIR)/daemon_example.ini $(1)$(PLUGIN_DIR)
$(INSTALL_DIR) $(1)/usr/share/mysql/english
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/english/errmsg.sys $(1)/usr/share/mysql/english
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/fill_help_tables.sql $(1)/usr/share/mysql/
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/maria_add_gis_sp_bootstrap.sql $(1)/usr/share/mysql/
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/mysql_performance_tables.sql $(1)/usr/share/mysql/
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/mysql_system_tables.sql $(1)/usr/share/mysql/
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/mysql_system_tables_data.sql $(1)/usr/share/mysql/
endef
define Package/mariadb-server-extra/install
$(INSTALL_DIR) $(1)/usr/bin
$(foreach b,$(MARIADB_SERVER_EXTRA),$(call Package/mariadb/install/bin,$(1),$(b));)
endef
define Package/mariadb-server/conffiles
/etc/mysql/my.cnf
/usr/lib/mysql/plugin/daemon_example.ini
endef
define BuildPlugin
define Package/$(PKG_NAME)-server-plugin-$(subst _,-,$(1))
$$(call Package/mariadb/Default)
TITLE:=MariaDB database plugin
DEPENDS:=mariadb-server $(patsubst +%,+PACKAGE_$(PKG_NAME)-server-plugin-$(subst _,-,$(1)):%,$(2))
endef
define Package/$(PKG_NAME)-server-plugin-$(subst _,-,$(1))/description
$$(call Package/mariadb/description/Default)
This package provides the $(1) plugin.
endef
define Package/$(PKG_NAME)-server-plugin-$(subst _,-,$(1))/install
$(INSTALL_DIR) $$(1)$(PLUGIN_DIR)
$(INSTALL_BIN) \
$(PKG_INSTALL_DIR)$(PLUGIN_DIR)/$(1).so \
$$(1)$(PLUGIN_DIR)
endef
$$(eval $$(call BuildPackage,$(PKG_NAME)-server-plugin-$(subst _,-,$(1))))
endef
$(eval $(call HostBuild))
$(eval $(call BuildPackage,libmariadbclient))
$(eval $(call BuildPackage,mariadb-client))
$(eval $(call BuildPackage,mariadb-client-extra))
$(eval $(call BuildPackage,mariadb-extra-charsets))
$(eval $(call BuildPackage,mariadb-server))
$(eval $(call BuildPackage,mariadb-server-extra))
$(eval $(call BuildPlugin,adt_null,))
$(eval $(call BuildPlugin,auth_0x0100,))
$(eval $(call BuildPlugin,auth_ed25519,))
$(eval $(call BuildPlugin,auth_socket,))
$(eval $(call BuildPlugin,auth_test_plugin,))
$(eval $(call BuildPlugin,client_ed25519,))
$(eval $(call BuildPlugin,debug_key_management,))
$(eval $(call BuildPlugin,dialog_examples,))
$(eval $(call BuildPlugin,disks,))
$(eval $(call BuildPlugin,example_key_management,))
$(eval $(call BuildPlugin,feedback,))
$(eval $(call BuildPlugin,file_key_management,))
$(eval $(call BuildPlugin,ha_archive,))
$(eval $(call BuildPlugin,ha_blackhole,))
$(eval $(call BuildPlugin,ha_connect,+libxml2))
$(eval $(call BuildPlugin,ha_federated,))
$(eval $(call BuildPlugin,ha_federatedx,))
$(eval $(call BuildPlugin,ha_innodb,))
$(eval $(call BuildPlugin,ha_spider,))
$(eval $(call BuildPlugin,ha_test_sql_discovery,))
$(eval $(call BuildPlugin,handlersocket,))
$(eval $(call BuildPlugin,libdaemon_example,))
$(eval $(call BuildPlugin,locales,))
$(eval $(call BuildPlugin,metadata_lock_info,))
$(eval $(call BuildPlugin,mypluglib,))
$(eval $(call BuildPlugin,qa_auth_client,))
$(eval $(call BuildPlugin,qa_auth_interface,))
$(eval $(call BuildPlugin,qa_auth_server,))
$(eval $(call BuildPlugin,query_cache_info,))
$(eval $(call BuildPlugin,query_response_time,))
$(eval $(call BuildPlugin,semisync_master,))
$(eval $(call BuildPlugin,semisync_slave,))
$(eval $(call BuildPlugin,server_audit,))
$(eval $(call BuildPlugin,simple_password_check,))
$(eval $(call BuildPlugin,sql_errlog,))
$(eval $(call BuildPlugin,wsrep_info,))

54
utils/mariadb/conf/my.cnf Normal file
View File

@ -0,0 +1,54 @@
[client]
port = 3306
socket = /var/run/mysqld.sock
[mysqld]
user = root
socket = /var/run/mysqld.sock
port = 3306
basedir = /usr
############ Don't put this on the NAND #############
# Figure out where you are going to put the databases
# And run mysql_install_db --force
datadir = /mnt/data/mysql/
######### This should also not go on the NAND #######
tmpdir = /mnt/data/tmp/
skip-external-locking
bind-address = 127.0.0.1
# Fine Tuning
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
# Here you can see queries with especially long duration
#log_slow_queries = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
# The following can be used as easy to replay backup logs or for replication.
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
#expire_logs_days = 10
#max_binlog_size = 100M
#binlog_do_db = include_database_name
#binlog_ignore_db = include_database_name
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
[isamchk]
key_buffer = 16M

View File

@ -0,0 +1,32 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2010-2011 OpenWrt.org
START=95
STOP=10
SERVICE_DAEMONIZE=1
SERVICE_WRITE_PID=1
SERVICE_STOP_TIME=9
PROG='/usr/bin/mysqld'
start() {
local conf='/etc/my.cnf'
local datadir="$( sed -nE "s/^\s*datadir\s*=\s*('([^']*)'|\x22([^\x22]*)\x22|(.*\S))\s*$/\2\3\4/p" "$conf" )"
[ -d "$datadir" ] || {
logger -s "[ERROR] datadir '$datadir' in '$conf' does not exist"
return 1
}
[ -f "$datadir/mysql/tables_priv.MYD" ] || {
logger -s "[ERROR] can not detect privileges table, you might need to"
logger -s "run 'mysql_install_db --force' to initialize the system tables"
return 1
}
service_start "$PROG"
}
stop() {
service_stop "$PROG"
}

View File

@ -0,0 +1,11 @@
--- a/scripts/mysql_install_db.sh
+++ b/scripts/mysql_install_db.sh
@@ -379,7 +379,7 @@ fi
# Try to determine the hostname
-hostname=`@HOSTNAME@`
+hostname=`cat /proc/sys/kernel/hostname`
# Check if hostname is valid
if test "$cross_bootstrap" -eq 0 -a "$in_rpm" -eq 0 -a "$force" -eq 0

View File

@ -0,0 +1,11 @@
--- a/cmake/pcre.cmake
+++ b/cmake/pcre.cmake
@@ -14,6 +14,8 @@ MACRO (CHECK_PCRE)
return -pcre_exec(NULL, NULL, NULL, -999, -999, 0, NULL, 0) < 256;
}" PCRE_STACK_SIZE_OK)
SET(CMAKE_REQUIRED_LIBRARIES)
+ ELSE()
+ SET(PCRE_STACK_SIZE_OK TRUE)
ENDIF()
ENDIF()
IF(NOT HAVE_PCRE_STACK_GUARD OR NOT PCRE_STACK_SIZE_OK OR

View File

@ -0,0 +1,18 @@
--- a/configure.cmake
+++ b/configure.cmake
@@ -1107,9 +1107,12 @@ SET(CMAKE_EXTRA_INCLUDE_FILES)
CHECK_STRUCT_HAS_MEMBER("struct dirent" d_ino "dirent.h" STRUCT_DIRENT_HAS_D_INO)
CHECK_STRUCT_HAS_MEMBER("struct dirent" d_namlen "dirent.h" STRUCT_DIRENT_HAS_D_NAMLEN)
SET(SPRINTF_RETURNS_INT 1)
-CHECK_INCLUDE_FILE(ucontext.h HAVE_UCONTEXT_H)
-IF(NOT HAVE_UCONTEXT_H)
- CHECK_INCLUDE_FILE(sys/ucontext.h HAVE_UCONTEXT_H)
+CHECK_INCLUDE_FILE(ucontext.h HAVE_UCONTEXT_HEADER)
+IF(NOT HAVE_UCONTEXT_HEADER)
+ CHECK_INCLUDE_FILE(sys/ucontext.h HAVE_UCONTEXT_HEADER)
+ENDIF()
+IF(HAVE_UCONTEXT_HEADER)
+ CHECK_FUNCTION_EXISTS(makecontext HAVE_UCONTEXT_H)
ENDIF()
IF(HAVE_UCONTEXT_H)
CHECK_FUNCTION_EXISTS(makecontext HAVE_UCONTEXT_H)

View File

@ -0,0 +1,121 @@
Description: Fix mips missing atomics primitives
On mips we don't have native support for 64bit atomic operations. Make use
of libatomic to emulate them.
Author: Vicențiu Ciorbaru <vicentiu@mariadb.org>
--- a/configure.cmake
+++ b/configure.cmake
@@ -128,7 +128,7 @@ IF(UNIX)
ENDIF()
FIND_PACKAGE(Threads)
- SET(CMAKE_REQUIRED_LIBRARIES
+ LIST(APPEND CMAKE_REQUIRED_LIBRARIES
${LIBM} ${LIBNSL} ${LIBBIND} ${LIBCRYPT} ${LIBSOCKET} ${LIBDL} ${CMAKE_THREAD_LIBS_INIT} ${LIBRT} ${LIBEXECINFO})
# Need explicit pthread for gcc -fsanitize=address
IF(CMAKE_USE_PTHREADS_INIT AND CMAKE_C_FLAGS MATCHES "-fsanitize=")
@@ -1038,7 +1038,26 @@ ELSEIF(NOT WITH_ATOMIC_OPS)
long long int *ptr= &var;
return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
}"
- HAVE_GCC_C11_ATOMICS)
+ HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
+ IF(HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
+ SET(HAVE_GCC_C11_ATOMICS True)
+ ELSE()
+ SET(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+ LIST(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
+ CHECK_CXX_SOURCE_COMPILES("
+ int main()
+ {
+ long long int var= 1;
+ long long int *ptr= &var;
+ return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
+ }"
+ HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
+ IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
+ SET(HAVE_GCC_C11_ATOMICS True)
+ ELSE()
+ SET(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES})
+ ENDIF()
+ ENDIF()
ELSE()
MESSAGE(FATAL_ERROR "${WITH_ATOMIC_OPS} is not a valid value for WITH_ATOMIC_OPS!")
ENDIF()
--- a/include/atomic/gcc_builtins.h
+++ b/include/atomic/gcc_builtins.h
@@ -16,6 +16,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#if defined (HAVE_GCC_ATOMIC_BUILTINS)
#define make_atomic_add_body(S) \
v= __sync_fetch_and_add(a, v);
#define make_atomic_fas_body(S) \
@@ -26,6 +27,20 @@
sav= __sync_val_compare_and_swap(a, cmp_val, set);\
if (!(ret= (sav == cmp_val))) *cmp= sav
+#elif defined(HAVE_GCC_C11_ATOMICS)
+
+#define make_atomic_add_body(S) \
+ v= __atomic_fetch_add(a, v, __ATOMIC_SEQ_CST)
+#define make_atomic_fas_body(S) \
+ v= __atomic_exchange_n(a, v, __ATOMIC_SEQ_CST)
+#define make_atomic_cas_body(S) \
+ int ## S sav; \
+ ret= __atomic_compare_exchange_n(a, cmp, set, \
+ 0, \
+ __ATOMIC_SEQ_CST,\
+ __ATOMIC_SEQ_CST);
+#endif
+
#ifdef MY_ATOMIC_MODE_DUMMY
#define make_atomic_load_body(S) ret= *a
#define make_atomic_store_body(S) *a= v
--- a/include/atomic/nolock.h
+++ b/include/atomic/nolock.h
@@ -17,7 +17,7 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#if defined(__i386__) || defined(_MSC_VER) || defined(__x86_64__) \
- || defined(HAVE_GCC_ATOMIC_BUILTINS) \
+ || defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_C11_ATOMICS) \
|| defined(HAVE_SOLARIS_ATOMIC)
# ifdef MY_ATOMIC_MODE_DUMMY
@@ -41,7 +41,7 @@
# elif __GNUC__
# if defined(HAVE_SOLARIS_ATOMIC)
# include "solaris.h"
-# elif defined(HAVE_GCC_ATOMIC_BUILTINS)
+# elif defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_C11_ATOMICS)
# include "gcc_builtins.h"
# elif defined(__i386__) || defined(__x86_64__)
# include "x86-gcc.h"
--- a/mysys/CMakeLists.txt
+++ b/mysys/CMakeLists.txt
@@ -78,6 +78,10 @@ IF(HAVE_BFD_H)
TARGET_LINK_LIBRARIES(mysys bfd)
ENDIF(HAVE_BFD_H)
+IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
+ TARGET_LINK_LIBRARIES(mysys atomic)
+ENDIF()
+
IF (WIN32)
TARGET_LINK_LIBRARIES(mysys IPHLPAPI)
ENDIF(WIN32)
--- a/sql/CMakeLists.txt
+++ b/sql/CMakeLists.txt
@@ -165,6 +165,10 @@ TARGET_LINK_LIBRARIES(sql ${MYSQLD_STATI
${SSL_LIBRARIES}
${LIBSYSTEMD})
+IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
+ TARGET_LINK_LIBRARIES(sql atomic)
+ENDIF()
+
IF(WIN32)
SET(MYSQLD_SOURCE main.cc nt_servc.cc message.rc)
TARGET_LINK_LIBRARIES(sql psapi)

View File

@ -0,0 +1,262 @@
Description: Handle unaligned buffers in connect's TYPBLK class
On MIPS platforms (and probably others) unaligned memory access results in a
bus error. In the connect storage engine, block data for some data formats is
stored packed in memory and the TYPBLK class is used to read values from it.
Since TYPBLK does not have special handling for this packed memory, it can
quite easily result in unaligned memory accesses.
.
The simple way to fix this is to perform all accesses to the main buffer
through memcpy. With GCC and optimizations turned on, this call to memcpy is
completely optimized away on architectures where unaligned accesses are ok
(like x86).
Author: James Cowgill <jcowgill@debian.org>
---
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
--- a/storage/connect/valblk.h
+++ b/storage/connect/valblk.h
@@ -139,6 +139,7 @@ class VALBLK : public BLOCK {
int Prec; // Precision of float values
}; // end of class VALBLK
+
/***********************************************************************/
/* Class TYPBLK: represents a block of typed values. */
/***********************************************************************/
@@ -151,40 +152,41 @@ class TYPBLK : public VALBLK {
// Implementation
virtual bool Init(PGLOBAL g, bool check);
virtual int GetVlen(void) {return sizeof(TYPE);}
- virtual char GetTinyValue(int n) {return (char)Typp[n];}
- virtual uchar GetUTinyValue(int n) {return (uchar)Typp[n];}
- virtual short GetShortValue(int n) {return (short)Typp[n];}
- virtual ushort GetUShortValue(int n) {return (ushort)Typp[n];}
- virtual int GetIntValue(int n) {return (int)Typp[n];}
- virtual uint GetUIntValue(int n) {return (uint)Typp[n];}
- virtual longlong GetBigintValue(int n) {return (longlong)Typp[n];}
- virtual ulonglong GetUBigintValue(int n) {return (ulonglong)Typp[n];}
- virtual double GetFloatValue(int n) {return (double)Typp[n];}
+
+ virtual char GetTinyValue(int n) {return (char)UnalignedRead(n);}
+ virtual uchar GetUTinyValue(int n) {return (uchar)UnalignedRead(n);}
+ virtual short GetShortValue(int n) {return (short)UnalignedRead(n);}
+ virtual ushort GetUShortValue(int n) {return (ushort)UnalignedRead(n);}
+ virtual int GetIntValue(int n) {return (int)UnalignedRead(n);}
+ virtual uint GetUIntValue(int n) {return (uint)UnalignedRead(n);}
+ virtual longlong GetBigintValue(int n) {return (longlong)UnalignedRead(n);}
+ virtual ulonglong GetUBigintValue(int n) {return (ulonglong)UnalignedRead(n);}
+ virtual double GetFloatValue(int n) {return (double)UnalignedRead(n);}
virtual char *GetCharString(char *p, int n);
- virtual void Reset(int n) {Typp[n] = 0;}
+ virtual void Reset(int n) {UnalignedWrite(n, 0);}
// Methods
using VALBLK::SetValue;
virtual void SetValue(PCSZ sp, int n);
virtual void SetValue(const char *sp, uint len, int n);
virtual void SetValue(short sval, int n)
- {Typp[n] = (TYPE)sval; SetNull(n, false);}
+ {UnalignedWrite(n, (TYPE)sval); SetNull(n, false);}
virtual void SetValue(ushort sval, int n)
- {Typp[n] = (TYPE)sval; SetNull(n, false);}
+ {UnalignedWrite(n, (TYPE)sval); SetNull(n, false);}
virtual void SetValue(int lval, int n)
- {Typp[n] = (TYPE)lval; SetNull(n, false);}
+ {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);}
virtual void SetValue(uint lval, int n)
- {Typp[n] = (TYPE)lval; SetNull(n, false);}
+ {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);}
virtual void SetValue(longlong lval, int n)
- {Typp[n] = (TYPE)lval; SetNull(n, false);}
+ {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);}
virtual void SetValue(ulonglong lval, int n)
- {Typp[n] = (TYPE)lval; SetNull(n, false);}
+ {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);}
virtual void SetValue(double fval, int n)
- {Typp[n] = (TYPE)fval; SetNull(n, false);}
+ {UnalignedWrite(n, (TYPE)fval); SetNull(n, false);}
virtual void SetValue(char cval, int n)
- {Typp[n] = (TYPE)cval; SetNull(n, false);}
+ {UnalignedWrite(n, (TYPE)cval); SetNull(n, false);}
virtual void SetValue(uchar cval, int n)
- {Typp[n] = (TYPE)cval; SetNull(n, false);}
+ {UnalignedWrite(n, (TYPE)cval); SetNull(n, false);}
virtual void SetValue(PVAL valp, int n);
virtual void SetValue(PVBLK pv, int n1, int n2);
virtual void SetMin(PVAL valp, int n);
@@ -206,6 +208,17 @@ class TYPBLK : public VALBLK {
// Members
TYPE* const &Typp;
const char *Fmt;
+
+ // Unaligned access
+ TYPE UnalignedRead(int n) const {
+ TYPE result;
+ memcpy(&result, Typp + n, sizeof(TYPE));
+ return result;
+ }
+
+ void UnalignedWrite(int n, TYPE value) {
+ memcpy(Typp + n, &value, sizeof(TYPE));
+ }
}; // end of class TYPBLK
/***********************************************************************/
--- a/storage/connect/valblk.cpp
+++ b/storage/connect/valblk.cpp
@@ -266,14 +266,14 @@ bool TYPBLK<TYPE>::Init(PGLOBAL g, bool
template <class TYPE>
char *TYPBLK<TYPE>::GetCharString(char *p, int n)
{
- sprintf(p, Fmt, Typp[n]);
+ sprintf(p, Fmt, UnalignedRead(n));
return p;
} // end of GetCharString
template <>
char *TYPBLK<double>::GetCharString(char *p, int n)
{
- sprintf(p, Fmt, Prec, Typp[n]);
+ sprintf(p, Fmt, Prec, UnalignedRead(n));
return p;
} // end of GetCharString
@@ -289,7 +289,7 @@ void TYPBLK<TYPE>::SetValue(PVAL valp, i
ChkTyp(valp);
if (!(b = valp->IsNull()))
- Typp[n] = GetTypedValue(valp);
+ UnalignedWrite(n, GetTypedValue(valp));
else
Reset(n);
@@ -351,9 +351,9 @@ void TYPBLK<TYPE>::SetValue(PCSZ p, int
ulonglong val = CharToNumber(p, strlen(p), maxval, Unsigned, &minus);
if (minus && val < maxval)
- Typp[n] = (TYPE)(-(signed)val);
+ UnalignedWrite(n, (TYPE)(-(signed)val));
else
- Typp[n] = (TYPE)val;
+ UnalignedWrite(n, (TYPE)val);
SetNull(n, false);
} // end of SetValue
@@ -396,7 +396,7 @@ void TYPBLK<double>::SetValue(PCSZ p, in
throw Type;
} // endif Check
- Typp[n] = atof(p);
+ UnalignedWrite(n, atof(p));
SetNull(n, false);
} // end of SetValue
@@ -428,7 +428,7 @@ void TYPBLK<TYPE>::SetValue(PVBLK pv, in
ChkTyp(pv);
if (!(b = pv->IsNull(n2) && Nullable))
- Typp[n1] = GetTypedValue(pv, n2);
+ UnalignedWrite(n1, GetTypedValue(pv, n2));
else
Reset(n1);
@@ -479,10 +479,10 @@ void TYPBLK<TYPE>::SetMin(PVAL valp, int
{
CheckParms(valp, n)
TYPE tval = GetTypedValue(valp);
- TYPE& tmin = Typp[n];
+ TYPE tmin = UnalignedRead(n);
if (tval < tmin)
- tmin = tval;
+ UnalignedWrite(n, tval);
} // end of SetMin
@@ -494,10 +494,10 @@ void TYPBLK<TYPE>::SetMax(PVAL valp, int
{
CheckParms(valp, n)
TYPE tval = GetTypedValue(valp);
- TYPE& tmin = Typp[n];
+ TYPE tmin = UnalignedRead(n);
if (tval > tmin)
- tmin = tval;
+ UnalignedWrite(n, tval);
} // end of SetMax
@@ -511,8 +511,7 @@ void TYPBLK<TYPE>::SetValues(PVBLK pv, i
CheckType(pv)
TYPE *lp = ((TYPBLK*)pv)->Typp;
- for (register int i = k; i < n; i++) // TODO
- Typp[i] = lp[i];
+ memcpy(Typp + k, lp + k, sizeof(TYPE) * n);
} // end of SetValues
#endif // 0
@@ -523,7 +522,7 @@ void TYPBLK<TYPE>::SetValues(PVBLK pv, i
template <class TYPE>
void TYPBLK<TYPE>::Move(int i, int j)
{
- Typp[j] = Typp[i];
+ UnalignedWrite(j, UnalignedRead(i));
MoveNull(i, j);
} // end of Move
@@ -537,7 +536,7 @@ int TYPBLK<TYPE>::CompVal(PVAL vp, int n
ChkIndx(n);
ChkTyp(vp);
#endif // _DEBUG
- TYPE mlv = Typp[n];
+ TYPE mlv = UnalignedRead(n);
TYPE vlv = GetTypedValue(vp);
return (vlv > mlv) ? 1 : (vlv < mlv) ? (-1) : 0;
@@ -549,8 +548,8 @@ int TYPBLK<TYPE>::CompVal(PVAL vp, int n
template <class TYPE>
int TYPBLK<TYPE>::CompVal(int i1, int i2)
{
- TYPE lv1 = Typp[i1];
- TYPE lv2 = Typp[i2];
+ TYPE lv1 = UnalignedRead(i1);
+ TYPE lv2 = UnalignedRead(i2);
return (lv1 > lv2) ? 1 : (lv1 < lv2) ? (-1) : 0;
} // end of CompVal
@@ -587,7 +586,7 @@ int TYPBLK<TYPE>::Find(PVAL vp)
TYPE n = GetTypedValue(vp);
for (i = 0; i < Nval; i++)
- if (n == Typp[i])
+ if (n == UnalignedRead(i))
break;
return (i < Nval) ? i : (-1);
@@ -603,7 +602,7 @@ int TYPBLK<TYPE>::GetMaxLength(void)
int i, n, m;
for (i = n = 0; i < Nval; i++) {
- m = sprintf(buf, Fmt, Typp[i]);
+ m = sprintf(buf, Fmt, UnalignedRead(i));
n = MY_MAX(n, m);
} // endfor i
@@ -1333,7 +1332,7 @@ char *DATBLK::GetCharString(char *p, int
char *vp;
if (Dvalp) {
- Dvalp->SetValue(Typp[n]);
+ Dvalp->SetValue(UnalignedRead(n));
vp = Dvalp->GetCharString(p);
} else
vp = TYPBLK<int>::GetCharString(p, n);
@@ -1349,7 +1348,7 @@ void DATBLK::SetValue(PCSZ p, int n)
if (Dvalp) {
// Decode the string according to format
Dvalp->SetValue_psz(p);
- Typp[n] = Dvalp->GetIntValue();
+ UnalignedWrite(n, Dvalp->GetIntValue());
} else
TYPBLK<int>::SetValue(p, n);

View File

@ -0,0 +1,14 @@
Author: James Cowgill <jcowgill@debian.org>
Description: fix FTBFS on 32-bit mips*
Bug-Debian: #864298
--- a/storage/innobase/include/os0sync.h
+++ b/storage/innobase/include/os0sync.h
@@ -37,6 +37,7 @@ Created 9/6/1995 Heikki Tuuri
#include "univ.i"
#include "ut0lst.h"
+#include "sync0types.h"
/** CPU cache line size */
#ifdef __powerpc__

View File

@ -0,0 +1,25 @@
Description: Fix DEFAULT_MACHINE on mips
The DEFAULT_MACHINE constant is calculated from the CMAKE_SYSTEM_PROCESSOR
variable which contains the processor which built mariadb. Since most Debian
buildds run on 64-bit hardware even though they build 32-bit binaries,
DEFAULT_MACHINE previously contained "mips64" on 32-bit builds. This confuses
some mroonga tests which rely on DEFAULT_MACHINE to detect 64-bitness.
.
This patch fixes the value of DEFAULT_MACHINE so it always contains just "mips"
on 32-bit mips builds.
Author: James Cowgill <jcowgill@debian.org>
---
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
--- mariadb-10.1.orig/cmake/package_name.cmake
+++ mariadb-10.1/cmake/package_name.cmake
@@ -34,6 +34,10 @@ IF(NOT VERSION)
SET(DEFAULT_MACHINE "mips")
ENDIF()
+ IF(NOT 64BIT AND CMAKE_SYSTEM_PROCESSOR MATCHES "^mips64")
+ SET(DEFAULT_MACHINE "mips")
+ ENDIF()
+
IF(CMAKE_SYSTEM_NAME MATCHES "Windows")
SET(NEED_DASH_BETWEEN_PLATFORM_AND_MACHINE 0)
SET(DEFAULT_PLATFORM "win")

View File

@ -0,0 +1,75 @@
From f5cf70d9d1dc7f4cbeffb7fb75cbbe08720e3873 Mon Sep 17 00:00:00 2001
From: Gustavo Romero <gromero@br.ibm.com>
Date: Sun, 26 Mar 2017 15:08:15 +0000
Subject: [PATCH] Remove dependency on glibc on PPC
Remove dependency on glibc by using gcc builtin function and no glibc
wrappers.
Currently there are no surrogates in musl for:
__ppc_get_timebase()
__ppc_set_ppr_low()
__ppc_set_ppr_med()
however glibc __ppc_get_timebase() is just a wrapper for GCC builtin
__builtin_get_timebase() available since GCC 4.8 [1], so assuming that
aports on ppc64le will never be built using GCC < 4.8 we can just
switch directly to the GCC builtin function.
Also __ppc_set_ppr_{low,med}() are not available on musl but both
are simple glibc wrappers on a single asm instruction, hence there
is no harm in using asm directly instead. Actually, using asm
directly was the first solution adopted in MariaDB [2].
[1] https://goo.gl/jxLV6O
[2] https://goo.gl/9bjuVC
--- a/storage/xtradb/include/ut0ut.h
+++ b/storage/xtradb/include/ut0ut.h
@@ -86,8 +86,7 @@ private:
independent way by using YieldProcessor. */
# define UT_RELAX_CPU() YieldProcessor()
# elif defined(__powerpc__)
-#include <sys/platform/ppc.h>
-# define UT_RELAX_CPU() __ppc_get_timebase()
+# define UT_RELAX_CPU() __builtin_ppc_get_timebase()
# else
# define UT_RELAX_CPU() ((void)0) /* avoid warning for an empty statement */
# endif
@@ -101,9 +100,8 @@ private:
#endif
# if defined(HAVE_HMT_PRIORITY_INSTRUCTION)
-#include <sys/platform/ppc.h>
-# define UT_LOW_PRIORITY_CPU() __ppc_set_ppr_low()
-# define UT_RESUME_PRIORITY_CPU() __ppc_set_ppr_med()
+# define UT_LOW_PRIORITY_CPU() __asm__ __volatile__ ("or 1,1,1")
+# define UT_RESUME_PRIORITY_CPU() __asm__ __volatile__ ("or 2,2,2")
# else
# define UT_LOW_PRIORITY_CPU() ((void)0)
# define UT_RESUME_PRIORITY_CPU() ((void)0)
--- a/storage/innobase/include/ut0ut.h
+++ b/storage/innobase/include/ut0ut.h
@@ -89,8 +89,7 @@ private:
independent way by using YieldProcessor. */
# define UT_RELAX_CPU() YieldProcessor()
# elif defined(__powerpc__)
-#include <sys/platform/ppc.h>
-# define UT_RELAX_CPU() __ppc_get_timebase()
+# define UT_RELAX_CPU() __builtin_ppc_get_timebase()
# else
# define UT_RELAX_CPU() ((void)0) /* avoid warning for an empty statement */
# endif
@@ -104,9 +103,8 @@ private:
#endif
# if defined(HAVE_HMT_PRIORITY_INSTRUCTION)
-#include <sys/platform/ppc.h>
-# define UT_LOW_PRIORITY_CPU() __ppc_set_ppr_low()
-# define UT_RESUME_PRIORITY_CPU() __ppc_set_ppr_med()
+# define UT_LOW_PRIORITY_CPU() __asm__ __volatile__ ("or 1,1,1")
+# define UT_RESUME_PRIORITY_CPU() __asm__ __volatile__ ("or 2,2,2")
# else
# define UT_LOW_PRIORITY_CPU() ((void)0)
# define UT_RESUME_PRIORITY_CPU() ((void)0)