
---
 extra/CMakeLists.txt     | 14 ++++++++
 libmysql/CMakeLists.txt  |  7 ++++
 libmysqld/CMakeLists.txt | 15 ++++++++
 scripts/CMakeLists.txt   | 78 ++++++++++++++++++++++++++++++++++++++++
 sql/CMakeLists.txt       | 18 ++++++++++
 5 files changed, 132 insertions(+)

diff --git a/extra/CMakeLists.txt b/extra/CMakeLists.txt
index d0d24ebe..5187bee6 100644
--- a/extra/CMakeLists.txt
+++ b/extra/CMakeLists.txt
@@ -39,6 +39,19 @@ IF(NOT CMAKE_CROSSCOMPILING)
  SET_TARGET_PROPERTIES(comp_err PROPERTIES LINKER_LANGUAGE CXX)
 ENDIF()
 
+IF(CMAKE_CROSSCOMPILING)
+ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/include/mysqld_error.h
+                   ${PROJECT_BINARY_DIR}/sql/share/english/errmsg.sys
+                   COMMAND PATH=. comp_err
+                    --charset=${PROJECT_SOURCE_DIR}/sql/share/charsets
+                    --out-dir=${PROJECT_BINARY_DIR}/sql/share/
+                    --header_file=${PROJECT_BINARY_DIR}/include/mysqld_error.h
+                    --name_file=${PROJECT_BINARY_DIR}/include/mysqld_ername.h
+                    --state_file=${PROJECT_BINARY_DIR}/include/sql_state.h
+                    --in_file=${PROJECT_SOURCE_DIR}/sql/share/errmsg-utf8.txt
+                   DEPENDS ${PROJECT_SOURCE_DIR}/sql/share/errmsg-utf8.txt
+                   ${CMAKE_CURRENT_SOURCE_DIR}/comp_err.c)
+ELSE()
 ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/include/mysqld_error.h 
                    ${PROJECT_BINARY_DIR}/sql/share/english/errmsg.sys
                    COMMAND comp_err
@@ -50,6 +63,7 @@ ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/include/mysqld_error.h
                     --in_file=${PROJECT_SOURCE_DIR}/sql/share/errmsg-utf8.txt
                    DEPENDS ${PROJECT_SOURCE_DIR}/sql/share/errmsg-utf8.txt
                    ${CMAKE_CURRENT_SOURCE_DIR}/comp_err.c)
