Selaa lähdekoodia

ktx: add package (#2965)

* ktx-software: add package

* fix werror

* rename to ktx, switch to v4.3.2

* fix shared

* limit plat

* limit plat

* use v4.4.0

* unbundle astc-encoder

* improve patch

* astc-encoder: fix msvc runtime

* fix bundle zstd

* unbundle zstd

* ios ci verbose

* Revert "ios ci verbose"

This reverts commit c9699558ca96d27317290d03ac81cd46f1613501.

* fix ios

* fix again

* limit ios

* limit ios

* add version for astc-encoder and update installation path handling

* change veneer libraries to static in CMake configuration

* limit wasm
star9029 1 kuukausi sitten
vanhempi
commit
0494096331

+ 6 - 2
packages/a/astc-encoder/xmake.lua

@@ -6,6 +6,7 @@ package("astc-encoder")
     add_urls("https://github.com/ARM-software/astc-encoder/archive/refs/tags/$(version).tar.gz",
              "https://github.com/ARM-software/astc-encoder.git", {submodules = false})
 
+    add_versions("5.3.0", "6bd248f460b90576f90a5499c0f6b8d785b3af3837bcab82607d9a3b5bba77e2")
     add_versions("5.2.0", "1680d440b765c3809490b6b49664a2ba0798624629615da4ff834401c0f1fe23")
     add_versions("4.8.0", "6c12f4656be21a69cbacd9f2c817283405decb514072dc1dcf51fd9a0b659852")
     add_versions("4.7.0", "a57c81f79055aa7c9f8c82ac5464284e3df9bba682895dee09fa35bd1fdbab93")
@@ -41,9 +42,12 @@ package("astc-encoder")
     end)
     -- arm_neon_sve_bridge.h: No such file or directory
     on_install("!linux or linux|!arm64", function (package)
-        io.replace("Source/cmake_core.cmake", "-Werror", "", {plain = true})
         io.replace("Source/CMakeLists.txt", "-flto", "", {plain = true})
         io.replace("Source/CMakeLists.txt", "-flto=auto", "", {plain = true})
+        io.replace("Source/cmake_core.cmake", "-Werror", "", {plain = true})
+        io.replace("Source/cmake_core.cmake", "if(${ASTCENC_CLI})\n        # Enable LTO on release builds", "if(0)", {plain = true})
+        io.replace("Source/cmake_core.cmake", "add_library(${ASTCENC_TARGET}-veneer1", "add_library(${ASTCENC_TARGET}-veneer1 STATIC", {plain = true})
+        io.replace("Source/cmake_core.cmake", "add_library(${ASTCENC_TARGET}-veneer2", "add_library(${ASTCENC_TARGET}-veneer2 STATIC", {plain = true})
         if package:is_plat("mingw", "android", "bsd") or package:has_tool("cxx", "clang") then
             io.replace("Source/cmake_core.cmake", "$<${is_clangcl}:-mcpu=native -march=native>", "", {plain = true})
             io.replace("Source/cmake_core.cmake", "$<${is_gnu_fe}:-mcpu=native -march=native>", "", {plain = true})
@@ -92,10 +96,10 @@ package("astc-encoder")
 
         os.cp("Source/astcenc.h", package:installdir("include"))
         if package:config("cli") then
+            package:addenv("PATH", "bin")
             local exe_prefix = package:is_plat("mingw", "windows") and ".exe" or ""
             -- TODO: rename astcenc-neno?
             os.trymv(path.join(package:installdir("bin"), "astcenc-native" .. exe_prefix), path.join(package:installdir("bin"), "astcenc" .. exe_prefix))
-            package:addenv("PATH", "bin")
         end
     end)
 

+ 39 - 0
packages/k/ktx/patches/4.4.0/dep-unbundle.patch

