xmake.lua 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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.2"] = "macOS14.2_iOS17.2",
  13. ["15"] = "macOS15_iOS18", -- 15.0
  14. ["15.2"] = "macOS15.2_iOS18.2",
  15. ["26"] = "26",
  16. }
  17. return versions[tostring(version)]
  18. end})
  19. add_versions("12", "a4e2d4668951b6f2595618ed8c5dc514fc94fda5487fc722b1c1ff29d7b524f7")
  20. add_versions("13", "6f741894229e9c750add1afc3797274fc008c7507e2ae726370c17c34b7c6a68")
  21. add_versions("13.3", "0afd87ca851465191ae4e3980aa036c7e9e02fe32e7c760ac1a74244aae6023b")
  22. add_versions("14.2", "d800ddbc3fccabce3a513f975eeafd4057e07a29e905ad5aaef8c1f4e12d9ada")
  23. add_versions("15", "0433df1e0ab13c2b0becbd78665071e3fa28381e9714a3fce28a497892b8a184")
  24. add_versions("15.2", "3437e4abfbd3d45217f34772ef3502f31ba3358e5fb6ac9d0ca952a047bcfe25")
  25. add_versions("26", "4df3c078b9aadcb516212e9cb03004cbc5ce9a3e9c068fa3144d021db585a3a4")
  26. -- todo:Move metal-cpp-extensions to github
  27. add_resources("*", "LearnMetalCPP", "https://developer.apple.com/metal/LearnMetalCPP.zip", "a709f3c0b532d5b9e3a5db3da3a35f3b783af27eb50f23a711115c02f86a256d")
  28. add_includedirs(
  29. "include",
  30. "include/metal-cpp",
  31. "include/metal-cpp-extensions"
  32. )
  33. add_frameworks("Foundation", "Metal", "MetalKit")
  34. add_defines(
  35. "NS_PRIVATE_IMPLEMENTATION",
  36. "CA_PRIVATE_IMPLEMENTATION",
  37. "MTL_PRIVATE_IMPLEMENTATION",
  38. "MTK_PRIVATE_IMPLEMENTATION"
  39. )
  40. on_check(function (package)
  41. assert(package:is_plat("macosx", "iphoneos"), "package(metal-cpp) only support macosx or iOS")
  42. end)
  43. on_install("macosx", "iphoneos", function (package)
  44. -- Copy metal-cpp
  45. if not os.trycp("metal-cpp", package:installdir("include")) then
  46. os.vcp("*", package:installdir("include", "metal-cpp"))
  47. end
  48. -- Copy metal-cpp-extensions
  49. local resDir = package:resourcedir("LearnMetalCPP")
  50. local extDir = path.join(resDir, "/LearnMetalCPP/metal-cpp-extensions")
  51. os.vcp(extDir, package:installdir("include"))
  52. end)
  53. on_test("macosx", "iphoneos", function (package)
  54. assert(package:check_cxxsnippets({test = [[
  55. #include <metal-cpp/Foundation/Foundation.hpp>
  56. #include <metal-cpp/Metal/Metal.hpp>
  57. #include <Foundation/Foundation.hpp>
  58. #include <Metal/Metal.hpp>
  59. #include <MetalKit/MetalKit.hpp>
  60. #include <AppKit/AppKit.hpp>
  61. void test () {
  62. MTL::Device* pDevice = MTL::CreateSystemDefaultDevice();
  63. MTL::CommandQueue* pCommnadQueue = pDevice->newCommandQueue();
  64. CGRect frame = (CGRect){ {100.0, 100.0}, {512.0, 512.0} };
  65. MTK::View* _pMtkView = MTK::View::alloc()->init( frame, pDevice );
  66. _pMtkView->setColorPixelFormat( MTL::PixelFormat::PixelFormatBGRA8Unorm_sRGB );
  67. _pMtkView->setClearColor( MTL::ClearColor::Make( 1.0, 0.0, 0.0, 1.0 ) );
  68. }
  69. ]]}, {configs = {languages = "c++17"}}))
  70. end)