xmake.lua 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package("metal-cpp")
  2. set_kind("library", { headeronly = true })
  3. set_homepage("https://developer.apple.com/metal/cpp/")
  4. set_description("Metal-cpp is a low-overhead C++ interface for Metal that helps you add Metal functionality to graphics apps, games, and game engines that are written in C++.")
  5. set_license("Apache-2.0")
  6. set_urls("https://developer.apple.com/metal/cpp/files/metal-cpp_$(version).zip",
  7. {version = function (version)
  8. local versions = {
  9. ["12"] = "macOS12_iOS15",
  10. ["13"] = "macOS13_iOS16", -- 13.0
  11. ["13.3"] = "macOS13.3_iOS16.4",
  12. ["14"] = "macOS14_iOS17-beta", -- 14.0
  13. ["14.2"] = "macOS14.2_iOS17.2",
  14. ["15b"] = "macOS15_iOS18-beta",
  15. ["15"] = "macOS15_iOS18", -- 15.0
  16. ["15.2"] = "macOS15.2_iOS18.2",
  17. ["26b1"] = "macOS26_iOS26-beta",
  18. ["26b2"] = "macOS26_iOS26-beta2"
  19. }
  20. return versions[tostring(version)]
  21. end})
  22. add_versions("12", "a4e2d4668951b6f2595618ed8c5dc514fc94fda5487fc722b1c1ff29d7b524f7")
  23. add_versions("13", "6f741894229e9c750add1afc3797274fc008c7507e2ae726370c17c34b7c6a68")
  24. add_versions("13.3", "0afd87ca851465191ae4e3980aa036c7e9e02fe32e7c760ac1a74244aae6023b")
  25. add_versions("14", "2009a339ecbd56b36601435fe08c415749f8ad09145755472bb637b319003367")
  26. add_versions("14.2", "d800ddbc3fccabce3a513f975eeafd4057e07a29e905ad5aaef8c1f4e12d9ada")
  27. add_versions("15b", "d0a7990f43c7ce666036b5649283c9965df2f19a4a41570af0617bbe93b4a6e5")
  28. add_versions("15", "0433df1e0ab13c2b0becbd78665071e3fa28381e9714a3fce28a497892b8a184")
  29. add_versions("15.2", "3437e4abfbd3d45217f34772ef3502f31ba3358e5fb6ac9d0ca952a047bcfe25")
  30. add_versions("26b1", "3778084a9b50be7f3dd3edfb127b77b2dcef75c4c71dc23583abb4f8df8bf62d")
  31. add_versions("26b2", "4f0e62aac6a875616d8e86a1cb206158312e52b34de72716773b3785eeb12dc6")
  32. -- todo:Move metal-cpp-extensions to github
  33. add_resources("*", "LearnMetalCPP", "https://developer.apple.com/metal/LearnMetalCPP.zip", "a709f3c0b532d5b9e3a5db3da3a35f3b783af27eb50f23a711115c02f86a256d")
  34. add_includedirs(
  35. "include",
  36. "include/metal-cpp",
  37. "include/metal-cpp-extensions"
  38. )
  39. add_frameworks("Foundation", "Metal", "MetalKit")
  40. add_defines(
  41. "NS_PRIVATE_IMPLEMENTATION",
  42. "CA_PRIVATE_IMPLEMENTATION",
  43. "MTL_PRIVATE_IMPLEMENTATION",
  44. "MTK_PRIVATE_IMPLEMENTATION"
  45. )
  46. on_check(function (package)
  47. assert(package:is_plat("macosx", "iphoneos"), "package(metal-cpp) only support macosx or iOS")
  48. end)
  49. on_install("macosx", "iphoneos", function (package)
  50. -- Copy metal-cpp
  51. if not os.trycp("metal-cpp", package:installdir("include")) then
  52. os.vcp("*", package:installdir("include", "metal-cpp"))
  53. end
  54. -- Copy metal-cpp-extensions
  55. local resDir = package:resourcedir("LearnMetalCPP")
  56. local extDir = path.join(resDir, "/LearnMetalCPP/metal-cpp-extensions")
  57. os.vcp(extDir, package:installdir("include"))
  58. end)
  59. on_test("macosx", "iphoneos", function (package)
  60. assert(package:check_cxxsnippets({test = [[
  61. #include <metal-cpp/Foundation/Foundation.hpp>
  62. #include <metal-cpp/Metal/Metal.hpp>
  63. #include <Foundation/Foundation.hpp>
  64. #include <Metal/Metal.hpp>
  65. #include <MetalKit/MetalKit.hpp>
  66. #include <AppKit/AppKit.hpp>
  67. void test () {
  68. MTL::Device* pDevice = MTL::CreateSystemDefaultDevice();
  69. MTL::CommandQueue* pCommnadQueue = pDevice->newCommandQueue();
  70. CGRect frame = (CGRect){ {100.0, 100.0}, {512.0, 512.0} };
  71. MTK::View* _pMtkView = MTK::View::alloc()->init( frame, pDevice );
  72. _pMtkView->setColorPixelFormat( MTL::PixelFormat::PixelFormatBGRA8Unorm_sRGB );
  73. _pMtkView->setClearColor( MTL::ClearColor::Make( 1.0, 0.0, 0.0, 1.0 ) );
  74. }
  75. ]]}, {configs = {languages = "c++17"}}))
  76. end)