@@ -0,0 +1,39 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2f141ac..461dca9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1236,20 +1236,13 @@ endif()
+ set(ASTCENC_CLI OFF) # Only build as library not the CLI astcencoder
+ # Force static build for astc-encoder
+ set(BUILD_SHARED_LIBS OFF)
+-add_subdirectory(external/astc-encoder)
++include(FindPkgConfig)
++pkg_search_module(astc-encoder REQUIRED IMPORTED_TARGET astc-encoder)
++set(ASTCENC_LIB_TARGET PkgConfig::astc-encoder)
+ set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_RESET})
+-set_property(TARGET ${ASTCENC_LIB_TARGET} PROPERTY POSITION_INDEPENDENT_CODE ON)
+-target_compile_definitions(
+-    ${ASTCENC_LIB_TARGET}
+-PRIVATE
+-    # ASTC encoder uses std::mutex. For more info. see comment about
+-    # same setting in libktx starting about line 618. To be eventually
+-    # removed as noted in that comment.
+-    $<$<AND:${is_msvccl},$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,19.40.33811>>:_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR>
+-    $<$<AND:${is_clangcl},$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,17.0.3>>:_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR>
+-)
+ 
+-if(NOT BUILD_SHARED_LIBS AND APPLE)
++
++if(0)
+     # Make a single static library to simplify linking.
+     add_dependencies(ktx ${ASTCENC_LIB_TARGET})
+     add_custom_command( TARGET ktx
+@@ -1296,7 +1289,6 @@ endif()
+ 
+ set(KTX_INSTALL_TARGETS ktx)
+ if(NOT BUILD_SHARED_LIBS AND NOT APPLE)
+-    list(APPEND KTX_INSTALL_TARGETS ${ASTCENC_LIB_TARGET})
+ endif()
+ 
+ # Install
+ 

+ 105 - 0
packages/k/ktx/xmake.lua

@@ -0,0 +1,105 @@
+package("ktx")
+    set_homepage("https://github.com/KhronosGroup/KTX-Software")
+    set_description("KTX (Khronos Texture) Library and Tools")
+    set_license("Apache-2.0")
+
+    add_urls("https://github.com/KhronosGroup/KTX-Software/archive/refs/tags/$(version).tar.gz",
+             "https://github.com/KhronosGroup/KTX-Software.git", {submodules = false})
+
+    add_versions("v4.4.0", "3585d76edcdcbe3a671479686f8c81c1c10339f419e4b02a9a6f19cc6e4e0612")
+
+    add_patches("4.4.0", "patches/4.4.0/dep-unbundle.patch", "2b883bcbfc19f80d72b812d68b606b6e2a4234d913ad92c45d8030bd94207a59")
+
+    add_configs("tools", {description = "Create KTX tools", default = false, type = "boolean"})
+    add_configs("decoder", {description = "ETC decoding support", default = false, type = "boolean"})
+    add_configs("opencl", {description = "Compile with OpenCL support so applications can choose to use it.", default = false, type = "boolean"})
+    add_configs("embed", {description = "Embed bitcode in binaries.", default = false, type = "boolean"})
+    add_configs("ktx1", {description = "Enable KTX 1 support.", default = true, type = "boolean"})
+    add_configs("ktx2", {description = "Enable KTX 2 support.", default = true, type = "boolean"})
+    add_configs("vulkan", {description = "Enable Vulkan texture upload.", default = false, type = "boolean"})
+    add_configs("opengl", {description = "Enable OpenGL texture upload.", default = is_plat("wasm"), type = "boolean"})
+    -- This project .def file export 64-bit symbols only
+    if is_plat("wasm", "iphoneos") or (is_plat("windows", "mingw") and is_arch("x86", "i386")) then
+        add_configs("shared", {description = "Build shared library.", default = false, type = "boolean", readonly = true})
+    end
+
+    add_deps("cmake")
+    if is_subhost("windows") then
+        add_deps("pkgconf")
+    else
+        add_deps("pkg-config")
+    end
+    add_deps("astc-encoder", "zstd")
+    -- TODO
+    if is_plat("iphoneos") then
+        add_includedirs("lib/ktx.framework/Headers")
+        add_linkdirs("lib/ktx.framework")
+        add_frameworkdirs("lib/ktx.framework")
+        add_frameworks("ktx")
+    end
+
+    on_check(function (package)
+        if is_subhost("windows") and os.arch() == "arm64" then
+            raise("package(ktx) require python (from pkgconf) for building, but windows arm64 python binaries are unsupported")
+        end
+        if package:is_plat("linux") and package:is_arch("arm64") then
+            raise("package(ktx) dep(astc-encoder) unsupported linux arm64")
+        end
+    end)
+
+    on_load(function (package)
+        if package:config("tools") then
+            package:add("deps", "fmt", "cxxopts", {private = true})
+        end
+        if not package:config("shared") then
+            package:add("defines", "KHRONOS_STATIC")
+        end
+        if package:config("ktx1") then
+            package:add("defines", "KTX_FEATURE_KTX1")
+        end
+        if package:config("ktx2") then
+            package:add("defines", "KTX_FEATURE_KTX2")
+        end
+    end)
+
+    on_install("!iphoneos and !wasm", function (package)
+        -- TODO: unbundle basisu & dfdutils
+        -- io.replace("CMakeLists.txt", "external/dfdutils%g*.c\n", "")
+        -- io.replace("CMakeLists.txt", "external%g*.cpp\n", "")
+        io.writefile("external/basisu/zstd/zstd.c", "")
+        io.replace("CMakeLists.txt", "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/external/basisu/zstd>", "", {plain = true})
+        io.replace("CMakeLists.txt", "$ $<INSTALL_INTERFACE:external/basisu/zstd>", "", {plain = true})
+        local file = io.open("CMakeLists.txt", "a")
+        file:write([[
+            find_package(zstd REQUIRED CONFIG)
+            target_link_libraries(ktx PUBLIC zstd::libzstd)
+            target_link_libraries(ktx_read PUBLIC zstd::libzstd)
+        ]])
+        file:close()
+        if package:config("tools") then
+            io.replace("CMakeLists.txt", "add_subdirectory(external/fmt)", "find_package(fmt CONFIG REQUIRED)", {plain = true})
+            io.replace("CMakeLists.txt", "add_subdirectory(external/cxxopts)", "find_package(cxxopts CONFIG REQUIRED)", {plain = true})
+        end
+
+        local configs = {"-DKTX_FEATURE_TESTS=OFF"}
+        table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
+        table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
+
+        if not package:gitref() and package:version():startswith("v") then
+            table.insert(configs, "-DKTX_GIT_VERSION_FULL=" .. package:version())
+        end
+
+        table.insert(configs, "-DKTX_FEATURE_TOOLS=" .. (package:config("tools") and "ON" or "OFF"))
+        table.insert(configs, "-DKTX_FEATURE_ETC_UNPACK=" .. (package:config("decoder") and "ON" or "OFF"))
+        table.insert(configs, "-DBASISU_SUPPORT_OPENCL=" .. (package:config("opencl") and "ON" or "OFF"))
+        table.insert(configs, "-DKTX_EMBED_BITCODE=" .. (package:config("embed") and "ON" or "OFF"))
+        table.insert(configs, "-DKTX_FEATURE_KTX1=" .. (package:config("ktx1") and "ON" or "OFF"))
+        table.insert(configs, "-DKTX_FEATURE_KTX2=" .. (package:config("ktx2") and "ON" or "OFF"))
+        table.insert(configs, "-DKTX_FEATURE_VK_UPLOAD=" .. (package:config("vulkan") and "ON" or "OFF"))
+        table.insert(configs, "-DKTX_FEATURE_GL_UPLOAD=" .. (package:config("opengl") and "ON" or "OFF"))
+        import("package.tools.cmake").install(package, configs)
+    end)
+
+    on_test(function (package)
+        assert(package:has_cfuncs("ktxErrorString", {includes = "ktx.h"}))
+    end)