From 1715fef107b2b0fab2b1e2dbac062b3ac7a9c6b2 Mon Sep 17 00:00:00 2001 From: Justin Jagieniak Date: Wed, 14 Apr 2021 10:17:16 +0200 Subject: [PATCH 1/4] Fix cross-compile to consider CMAKE_CROSSCOMPILING_EMULATOR When CMAKE_CROSSCOMPILING_EMULATOR is defined, a cross-compile can be made, however with native (emulated) execution possible. This commit takes those points in the build system that execute built targets natively and allow these to be executed in a crosscompile if CMAKE_CROSSCOMPILING_EMULATOR is defined. Closes #1805 --- CMakeLists.txt | 4 ++-- configure.cmake | 8 ++++---- dbug/CMakeLists.txt | 2 +- extra/CMakeLists.txt | 2 +- scripts/CMakeLists.txt | 4 ++-- sql/CMakeLists.txt | 4 ++-- storage/mroonga/vendor/groonga/CMakeLists.txt | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7452509d0d9..4763c48ec13 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -393,7 +393,7 @@ CHECK_PCRE() CHECK_SYSTEMD() -IF(CMAKE_CROSSCOMPILING) +IF(CMAKE_CROSSCOMPILING AND NOT DEFINED CMAKE_CROSSCOMPILING_EMULATOR) SET(IMPORT_EXECUTABLES "IMPORTFILE-NOTFOUND" CACHE FILEPATH "Path to import_executables.cmake from a native build") INCLUDE(${IMPORT_EXECUTABLES}) ENDIF() @@ -475,7 +475,7 @@ ADD_SUBDIRECTORY(scripts) ADD_SUBDIRECTORY(support-files) ADD_SUBDIRECTORY(extra/aws_sdk) -IF(NOT CMAKE_CROSSCOMPILING) +IF(NOT CMAKE_CROSSCOMPILING OR DEFINED CMAKE_CROSSCOMPILING_EMULATOR) SET(EXPORTED comp_err comp_sql factorial) IF(NOT WITHOUT_SERVER) SET(EXPORTED ${EXPORTED} gen_lex_hash gen_lex_token) diff --git a/configure.cmake b/configure.cmake index 8cff10a24ac..0bcf81d8c64 100644 --- a/configure.cmake +++ b/configure.cmake @@ -670,10 +670,10 @@ int main() " HAVE_PTHREAD_YIELD_ZERO_ARG) IF(NOT STACK_DIRECTION) - IF(CMAKE_CROSSCOMPILING) - MESSAGE(FATAL_ERROR - "STACK_DIRECTION is not defined. Please specify -DSTACK_DIRECTION=1 " - "or -DSTACK_DIRECTION=-1 when calling cmake.") + IF(CMAKE_CROSSCOMPILING AND NOT DEFINED CMAKE_CROSSCOMPILING_EMULATOR) + MESSAGE(FATAL_ERROR + "STACK_DIRECTION is not defined. Please specify -DSTACK_DIRECTION=1 " + "or -DSTACK_DIRECTION=-1 when calling cmake.") ELSE() TRY_RUN(STACKDIR_RUN_RESULT STACKDIR_COMPILE_RESULT ${CMAKE_BINARY_DIR} diff --git a/dbug/CMakeLists.txt b/dbug/CMakeLists.txt index 842099f03f3..d45401be290 100644 --- a/dbug/CMakeLists.txt +++ b/dbug/CMakeLists.txt @@ -25,7 +25,7 @@ MAYBE_DISABLE_IPO(dbug) ADD_EXECUTABLE(tests tests.c) TARGET_LINK_LIBRARIES(tests dbug) -IF(NOT CMAKE_CROSSCOMPILING) +IF(NOT CMAKE_CROSSCOMPILING OR DEFINED CMAKE_CROSSCOMPILING_EMULATOR) ADD_EXECUTABLE(factorial my_main.c factorial.c) TARGET_LINK_LIBRARIES(factorial dbug) ENDIF() diff --git a/extra/CMakeLists.txt b/extra/CMakeLists.txt index 8f4c434ed34..71c9d60afb0 100644 --- a/extra/CMakeLists.txt +++ b/extra/CMakeLists.txt @@ -18,7 +18,7 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${ZLIB_INCLUDE_DIR}) # Default install component for the files is Server here SET(MYSQL_INSTALL_COMPONENT Server) -IF(NOT CMAKE_CROSSCOMPILING) +IF(NOT CMAKE_CROSSCOMPILING OR DEFINED CMAKE_CROSSCOMPILING_EMULATOR) ADD_EXECUTABLE(comp_err comp_err.c) TARGET_LINK_LIBRARIES(comp_err mysys) ENDIF() diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 833a9b8da6a..923b3110af7 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -28,14 +28,14 @@ MACRO(INSTALL_LINK old new destination component) ) ENDMACRO() -IF(NOT CMAKE_CROSSCOMPILING) +IF(NOT CMAKE_CROSSCOMPILING OR DEFINED CMAKE_CROSSCOMPILING_EMULATOR) INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) ADD_EXECUTABLE(comp_sql comp_sql.c) TARGET_LINK_LIBRARIES(comp_sql) ENDIF() # Build mysql_fix_privilege_tables.sql (concatenate 3 sql scripts) -IF(NOT WIN32 OR CMAKE_CROSSCOMPILING) +IF(NOT WIN32 OR (CMAKE_CROSSCOMPILING AND NOT DEFINED CMAKE_CROSSCOMPILING_EMULATOR)) FIND_PROGRAM(CAT_EXECUTABLE cat DOC "path to the executable") MARK_AS_ADVANCED(CAT_EXECUTABLE) ENDIF() diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index b9cd418f295..bff01ca817e 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -356,7 +356,7 @@ ELSE() COMPILE_FLAGS "-p ORA") ENDIF() -IF(NOT CMAKE_CROSSCOMPILING) +IF(NOT CMAKE_CROSSCOMPILING OR DEFINED CMAKE_CROSSCOMPILING_EMULATOR) ADD_EXECUTABLE(gen_lex_token gen_lex_token.cc ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.hh) ADD_EXECUTABLE(gen_lex_hash gen_lex_hash.cc) @@ -406,7 +406,7 @@ ADD_CUSTOM_TARGET(distclean ) # Install initial database (default on windows, optional target elsewhere) -IF(TARGET mariadbd AND NOT CMAKE_CROSSCOMPILING) +IF(TARGET mariadbd AND (NOT CMAKE_CROSSCOMPILING OR DEFINED CMAKE_CROSSCOMPILING_EMULATOR)) IF(GENERATOR_IS_MULTI_CONFIG) SET (CONFIG_PARAM -DCONFIG=${CMAKE_CFG_INTDIR}) ENDIF() diff --git a/storage/mroonga/vendor/groonga/CMakeLists.txt b/storage/mroonga/vendor/groonga/CMakeLists.txt index d271d4c4eb9..ebb8b6906ec 100644 --- a/storage/mroonga/vendor/groonga/CMakeLists.txt +++ b/storage/mroonga/vendor/groonga/CMakeLists.txt @@ -405,7 +405,7 @@ if(NOT ${GRN_WITH_MECAB} STREQUAL "no") set(MECAB_LIBRARIES libmecab) else() set(GRN_MECAB_CONFIG "mecab-config" CACHE FILEPATH "mecab-config path") - if(NOT CMAKE_CROSSCOMPILING) + if(NOT CMAKE_CROSSCOMPILING OR DEFINED CMAKE_CROSSCOMPILING_EMULATOR) find_program(GRN_MECAB_CONFIG_ABSOLUTE_PATH "${GRN_MECAB_CONFIG}") endif() if(EXISTS "${GRN_MECAB_CONFIG_ABSOLUTE_PATH}") From f26e3259a15cc26dac0a0a77e2488abb87892cf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Otto=20Kek=C3=A4l=C3=A4inen?= Date: Sun, 20 Dec 2020 23:48:20 +0200 Subject: [PATCH 2/4] Deb: Use build flag to enforce default charset as utf8mb4 Possible now since https://github.com/mariadb-corporation/mariadb-connector-c/commit/29720950eeae75f1ea7ef1376a6149cabeb79d13 Upstreamed from https://salsa.debian.org/mariadb-team/mariadb-10.5/-/commit/ca5e93c754209f9c1a729bb057332ab3b0b76363 Closes: #1722 --- debian/rules | 1 + debian/salsa-ci.yml | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/debian/rules b/debian/rules index d029eead974..fa155e311d2 100755 --- a/debian/rules +++ b/debian/rules @@ -97,6 +97,7 @@ endif -DSYSTEM_TYPE="debian-$(DEB_HOST_GNU_SYSTEM)" \ -DCMAKE_SYSTEM_PROCESSOR=$(DEB_HOST_ARCH) \ -DBUILD_CONFIG=mysql_release \ + -DCONC_DEFAULT_CHARSET=utf8mb4 \ -DPLUGIN_TOKUDB=NO \ -DPLUGIN_CASSANDRA=NO \ -DPLUGIN_AWS_KEY_MANAGEMENT=NO \ diff --git a/debian/salsa-ci.yml b/debian/salsa-ci.yml index 579d43aac66..fcdcf5678a8 100644 --- a/debian/salsa-ci.yml +++ b/debian/salsa-ci.yml @@ -196,6 +196,40 @@ blhc: - pkg-config --cflags --libs libmariadb - pkg-config --cflags --libs mariadb - apt-get install -y --no-install-recommends g++ + - | + # Build a test binary that depends on libmysqlclient + cat > b933063.cpp < + #include + #include + int main() + { + MYSQL h; + if (!mysql_init(&h) + || mysql_options(&h, MYSQL_READ_DEFAULT_GROUP, "") + // || mysql_options(&h, MYSQL_SET_CHARSET_NAME, "utf8mb4") + || !mysql_real_connect(&h, "", "", NULL, "", 0, NULL, 0)) + throw std::runtime_error(mysql_error(&h)); + std::string q = "show variables like '%char%'"; + if (mysql_real_query(&h, q.data(), q.size())) + throw std::runtime_error(mysql_error(&h)); + MYSQL_RES* result = mysql_store_result(&h); + if (!result && mysql_errno(&h)) + throw std::runtime_error(mysql_error(&h)); + while (MYSQL_ROW row = mysql_fetch_row(result)) + { + std::cout << row[0] << ": " << row[1] << "\n"; + } + return 0; + } + EOF + apt-get install -y ./*.deb # Server must be installed for client to connect + echo "Testing -l mysqlclient" + g++ b933063.cpp -l mysqlclient && ./a.out | tee result + if grep --quiet latin result; then echo "ERROR: Charset latin found!"; exit 1; fi + echo "Testing -l mariadbclient" + g++ b933063.cpp -l mariadbclient && ./a.out | tee result + if grep --quiet latin result; then echo "ERROR: Charset latin found!"; exit 1; fi .test-install-all-libs: &test-install-all-libs - apt-get install -y ./libmariadb3_*.deb ./libmariadb-dev_*.deb ./libmariadb-dev-compat_*.deb ./libmariadbd19_*.deb ./libmariadbd-dev_*.deb ./mariadb-common_*.deb From de746304c985b03bc3c673dc6ae1d499bb38faf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Otto=20Kek=C3=A4l=C3=A4inen?= Date: Sun, 20 Dec 2020 20:52:51 +0200 Subject: [PATCH 3/4] Fix riscv64 build failure by linking correctly with pthread Link with -pthread instead of -lpthread, and do that for all architectures. Contributors: Aurelien Jarno Closes: #1717 --- configure.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/configure.cmake b/configure.cmake index 0bcf81d8c64..8383b6921f8 100644 --- a/configure.cmake +++ b/configure.cmake @@ -134,6 +134,7 @@ IF(UNIX) IF(NOT LIBRT) MY_SEARCH_LIBS(clock_gettime rt LIBRT) ENDIF() + set(THREADS_PREFER_PTHREAD_FLAG ON) FIND_PACKAGE(Threads) SET(CMAKE_REQUIRED_LIBRARIES From 3f8df01194700a68a62e6adbc62bd48d27dfe833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Thu, 15 Apr 2021 11:40:43 +0300 Subject: [PATCH 4/4] MDEV-25425 Useless message "If the mysqld execution user is authorized page cleaner thread priority can be changed." On startup, InnoDB tried to increase the priority of the page cleaner thread. This would usually fail, resulting in a server log message. When the page cleaner code was refactored in MDEV-23855, the throughput and latency were greatly improved even when the buf_flush_page_cleaner thread always ran the same priority with other threads in our benchmarks. So, this code should have no benefit in MariaDB Server 10.5.7 or later. Besides, starting with MariaDB Server 10.5, the executable is called mariadbd, not mysqld. --- storage/innobase/buf/buf0flu.cc | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc index 77c6225e455..339b30659fe 100644 --- a/storage/innobase/buf/buf0flu.cc +++ b/storage/innobase/buf/buf0flu.cc @@ -40,13 +40,6 @@ Created 11/11/1995 Heikki Tuuri #include "log0crypt.h" #include "srv0mon.h" #include "fil0pagecompress.h" -#ifdef UNIV_LINUX -/* include defs for CPU time priority settings */ -#include -#include -#include -#include -#endif /* UNIV_LINUX */ #ifdef HAVE_LZO # include "lzo/lzo1x.h" #elif defined HAVE_SNAPPY @@ -2083,21 +2076,6 @@ static os_thread_ret_t DECLARE_THREAD(buf_flush_page_cleaner)(void*) ut_ad(!srv_read_only_mode); ut_ad(buf_page_cleaner_is_active); -#ifdef UNIV_DEBUG_THREAD_CREATION - ib::info() << "page_cleaner thread running, id " - << os_thread_get_curr_id(); -#endif /* UNIV_DEBUG_THREAD_CREATION */ -#ifdef UNIV_LINUX - /* linux might be able to set different setting for each thread. - worth to try to set high priority for the page cleaner thread */ - const pid_t tid= static_cast(syscall(SYS_gettid)); - setpriority(PRIO_PROCESS, tid, -20); - if (getpriority(PRIO_PROCESS, tid) != -20) - ib::info() << "If the mysqld execution user is authorized," - " page cleaner thread priority can be changed." - " See the man page of setpriority()."; -#endif /* UNIV_LINUX */ - ulint last_pages= 0; timespec abstime; set_timespec(abstime, 1);