@d3x0r/sack-gui
Version:
SACK abstraction library exposed to JS to provide low level system services.
644 lines (532 loc) • 22.9 kB
Plain Text
cmake_minimum_required(VERSION 3.21)
# limited by ubuntu 18 to 3.10
#cmake_minimum_required(VERSION 3.10)
#cmake_policy( SET CMP0092 NEW )
set_property(GLOBAL PROPERTY USE_FOLDERS On)
project (sack_vfs)
ADD_DEFINITIONS( -DBUILD_NODE_ADDON )
set(FORCE_C20 ON )
if( CMAKE_HOST_SYSTEM_NAME STREQUAL "Android" )
SET( __ANDROID__ ON )
endif( CMAKE_HOST_SYSTEM_NAME STREQUAL "Android" )
OPTION( HOST_NWJS "Target is hosted in NWJS which isn't quite node. " ${HOST_NWJS} )
IF( HOST_NWJS )
ADD_DEFINITIONS( -DHOST_NWJS )
set( NODE_RUNTIMEVERSION "23.3.0" )
#message( "OVERRIDE CMAKE_JS_INC: ${CMAKE_JS_INC}" )
set( CMAKE_JS_INC ${CMAKE_CURRENT_SOURCE_DIR}/nw.js/include )
set( CMAKE_JS_INC ${CMAKE_JS_INC} ${CMAKE_CURRENT_SOURCE_DIR}/nw.js/include/v8 )
set( CMAKE_JS_INC ${CMAKE_JS_INC} ${CMAKE_CURRENT_SOURCE_DIR}/nw.js/include/node )
set( CMAKE_JS_INC ${CMAKE_JS_INC} ${CMAKE_CURRENT_SOURCE_DIR}/nw.js/include/libc++ )
LINK_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/nw.js/lib )
ADD_DEFINITIONS( -D_LIBCPP_SHARED_PTR_DEFINE_LEGACY_INLINE_FUNCTIONS )
ENDIF( HOST_NWJS )
## Compute node version...
string(REPLACE "." ";" VERSION_LIST ${NODE_RUNTIMEVERSION})
list(GET VERSION_LIST 0 NODE_VERSION_MAJOR)
list(GET VERSION_LIST 1 NODE_VERSION_MINOR)
list(GET VERSION_LIST 2 NODE_VERSION_PATCH)
########
#message( "WHAT? ${NODE_RUNTIMEVERSION} ${NONDE_VERSION_MAJOR}" )
message( "COMPILER: ${CMAKE_CXX_COMPILER_ID}" )
if( CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
add_definitions( -Wno-unused-result -Wno-address-of-packed-member -Wno-parentheses -Wno-empty-body -Wno-switch -Wno-null-conversion -Wno-unused-parameter )
add_definitions( -Wno-deprecated-volatile)
endif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if( MSVC )
#add_definitions( -D_CRT_SECURE_NO_WARNINGS -wd4995 -wd4996 )
#add_definitions( -wd4996 )
# 4197 - top-level volatile in cast is ignored (so?)
# 4090 - 'function': different 'volatile' qualifiers (usually don't care)
add_definitions( -wd4197 -wd4090 )
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP8")
if( ${NODE_VERSION_MAJOR} GREATER_EQUAL 22 )
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++20")
elseif( ${NODE_VERSION_MAJOR} GREATER_EQUAL 19 )
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17")
else( )
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++14")
endif( )
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP8")
SET( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GS-" )
SET( CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /GS-" )
SET( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /GS-" )
SET( CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /GS-" )
string( REPLACE "/Ob1" "/Ob2" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} )
string( REPLACE "/Ob1" "/Ob2" CMAKE_C_FLAGS_RELWITHDEBINFO ${CMAKE_C_FLAGS_RELWITHDEBINFO} )
endif( MSVC )
OPTION( USE_SACK_ALLOCATOR "Use SACK custom memory allocator (debug/debug)" ON )
if( NOT WIN32 )
ADD_DEFINITIONS( -D__LINUX__ )
ADD_DEFINITIONS( -D__MANUAL_PRELOAD__ )
string( REGEX MATCH "arch" os_version ${CMAKE_SYSTEM} )
if( ".${os_version}" STREQUAL "." )
set( ARCH_SYSTEM_DISTRO OFF )
else()
set( ARCH_SYSTEM_DISTRO ON )
endif()
OPTION( USE_SYSTEM_SSL "Use System OpenSSL Library instead of node included (Arch)" ${ARCH_SYSTEM_DISTRO} )
else( NOT WIN32 )
ADD_DEFINITIONS( -D_CRT_NONSTDC_NO_DEPRECATE )
endif( NOT WIN32 )
#if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
# ADD_DEFINITIONS( -D__64__ )
#endif( CMAKE_SIZEOF_VOID_P EQUAL 8 )
#ADD_DEFINITIONS( -fsanitize=address )
ADD_DEFINITIONS( -DNO_OPEN_MACRO )
if( ${CMAKE_BUILD_TYPE} MATCHES "[rR][eE][lL][wW][iI].*" )
ADD_DEFINITIONS( -D_REL_DEBUG )
endif()
if( ${CMAKE_BUILD_TYPE} MATCHES "[dD][eE][bB][uU][gG]"
OR ${CMAKE_BUILD_TYPE} MATCHES "[rR][eE][lL][wW][iI].*" )
ADD_DEFINITIONS( -D_DEBUG )
endif()
if( WIN32 )
set( SACK_BASE M:/sack )
else( WIN32 )
set( SACK_BASE ${CMAKE_SOURCE_DIR}/../../sack )
if( NOT EXISTS ${SACK_BASE} )
set( SACK_BASE ${CMAKE_SOURCE_DIR}/../sack )
endif( NOT EXISTS ${SACK_BASE} )
endif( WIN32 )
# __NO_OPTIONS__ __NO_INTERFACE_SUPPORT__ __NO_ODBC__
set( DEFINITIONS __STATIC__ __STATIC_GLOBALS__
USE_SQLITE USE_SQLITE_INTERFACE FORCE_COLOR_MACROS NO_FILEOP_ALIAS
_CRT_SECURE_NO_WARNINGS NEED_SHLAPI NEED_SHLOBJ JSON_PARSER_MAIN_SOURCE "SQLITE_ENABLE_LOCKING_STYLE=0"
MINIMAL_JSON_PARSE_ALLOCATE
SUPPORT_LOG_ALLOCATE # lower level output; fputs
__DISABLE_UDP_SYSLOG__ # there's no options to enable this so just don't include it.
__DISABLE_SYSLOGD_SYSLOG__ # there's no options to enable this so just don't include it.
xOPENSSL_API_LEVEL=10100
#OPENSSL_API_COMPAT=10101
"TARGET_INSTALL_PREFIX=\"${CMAKE_CURRENT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}\""
)
if( __ANDROID__ )
SET( DEFINITIONS ${DEFINITIONS} __ANDROID__ )
endif( __ANDROID__ )
if( USE_SYSTEM_SSL )
add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/openssl
COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/include/openssl ${CMAKE_CURRENT_SOURCE_DIR}/include/openssl
)
add_custom_target( dossl DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/include/openssl )
endif( USE_SYSTEM_SSL )
# may need to be enabled for some early logging
# vfs_module initialized system log to use the stderr FILE* anyway.
#set( MOREDEFS "DEFAULT_OUTPUT_STDERR=1" )
if( APPLE )
set( DEFINITIONS ${DEFINITIONS} __MAC__ )
endif( APPLE )
if( EXISTS ${SACK_BASE} )
set( INCLUDES
-I${SACK_BASE}/include
-I${SACK_BASE}/src/contrib/sha1lib
-I${SACK_BASE}/src/contrib/K12/lib
-I${SACK_BASE}/src/contrib/sqlite/3.27.1-TableAlias
)
FILE( WRITE ${CMAKE_BINARY_DIR}/config.ppc "/*CMake Option defined*/\n" )
FILE( APPEND ${CMAKE_BINARY_DIR}/config.ppc "// clang-format off\n" )
foreach( DEF ${DEFINITIONS} )
ADD_DEFINITIONS( -D${DEF} )
#FILE( APPEND ${CMAKE_BINARY_DIR}/config.ppc "#define ${DEF}\n" )
ENDFOREACH()
FILE( APPEND ${CMAKE_BINARY_DIR}/config.ppc "#define NO_AUTO_VECTLIB_NAMES\n" )
FILE( APPEND ${CMAKE_BINARY_DIR}/config.ppc "#define NODE_ADDON_BUILD\n" )
#FILE( APPEND ${CMAKE_BINARY_DIR}/config.ppc "#define SHA2_LOCAL\n" )
SET( EXTRA_HEADERS
${SACK_BASE}/include/stdhdrs.h
${SACK_BASE}/include/network.h
${SACK_BASE}/include/sack_ssh.h
${SACK_BASE}/include/pssql.h
${SACK_BASE}/include/sqlgetoption.h
${SACK_BASE}/include/idle.h
${SACK_BASE}/include/filesys.h
${SACK_BASE}/include/filemon.h
${SACK_BASE}/include/sack_vfs.h
${SACK_BASE}/include/json_emitter.h
${SACK_BASE}/include/vesl_emitter.h
${SACK_BASE}/include/jsox_parser.h
${SACK_BASE}/include/html5.websocket.client.h
${SACK_BASE}/include/html5.websocket.h
${SACK_BASE}/include/http.h
${SACK_BASE}/include/procreg.h
${SACK_BASE}/include/configscript.h
${SACK_BASE}/include/salty_generator.h
${SACK_BASE}/include/sackcomm.h
${SACK_BASE}/include/translation.h
${SACK_BASE}/include/construct.h
${SACK_BASE}/include/systray.h
${SACK_BASE}/include/md5.h
${SACK_BASE}/include/sha1.h
${SACK_BASE}/include/sha2.h
${SACK_BASE}/include/listports.h
)
if( WIN32 )
SET( SYSTRAY_SOURCES ${SACK_BASE}/src/systraylib/systray.c )
endif( WIN32 )
SET( EXTRA_SOURCES
${SACK_BASE}/src/utils/virtual_file_system/vfs.c
${SACK_BASE}/src/utils/virtual_file_system/vfs_fs.c
${SACK_BASE}/src/utils/virtual_file_system/vfs_os.c
${SACK_BASE}/src/deadstart/deadstart_core.c
${SACK_BASE}/src/sysloglib/syslog.c
${SACK_BASE}/src/systemlib/system.c
${SACK_BASE}/src/systemlib/spawntask.c
${SACK_BASE}/src/systemlib/args.c
${SACK_BASE}/src/systemlib/oswin.c
${SACK_BASE}/src/systemlib/taskinfo.h
${SACK_BASE}/src/timerlib/timers.c
${SACK_BASE}/src/idlelib/idle.c
${SACK_BASE}/src/procreglib/names.c
${SACK_BASE}/src/procreglib/registry.h
${SACK_BASE}/src/memlib/sharemem.c
${SACK_BASE}/src/memlib/memory_operations.c
${SACK_BASE}/src/memlib/sharestruc.h
${SACK_BASE}/src/filesyslib/winfiles.c
${SACK_BASE}/src/filesyslib/filescan.c
${SACK_BASE}/src/filesyslib/pathops.c
${SACK_BASE}/src/filesyslib/filesys_local.h
${SACK_BASE}/src/filesyslib/filemon/allfiles.c
${SACK_BASE}/src/filesyslib/filemon/linuxfiles.c
${SACK_BASE}/src/filesyslib/filemon/windowsfiles.c
${SACK_BASE}/src/typelib/typecode.c
${SACK_BASE}/src/typelib/text.c
${SACK_BASE}/src/typelib/binarylist.c
${SACK_BASE}/src/typelib/familytree.c
${SACK_BASE}/src/typelib/sets.c
${SACK_BASE}/src/typelib/http.c
${SACK_BASE}/src/typelib/url.c
${SACK_BASE}/src/commlib/sackcomm.c
${SACK_BASE}/src/netlib/html5.websocket/html5.websocket.common.c
${SACK_BASE}/src/netlib/html5.websocket/client/html5.websocket.client.c
${SACK_BASE}/src/netlib/html5.websocket/server/html5.websocket.c
${SACK_BASE}/src/netlib/html5.websocket/json/json_parser.c
${SACK_BASE}/src/netlib/html5.websocket/json/json6_parser.c
${SACK_BASE}/src/netlib/html5.websocket/json/jsox_parser.c
${SACK_BASE}/src/netlib/html5.websocket/json/json_emitter.c
${SACK_BASE}/src/netlib/html5.websocket/json/vesl_parser.c
${SACK_BASE}/src/netlib/network.c
${SACK_BASE}/src/netlib/network_all.c
${SACK_BASE}/src/netlib/network_addresses.c
${SACK_BASE}/src/netlib/tcpnetwork.c
${SACK_BASE}/src/netlib/udpnetwork.c
${SACK_BASE}/src/netlib/netstat_win32.c
${SACK_BASE}/src/netlib/netstat_linux.c
${NETWORK_MORE_SOURCES}
${SACK_BASE}/src/netlib/net_winsock2.c
${SACK_BASE}/src/netlib/ping.c
${SACK_BASE}/src/netlib/ssl_layer.c
${SACK_BASE}/src/netlib/ssh_layer.c
${SACK_BASE}/src/salty_random_generator/salty_generator.c
${SACK_BASE}/src/salty_random_generator/crypt_util.c
${SACK_BASE}/src/salty_random_generator/block_shuffle.c
${SACK_BASE}/src/contrib/md5lib/md5c.c
${SACK_BASE}/src/contrib/sha1lib/sha1.c
${SACK_BASE}/src/contrib/sha2lib/sha2.c
${SACK_BASE}/src/contrib/sha3lib/sha3.c
${SACK_BASE}/src/contrib/K12/lib/KangarooTwelve.c
${SACK_BASE}/src/contrib/sqlite/sqlite_interface.c
${SACK_BASE}/src/SQLlib/sqlstruc.h
${SACK_BASE}/src/configlib/configscript.c
${SACK_BASE}/src/SQLlib/sqlstub.c
${SACK_BASE}/src/SQLlib/sqlwrap.c
${SACK_BASE}/src/SQLlib/sqlutil.c
${SACK_BASE}/src/SQLlib/guid.c
${SACK_BASE}/src/SQLlib/sqlparse3.c
${SACK_BASE}/src/SQLlib/optlib/getoption.c
${SACK_BASE}/src/SQLlib/optlib/getoption_v4.c
${SACK_BASE}/src/SQLlib/optlib/optionutil.c
${SACK_BASE}/src/SQLlib/optlib/optionutil_v4.c
${SACK_BASE}/src/windows_hardware_library/listhids.c
${SACK_BASE}/src/windows_hardware_library/listports.c
${SACK_BASE}/src/translationlib/translate.c
${SACK_BASE}/src/systraylib/systray.c
${SYSTRAY_SOURCES}
${SACK_BASE}/src/deadstart/deadstart_lib.c
)
# android has to force this off....
# Message service support - SYSV Message Queue IPC.
# Unused; network websocket connectivity suffices.
#if( ON )
#set( EXTRA_SOURCES ${EXTRA_SOURCES}
# #${SACK_BASE}/src/msgsvr/client/global.h
# ${SACK_BASE}/src/typelib/msgqueue.c
# ${SACK_BASE}/src/msgsvr/client/client_common.c
# ${SACK_BASE}/src/msgsvr/client/client_client.c
# ${SACK_BASE}/src/msgsvr/client/client_events.c
# ${SACK_BASE}/src/msgsvr/client/client_input.c
# ${SACK_BASE}/src/msgsvr/client/client_local.c
# ${SACK_BASE}/src/msgsvr/client/client_output.c
# ${SACK_BASE}/src/msgsvr/client/client_service.c
# ${SACK_BASE}/src/msgsvr/summoner/construct.c
#)
#endif( ON )
if( __ANDROID__ )
set( EXTRA_SOURCES ${EXTRA_SOURCES}
${SACK_BASE}/src/netlib/android_ifaddrs.h
${SACK_BASE}/src/netlib/android_ifaddrs.c
)
endif( __ANDROID__ )
set( NEED_UUID ON )
set( UUID_SOURCES
${SACK_BASE}/src/contrib/uuid-1.6.2/uuid_amalg.c
# ${SACK_BASE}/src/contrib/uuid-1.6.2/uuid.c
# ${SACK_BASE}/src/contrib/uuid-1.6.2/uuid_md5.c
# ${SACK_BASE}/src/contrib/uuid-1.6.2/uuid_sha1.c
# ${SACK_BASE}/src/contrib/uuid-1.6.2/uuid_dce.c
# ${SACK_BASE}/src/contrib/uuid-1.6.2/uuid_mac.c
# ${SACK_BASE}/src/contrib/uuid-1.6.2/uuid_prng.c
# ${SACK_BASE}/src/contrib/uuid-1.6.2/uuid_str.c
# ${SACK_BASE}/src/contrib/uuid-1.6.2/uuid_time.c
# ${SACK_BASE}/src/contrib/uuid-1.6.2/uuid_ui128.c
# ${SACK_BASE}/src/contrib/uuid-1.6.2/uuid_ui64.c
)
#if( NEED_UUID )
set( EXTRA_SOURCES ${EXTRA_SOURCES} ${UUID_SOURCES} )
#if( MAKING_SACK_CORE )
# add_definitions( -D__INTERNAL_UUID__ )
#endif( MAKING_SACK_CORE )
#add_definitions( -DUUID_SOURCE )
#endif( NEED_UUID )
SET( BUILD_AMALGAM on )
set( C_SOURCES
${SACK_BASE}/src/contrib/sqlite/3.45.0-TableAlias/sqlite3.c
)
add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/src/sack
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/src/sack
)
if( MSVC )
set( EXTRA_DEPENDS COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/src/sack )
else()
set( EXTRA_DEPENDS DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/sack )
endif( )
add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/src/sack/sqlite3.c
${EXTRA_DEPENDS}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${C_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/src/sack/
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
if( CMAKE_VERSION VERSION_GREATER 3.21 )
foreach( path libssh2 libssh2/cmake libssh2/include libssh2/LICENSES libssh2/src )
#message( "process path: ${path}" )
FILE( MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/sack/${path} )
FILE( GLOB files RELATIVE ${SACK_BASE}/src/contrib/libssh2 ${SACK_BASE}/src/contrib/${path}/* )
foreach( file ${files} )
#message( "addfile: ${path} ${file}" )
if( NOT IS_DIRECTORY ${SACK_BASE}/src/contrib/libssh2/${file} )
FILE( COPY_FILE ${SACK_BASE}/src/contrib/libssh2/${file} ${CMAKE_CURRENT_SOURCE_DIR}/src/sack/libssh2/${file} ONLY_IF_DIFFERENT )
endif()
endforeach()
endforeach()
#FILE( COPY_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/sack/libssh2/local/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/src/sack/libssh2/CMakeLists.txt )
#FILE( COPY_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/sack/libssh2/src/local/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/src/sack/libssh2/src/CMakeLists.txt )
else()
message( "No copy rule for libssh2 updates" )
endif()
if( WIN32 )
set( PPCTOOL c:/tools/ppc.exe )
if( NOT EXISTS ${PPCTOOL} )
set( PPCTOOL c:/general/tools/ppc.exe )
endif( NOT EXISTS ${PPCTOOL} )
elseif( APPLE )
set( PPCTOOL /usr/local/bin/ppc )
else()
set( PPCTOOL /usr/bin/ppc )
if( NOT EXISTS ${PPCTOOL} )
set( PPCTOOL /usr/local/bin/ppc )
endif( NOT EXISTS ${PPCTOOL} )
if( NOT EXISTS ${PPCTOOL} )
set( PPCTOOL $ENV{HOME}/bin/ppc )
endif( NOT EXISTS ${PPCTOOL} )
if( NOT EXISTS ${PPCTOOL} )
set( PPCTOOL TileFails/ppx )
endif( NOT EXISTS ${PPCTOOL} )
endif( WIN32 )
if( EXISTS ${PPCTOOL} )
set( AMALG_COMMAND ${PPCTOOL} -c -K -once -ssio -sd ${INCLUDES} -p -o${CMAKE_CURRENT_SOURCE_DIR}/src/sack/sack.cc ${EXTRA_SOURCES} )
set( AMALG_COMMAND2 ${PPCTOOL} -c -K -once -ssio -sd ${INCLUDES} -p -o${CMAKE_CURRENT_SOURCE_DIR}/src/sack/sack.h ${EXTRA_HEADERS} )
add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/src/sack/sack.cc
#COMMAND cmake -E echo ${AMALG_COMMAND}
${EXTRA_DEPENDS}
COMMAND ${AMALG_COMMAND}
#COMMAND cmake -E echo ${AMALG_COMMAND2}
COMMAND ${AMALG_COMMAND2}
DEPENDS ${EXTRA_SOURCES} ${EXTRA_HEADERS}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
add_custom_target( doit DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/sack/sack.cc )
SET_TARGET_PROPERTIES(doit PROPERTIES FOLDER "SACK Amalgamator" )
endif( EXISTS ${PPCTOOL} )
else( EXISTS ${SACK_BASE} )
foreach( DEF ${DEFINITIONS} )
ADD_DEFINITIONS( -D${DEF} )
ENDFOREACH()
endif( EXISTS ${SACK_BASE} )
set( LIBRESSL_VERSION 3.9.2 )
set( LIBRESSL_SKIP_INSTALL ON CACHE BOOL "" )
set( LIBRESSL_APPS OFF CACHE BOOL "" )
set( LIBRESSL_TESTS OFF CACHE BOOL "" )
if( NOT WIN32 )
set( OPENSSLDIR "/" )
endif( NOT WIN32 )
if( CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
set( CMAKE_C_FLAGS_ORIG ${CMAKE_C_FLAGS} )
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-c++17-extensions -Wno-sign-compare -Wno-missing-field-initializers" )
endif()
add_subdirectory( src/sack/libressl/${LIBRESSL_VERSION} )
if( CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
set( CMAKE_C_FLAGS ${CMAKE_C_FLAGS_ORIG} )
endif()
include_directories( ${CMAKE_BINARY_DIR}/include )
include_directories( src/sack/libressl/${LIBRESSL_VERSION}/include )
set( SSL_LIBS ssl crypto tls )
ADD_DEFINITIONS( -DLIBRESSL_DISABLE_OVERRIDE_WINCRYPT_DEFINES_WARNING )
include_directories( ./include ${CMAKE_JS_INC} src/sack )
if( WIN32 )
set( MORE_MODULE_SOURCES src/reg_access.cc
src/hid_module.cc
src/playSound_module.cc
src/win32/commandline.cc
src/win32/window_shell.cc
# src/win32/service.cc
src/gui/sack_systray.cc
# src/fixup_windows_executable.cc
)
elseif( UNIX )
set( MORE_MODULE_SOURCES
src/linux/commandline.cc
)
endif( WIN32 )
if( HOST_NWJS )
set( MORE_MODULE_SOURCES ${MORE_MODULE_SOURCES} src/nwjs.cc )
endif( HOST_NWJS )
if( HOST_NWJS )
set( NWJS_CPP_SOURCES nw.js/win_delay_load_hook.cc )
# STRING( REPLACE "/DELAYLOAD:NODE.EXE" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}" )
set( NODE_LIBS ${NODE_LIBS};${CMAKE_CURRENT_SOURCE_DIR}/nw.js/lib/node.lib;${CMAKE_CURRENT_SOURCE_DIR}/nw.js/lib/nw.lib )
else()
set( NODE_LIBS ${NODE_LIBS};${CMAKE_JS_LIB} )
endif( HOST_NWJS )
SET( CPP_SOURCES
${NWJS_CPP_SOURCES}
src/vfs_module.cc
src/objStore_module.cc
src/thread_module.cc
src/sql_module.cc
src/com_interface.cc
src/jsonParse.cc
src/jsoxParse.cc
src/tls_interface.cc
src/srg_module.cc
src/websocket_module.cc
src/network_module.cc
src/config_module.cc
src/task_module.cc
src/fileMonitor_module.cc
src/system_module.cc
src/text_object.cc
src/ssh2_module.cc
${MORE_MODULE_SOURCES}
${CMAKE_CURRENT_SOURCE_DIR}/src/sack/sack.cc
)
SET( C_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/sack/sqlite3.c
)
# SET( ZBASEDIR src/sack/zlib-1.3 )
# include( ${ZBASEDIR}/CMakeLists.part )
# source_group("Source Files\\zlib-1.3 Library" FILES ${ZLIB_SOURCE})
SET( LIBSSH2_SKIP_INSTALL ON )
set( LIBSSH2_BUILD_SHARED_LIBS OFF )
SET( LIBSSH2_SKIP_DOCS ON )
set( LIBSSH2_BUILD_DOCS OFF )
SET( LIBSSH2_BUILD_DEBUG ON )
set( LIBSSH2_BUILD_EXAMPLES OFF )
set( LIBSSH2_BUILD_TESTING OFF )
SET( ENABLE_ZLIB_COMPRESSION ON )
SET( OPENSSL_ROOT_DIR ../libressl/3.9.2 )
add_subdirectory( src/sack/libssh2 )
include_directories( src/sack/libssh2/include )
set( PROJECT sack_vfs )
add_library(${PROJECT} SHARED ${CPP_SOURCES} ${ZLIB_SOURCE} ${C_SOURCES} )
set_source_files_properties( ${CMAKE_CURRENT_SOURCE_DIR}/src/sack/sqlite3.c PROPERTIES
COMPILE_DEFINITIONS "SQLITE_ENABLE_LOCKING_STYLE=0;SQLITE_THREADSAFE=0;SQLITE_OMIT_UTF16;SQLITE_ENABLE_COLUMN_METADATA;SQLITE_ENABLE_STAT4" )
# reduces possible issues between release and debug runtimes.
if( USE_SACK_ALLOCATOR )
set( MOREDEFS "${MOREDEFS};USE_SACK_CUSTOM_MEMORY_ALLOCATION" )
set_source_files_properties( ${CMAKE_CURRENT_SOURCE_DIR}/src/sack/sack.cc PROPERTIES
COMPILE_DEFINITIONS "USE_SACK_CUSTOM_MEMORY_ALLOCATION" )
endif( USE_SACK_ALLOCATOR )
if( WIN32 )
# force using native CS (which are slightly slower than SACK's implementation) (test/debug option)
# set( MOREDEFS "${MOREDEFS};USE_NATIVE_CRITICAL_SECTION" )
SET( MOREDEFS "${MOREDEFS};_WIN32_WINNT=0x601" )
endif( WIN32 )
if( UNIX )
add_definitions( -D__INTERNAL_UUID__ )
add_definitions( -DUUID_SOURCE )
set( EXTRA_LD_OPTS -Wl,-Bsymbolic )
#add_definitions( -D__NO_ODBC__ )
endif( UNIX )
set_target_properties(${PROJECT} PROPERTIES PREFIX "" SUFFIX ".node")
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# so picky about not setting c++17 for C files - who cares?
if( FORCE_C20 OR ( ${NODE_VERSION_MAJOR} GREATER_EQUAL 22 ) )
set_source_files_properties( ${CPP_SOURCES} PROPERTIES
COMPILE_FLAGS "/std:c++20" )
elseif( ${NODE_VERSION_MAJOR} GREATER_EQUAL 19 )
set_source_files_properties( ${CPP_SOURCES} PROPERTIES
COMPILE_FLAGS "/std:c++17" )
endif()
if( WIN32 )
execute_process( COMMAND cmd.exe /c where clang-clx OUTPUT_VARIABLE CLANG_WHERE ERROR_VARIABLE CLANG_WHERE_ERROR )
#message( "VAR:${CLANG_WHERE} OR ${CLANG_WHERE_ERROR}" )
if( "x${CLANG_WHERE_ERROR}" STREQUAL "x" )
#message( "PROCESS PATH: ${CLANG_WHERE}" )
get_filename_component( CLANG_PATH ${CLANG_WHERE} DIRECTORY )
get_filename_component( CLANG_INSTALL_PATH ${CLANG_PATH} DIRECTORY )
#message( "CLANG_WHERE ${CLANG_WHERE} PATH:${CLANG_INSTALL_PATH} (END)" )
FILE( WRITE ${CMAKE_BINARY_DIR}/Directory.build.props "<Project>\n" )
FILE( APPEND ${CMAKE_BINARY_DIR}/Directory.build.props "\t<PropertyGroup>\n" )
FILE( APPEND ${CMAKE_BINARY_DIR}/Directory.build.props "\t\t<LLVMInstallDir>${CLANG_INSTALL_PATH}</LLVMInstallDir>\n" )
FILE( APPEND ${CMAKE_BINARY_DIR}/Directory.build.props "\t\t<LLVMToolsVersion>18.0.0</LLVMToolsVersion>\n" )
FILE( APPEND ${CMAKE_BINARY_DIR}/Directory.build.props "\t</PropertyGroup>\n" )
FILE( APPEND ${CMAKE_BINARY_DIR}/Directory.build.props "</Project>\n" )
endif()
endif()
endif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if( CMAKE_COMPILER_IS_GNUCC )
if( ${NODE_VERSION_MAJOR} GREATER_EQUAL 23 )
set_source_files_properties( ${CPP_SOURCES} PROPERTIES
COMPILE_FLAGS "-std=c++20" )
elseif( ${NODE_VERSION_MAJOR} GREATER_EQUAL 19 )
set_source_files_properties( ${CPP_SOURCES} PROPERTIES
COMPILE_FLAGS "-std=c++17" )
endif()
LIST( GET CPP_SOURCES 1 ONE_CPP_SOURCE)
get_source_file_property( OLD_CPP_SOURCE_FLAGS ${ONE_CPP_SOURCE} COMPILE_FLAGS )
set_source_files_properties( ${CPP_SOURCES} PROPERTIES
COMPILE_FLAGS "${OLD_CPP_SOURCE_FLAGS} -Wno-volatile" )
set_target_properties(${PROJECT} PROPERTIES COMPILE_FLAGS "-Wno-unused-result -Wno-address-of-packed-member -Wno-stringop-overflow -Wno-format-truncation" )
endif( CMAKE_COMPILER_IS_GNUCC )
set_target_properties(${PROJECT} PROPERTIES COMPILE_DEFINITIONS "BUILDING_NODE_EXTENSION;TARGETNAME=\"${PROJECT}.node\";${MOREDEFS}" )
#if( USE_SYSTEM_SSL )
# make sure ssl is linked to be used locally
# add_dependencies( ${PROJECT} dossl )
#endif( USE_SYSTEM_SSL )
target_link_libraries(${PROJECT} ${EXTRA_LD_OPTS} ${SSL_LIBS} ${NODE_LIBS} libssh2 )
if( WIN32 )
target_link_libraries(${PROJECT} winmm ws2_32 rpcrt4 iphlpapi odbc32 psapi ntdll crypt32 cryptui )
endif( WIN32 )
if( UNIX )
target_link_libraries( ${PROJECT} odbc )
if( NOT APPLE )
target_link_libraries( ${PROJECT} uuid )
#target_link_libraries( ${PROJECT} asan )
endif( NOT APPLE )
endif( UNIX )
if( __ANDROID__ )
target_link_libraries( ${PROJECT} log )
endif( __ANDROID__ )
SET_TARGET_PROPERTIES(${SSL_LIBS} PROPERTIES FOLDER "LibreSSL" )
SET_TARGET_PROPERTIES(bs_obj crypto_obj ssl_obj tls_obj tls_compat_obj compat_obj PROPERTIES FOLDER "LibreSSL" )
SET_TARGET_PROPERTIES( libssh2 PROPERTIES FOLDER "LibSSH2" )
#add_library( ntdll SHARED ntdll.c )
#add_library( kernel32 SHARED kernel32.c )