cmake_minimum_required(VERSION 3.6) project(TeaSpeak-Server) set(CMAKE_VERBOSE_MAKEFILE ON) #--allow-multiple-definition set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -Wall -Wno-reorder -Wno-sign-compare -static-libgcc -static-libstdc++ -g -Wl,-no-whole-archive,--no-undefined -pthread ${MEMORY_DEBUG_FLAGS}") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3") #NDEBUG #set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} -O2") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/environment/) #disable for debug #add_definitions(-DRELEASE_MODE) include_directories(../music/include/) include_directories(../shared/src) include_directories(../license/src) include_directories(../MusicBot/src) include_directories(/usr/local/include/breakpad) include_directories(${LIBRARY_PATH}/tomcrypt/src/headers) include_directories(${LIBRARY_PATH}/spdlog/include) add_definitions(-DLTM_DESC) add_definitions(-DMUSIC_BOT) add_definitions(-DUSE_BORINGSSL) #0 = STABLE #1 = BETA #2 = ALPHA #3 = PRIVATE option(BUILD_TYPE "Sets the build type" OFF) option(BUILD_TYPE_NAME "Sets the build type name" OFF) option(COMPILE_WEB_CLIENT "Enable/Disable the web cleint future" OFF) set(COMPILE_WEB_CLIENT "ON") set(CMAKE_VERBOSE_MAKEFILE ON) set(SERVER_SOURCE_FILES main.cpp src/client/ConnectedClient.cpp src/client/voice/PrecomputedPuzzles.cpp src/client/voice/VoiceClient.cpp src/client/voice/VoiceClientHandschake.cpp src/client/voice/VoiceClientCommandHandler.cpp src/client/voice/VoiceClientPacketHandler.cpp src/client/voice/VoiceClientView.cpp src/TS3ServerClientManager.cpp src/TSServer.cpp src/TS3ServerHeartbeat.cpp src/SignalHandler.cpp src/server/VoiceServer.cpp src/server/POWHandler.cpp src/client/voice/VoiceClientConnection.cpp src/client/ConnectedClientCommandHandler.cpp src/client/ConnectedClientNotifyHandler.cpp src/ServerManager.cpp src/server/file/FileServer.cpp src/channel/ServerChannel.cpp src/channel/ClientChannelView.cpp src/client/file/FileClient.cpp src/client/file/FileClientIO.cpp src/Group.cpp src/manager/BanManager.cpp src/client/InternalClient.cpp #src/weblist/WeblistClient.cpp #src/weblist/WebList.cpp src/client/DataClient.cpp src/server/QueryServer.cpp src/client/query/QueryClient.cpp src/client/query/QueryClientCommands.cpp src/client/query/QueryClientNotify.cpp src/manager/IpListManager.cpp src/ConnectionStatistics.cpp src/manager/TokeManager.cpp src/terminal/CommandHandler.cpp src/manager/ComplainManager.cpp src/DatabaseHelper.cpp src/manager/LetterManager.cpp src/manager/PermissionNameManager.cpp tomcryptTest.cpp src/pinteraction/ApplicationInteraction.cpp src/ServerManagerSnapshot.cpp src/ServerManagerSnapshotDeploy.cpp src/client/music/Song.cpp src/music/PlayablePlaylist.cpp src/InstanceHandler.cpp src/InstanceHandlerSetup.cpp src/Configuration.cpp src/build.cpp src/music/MusicPlaylist.cpp src/client/music/MusicClient.cpp src/client/music/MusicClientPlayer.cpp src/client/ConnectedClientTextCommandHandler.cpp src/music/MusicBotManager.cpp src/client/music/internal_provider/channel_replay/ChannelProvider.cpp src/geo/GeoLocation.cpp src/geo/IP2Location.cpp src/geo/VPNBlocker.cpp src/client/query/XMacroEventTypes.h src/server/VoiceIOManager.cpp src/server/WebIoManager.cpp src/client/SpeakingClient.cpp src/lincense/LicenseHelper.cpp ../shared/src/ssl/SSLManager.cpp src/manager/SqlDataManager.cpp src/ShutdownHelper.cpp src/client/music/MusicQueue.cpp src/lincense/TeamSpeakLicense.cpp src/weblist/WebListManager.cpp src/weblist/TeamSpeakWebClient.cpp ) if(COMPILE_WEB_CLIENT) add_definitions(-DCOMPILE_WEB_CLIENT) set(SERVER_SOURCE_FILES ${SERVER_SOURCE_FILES} src/server/WebServer.cpp src/client/web/WebClient.cpp # src/server/web/WebRTCServer.cpp src/client/web/WSWebClient.cpp src/client/web/SampleHandler.cpp src/client/SpeakingClientHandshake.cpp src/client/web/VoiceBridge.cpp ) endif() add_executable(PermHelper helpers/permgen.cpp) target_link_libraries(PermHelper ${LIBRARY_PATH_ED255} TeaSpeak #Static TeaLicenseHelper #Static TeaMusic #Static ${LIBRARY_PATH_THREAD_POOL} #Static ${LIBRARY_PATH_TERMINAL} #Static ${LIBRARY_PATH_VARIBALES} ${LIBRARY_PATH_YAML} pthread stdc++fs ${LIBEVENT_PATH}/libevent.a ${LIBEVENT_PATH}/libevent_pthreads.a ${LIBRARY_PATH_OPUS} ${LIBRARY_PATH_JSON} ${LIBRARY_PATH_PROTOBUF} #${LIBWEBRTC_LIBRARIES} #ATTENTIAN! WebRTC does not work with crypto! (Already contains a crypto version) ${LIBRARY_TOM_CRYPT} ${LIBRARY_TOM_MATH} #We're forsed to use boringssl caused by the fact that boringssl is already within webrtc! #Require a so sqlite3 ${LIBRARY_PATH_BREAKPAD} ${LIBRARY_PATH_JDBC} ${LIBRARY_PATH_PROTOBUF} ${LIBRARY_PATH_DATA_PIPES} ${LIBRARY_PATH_BORINGSSL_SSL} ${LIBRARY_PATH_BORINGSSL_CRYPTO} dl jemalloc ) add_executable(PermMapHelper helpers/PermMapGen.cpp) target_link_libraries(PermMapHelper ${LIBRARY_PATH_ED255} TeaSpeak #Static TeaLicenseHelper #Static TeaMusic #Static ${LIBRARY_PATH_THREAD_POOL} #Static ${LIBRARY_PATH_TERMINAL} #Static ${LIBRARY_PATH_VARIBALES} ${LIBRARY_PATH_YAML} pthread stdc++fs ${LIBEVENT_PATH}/libevent.a ${LIBEVENT_PATH}/libevent_pthreads.a ${LIBRARY_PATH_OPUS} ${LIBRARY_PATH_JSON} ${LIBRARY_PATH_PROTOBUF} #${LIBWEBRTC_LIBRARIES} #ATTENTIAN! WebRTC does not work with crypto! (Already contains a crypto version) ${LIBRARY_TOM_CRYPT} ${LIBRARY_TOM_MATH} #We're forsed to use boringssl caused by the fact that boringssl is already within webrtc! #Require a so sqlite3 ${LIBRARY_PATH_BREAKPAD} ${LIBRARY_PATH_JDBC} ${LIBRARY_PATH_PROTOBUF} ${LIBRARY_PATH_DATA_PIPES} ${LIBRARY_PATH_BORINGSSL_SSL} ${LIBRARY_PATH_BORINGSSL_CRYPTO} dl jemalloc ) SET(CPACK_PACKAGE_VERSION_MAJOR "1") SET(CPACK_PACKAGE_VERSION_MINOR "3") SET(CPACK_PACKAGE_VERSION_PATCH "25") if(BUILD_TYPE_NAME EQUAL OFF) SET(CPACK_PACKAGE_VERSION_DATA "beta") elseif(BUILD_TYPE_NAME STREQUAL "") SET(CPACK_PACKAGE_VERSION_DATA "") else() SET(CPACK_PACKAGE_VERSION_DATA "-${BUILD_TYPE_NAME}") endif() if(BUILD_TYPE EQUAL OFF) SET(BUILD_TYPE "1") endif() set_source_files_properties(src/build.cpp PROPERTIES COMPILE_FLAGS "-DBUILD_MAJOR=${CPACK_PACKAGE_VERSION_MAJOR} -DBUILD_MINOR=${CPACK_PACKAGE_VERSION_MINOR} -DBUILD_PATCH=${CPACK_PACKAGE_VERSION_PATCH} -DBUILD_DATA=\"${CPACK_PACKAGE_VERSION_DATA}\" -DBUILD_TYPE=${BUILD_TYPE} -DBUILD_COUNT=0") file(WRITE repro/env/buildVersion.txt "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}${CPACK_PACKAGE_VERSION_DATA}") add_executable(TeaSpeakServer ${SERVER_SOURCE_FILES}) target_link_libraries(TeaSpeakServer ${LIBRARY_PATH_THREAD_POOL} #Static TeaSpeak #Static TeaLicenseHelper #Static TeaMusic #Static ${LIBRARY_PATH_TERMINAL} #Static ${LIBRARY_PATH_VARIBALES} ${LIBRARY_PATH_YAML} pthread stdc++fs ${LIBEVENT_PATH}/libevent.a ${LIBEVENT_PATH}/libevent_pthreads.a ${LIBRARY_PATH_OPUS} ${LIBRARY_PATH_JSON} ${LIBRARY_PATH_PROTOBUF} #We're forsed to use boringssl caused by the fact that boringssl is already within webrtc! #Require a so sqlite3 ${LIBRARY_PATH_BREAKPAD} ${LIBRARY_PATH_PROTOBUF} #${LIBWEBRTC_LIBRARIES} #ATTENTIAN! WebRTC does not work with crypto! (Already contains a crypto version) ${LIBRARY_TOM_CRYPT} ${LIBRARY_TOM_MATH} mysqlclient.a z ${LIBRARY_PATH_ED255} ) if(${COMPILE_WEB_CLIENT}) find_package(LibNice REQUIRED) find_package(UsrSCTP REQUIRED) target_link_libraries(TeaSpeakServer LibNice::LibNice ${LIBRARY_PATH_DATA_PIPES} ) endif() include_directories(${LIBRARY_PATH}/boringssl/include/) target_link_libraries(TeaSpeakServer ${LIBRARY_PATH_BORINGSSL_SSL} ${LIBRARY_PATH_BORINGSSL_CRYPTO} dl ) set(DISABLE_JEMALLOC ON) if(NOT DISABLE_JEMALLOC) target_link_libraries(TeaSpeakServer jemalloc ) add_definitions(-DHAVE_JEMALLOC) endif() #Fix RPATH #patchelf --set-rpath ./libs/ TeaSpeakServer #patchelf --remove-rpath TeaSpeakServer #add_custom_command( # TARGET TeaSpeakServer ## COMMAND bash -c "patchelf --set-rpath ./libs/ ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}TeaSpeakServer" # COMMAND bash -c "patchelf --remove-rpath ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}TeaSpeakServer" # WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} # COMMENT "Cleaning RPATH" #)