2022-07-04 08:30:11 +00:00
# Source Code for raknet
file (
2022-07-16 23:24:16 +00:00
G L O B S O U R C E S _ R A K N E T
L I S T _ D I R E C T O R I E S f a l s e
R E L A T I V E " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } "
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / r a k n e t / S o u r c e / * . c p p
2022-07-04 08:30:11 +00:00
)
# Source Code for recast
file (
2022-07-16 23:24:16 +00:00
G L O B S O U R C E S _ R E C A S T
L I S T _ D I R E C T O R I E S f a l s e
R E L A T I V E " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } "
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / r e c a s t n a v i g a t i o n / R e c a s t / S o u r c e / * . c p p
2022-07-04 08:30:11 +00:00
)
# Source Code for detour
file (
2022-07-16 23:24:16 +00:00
G L O B S O U R C E S _ D E T O U R
L I S T _ D I R E C T O R I E S f a l s e
R E L A T I V E " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } "
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / r e c a s t n a v i g a t i o n / D e t o u r / S o u r c e / * . c p p
2022-07-04 08:30:11 +00:00
)
# Source Code for tinyxml2
file (
2022-07-16 23:24:16 +00:00
G L O B S O U R C E S _ T I N Y X M L 2
L I S T _ D I R E C T O R I E S f a l s e
R E L A T I V E " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } "
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / t i n y x m l 2 / t i n y x m l 2 . c p p
2022-07-04 08:30:11 +00:00
)
# Source Code for libbcrypt
file (
2022-07-16 23:24:16 +00:00
G L O B S O U R C E S _ L I B B C R Y P T
L I S T _ D I R E C T O R I E S f a l s e
R E L A T I V E " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } "
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / l i b b c r y p t / * . c
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / l i b b c r y p t / s r c / * . c
2022-07-04 08:30:11 +00:00
)
file (
2022-07-16 23:24:16 +00:00
G L O B S O U R C E S _ S Q L I T E 3
L I S T _ D I R E C T O R I E S f a l s e
R E L A T I V E " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } "
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / S Q L i t e / * . c p p
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / S Q L i t e / * . c
2022-07-04 08:30:11 +00:00
)
# mariadb connector cpp
# On Windows ClangCL can't compile the connector from source but can link to an msvc compiled one,
# so prefer the prebuilt binaries unless MARIADB_BUILD_SOURCE is specified
if ( WIN32 AND NOT MARIADB_BUILD_SOURCE )
set ( MARIADB_MSI_DIR "${PROJECT_BINARY_DIR}/msi" )
set ( MARIADB_CONNECTOR_DIR "${PROJECT_BINARY_DIR}/mariadbcpp" )
set ( MARIADB_C_CONNECTOR_DIR "${MARIADB_CONNECTOR_DIR}/MariaDB/MariaDB Connector C 64-bit" )
set ( MARIADB_CPP_CONNECTOR_DIR "${MARIADB_CONNECTOR_DIR}/MariaDB/MariaDB C++ Connector 64-bit" )
file ( MAKE_DIRECTORY "${MARIADB_MSI_DIR}" )
file ( MAKE_DIRECTORY "${MARIADB_CONNECTOR_DIR}" )
if ( NOT EXISTS "${MARIADB_MSI_DIR}/mariadb-connector-c-3.2.5-win64.msi" )
message ( "Downloading mariadb connector/c" )
file ( DOWNLOAD https://dlm.mariadb.com/1936366/connectors/c/connector-c-3.2.5/mariadb-connector-c-3.2.5-win64.msi
" $ { M A R I A D B _ M S I _ D I R } / m a r i a d b - c o n n e c t o r - c - 3 . 2 . 5 - w i n 6 4 . m s i "
E X P E C T E D _ H A S H M D 5 = 0 9 d 4 1 8 c 2 9 0 1 0 9 0 6 8 a 5 b e a 1 3 6 d a f c a 3 6 b )
endif ( )
if ( NOT EXISTS "${MARIADB_MSI_DIR}/mariadb-connector-cpp-1.0.1-win64.msi" )
message ( "Downloading mariadb connector/c++" )
file ( DOWNLOAD https://dlm.mariadb.com/1683453/connectors/cpp/connector-cpp-1.0.1/mariadb-connector-cpp-1.0.1-win64.msi
" $ { M A R I A D B _ M S I _ D I R } / m a r i a d b - c o n n e c t o r - c p p - 1 . 0 . 1 - w i n 6 4 . m s i "
E X P E C T E D _ H A S H M D 5 = 5 4 8 e 7 4 3 f b f 0 6 7 d 2 1 d 4 2 b 8 1 d 9 5 8 b f 4 e d 7 )
endif ( )
file ( TO_NATIVE_PATH "${MARIADB_CONNECTOR_DIR}" MSIEXEC_TARGETDIR )
# extract msi files without installing to users system
if ( NOT EXISTS "${MARIADB_C_CONNECTOR_DIR}" )
file ( TO_NATIVE_PATH "${MARIADB_MSI_DIR}/mariadb-connector-c-3.2.5-win64.msi" MSI_DIR )
execute_process ( COMMAND msiexec /a ${ MSI_DIR } /qn TARGETDIR= ${ MSIEXEC_TARGETDIR } )
endif ( )
if ( NOT EXISTS "${MARIADB_CPP_CONNECTOR_DIR}" )
file ( TO_NATIVE_PATH "${MARIADB_MSI_DIR}/mariadb-connector-cpp-1.0.1-win64.msi" MSI_DIR )
execute_process ( COMMAND msiexec /a ${ MSI_DIR } /qn TARGETDIR= ${ MSIEXEC_TARGETDIR } )
endif ( )
set ( MARIADB_SHARED_LIBRARY_LOCATION "${MARIADB_CPP_CONNECTOR_DIR}/mariadbcpp.dll" )
set ( MARIADB_IMPLIB_LOCATION "${MARIADB_CPP_CONNECTOR_DIR}/mariadbcpp.lib" )
set ( MARIADB_INCLUDE_DIR "${MARIADB_CPP_CONNECTOR_DIR}/include/mariadb" )
add_custom_target ( mariadb_connector_cpp )
add_custom_command ( TARGET mariadb_connector_cpp POST_BUILD
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
" $ { M A R I A D B _ C P P _ C O N N E C T O R _ D I R } / m a r i a d b c p p . d l l "
" $ { M A R I A D B _ C _ C O N N E C T O R _ D I R } / l i b / l i b m a r i a d b . d l l "
" $ { P R O J E C T _ B I N A R Y _ D I R } " )
# MariaDB uses plugins that the database needs to load, the prebuilt binaries by default will try to find the libraries in system directories,
# so set this define and the servers will set the MARIADB_PLUGIN_DIR environment variable to the appropriate directory.
# Plugin directory is determined at dll load time (this will happen before main()) so we need to delay the dll load so that we can set the environment variable
add_link_options ( /DELAYLOAD: ${ MARIADB_SHARED_LIBRARY_LOCATION } )
add_compile_definitions ( MARIADB_PLUGIN_DIR_OVERRIDE= "${MARIADB_CPP_CONNECTOR_DIR}/plugin" )
else ( ) # Build from source
include ( ExternalProject )
if ( WIN32 )
set ( MARIADB_EXTRA_COMPILE_FLAGS /EHsc )
set ( MARIADB_EXTRA_CMAKE_ARGS -DWITH_MSI=OFF )
elseif ( APPLE )
set ( MARIADB_EXTRA_COMPILE_FLAGS -D_GLIBCXX_USE_CXX11_ABI=0 )
set ( MARIADB_EXTRA_CMAKE_ARGS -DWITH_EXTERNAL_ZLIB=ON -DOPENSSL_ROOT_DIR= ${ OPENSSL_ROOT_DIR } )
else ( )
set ( MARIADB_EXTRA_COMPILE_FLAGS -D_GLIBCXX_USE_CXX11_ABI=0 )
endif ( )
ExternalProject_Add ( mariadb_connector_cpp
S O U R C E _ D I R $ { C M A K E _ S O U R C E _ D I R } / t h i r d p a r t y / m a r i a d b - c o n n e c t o r - c p p
C M A K E _ A R G S " - D C M A K E _ C X X _ F L A G S : S T R I N G = $ { M A R I A D B _ E X T R A _ C O M P I L E _ F L A G S } "
- D C M A K E _ B U I L D _ R P A T H _ U S E _ O R I G I N = $ { C M A K E _ B U I L D _ R P A T H _ U S E _ O R I G I N }
- D C M A K E _ I N S T A L L _ P R E F I X = . / m a r i a d b c p p # Points the connector to the correct plugin directory
- D I N S T A L L _ P L U G I N D I R = p l u g i n
$ { M A R I A D B _ E X T R A _ C M A K E _ A R G S }
P R E F I X " $ { P R O J E C T _ B I N A R Y _ D I R } / m a r i a d b c p p "
B U I L D _ C O M M A N D c m a k e - - b u i l d . - - c o n f i g R e l W i t h D e b I n f o - j $ { _ _ m a r i a _ d b _ c o n n e c t o r _ c o m p i l e _ j o b s _ _ }
I N S T A L L _ C O M M A N D " " )
ExternalProject_Get_Property ( mariadb_connector_cpp BINARY_DIR )
if ( WIN32 )
set ( MARIADB_SHARED_LIBRARY_NAME mariadbcpp.dll )
set ( MARIADB_PLUGIN_SUFFIX .dll )
set ( MARIADB_IMPLIB_LOCATION "${BINARY_DIR}/RelWithDebInfo/mariadbcpp.lib" )
# When built from source windows only seems to check same folder as exe instead specified folder, so use
# environment variable to force it
add_link_options ( /DELAYLOAD:mariadbcpp.dll )
add_compile_definitions ( MARIADB_PLUGIN_DIR_OVERRIDE= "${PROJECT_BINARY_DIR}/mariadbcpp/plugin" )
else ( )
set ( MARIADB_SHARED_LIBRARY_NAME libmariadbcpp ${ CMAKE_SHARED_LIBRARY_SUFFIX } )
set ( MARIADB_PLUGIN_SUFFIX .so )
endif ( )
get_property ( isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG )
if ( isMultiConfig )
set ( MARIADB_SHARED_LIBRARY_LOCATION "${BINARY_DIR}/RelWithDebInfo/${MARIADB_SHARED_LIBRARY_NAME}" )
set ( MARIADB_SHARED_LIBRARY_COPY_LOCATION "${PROJECT_BINARY_DIR}/$<CONFIG>" )
set ( MARIADB_PLUGINS_LOCATION "${BINARY_DIR}/libmariadb/RelWithDebInfo" )
else ( )
set ( MARIADB_SHARED_LIBRARY_LOCATION "${BINARY_DIR}/${MARIADB_SHARED_LIBRARY_NAME}" )
set ( MARIADB_SHARED_LIBRARY_COPY_LOCATION "${PROJECT_BINARY_DIR}" )
set ( MARIADB_PLUGINS_LOCATION "${BINARY_DIR}/libmariadb" )
endif ( )
set ( MARIADB_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/thirdparty/mariadb-connector-cpp/include/" )
add_custom_command ( TARGET mariadb_connector_cpp POST_BUILD
C O M M A N D $ { C M A K E _ C O M M A N D } - E m a k e _ d i r e c t o r y
$ { B I N A R Y _ D I R } / m a r i a d b c p p / p l u g i n
$ { M A R I A D B _ S H A R E D _ L I B R A R Y _ C O P Y _ L O C A T I O N }
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
$ { M A R I A D B _ S H A R E D _ L I B R A R Y _ L O C A T I O N }
$ { M A R I A D B _ S H A R E D _ L I B R A R Y _ C O P Y _ L O C A T I O N }
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
$ { M A R I A D B _ P L U G I N S _ L O C A T I O N } / c a c h i n g _ s h a 2 _ p a s s w o r d $ { M A R I A D B _ P L U G I N _ S U F F I X }
$ { M A R I A D B _ P L U G I N S _ L O C A T I O N } / c l i e n t _ e d 2 5 5 1 9 $ { M A R I A D B _ P L U G I N _ S U F F I X }
$ { M A R I A D B _ P L U G I N S _ L O C A T I O N } / d i a l o g $ { M A R I A D B _ P L U G I N _ S U F F I X }
$ { M A R I A D B _ P L U G I N S _ L O C A T I O N } / m y s q l _ c l e a r _ p a s s w o r d $ { M A R I A D B _ P L U G I N _ S U F F I X }
$ { M A R I A D B _ P L U G I N S _ L O C A T I O N } / s h a 2 5 6 _ p a s s w o r d $ { M A R I A D B _ P L U G I N _ S U F F I X }
$ { B I N A R Y _ D I R } / m a r i a d b c p p / p l u g i n )
endif ( )
# Remove the CMakeLists.txt file from the tests folder for the maria-db-connector so we dont compile the tests.
if ( EXISTS "${CMAKE_SOURCE_DIR}/thirdparty/mariadb-connector-cpp/test/CMakeLists.txt" )
file ( REMOVE "${CMAKE_SOURCE_DIR}/thirdparty/mariadb-connector-cpp/test/CMakeLists.txt" )
endif ( )
2022-07-16 23:24:16 +00:00
# Create mariadb connector library object
2022-07-04 08:30:11 +00:00
add_library ( mariadbConnCpp SHARED IMPORTED GLOBAL )
set_property ( TARGET mariadbConnCpp PROPERTY IMPORTED_LOCATION ${ MARIADB_SHARED_LIBRARY_LOCATION } )
2022-07-16 23:24:16 +00:00
2022-07-04 08:30:11 +00:00
if ( WIN32 )
set_property ( TARGET mariadbConnCpp PROPERTY IMPORTED_IMPLIB ${ MARIADB_IMPLIB_LOCATION } )
endif ( )
2022-07-16 23:24:16 +00:00
# Add directories to include lists
2022-07-04 08:30:11 +00:00
target_include_directories ( mariadbConnCpp INTERFACE ${ MARIADB_INCLUDE_DIR } )
add_dependencies ( mariadbConnCpp mariadb_connector_cpp )
2022-07-16 23:24:16 +00:00
# Create our third party library objects
2022-07-04 08:30:11 +00:00
add_library ( raknet ${ SOURCES_RAKNET } )
add_library ( tinyxml2 ${ SOURCES_TINYXML2 } )
add_library ( detour ${ SOURCES_DETOUR } )
add_library ( recast ${ SOURCES_RECAST } )
add_library ( libbcrypt ${ SOURCES_LIBBCRYPT } )
add_library ( sqlite3 ${ SOURCES_SQLITE3 } )
2022-07-16 23:24:16 +00:00
if ( WIN32 )
# Link Win Sockets 2 to RakNet
target_link_libraries ( raknet ws2_32 )
elseif ( UNIX )
# Add warning disable flags and link Unix libraries to sqlite3
target_link_libraries ( sqlite3 pthread dl m )
# -Wno-unused-result -Wno-unknown-pragmas -fpermissive
target_compile_options ( sqlite3 PRIVATE "-Wno-return-local-addr" "-Wno-maybe-uninitialized" )
target_compile_options ( raknet PRIVATE "-Wno-write-strings" "-Wformat-overflow=0" "-Wformat=0" )
target_compile_options ( libbcrypt PRIVATE "-Wno-implicit-function-declaration" "-Wno-int-conversion" )
endif ( )
# Download Backtrace if configured
if ( UNIX AND NOT APPLE )
include ( FetchContent )
if ( __include_backtrace__ AND __compile_backtrace__ )
FetchContent_Declare (
b a c k t r a c e
G I T _ R E P O S I T O R Y h t t p s : / / g i t h u b . c o m / i a n l a n c e t a y l o r / l i b b a c k t r a c e . g i t
)
2022-07-04 08:30:11 +00:00
2022-07-16 23:24:16 +00:00
FetchContent_MakeAvailable ( backtrace )
if ( NOT EXISTS ${ backtrace_SOURCE_DIR } /.libs )
set ( backtrace_make_cmd "${backtrace_SOURCE_DIR}/configure --prefix=\" /usr\ " --enable-shared --with-system-libunwind" )
execute_process (
C O M M A N D b a s h - c " c d $ { b a c k t r a c e _ S O U R C E _ D I R } & & $ { b a c k t r a c e _ m a k e _ c m d } & & m a k e & & c d $ { C M A K E _ S O U R C E _ D I R } "
)
endif ( )
link_directories ( ${ backtrace_SOURCE_DIR } /.libs/ )
include_directories ( ${ backtrace_SOURCE_DIR } )
endif ( )
endif ( )