浏览代码

directx12-agility: add new package (#8352)

* directx12-agility: add new package

* directx12-agility: add shared library configuration option

* cmake: update project definition to include description and set C++ standard

* cmake: optimize _IMPORT_PREFIX resolution in directx12-agility configuration files

* cmake: clean up _IMPORT_PREFIX handling in directx12-agility configuration files

* Update cmakelists.txt

* cmake: update project to use C language and streamline installation paths

* cmake: remove unnecessary blank line before version file generation
Saikari 2 月之前
父节点
当前提交
11df83087e

+ 56 - 0
packages/d/directx12-agility/port/cmakelists.txt

@@ -0,0 +1,56 @@
+cmake_minimum_required(VERSION 3.16)
+
+project(directx12-agility
+    DESCRIPTION "DirectX 12 Agility SDK"
+    VERSION ${VERSION}
+    LANGUAGES C
+)
+
+include(CMakePackageConfigHelpers)
+
+find_library(D3D12_LIB NAMES d3d12)
+
+if("${D3D12_LIB}" STREQUAL "D3D12_LIB-NOTFOUND")
+    message(FATAL_ERROR "D3D12.LIB import library from the Windows SDK is required")
+endif()
+
+message(STATUS "Found D3D12.LIB: ${D3D12_LIB}")
+
+install(
+    FILES "${D3D12_LIB}"
+    DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+)
+
+configure_file(
+    "${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}-targets.cmake.in"
+    "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-targets.cmake" @ONLY
+)
+
+configure_file(
+    "${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}.pc.in"
+    "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" @ONLY
+)
+
+configure_file(
+    "${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}-config.cmake.in"
+    "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" @ONLY
+)
+
+write_basic_package_version_file(
+    "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
+    VERSION ${PROJECT_VERSION}
+    COMPATIBILITY SameMajorVersion
+)
+
+install(
+    FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
+    DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
+)
+
+install(
+    FILES 
+        "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
+        "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
+        "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-targets.cmake"
+    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
+)

+ 21 - 0
packages/d/directx12-agility/port/directx12-agility-config.cmake.in

@@ -0,0 +1,21 @@
+@PACKAGE_INIT@
+
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+
+if(EXISTS "${_IMPORT_PREFIX}/bin/D3D12Core.dll")
+    set(directx12-agility_FOUND TRUE)
+    include("${CMAKE_CURRENT_LIST_DIR}/directx12-agility-targets.cmake")
+    set(directx12-agility_Core_FOUND TRUE)
+    set(directx12-agility_Layers_FOUND TRUE)
+    set(directx12-agility_Agility_FOUND TRUE)
+else()
+    set(directx12-agility_FOUND FALSE)
+    if(directx12-agility_FIND_REQUIRED)
+        message(FATAL_ERROR "DirectX12 Agility SDK DLLs not found in ${_IMPORT_PREFIX}/bin/")
+    endif()
+endif()
+
+unset(_IMPORT_PREFIX)

+ 70 - 0
packages/d/directx12-agility/port/directx12-agility-targets.cmake.in

@@ -0,0 +1,70 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
+   message(FATAL_ERROR "CMake >= 2.8.0 required")
+endif()
+if(CMAKE_VERSION VERSION_LESS "2.8.3")
+   message(FATAL_ERROR "CMake >= 2.8.3 required")
+endif()
+
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+if(TARGET Microsoft::DirectX12-Core)
+  return()
+endif()
+
+set(CMAKE_IMPORT_FILE_VERSION)
+
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+
+find_library(_directx12_agility_D3D12_LIB NAMES d3d12)
+if("${_directx12_agility_D3D12_LIB}" STREQUAL "_directx12_agility_D3D12_LIB-NOTFOUND")
+    message(FATAL_ERROR "D3D12.LIB import library from the Windows SDK is required")
+endif()
+
+add_library(Microsoft::DirectX12-Core SHARED IMPORTED)
+
+set_target_properties(Microsoft::DirectX12-Core PROPERTIES
+  IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/D3D12Core.dll"
+  IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/bin/D3D12Core.dll"
+  IMPORTED_IMPLIB "${_directx12_agility_D3D12_LIB}"
+  IMPORTED_CONFIGURATIONS "Debug;Release"
+  IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+)
+
+add_library(Microsoft::DirectX12-Layers SHARED IMPORTED)
+
+set_target_properties(Microsoft::DirectX12-Layers PROPERTIES
+  IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/d3d12SDKLayers.dll"
+  IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/bin/d3d12SDKLayers.dll"
+  IMPORTED_IMPLIB "${_directx12_agility_D3D12_LIB}"
+  IMPORTED_CONFIGURATIONS "Debug;Release"
+  IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+)
+
+add_library(Microsoft::DirectX12-Agility INTERFACE IMPORTED)
+
+set_target_properties(Microsoft::DirectX12-Agility PROPERTIES
+  INTERFACE_LINK_LIBRARIES "Microsoft::DirectX12-Core;Microsoft::DirectX12-Layers"
+)
+
+foreach(target Microsoft::DirectX12-Core Microsoft::DirectX12-Layers Microsoft::DirectX12-Agility)
+  if(TARGET ${target})
+    get_target_property(_target_type ${target} TYPE)
+    if(_target_type STREQUAL "SHARED_LIBRARY")
+      foreach(config Debug Release)
+        get_target_property(_target_location ${target} IMPORTED_LOCATION_${config})
+        if(_target_location AND NOT EXISTS "${_target_location}")
+          message(FATAL_ERROR "The imported target \"${target}\" references the file \"${_target_location}\" but this file does not exist.")
+        endif()
+      endforeach()
+    endif()
+  endif()
+endforeach()

+ 13 - 0
packages/d/directx12-agility/port/directx12-agility.pc.in

@@ -0,0 +1,13 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+bindir=${prefix}/bin
+
+Name: DirectX 12 Agility SDK
+Description: DirectX 12 Agility SDK for Windows graphics development
+Version: @PROJECT_VERSION@
+URL: https://devblogs.microsoft.com/directx/directx-12-agility-sdk
+Requires:
+Libs: -ld3d12
+Cflags: -I${includedir}

+ 50 - 0
packages/d/directx12-agility/xmake.lua

@@ -0,0 +1,50 @@
+package("directx12-agility")
+    set_homepage("https://devblogs.microsoft.com/directx/directx-12-agility-sdk")
+    set_description("DirectX 12 Agility SDK")
+    set_license("Microsoft")
+
+    set_urls("https://www.nuget.org/api/v2/package/Microsoft.Direct3D.D3D12/$(version)/#Microsoft.DXSDK.D3DX-$(version).zip")
+    add_versions("1.618.1", "35a1bb4139f751e19956a0471fb621442450c63b1f100752b27ada6abed7a3da")
+
+    add_configs("shared", {description = "Build shared library.", default = true, type = "boolean", readonly = true})
+
+    add_deps("cmake")
+
+    add_syslinks("d3d12")
+
+    on_install("windows", function (package)
+        os.cp("build/native/include", package:installdir())
+        local REDIST_ARCH = ""
+        if package:is_arch("arm64") then
+            REDIST_ARCH = "arm64"
+        elseif not package:is_arch("arm.*") and package:is_arch64() then
+            REDIST_ARCH = "x64"
+        elseif not package:is_arch("arm.*") and not package:is_arch64() then
+            REDIST_ARCH = "win32"
+        end
+        os.cp(path.join("build/native/bin", REDIST_ARCH, "D3D12Core.dll"), package:installdir("bin"))
+        os.cp(path.join("build/native/bin", REDIST_ARCH, "D3D12Core.pdb"), package:installdir("bin"))
+        os.cp(path.join("build/native/bin", REDIST_ARCH, "d3d12SDKLayers.dll"), package:installdir("bin"))
+        os.cp(path.join("build/native/bin", REDIST_ARCH, "d3d12SDKLayers.pdb"), package:installdir("bin"))
+        os.cp(path.join("build/native/bin", REDIST_ARCH, "d3dconfig.exe"), package:installdir("bin"))
+        os.cp(path.join("build/native/bin", REDIST_ARCH, "d3dconfig.pdb"), package:installdir("bin"))
+        os.cp(path.join(package:scriptdir(), "port/directx12-agility-targets.cmake.in"), "directx12-agility-targets.cmake.in")
+        os.cp(path.join(package:scriptdir(), "port/directx12-agility-config.cmake.in"), "directx12-agility-config.cmake.in")
+        os.cp(path.join(package:scriptdir(), "port/directx12-agility.pc.in"), "directx12-agility.pc.in")
+        os.cp(path.join(package:scriptdir(), "port/cmakelists.txt"), "CMakeLists.txt")
+        local configs = {
+            "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"),
+            "-DVERSION=" .. package:version()
+        }
+        import("package.tools.cmake").install(package, configs)
+    end)
+
+    on_test(function (package)
+        assert(package:check_cxxsnippets({test = [[
+            void test() {
+	            IDXGIAdapter1* dxgiAdapter = nullptr;
+                ID3D12Device* device = nullptr;
+                D3D12CreateDevice(dxgiAdapter, D3D_FEATURE_LEVEL_12_0, IID_PPV_ARGS(&device));
+            }
+        ]]}, {configs = {languages = "c++14"}, includes = {"dxgi.h", "d3d12.h"}}))
+    end)