+ENDIF()
 
 ADD_CUSTOM_TARGET(GenError
                   ALL
diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt
index 47f506da..d4376251 100644
--- a/libmysql/CMakeLists.txt
+++ b/libmysql/CMakeLists.txt
@@ -400,7 +400,14 @@ ELSE()
 ENDIF()
 
 # Verify that libmysql_api_test runs OK
+IF(CMAKE_CROSSCOMPILING)
+ADD_CUSTOM_COMMAND(TARGET libmysql_api_test POST_BUILD
+  COMMAND PATH=${CMAKE_SOURCE_DIR}/sql libmysql_api_test
+  > ${CMAKE_CURRENT_BINARY_DIR}/libmysql_api_test.out
+  )
+ELSE()
 ADD_CUSTOM_COMMAND(TARGET libmysql_api_test POST_BUILD
   COMMAND $<TARGET_FILE:libmysql_api_test>
   > ${CMAKE_CURRENT_BINARY_DIR}/libmysql_api_test.out
   )
+ENDIF()
diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt
index e7750b43..2df37abc 100644
--- a/libmysqld/CMakeLists.txt
+++ b/libmysqld/CMakeLists.txt
@@ -53,11 +53,19 @@ SET(GEN_SOURCES
   ${CMAKE_BINARY_DIR}/sql/sql_builtin.cc
 )
 
+IF(CMAKE_CROSSCOMPILING)
+ADD_CUSTOM_COMMAND(
+  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_hash.h
+  COMMAND PATH=. gen_lex_hash > lex_hash.h
+  DEPENDS gen_lex_hash
+)
+ELSE()
 ADD_CUSTOM_COMMAND(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_hash.h
   COMMAND gen_lex_hash > lex_hash.h
   DEPENDS gen_lex_hash
 )
+ENDIF()
 
 SET_SOURCE_FILES_PROPERTIES(${GEN_YACC_SOURCES}
                             ${GEN_SOURCES}
@@ -241,11 +249,18 @@ RUN_BISON(
   HINT_PARSER_
 )
 
+IF(CMAKE_CROSSCOMPILING)
+ADD_CUSTOM_COMMAND(
+  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_token.h
+  COMMAND PATH=${CMAKE_SOURCE_DIR}/sql gen_lex_token > lex_token.h
+)
+ELSE()
 ADD_CUSTOM_COMMAND(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_token.h
   COMMAND gen_lex_token > lex_token.h
   DEPENDS gen_lex_token
 )
+ENDIF()
 
 SET_SOURCE_FILES_PROPERTIES(
   ${CMAKE_CURRENT_BINARY_DIR}/sql/lex_token.h
diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
index 7d882b10..6ad31084 100644
--- a/scripts/CMakeLists.txt
+++ b/scripts/CMakeLists.txt
@@ -54,6 +54,20 @@ ELSE()
 ENDIF()
 
 # Build mysql_fix_privilege_tables.c
+IF(CMAKE_CROSSCOMPILING)
+ADD_CUSTOM_COMMAND(
+  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mysql_fix_privilege_tables_sql.c
+  ${CAT_COMMAND}
+  COMMAND PATH=. comp_sql
+  mysql_fix_privilege_tables
+  mysql_fix_privilege_tables.sql
+  mysql_fix_privilege_tables_sql.c
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  DEPENDS comp_sql
+  ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables.sql
+  ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables_fix.sql
+)
+ELSE()
 ADD_CUSTOM_COMMAND(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mysql_fix_privilege_tables_sql.c
   ${CAT_COMMAND}
@@ -66,6 +80,7 @@ ADD_CUSTOM_COMMAND(
   ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables.sql
   ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables_fix.sql
 )
+ENDIF()
 
 # Add target for the above to be built
 ADD_CUSTOM_TARGET(GenFixPrivs
@@ -77,6 +92,33 @@ ADD_CUSTOM_TARGET(GenFixPrivs
 # If we do not have performance schema compiled in then sys will not work,
 # so only create an empty sys database with an auto-generated file,
 # otherwise, load the full schema file normally.
+IF(CMAKE_CROSSCOMPILING)
+IF(NOT WITH_PERFSCHEMA_STORAGE_ENGINE)
+  FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/mysql_sys_schema_empty.sql "CREATE DATABASE sys;")
+
+  ADD_CUSTOM_COMMAND(
+    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sql_commands_sys_schema.h
+    COMMAND PATH=. comp_sql
+    mysql_sys_schema
+    ${CMAKE_CURRENT_BINARY_DIR}/mysql_sys_schema_empty.sql
+    sql_commands_sys_schema.h
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+    DEPENDS comp_sql
+    ${CMAKE_CURRENT_BINARY_DIR}/mysql_sys_schema_empty.sql
+  )
+ELSE()
+  ADD_CUSTOM_COMMAND(
+    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sql_commands_sys_schema.h
+    COMMAND PATH=. comp_sql
+    mysql_sys_schema
+    ${CMAKE_CURRENT_SOURCE_DIR}/mysql_sys_schema.sql
+    sql_commands_sys_schema.h
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+    DEPENDS comp_sql
+    ${CMAKE_CURRENT_SOURCE_DIR}/mysql_sys_schema.sql
+  )
+ENDIF()
+ELSE()
 IF(NOT WITH_PERFSCHEMA_STORAGE_ENGINE)
   FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/mysql_sys_schema_empty.sql "CREATE DATABASE sys;")
 
@@ -102,6 +144,7 @@ ELSE()
     ${CMAKE_CURRENT_SOURCE_DIR}/mysql_sys_schema.sql
   )
 ENDIF()
+ENDIF()
 
 IF(NOT WITHOUT_SERVER)
   ADD_CUSTOM_TARGET(GenSysSchema
@@ -110,6 +153,40 @@ IF(NOT WITHOUT_SERVER)
   )
 ENDIF()
 
+IF(CMAKE_CROSSCOMPILING)
+ADD_CUSTOM_COMMAND(
+  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sql_commands_system_data.h
+  COMMAND PATH=. comp_sql
+  mysql_system_data
+  ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables_data.sql
+  sql_commands_system_data.h
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  DEPENDS comp_sql
+  ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables_data.sql
+)
+
+ADD_CUSTOM_COMMAND(
+  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sql_commands_system_tables.h
+  COMMAND PATH=. comp_sql
+  mysql_system_tables
+  ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables.sql
+  sql_commands_system_tables.h
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  DEPENDS comp_sql
+  ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables.sql
+)
+
+ADD_CUSTOM_COMMAND(
+  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sql_commands_help_data.h
+  COMMAND PATH=. comp_sql
+  fill_help_tables
+  ${CMAKE_CURRENT_SOURCE_DIR}/fill_help_tables.sql
+  sql_commands_help_data.h
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  DEPENDS comp_sql
+  ${CMAKE_CURRENT_SOURCE_DIR}/fill_help_tables.sql
+)
+ELSE()
 ADD_CUSTOM_COMMAND(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sql_commands_system_data.h
   COMMAND comp_sql
@@ -142,6 +219,7 @@ ADD_CUSTOM_COMMAND(
   DEPENDS comp_sql
   ${CMAKE_CURRENT_SOURCE_DIR}/fill_help_tables.sql
 )
+ENDIF()
 
 # Add target for the above to be built
 IF(NOT WITHOUT_SERVER)
diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt
index 9a5c08f7..083dd1d9 100644
--- a/sql/CMakeLists.txt
+++ b/sql/CMakeLists.txt
@@ -53,14 +53,23 @@ SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES}
 
 # Gen_lex_token
 # Make sure sql_yacc.h is generated before compiling gen_lex_token
+IF(NOT CMAKE_CROSSCOMPILING)
 ADD_EXECUTABLE(gen_lex_token gen_lex_token.cc)
 ADD_DEPENDENCIES(gen_lex_token GenServerSource)
+ENDIF()
 
+IF(CMAKE_CROSSCOMPILING)
+ADD_CUSTOM_COMMAND(
+  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_token.h
+  COMMAND PATH=. gen_lex_token > lex_token.h
+)
+ELSE()
 ADD_CUSTOM_COMMAND(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_token.h
   COMMAND gen_lex_token > lex_token.h
   DEPENDS gen_lex_token
 )
+ENDIF()
 
 ADD_DEFINITIONS(-DMYSQL_SERVER -DHAVE_REPLICATION)
 IF(SSL_DEFINES)
@@ -654,13 +663,22 @@ SET_SOURCE_FILES_PROPERTIES(
 )
 
 # Gen_lex_hash
+IF(NOT CMAKE_CROSSCOMPILING)
 ADD_EXECUTABLE(gen_lex_hash gen_lex_hash.cc)
+ENDIF()
 
+IF(CMAKE_CROSSCOMPILING)
+ADD_CUSTOM_COMMAND(
+  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_hash.h
+  COMMAND PATH=. gen_lex_hash > lex_hash.h
+)
+ELSE()
 ADD_CUSTOM_COMMAND(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_hash.h
   COMMAND gen_lex_hash > lex_hash.h
   DEPENDS gen_lex_hash
 )
+ENDIF()
 
 MYSQL_ADD_EXECUTABLE(mysql_tzinfo_to_sql tztime.cc)
 SET_TARGET_PROPERTIES(mysql_tzinfo_to_sql PROPERTIES COMPILE_FLAGS "-DTZINFO2SQL")
-- 
2.25.1

