208 lines
6.6 KiB
CMake
208 lines
6.6 KiB
CMake
# Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
|
|
#
|
|
# 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 also distributed 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 included with MySQL.
|
|
#
|
|
# 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")
|
|
|
|
# Which version of Node.js?
|
|
if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.0")
|
|
set(NODE_VERSION 0.12.15)
|
|
else()
|
|
set(NODE_VERSION 6.10.2)
|
|
endif()
|
|
|
|
|
|
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
|
|
${NDB_SOURCE_DIR}/src/ndbapi
|
|
)
|
|
|
|
|
|
#link_directories(
|
|
# ${NDB_SOURCE_DIR}/src
|
|
# ${MYSQL_HOME}/lib)
|
|
|
|
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_wrapper.cpp
|
|
jones-ndb/impl/src/ndb/AsyncNdbContext.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/BatchImpl_wrapper.cpp
|
|
jones-ndb/impl/src/ndb/BatchImpl.cpp
|
|
jones-ndb/impl/src/ndb/SessionImpl_wrapper.cpp
|
|
jones-ndb/impl/src/ndb/SessionImpl.cpp
|
|
jones-ndb/impl/src/ndb/TransactionImpl_wrapper.cpp
|
|
jones-ndb/impl/src/ndb/TransactionImpl.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/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/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/Record_wrapper.cpp
|
|
jones-ndb/impl/src/ndb/Record.cpp
|
|
jones-ndb/impl/src/ndb/ScanOperation_wrapper.cpp
|
|
jones-ndb/impl/src/ndb/ScanOperation.cpp
|
|
jones-ndb/impl/src/ndb/ValueObject.cpp
|
|
jones-ndb/impl/src/ndb/node_module.cpp
|
|
jones-ndb/impl/src/ndb/QueryOperation.cpp
|
|
jones-ndb/impl/src/ndb/QueryOperation_wrapper.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()
|
|
if(NODE_VERSION VERSION_GREATER "4.0.0")
|
|
# Remove any -std=xxx compiler flag present, and add -std=c++11
|
|
SET(CXX_FLAGS_VAL ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPER}})
|
|
STRING(REGEX REPLACE "-std=[cgnu]+..[0-9]+" "" CXX_FLAGS_VAL "${CXX_FLAGS_VAL}")
|
|
SET(CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPER} "${CXX_FLAGS_VAL} -std=c++11")
|
|
endif()
|
|
set(ADAPTER_REQUIRED_LIBS ndbclient_static)
|
|
|
|
# Remove -Wundef from C++ compiler flags since there are several
|
|
# undefined identifiers which are evaluated in for example v8config.h
|
|
STRING(REPLACE "-Wundef " "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
|
|
|
# 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"
|
|
"cast-function-type"
|
|
"undefined-reinterpret-cast"
|
|
"cast-qual"
|
|
)
|
|
MY_CHECK_CXX_COMPILER_WARNING("${warning}" HAS_WARN_FLAG)
|
|
IF(HAS_WARN_FLAG)
|
|
STRING_APPEND(CMAKE_CXX_FLAGS " ${HAS_WARN_FLAG}")
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
|
|
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")
|
|
elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro")
|
|
set(FINAL_LINK_FLAGS "-z muldefs")
|
|
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}/node_modules
|
|
COMPONENT nodejs)
|
|
|
|
INSTALL(
|
|
TARGETS ndb_adapter
|
|
DESTINATION ${nodejs_install}/node_modules/jones-ndb/build/Static
|
|
COMPONENT nodejs)
|
|
|
|
INSTALL(
|
|
FILES ReadMe jones_deployments.js run-jones-test-suite.js
|
|
DESTINATION ${nodejs_install}
|
|
COMPONENT nodejs)
|