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()
|