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 "$" "${PROJECT_SOURCE_DIR}/#Build/obs-plugins/${BITS}bit/$" ) add_custom_command(TARGET enc-aomedia-av1 POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "$/enc-aomedia-av1.pdb" "${PROJECT_SOURCE_DIR}/#Build/obs-plugins/${BITS}bit/enc-aomedia-av1.pdb" ) endif()