Files
obs-enc-aomedia-av1/CMakeLists.txt
T

157 lines
4.7 KiB
CMake
Raw Normal View History

2017-07-11 11:29:13 +02:00
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()