[cmake] FindDav1d use new default structure for building/searching packages

This commit is contained in:
fuzzard 2025-11-04 13:39:05 +10:00
parent 12c372da21
commit 67efed9f3f
5 changed files with 110 additions and 26 deletions

View File

@ -116,6 +116,7 @@ option(ENABLE_INTERNAL_FFMPEG "Enable internal ffmpeg?" OFF)
dependent_option(ENABLE_INTERNAL_ASS "Enable internal libass?") dependent_option(ENABLE_INTERNAL_ASS "Enable internal libass?")
dependent_option(ENABLE_INTERNAL_CEC "Enable internal libcec?") dependent_option(ENABLE_INTERNAL_CEC "Enable internal libcec?")
dependent_option(ENABLE_INTERNAL_CURL "Enable internal libcurl?") dependent_option(ENABLE_INTERNAL_CURL "Enable internal libcurl?")
dependent_option(ENABLE_INTERNAL_DAV1D "Enable internal dav1d?")
dependent_option(ENABLE_INTERNAL_EXIV2 "Enable internal exiv2?") dependent_option(ENABLE_INTERNAL_EXIV2 "Enable internal exiv2?")
dependent_option(ENABLE_INTERNAL_FLATBUFFERS "Enable internal flatbuffers?") dependent_option(ENABLE_INTERNAL_FLATBUFFERS "Enable internal flatbuffers?")
dependent_option(ENABLE_INTERNAL_FMT "Enable internal fmt?") dependent_option(ENABLE_INTERNAL_FMT "Enable internal fmt?")
@ -143,9 +144,6 @@ endif()
if(UNIX) if(UNIX)
option(FFMPEG_PATH "Path to external ffmpeg?" "") option(FFMPEG_PATH "Path to external ffmpeg?" "")
option(ENABLE_INTERNAL_FSTRCMP "Enable internal fstrcmp?" OFF) option(ENABLE_INTERNAL_FSTRCMP "Enable internal fstrcmp?" OFF)
if(ENABLE_INTERNAL_FFMPEG)
option(ENABLE_INTERNAL_DAV1D "Enable internal dav1d?" OFF)
endif()
option(ENABLE_INTERNAL_GTEST "Enable internal gtest?" OFF) option(ENABLE_INTERNAL_GTEST "Enable internal gtest?" OFF)
endif() endif()

View File

