a617100e9c
Properly configures, builds, registers and attempts to encode. Gets stuck on an unusual long stall when finally having enough frames to encode.
157 lines
4.7 KiB
CMake
157 lines
4.7 KiB
CMake
cmake_minimum_required(VERSION 2.8.12)
|
|
PROJECT(enc-aomedia-av1)
|
|
|
|
################################################################################
|
|
# Options
|
|
################################################################################
|
|
SET(AOMEDIA_AV1_BUILD_DIR "" CACHE PATH "Path to the directory containing the CMake build files.")
|
|
SET(AOMEDIA_AV1_INCLUDE_DIR "" CACHE PATH "Include directory for AOMedia1 containing aom.h")
|
|
|
|
if(NOT TARGET obs-studio)
|
|
SET(OBSSTUDIO_DIR "" CACHE PATH "OBS Studio Source Code Directory")
|
|
endif()
|
|
|
|
# Validate
|
|
if(AOMEDIA_AV1_BUILD_DIR STREQUAL "")
|
|
message(FATAL_ERROR "AV1: Build directory not set!")
|
|
return()
|
|
elseif(NOT EXISTS "${AOMEDIA_AV1_BUILD_DIR}/RelWithDebInfo/aom.lib")
|
|
message(FATAL_ERROR "AV1: Build directory set, but could not find RelWithDebInfo/aom.lib!")
|
|
return()
|
|
elseif(NOT EXISTS "${AOMEDIA_AV1_BUILD_DIR}/Debug/aom.lib")
|
|
message(FATAL_ERROR "AV1: Build directory set, but could not find Debug/aom.lib!")
|
|
return()
|
|
endif()
|
|
|
|
if(AOMEDIA_AV1_INCLUDE_DIR STREQUAL "")
|
|
message(FATAL_ERROR "AV1: Include directory not set!")
|
|
return()
|
|
elseif(NOT EXISTS "${AOMEDIA_AV1_INCLUDE_DIR}/aom/aom.h")
|
|
message(FATAL_ERROR "AV1: Include directory set, but could not find aom.h!")
|
|
return()
|
|
endif()
|
|
|
|
if(NOT TARGET obs-studio)
|
|
if(OBSSTUDIO_DIR STREQUAL "")
|
|
message(FATAL_ERROR "OBSSTUDIO_DIR not set!")
|
|
return()
|
|
endif()
|
|
if(NOT EXISTS "${OBSSTUDIO_DIR}/libobs/obs-module.h")
|
|
message(FATAL_ERROR "OBSSTUDIO_DIR invalid!")
|
|
return()
|
|
endif()
|
|
endif()
|
|
|
|
################################################################################
|
|
# Code
|
|
################################################################################
|
|
|
|
# Versioning
|
|
SET(VERSION_MAJOR 0)
|
|
SET(VERSION_MINOR 0)
|
|
SET(VERSION_PATCH 0)
|
|
configure_file(
|
|
"${PROJECT_SOURCE_DIR}/source/version.h.in"
|
|
"${PROJECT_BINARY_DIR}/source/version.h"
|
|
)
|
|
|
|
# Headers
|
|
SET(enc-aomedia-av1_HEADERS
|
|
"${PROJECT_SOURCE_DIR}/source/av1-encoder.h"
|
|
"${PROJECT_SOURCE_DIR}/source/plugin.h"
|
|
"${PROJECT_BINARY_DIR}/source/version.h"
|
|
"${PROJECT_SOURCE_DIR}/source/strings.h"
|
|
)
|
|
|
|
# Sources
|
|
SET(enc-aomedia-av1_SOURCES
|
|
"${PROJECT_SOURCE_DIR}/source/av1-encoder.cpp"
|
|
"${PROJECT_SOURCE_DIR}/source/plugin.cpp"
|
|
"${PROJECT_SOURCE_DIR}/source/version.h.in"
|
|
)
|
|
|
|
# Libraries
|
|
SET(enc-aomedia-av1_LIBRARIES
|
|
debug ${AOMEDIA_AV1_BUILD_DIR}/Debug/aom.lib
|
|
optimized ${AOMEDIA_AV1_BUILD_DIR}/RelWithDebInfo/aom.lib
|
|
)
|
|
|
|
# Include Directories
|
|
INCLUDE_DIRECTORIES(
|
|
"${AOMEDIA_AV1_BUILD_DIR}/dist/include"
|
|
"${AOMEDIA_AV1_BUILD_DIR}"
|
|
"${PROJECT_BINARY_DIR}"
|
|
"${PROJECT_BINARY_DIR}/source"
|
|
"${PROJECT_SOURCE_DIR}"
|
|
"${PROJECT_SOURCE_DIR}/source"
|
|
)
|
|
|
|
################################################################################
|
|
# Standalone and OBS Studio Build Data
|
|
################################################################################
|
|
if(TARGET obs-studio)
|
|
# Directories
|
|
INCLUDE_DIRECTORIES(
|
|
"${CMAKE_SOURCE_DIR}"
|
|
)
|
|
SET(LIBOBS_LIBRARIES libobs)
|
|
else()
|
|
# Standlone Specific
|
|
|
|
# Find OBS Libraries
|
|
SET(obsPath "${OBSSTUDIO_DIR}")
|
|
INCLUDE("${obsPath}/cmake/external/Findlibobs.cmake")
|
|
|
|
# Compiling
|
|
INCLUDE_DIRECTORIES(
|
|
"${OBSSTUDIO_DIR}"
|
|
)
|
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
|
endif()
|
|
|
|
################################################################################
|
|
# Build
|
|
################################################################################
|
|
ADD_LIBRARY(enc-aomedia-av1 MODULE
|
|
${enc-aomedia-av1_HEADERS}
|
|
${enc-aomedia-av1_SOURCES}
|
|
)
|
|
TARGET_LINK_LIBRARIES(enc-aomedia-av1
|
|
${LIBOBS_LIBRARIES}
|
|
${enc-aomedia-av1_LIBRARIES}
|
|
)
|
|
|
|
# All Warnings, Extra Warnings, Pedantic
|
|
if(MSVC)
|
|
# Force to always compile with W4
|
|
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()
|
|
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
|
|
# Update if necessary
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")
|
|
endif()
|
|
|
|
if(TARGET obs-studio)
|
|
install_obs_plugin_with_data(enc-aomedia-av1 data)
|
|
else()
|
|
math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
|
|
add_custom_command(TARGET enc-aomedia-av1 POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${PROJECT_SOURCE_DIR}/data"
|
|
"${PROJECT_SOURCE_DIR}/#Build/data/obs-plugins/enc-aomedia-av1"
|
|
)
|
|
add_custom_command(TARGET enc-aomedia-av1 POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
"$<TARGET_FILE:enc-aomedia-av1>"
|
|
"${PROJECT_SOURCE_DIR}/#Build/obs-plugins/${BITS}bit/$<TARGET_FILE_NAME:enc-aomedia-av1>"
|
|
)
|
|
add_custom_command(TARGET enc-aomedia-av1 POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
"$<TARGET_FILE_DIR:enc-aomedia-av1>/enc-aomedia-av1.pdb"
|
|
"${PROJECT_SOURCE_DIR}/#Build/obs-plugins/${BITS}bit/enc-aomedia-av1.pdb"
|
|
)
|
|
endif()
|