From a2821394bd77da0ce062d73507cdaab151e58ce4 Mon Sep 17 00:00:00 2001 From: HappyTanuki Date: Fri, 29 Aug 2025 04:53:35 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=BC=EB=8B=A8=20=EB=B9=8C=EB=93=9C=20?= =?UTF-8?q?=EB=90=98=EB=8B=88=20=EC=A2=8B=EC=95=98=EC=93=B0!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- CMakeLists.txt | 160 +++++++++++++++++++++++++++++++++++++++++-------- src/main.cpp | 9 +-- 3 files changed, 143 insertions(+), 30 deletions(-) diff --git a/.gitignore b/.gitignore index ae7866f..7300f02 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,6 @@ Music *.json yt-dlp ffmpeg -password \ No newline at end of file +password +.vs +out \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index b37b991..70419b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,35 +1,145 @@ -cmake_minimum_required (VERSION 3.6) - -INCLUDE_DIRECTORIES(include . ${Boost_INCLUDE_DIR}) - -list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) +cmake_minimum_required (VERSION 3.16) set(BOT_NAME "BumbleCee") - -project(${BOT_NAME}) -aux_source_directory("src" coresrc) -aux_source_directory("src/Audio" commands) -aux_source_directory("src/Commands" commands) -aux_source_directory("src/Queue" settings) -aux_source_directory("src/Settings" settings) -aux_source_directory("src/Utils" settings) -add_executable(${BOT_NAME} ${coresrc} ${commands} ${settings}) +project(${BOT_NAME} LANGUAGES CXX) set(CMAKE_BUILD_TYPE Debug) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) -set( Boost_USE_STATIC_LIBS ON ) -find_package(Boost REQUIRED) +set(BOOST_EXCLUDE_LIBRARIES nowide) -target_include_directories(${BOT_NAME} PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/include - /usr/include/opus +if(WIN32) + set(OPENSSL_ROOT_DIR "C:/Program Files/OpenSSL-Win64") + set(OPENSSL_INCLUDE_DIR "${OPENSSL_ROOT_DIR}/include") + + if(CMAKE_BUILD_TYPE STREQUAL Debug) + set(OPENSSL_CRYPTO_LIBRARY "${OPENSSL_ROOT_DIR}/lib/VC/x64/MTd/libcrypto.lib") + set(OPENSSL_SSL_LIBRARY "${OPENSSL_ROOT_DIR}/lib/VC/x64/MTd/libssl.lib") + else() + set(OPENSSL_CRYPTO_LIBRARY "${OPENSSL_ROOT_DIR}/lib/VC/x64/MT/libcrypto.lib") + set(OPENSSL_SSL_LIBRARY "${OPENSSL_ROOT_DIR}/lib/VC/x64/MT/libssl.lib") + endif() +endif() + +find_package(OpenSSL REQUIRED) + +include(FetchContent) + +FetchContent_Declare( + Boost + URL "https://github.com/boostorg/boost/releases/download/boost-1.89.0/boost-1.89.0-cmake.7z" + DOWNLOAD_EXTRACT_TIMESTAMP ON +) +message(STATUS "Fetching and making available Boost...") +FetchContent_MakeAvailable(Boost) + +FetchContent_Declare( + dpp + GIT_REPOSITORY "https://github.com/brainboxdotcc/DPP.git" + GIT_TAG "v10.1.3" + GIT_SHALLOW ON + CMAKE_ARGS -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} -DCMAKE_CXX_STANDARD_REQUIRED=ON +) +message(STATUS "Fetching and making available dpp...") +FetchContent_MakeAvailable(dpp) + +# ------------------------------------------------------------- +# 플랫폼별 FFmpeg 바이너리 다운로드 및 링크 +# ------------------------------------------------------------- +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + set(FFMPEG_URL "https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl-shared.zip") + set(FFMPEG_ARCHIVE_NAME "ffmpeg-windows") + set(FFMPEG_LIB_DIR "lib") + set(FFMPEG_INCLUDE_DIR "include") +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + set(FFMPEG_URL "https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-lgpl-shared.tar.xz") + set(FFMPEG_ARCHIVE_NAME "ffmpeg-linux") + set(FFMPEG_LIB_DIR "lib") + set(FFMPEG_INCLUDE_DIR "include") +else() + message(FATAL_ERROR "Unsupported platform for FFmpeg precompiled binaries.") +endif() + +FetchContent_Declare( + ffmpeg + URL ${FFMPEG_URL} + DOWNLOAD_EXTRACT_TIMESTAMP ON + SOURCE_DIR ${CMAKE_BINARY_DIR}/${FFMPEG_ARCHIVE_NAME} +) +message(STATUS "Fetching and making available ffmpeg...") +FetchContent_MakeAvailable(ffmpeg) + +set(FFMPEG_LIBRARY_PATH ${ffmpeg_SOURCE_DIR}/${FFMPEG_LIB_DIR}) +set(FFMPEG_INCLUDE_PATH ${ffmpeg_SOURCE_DIR}/${FFMPEG_INCLUDE_DIR}) + +find_library(AVCODEC_LIBRARY NAMES avcodec PATHS ${FFMPEG_LIBRARY_PATH} NO_DEFAULT_PATH) +find_library(AVFORMAT_LIBRARY NAMES avformat PATHS ${FFMPEG_LIBRARY_PATH} NO_DEFAULT_PATH) +find_library(AVUTIL_LIBRARY NAMES avutil PATHS ${FFMPEG_LIBRARY_PATH} NO_DEFAULT_PATH) +find_library(SWSCALE_LIBRARY NAMES swscale PATHS ${FFMPEG_LIBRARY_PATH} NO_DEFAULT_PATH) + +if(NOT AVCODEC_LIBRARY OR NOT AVFORMAT_LIBRARY OR NOT AVUTIL_LIBRARY) + message(FATAL_ERROR "FFmpeg 라이브러리를 찾을 수 없습니다. 다운로드 경로를 확인해주세요.") +endif() + +#file(GLOB_RECURSE CORES "src/*.cpp" "src/*.cxx" "src/*.cc") +#file(GLOB_RECURSE AUDIO_SOURCES "src/Audio/*.cpp" "src/Audio/*.cxx" "src/Audio/*.cc") +#file(GLOB_RECURSE COMMANDS_SOURCES "src/Commands/*.cpp" "src/Commands/*.cxx" "src/Commands/*.cc") +#file(GLOB_RECURSE QUEUE_SOURCES "src/Queue/*.cpp" "src/Queue/*.cxx" "src/Queue/*.cc") +#file(GLOB_RECURSE SETTINGS_SOURCES "src/Settings/*.cpp" "src/Settings/*.cxx" "src/Settings/*.cc") +#file(GLOB_RECURSE UTILS_SOURCES "src/Utils/*.cpp" "src/Utils/*.cxx" "src/Utils/*.cc") + +# Combine all found source files into a single list +#set(ALL_SOURCE_FILES +# ${CORES} +# ${AUDIO_SOURCES} +# ${COMMANDS_SOURCES} +# ${QUEUE_SOURCES} +# ${SETTINGS_SOURCES} +# ${UTILS_SOURCES} +#) + +add_executable(${BOT_NAME} src/main.cpp) + +target_link_libraries(${BOT_NAME} PRIVATE dpp) +target_link_libraries(${BOT_NAME} PRIVATE Boost::filesystem) +target_link_libraries(${BOT_NAME} PRIVATE Boost::process) +target_link_libraries(${BOT_NAME} PRIVATE Boost::log) +target_link_libraries(${BOT_NAME} PRIVATE Boost::beast) +target_link_libraries(${BOT_NAME} PRIVATE OpenSSL::Crypto) +target_link_libraries(${BOT_NAME} PRIVATE OpenSSL::SSL) +target_link_libraries(${BOT_NAME} PRIVATE ${AVCODEC_LIBRARY}) +target_link_libraries(${BOT_NAME} PRIVATE ${AVFORMAT_LIBRARY}) +target_link_libraries(${BOT_NAME} PRIVATE ${AVUTIL_LIBRARY}) +target_link_libraries(${BOT_NAME} PRIVATE ${SWSCALE_LIBRARY}) + +if(WIN32) + target_link_libraries(${BOT_NAME} PRIVATE ws2_32) +endif() +if(UNIX AND NOT APPLE AND CMAKE_BUILD_TYPE STREQUAL "Release") + set_target_properties(${PROJECT_NAME} PROPERTIES + BUILD_WITH_INSTALL_RPATH TRUE + INSTALL_RPATH "$ORIGIN" + SKIP_BUILD_RPATH FALSE + BUILD_RPATH "$ORIGIN" + ) +endif() + +target_include_directories(${BOT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) + +target_include_directories(${BOT_NAME} PRIVATE ${OpenSSL_INCLUDE_DIRS}) +target_include_directories(${BOT_NAME} PRIVATE ${FFMPEG_INCLUDE_PATH}) + +add_custom_command(TARGET ${BOT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + "$" + "$" + COMMENT "Copying Boost.Filesystem DLL/so files to output directory" ) -target_link_libraries(${BOT_NAME} - dpp - opus - ogg - oggz - ${Boost_LIBRARIES} +add_custom_command(TARGET ${BOT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + "$" + "$" + COMMENT "Copying Boost.Process DLL/so files to output directory" ) \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index d630530..d5c98e5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,9 +1,10 @@ +#include +#include +#include +#include +#include #include -#include -#include int main(int argc, char* argv[]) { - bumbleBee::BumbleBee bot; - bot.start(); return 0; } \ No newline at end of file