@ -8,8 +8,85 @@
# LIBRARY::Dav1d - The dav1d library # LIBRARY::Dav1d - The dav1d library
if(NOT TARGET LIBRARY::${CMAKE_FIND_PACKAGE_NAME}) if(NOT TARGET LIBRARY::${CMAKE_FIND_PACKAGE_NAME})
include(cmake/scripts/common/ModuleHelpers.cmake) include(cmake/scripts/common/ModuleHelpers.cmake)
macro(buildmacroDav1d)
set(enable_asm false)
if(CPU STREQUAL "x86_64" OR CPU MATCHES "i.86")
find_package(NASM)
if(NASM_EXECUTABLE)
set(enable_asm true)
set(${${CMAKE_FIND_PACKAGE_NAME}_MODULE_LC}_BINARIES "nasm" "NASM_EXECUTABLE")
endif()
elseif(SDK_TARGET_ARCH STREQUAL "x86" OR SDK_TARGET_ARCH MATCHES "x64")
# Windows processor checks
find_package(NASM)
if(NASM_EXECUTABLE)
set(enable_asm true)
set(${${CMAKE_FIND_PACKAGE_NAME}_MODULE_LC}_BINARIES "nasm" "NASM_EXECUTABLE")
endif()
else()
find_package(GASPP)
if(TARGET GASPP::GASPP)
set(enable_asm true)
set(${${CMAKE_FIND_PACKAGE_NAME}_MODULE_LC}_BINARIES "gas-preprocessor.pl" "GASPP_PL")
endif()
endif()
find_package(Meson REQUIRED)
find_package(Ninja REQUIRED)
if(WIN32 OR WINDOWS_STORE)
set(${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_libType shared)
set(${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_SHARED_LIB 1)
set(patches "${CORE_SOURCE_DIR}/tools/depends/target/${${CMAKE_FIND_PACKAGE_NAME}_MODULE_LC}/01-win-sharedname.patch")
generate_patchcommand("${patches}")
unset(patches)
if(WINDOWS_STORE)
set(${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_EXE_LINKER_FLAGS "/APPCONTAINER windowsapp.lib")
endif()
create_module_dev_env()
else()
set(${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_libType static)
endif()
# generate meson cross file for build target
generate_mesoncrossfile()
if(EXISTS ${DEPENDS_PATH}/share/${${CMAKE_FIND_PACKAGE_NAME}_MODULE_LC}-cross-file.meson)
set(${${CMAKE_FIND_PACKAGE_NAME}_MODULE_LC}_CROSS_FILE --cross-file=${DEPENDS_PATH}/share/${${CMAKE_FIND_PACKAGE_NAME}_MODULE_LC}-cross-file.meson)
elseif(EXISTS ${DEPENDS_PATH}/share/cross-file.meson)
set(${${CMAKE_FIND_PACKAGE_NAME}_MODULE_LC}_CROSS_FILE --cross-file=${DEPENDS_PATH}/share/cross-file.meson)
endif()
set(CONFIGURE_COMMAND ${${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_dev_env}
${CMAKE_COMMAND} -E env --modify NINJA=set:${NINJA_EXECUTABLE}
${MESON_EXECUTABLE} setup ./build
--buildtype=release
--default-library=${${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_libType}
--prefix=${DEPENDS_PATH}
--libdir=lib
-Denable_asm=${enable_asm}
-Denable_tools=false
-Denable_examples=false
-Denable_tests=false
${${${CMAKE_FIND_PACKAGE_NAME}_MODULE_LC}_CROSS_FILE})
set(BUILD_COMMAND ${${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_dev_env}
${NINJA_EXECUTABLE} -C ./build)
set(INSTALL_COMMAND ${NINJA_EXECUTABLE} -C ./build install)
set(BUILD_IN_SOURCE 1)
BUILD_DEP_TARGET()
endmacro()
set(${CMAKE_FIND_PACKAGE_NAME}_MODULE_LC dav1d) set(${CMAKE_FIND_PACKAGE_NAME}_MODULE_LC dav1d)
SETUP_BUILD_VARS() SETUP_BUILD_VARS()
@ -18,38 +95,34 @@ if(NOT TARGET LIBRARY::${CMAKE_FIND_PACKAGE_NAME})
SEARCH_EXISTING_PACKAGES() SEARCH_EXISTING_PACKAGES()
if((ENABLE_INTERNAL_DAV1D AND ENABLE_INTERNAL_FFMPEG) AND NOT (WIN32 OR WINDOWS_STORE)) if((${${CMAKE_FIND_PACKAGE_NAME}_SEARCH_NAME}_VERSION VERSION_LESS ${${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_VER} AND ENABLE_INTERNAL_DAV1D) OR
((CORE_SYSTEM_NAME STREQUAL linux OR CORE_SYSTEM_NAME STREQUAL freebsd) AND ENABLE_INTERNAL_DAV1D))
message(STATUS "Building ${${CMAKE_FIND_PACKAGE_NAME}_MODULE_LC}: \(version \"${${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_VER}\"\)") message(STATUS "Building ${${CMAKE_FIND_PACKAGE_NAME}_MODULE_LC}: \(version \"${${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_VER}\"\)")
set(DAV1D_VERSION ${${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_VER})
find_program(NINJA_EXECUTABLE ninja REQUIRED) cmake_language(EVAL CODE "
find_program(MESON_EXECUTABLE meson REQUIRED) buildmacro${CMAKE_FIND_PACKAGE_NAME}()
")
set(CONFIGURE_COMMAND ${MESON_EXECUTABLE}
--buildtype=release
--default-library=static
--prefix=${DEPENDS_PATH}
--libdir=lib
-Denable_asm=true
-Denable_tools=false
-Denable_examples=false
-Denable_tests=false
../${${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_BUILD_NAME})
set(BUILD_COMMAND ${NINJA_EXECUTABLE})
set(INSTALL_COMMAND ${NINJA_EXECUTABLE} install)
BUILD_DEP_TARGET()
endif() endif()
if(${${CMAKE_FIND_PACKAGE_NAME}_SEARCH_NAME}_FOUND) if(${${CMAKE_FIND_PACKAGE_NAME}_SEARCH_NAME}_FOUND)
if(TARGET PkgConfig::${${CMAKE_FIND_PACKAGE_NAME}_SEARCH_NAME} AND NOT TARGET ${${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_BUILD_NAME}) # cmake target and not building internal
add_library(LIBRARY::${CMAKE_FIND_PACKAGE_NAME} ALIAS PkgConfig::${${CMAKE_FIND_PACKAGE_NAME}_SEARCH_NAME}) if(TARGET dav1d::dav1d AND NOT TARGET ${${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_BUILD_NAME})
elseif(TARGET dav1d::dav1d)
add_library(LIBRARY::${CMAKE_FIND_PACKAGE_NAME} ALIAS dav1d::dav1d) add_library(LIBRARY::${CMAKE_FIND_PACKAGE_NAME} ALIAS dav1d::dav1d)
elseif(TARGET PkgConfig::${${CMAKE_FIND_PACKAGE_NAME}_SEARCH_NAME} AND NOT TARGET ${${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_BUILD_NAME})
add_library(LIBRARY::${CMAKE_FIND_PACKAGE_NAME} ALIAS PkgConfig::${${CMAKE_FIND_PACKAGE_NAME}_SEARCH_NAME})
else() else()
set(${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_TYPE LIBRARY) set(${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_TYPE LIBRARY)
SETUP_BUILD_TARGET() SETUP_BUILD_TARGET()
add_dependencies(LIBRARY::${CMAKE_FIND_PACKAGE_NAME} ${${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_BUILD_NAME}) add_dependencies(LIBRARY::${CMAKE_FIND_PACKAGE_NAME} ${${${CMAKE_FIND_PACKAGE_NAME}_MODULE}_BUILD_NAME})
# We are building as a requirement, so set LIB_BUILD property to allow calling
# modules to know we will be building, and they will want to rebuild as well.
# Property must be set on actual TARGET and not the ALIAS
set_target_properties(LIBRARY::${CMAKE_FIND_PACKAGE_NAME} PROPERTIES LIB_BUILD ON)
endif() endif()
ADD_MULTICONFIG_BUILDMACRO()
endif() endif()
endif() endif()

View File

@ -0,0 +1,10 @@
--- a/src/meson.build
+++ b/src/meson.build
@@ -390,6 +390,7 @@
version : dav1d_soname_version,
soversion : dav1d_soversion,
install : true,
+ name_prefix : 'lib',
)
dav1d_dep = declare_dependency(link_with: libdav1d,

View File

@ -3,3 +3,4 @@ VERSION=1.5.1
ARCHIVE=$(LIBNAME)-$(VERSION).tar.bz2 ARCHIVE=$(LIBNAME)-$(VERSION).tar.bz2
SHA512=43319d75c173003337bb3e0b4ffe1b0b544bfe882dd51097d7634168ee94c0d316a1c04e4f101057ff4629117dde8f22362df1a49d6a058ba510c3e648a437a3 SHA512=43319d75c173003337bb3e0b4ffe1b0b544bfe882dd51097d7634168ee94c0d316a1c04e4f101057ff4629117dde8f22362df1a49d6a058ba510c3e648a437a3
BYPRODUCT=libdav1d.a BYPRODUCT=libdav1d.a
BYPRODUCT_WIN=libdav1d.lib

View File

@ -1,6 +1,7 @@
-include ../../Makefile.include -include ../../Makefile.include
include DAV1D-VERSION include DAV1D-VERSION
DEPS = Makefile DAV1D-VERSION ../../download-files.include DEPS = Makefile DAV1D-VERSION ../../download-files.include \
01-win-sharedname.patch
ifeq ($(CROSS_COMPILING), yes) ifeq ($(CROSS_COMPILING), yes)
DEPS += ../../Makefile.include DEPS += ../../Makefile.include
@ -64,6 +65,7 @@ $(PLATFORM): $(DEPS) | $(TARBALLS_LOCATION)/$(ARCHIVE).$(HASH_TYPE)
rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM) rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM)
cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
cd $(PLATFORM); rm -rf build; mkdir -p build cd $(PLATFORM); rm -rf build; mkdir -p build
cd $(PLATFORM); patch -p1 -i ../01-win-sharedname.patch
cd $(PLATFORM); $(CONFIGURE) . build cd $(PLATFORM); $(CONFIGURE) . build
$(LIBDYLIB): $(PLATFORM) $(LIBDYLIB): $(PLATFORM)