The application links with ffmpeg dll and needs a copy of it to works in the output binary location.
125 lines
3.4 KiB
CMake
125 lines
3.4 KiB
CMake
cmake_minimum_required(VERSION 3.21)
|
|
project(ffmini VERSION 0.0.1)
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Group CMake targets inside a folder
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Generate compile_commands.json for language servers
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
|
|
include(FetchContent)
|
|
FetchContent_Declare(
|
|
fmt
|
|
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
|
|
GIT_TAG 10.1.0
|
|
)
|
|
list(APPEND FETCH_CONTENTS fmt)
|
|
FetchContent_Declare(
|
|
asio
|
|
GIT_REPOSITORY https://github.com/mononerv/asio.git
|
|
GIT_TAG 1f9c5682840d3dc32e6f36f2e0f54a0e854e87d6
|
|
)
|
|
list(APPEND FETCH_CONTENTS asio)
|
|
FetchContent_Declare(
|
|
miniaudio
|
|
GIT_REPOSITORY https://github.com/mononerv/miniaudio.git
|
|
GIT_TAG v0.11.9
|
|
)
|
|
list(APPEND FETCH_CONTENTS miniaudio)
|
|
FetchContent_MakeAvailable(${FETCH_CONTENTS})
|
|
|
|
find_package(FFmpeg REQUIRED)
|
|
|
|
# Group dependencies in Visual Studio and Xcode
|
|
if (CMAKE_GENERATOR MATCHES "Visual Studio" OR CMAKE_GENERATOR MATCHES "Xcode")
|
|
set_target_properties(fmt PROPERTIES FOLDER deps)
|
|
set_target_properties(miniaudio_static PROPERTIES FOLDER deps)
|
|
endif()
|
|
|
|
set(BASE_DEFINITIONS "ASIO_STANDALONE")
|
|
if (APPLE)
|
|
set(PLATFORM_LINK_LIBRARIES
|
|
"-framework Cocoa"
|
|
"-framework IOKit"
|
|
"-framework CoreVideo"
|
|
"-framework OpenGL"
|
|
)
|
|
elseif (UNIX AND NOT APPLE AND NOT EMSCRIPTEN) # Linux, BSD, Solaris, Minix
|
|
set(PLATFORM_LINK_LIBRARIES
|
|
"dl"
|
|
"m"
|
|
"GL"
|
|
"X11"
|
|
)
|
|
elseif (WIN32)
|
|
list(APPEND BASE_DEFINITIONS
|
|
"_WIN32_WINNT=0x0A00"
|
|
)
|
|
set(PLATFORM_LINK_LIBRARIES "OpenGL32.lib")
|
|
else()
|
|
message(FATAL_ERROR "Unknown platform!")
|
|
endif()
|
|
|
|
# Compiler specific options
|
|
if (NOT MSVC)
|
|
set(BASE_OPTIONS
|
|
"-Wall"
|
|
"-Wextra"
|
|
"-Wconversion"
|
|
"-Wpedantic"
|
|
"-Wshadow"
|
|
"-Werror"
|
|
# fmt warnings
|
|
"-Wno-unknown-attributes"
|
|
# asio
|
|
"-Wno-sign-conversion"
|
|
"-Wno-shadow"
|
|
"-Wno-shorten-64-to-32"
|
|
"-Wno-implicit-int-conversion"
|
|
"-Wno-unused-private-field"
|
|
"-Wno-deprecated-declarations"
|
|
)
|
|
if (EMSCRIPTEN)
|
|
list(APPEND BASE_OPTIONS
|
|
# fmt warnings
|
|
"-Wno-deprecated-literal-operator"
|
|
)
|
|
endif()
|
|
else()
|
|
set(BASE_OPTIONS
|
|
"/W4"
|
|
"/WX"
|
|
"/utf-8"
|
|
"/Zc:__cplusplus"
|
|
#"/fsanitize=address" # Doesn't work without Visual Studio
|
|
)
|
|
endif()
|
|
|
|
set(SOURCE_FILES "ffmini.cpp")
|
|
add_executable(ffmini ${HEADER_FILES} ${SOURCE_FILES})
|
|
target_include_directories(ffmini
|
|
PRIVATE
|
|
${PROJECT_SOURCE_DIR}
|
|
${FFMPEG_INCLUDE_DIR}
|
|
)
|
|
target_compile_definitions(ffmini PRIVATE ${BASE_DEFINITIONS})
|
|
target_compile_features(ffmini PRIVATE cxx_std_20)
|
|
target_compile_options(ffmini PRIVATE ${BASE_OPTIONS})
|
|
target_link_libraries(ffmini
|
|
PRIVATE
|
|
asio::asio
|
|
fmt
|
|
miniaudio::miniaudio
|
|
${FFMPEG_AVCODEC_LIBRARY}
|
|
${FFMPEG_AVDEVICE_LIBRARY}
|
|
${FFMPEG_AVFILTER_LIBRARY}
|
|
${FFMPEG_AVFORMAT_LIBRARY}
|
|
${FFMPEG_AVUTIL_LIBRARY}
|
|
)
|
|
source_group(TREE "${CMAKE_CURRENT_LIST_DIR}" FILES ${SOURCE_FILES})
|
|
|
|
#add_custom_command(
|
|
# TARGET ffmini # Change this to your actual target name
|
|
# POST_BUILD
|
|
# COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
# ${FFMPEG_AVCODEC_LIBRARY}
|
|
# $<TARGET_FILE_DIR:ffmini> # Copy to the output directory of MyExecutable
|
|
#)
|