# Copyright (c) 2016, 2024, Oracle and/or its affiliates. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License, version 2.0, # as published by the Free Software Foundation. # # This program is designed to work with certain software (including # but not limited to OpenSSL) that is licensed under separate terms, # as designated in a particular file or component or in included license # documentation. The authors of MySQL hereby grant you an additional # permission to link the program and your derivative works with the # separately licensed software that they have either included with # the program or referenced in the documentation. # # 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, version 2.0, 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-1301 USA # The build environment depends on NDB_NODEJS_EXTRAS_PATH # or WITH_NODEJS_INCLUDE_PATH SET(WITH_NODEJS_INCLUDE_PATH "" CACHE PATH "location of node.js header files") SET(NODE_VERSION 18.12.1) IF(NDB_NODEJS_EXTRAS_PATH) SET(NODE_LIBRARIES ${NDB_NODEJS_EXTRAS_PATH}/windows-libs/${NODE_VERSION}) SET(NODE_HEADERS ${NDB_NODEJS_EXTRAS_PATH}/node-headers/${NODE_VERSION}) SET(WITH_NODEJS_INCLUDE_PATH ${NODE_HEADERS}/include/node) MESSAGE(STATUS "Using node.js version " ${NODE_VERSION}) ENDIF() IF(WITH_NODEJS_INCLUDE_PATH) MESSAGE(STATUS "Building jones-ndb to install in share/nodejs") MESSAGE(STATUS "Using node.js from " ${WITH_NODEJS_INCLUDE_PATH}) ELSE() RETURN() ENDIF() # Build rules. # INCLUDE_DIRECTORIES( ${WITH_NODEJS_INCLUDE_PATH} jones-ndb/impl/include/common jones-ndb/impl/include/ndb ${CMAKE_SOURCE_DIR}/storage/ndb/src/ndbapi ) ADD_DEFINITIONS(-DNODE_GYP_MODULE_NAME=ndb_adapter) ADD_DEFINITIONS(-DBUILDING_NODE_EXTENSION) set(ADAPTER_SOURCE_FILES jones-ndb/impl/src/common/async_common.cpp jones-ndb/impl/src/common/unified_debug.cpp jones-ndb/impl/src/ndb/AsyncNdbContext.cpp jones-ndb/impl/src/ndb/AsyncNdbContext_wrapper.cpp jones-ndb/impl/src/ndb/BatchImpl.cpp jones-ndb/impl/src/ndb/BatchImpl_wrapper.cpp jones-ndb/impl/src/ndb/BlobHandler.cpp jones-ndb/impl/src/ndb/ColumnHandler.cpp jones-ndb/impl/src/ndb/ColumnProxy.cpp jones-ndb/impl/src/ndb/DBDictionaryImpl.cpp jones-ndb/impl/src/ndb/DBOperationHelper.cpp jones-ndb/impl/src/ndb/EncoderCharset.cpp jones-ndb/impl/src/ndb/IndexBoundHelper.cpp jones-ndb/impl/src/ndb/KeyOperation.cpp jones-ndb/impl/src/ndb/NdbError_wrapper.cpp jones-ndb/impl/src/ndb/NdbInterpretedCode_wrapper.cpp jones-ndb/impl/src/ndb/NdbRecordObject.cpp jones-ndb/impl/src/ndb/NdbScanFilter_wrapper.cpp jones-ndb/impl/src/ndb/NdbTypeEncoders.cpp jones-ndb/impl/src/ndb/Ndb_cluster_connection_wrapper.cpp jones-ndb/impl/src/ndb/Ndb_init_wrapper.cpp jones-ndb/impl/src/ndb/Ndb_util_wrapper.cpp jones-ndb/impl/src/ndb/Ndb_wrapper.cpp jones-ndb/impl/src/ndb/QueryOperation.cpp jones-ndb/impl/src/ndb/QueryOperation_wrapper.cpp jones-ndb/impl/src/ndb/Record.cpp jones-ndb/impl/src/ndb/Record_wrapper.cpp jones-ndb/impl/src/ndb/ScanOperation.cpp jones-ndb/impl/src/ndb/ScanOperation_wrapper.cpp jones-ndb/impl/src/ndb/SessionImpl.cpp jones-ndb/impl/src/ndb/SessionImpl_wrapper.cpp jones-ndb/impl/src/ndb/TransactionImpl.cpp jones-ndb/impl/src/ndb/TransactionImpl_wrapper.cpp jones-ndb/impl/src/ndb/ValueObject.cpp jones-ndb/impl/src/ndb/node_module.cpp ) ###### COMPILER AND LINKER OPTIONS # Enable asserts: REMOVE_DEFINITIONS(-DNDEBUG) FOREACH(flag CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL ) STRING(REPLACE "-DNDEBUG" "" "${flag}" "${${flag}}") ENDFOREACH() IF(WIN32) SET(ADAPTER_REQUIRED_LIBS ndbclient_static node) ADD_DEFINITIONS(-DWIN32) ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) IF(CMAKE_CL_64) LINK_DIRECTORIES(${NODE_LIBRARIES}/win-x64) ELSE() LINK_DIRECTORIES(${NODE_LIBRARIES}/win-x86) ENDIF() ELSE() SET(ADAPTER_REQUIRED_LIBS ndbclient_static) # IT SHOULD BE POSSIBLE TO LINK DYNAMICALLY WITH PROPER RPATH # set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") ENDIF() # Disable certain compiler warnings FOREACH(warning "unused-parameter" "undef" "undefined-reinterpret-cast" "odr" "lto-type-mismatch" "non-virtual-dtor" ) MY_CHECK_CXX_COMPILER_WARNING("${warning}" HAS_WARN_FLAG) IF(HAS_WARN_FLAG) STRING_APPEND(CMAKE_CXX_FLAGS " ${HAS_WARN_FLAG}") ENDIF() ENDFOREACH() IF(MY_COMPILER_IS_GNU) # It's tricky to check alloc-size-larger-than warning in # MY_CHECK_CXX_COMPILER_WARNING(). Handle it differently # as done in sql/CMakeLists.txt STRING_APPEND(CMAKE_CXX_FLAGS " -Wno-alloc-size-larger-than") ENDIF() ADD_LIBRARY(ndb_adapter MODULE ${ADAPTER_SOURCE_FILES}) TARGET_LINK_LIBRARIES(ndb_adapter ${ADAPTER_REQUIRED_LIBS}) # non-gcc linker flags to deal with undefined & multiply-defined symbols IF(APPLE) SET(FINAL_LINK_FLAGS "-undefined dynamic_lookup") ELSEIF(WIN32) SET(FINAL_LINK_FLAGS "/FORCE:MULTIPLE") ENDIF() SET_TARGET_PROPERTIES(ndb_adapter PROPERTIES PREFIX "" SUFFIX ".node" LINK_FLAGS "${FINAL_LINK_FLAGS}" ) # Install rules SET(nodejs_install ${INSTALL_MYSQLSHAREDIR}/nodejs) INSTALL( DIRECTORY perftest samples DESTINATION ${nodejs_install} COMPONENT nodejs) INSTALL( DIRECTORY jones-ndb DESTINATION ${nodejs_install} COMPONENT nodejs) INSTALL( TARGETS ndb_adapter DESTINATION ${nodejs_install}/jones-ndb/build/Static COMPONENT nodejs) INSTALL( FILES ReadMe jones_deployments.js run-jones-test-suite.js create-test-user.sql DESTINATION ${nodejs_install} COMPONENT nodejs)