Skip to content

Update CMake #60

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 45 additions & 78 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,79 +1,33 @@
cmake_minimum_required(VERSION 2.8.12)
cmake_minimum_required(VERSION 3.28...3.30)

project(libdshowcapture)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/")

option(BUILD_SHARED_LIBS "Build shared library" ON)

find_package(CXX11 REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_FLAGS}")

if(${CMAKE_C_COMPILER_ID} MATCHES "Clang" OR ${CMAKE_CXX_COMPILER_ID} MATCHES
"Clang")
set(CMAKE_COMPILER_IS_CLANG TRUE)
if(NOT MSVC)
message(FATAL_ERROR "libdshowcapture only supports building with Visual Studio and MSVC.")
endif()

if(CMAKE_COMPILER_IS_GNUCC
OR CMAKE_COMPILER_IS_GNUCXX
OR CMAKE_COMPILER_IS_CLANG)
set(CMAKE_CXX_FLAGS
"-Wall -Wextra -Wno-unused-function -Werror-implicit-function-declaration -Wno-missing-field-initializers ${CMAKE_CXX_FLAGS} -fno-strict-aliasing"
)
set(CMAKE_C_FLAGS
"-Wall -Wextra -Wno-unused-function -Werror-implicit-function-declaration -Wno-missing-braces -Wno-missing-field-initializers ${CMAKE_C_FLAGS} -std=gnu99 -fno-strict-aliasing"
)

option(USE_LIBC++ "Use libc++ instead of libstdc++" ${APPLE})
if(USE_LIBC++)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
endif()
elseif(MSVC)
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
endif()
option(BUILD_SHARED_LIBS "Build shared library" ON)

# Disable pointless constant condition warnings
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4127 /wd4201")
endif()
# Set C and C++ language standards to C17 and C++17
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED TRUE)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

if(WIN32)
add_definitions(-DUNICODE -D_UNICODE)
if(BUILD_SHARED_LIBS)
add_definitions(-DDSHOWCAPTURE_EXPORTS)
endif()
endif()
# Disable C and C++ extensions
set(CMAKE_C_EXTENSIONS FALSE)
set(CMAKE_CXX_EXTENSIONS FALSE)

if(MSVC)
set(CMAKE_C_FLAGS_DEBUG "/DDEBUG=1 /D_DEBUG=1 ${CMAKE_C_FLAGS_DEBUG}")
set(CMAKE_CXX_FLAGS_DEBUG "/DDEBUG=1 /D_DEBUG=1 ${CMAKE_C_FLAGS_DEBUG}")
# Set symbols to be hidden by default for C and C++
set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE)

if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO")
endif()
else()
if(MINGW)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_WIN32_WINNT=0x0600 -DWINVER=0x0600")
set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} -D_WIN32_WINNT=0x0600 -DWINVER=0x0600")
endif()
set(CMAKE_C_FLAGS_DEBUG "-DDEBUG=1 -D_DEBUG=1 ${CMAKE_C_FLAGS_DEBUG}")
set(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG=1 -D_DEBUG=1 ${CMAKE_CXX_FLAGS_DEBUG}")
endif()
add_library(libdshowcapture)

if(MINGW)
include(CheckSymbolExists)
check_symbol_exists(MINGW_HAS_SECURE_API "_mingw.h" HAVE_MINGW_HAS_SECURE_API)
if(NOT HAVE_MINGW_HAS_SECURE_API)
message(FATAL_ERROR "mingw must be compiled with --enable-secure-api")
endif()
endif()

set(libdshowcapture_SOURCES
target_sources(
libdshowcapture
PRIVATE
external/capture-device-support/Library/EGAVResult.cpp
external/capture-device-support/Library/ElgatoUVCDevice.cpp
external/capture-device-support/Library/win/EGAVHIDImplementation.cpp
Expand All @@ -91,9 +45,7 @@ set(libdshowcapture_SOURCES
source/dshow-formats.cpp
source/dshow-media-type.cpp
source/dshow-encoded-device.cpp
source/log.cpp)

set(libdshowcapture_HEADERS
source/log.cpp
dshowcapture.hpp
source/external/IVideoCaptureFilter.h
source/capture-filter.hpp
Expand All @@ -106,16 +58,31 @@ set(libdshowcapture_HEADERS
source/dshow-enum.hpp
source/dshow-formats.hpp
source/dshow-media-type.hpp
source/log.hpp)
source/log.hpp
)

add_library(libdshowcapture ${libdshowcapture_SOURCES}
${libdshowcapture_HEADERS})
# Set /W4
# Disable pointless constant condition warnings
target_compile_options(libdshowcapture PRIVATE /W4 /wd4127 /wd4201)

target_include_directories(
libdshowcapture
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/external/capture-device-support/Library)
if(CMAKE_VS_PLATFORM_NAME STREQUAL Win32)
target_link_options(libdshowcapture PRIVATE /SAFESEH:NO)
endif()

target_compile_definitions(libdshowcapture PRIVATE _UP_WINDOWS=1)
target_include_directories(libdshowcapture PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/external/capture-device-support/Library)

target_link_libraries(libdshowcapture PRIVATE setupapi strmiids ksuser winmm
wmcodecdspuuid)
target_compile_definitions(
libdshowcapture
PRIVATE
UNICODE
_UNICODE
$<$<CONFIG:DEBUG>:DEBUG>
$<$<CONFIG:DEBUG>:_DEBUG>
$<$<BOOL:${BUILD_SHARED_LIBS}>:DSHOWCAPTURE_EXPORTS>
_UP_WINDOWS=1
)

target_link_libraries(
libdshowcapture
PRIVATE setupapi strmiids ksuser winmm wmcodecdspuuid
)
68 changes: 0 additions & 68 deletions cmake/Modules/FindCXX11.cmake

This file was deleted.