--- ./libmysql/CMakeLists.txt_orig	2020-02-21 06:16:33 +0000
+++ ./libmysql/CMakeLists.txt	2020-02-21 06:18:36 +0000
@@ -172,6 +172,16 @@
   CACHE INTERNAL "Nonblocking functions exported by client API"
 )
 
+IF(CMAKE_SYSTEM_NAME MATCHES AIX)
+  ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_SOURCE_DIR}/build/libmysql/libmysql.exp
+    COMMAND echo "${CLIENT_API_FUNCTIONS};${CLIENT_API_NONBLOCKING_FUNCTIONS}" | /opt/freeware/bin/sed  "s|;|\\n|g" > ${CMAKE_SOURCE_DIR}/build/libmysql/libmysql.exp
+    VERBATIM
+  )
+  ADD_CUSTOM_TARGET(libmysql_exp
+    DEPENDS ${CMAKE_SOURCE_DIR}/build/libmysql/libmysql.exp
+  )
+ENDIF()
+
 SET(CLIENT_SOURCES
   libmysql.cc
   errmsg.cc
@@ -289,6 +299,9 @@
   COMPONENT SharedLibraries)
 TARGET_LINK_LIBRARIES(libmysql PRIVATE ${LIBS_TO_LINK})
 
+IF(CMAKE_SYSTEM_NAME MATCHES AIX)
+  ADD_DEPENDENCIES(libmysql libmysql_exp)
+ENDIF()
 IF(WIN32)
   # So that libmysql_api_test below can find the .dll
   ADD_CUSTOM_COMMAND(TARGET libmysql POST_BUILD
--- ./cmake/libutils.cmake_orig	2020-02-21 06:16:50 +0000
+++ ./cmake/libutils.cmake	2020-02-21 06:17:01 +0000
@@ -166,13 +166,17 @@
     # Mark every export as explicitly needed, so that ld won't remove the
     # .a files containing them. This has a similar effect as
     # --Wl,--no-whole-archive, but is more focused.
-    FOREACH(SYMBOL ${ARG_EXPORTS})
-      IF(APPLE)
-        SET(export_link_flags "${export_link_flags} -Wl,-u,_${SYMBOL}")
-      ELSE()
-        SET(export_link_flags "${export_link_flags} -Wl,-u,${SYMBOL}")
-      ENDIF()
-    ENDFOREACH()
+    IF(AIX)
+        SET(export_link_flags "${export_link_flags} -Wl,-bE:./libmysql.exp")
+    ELSE()
+      FOREACH(SYMBOL ${ARG_EXPORTS})
+        IF(APPLE)
+          SET(export_link_flags "${export_link_flags} -Wl,-u,_${SYMBOL}")
+        ELSE()
+          SET(export_link_flags "${export_link_flags} -Wl,-u,${SYMBOL}")
+        ENDIF()
+      ENDFOREACH()
+    ENDIF()
   ENDIF()
 
   IF(NOT ARG_SKIP_INSTALL)
