xmake.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. package("assimp")
  2. set_homepage("https://assimp.org")
  3. set_description("Portable Open-Source library to import various well-known 3D model formats in a uniform manner")
  4. set_license("BSD-3-Clause")
  5. set_urls("https://github.com/assimp/assimp/archive/refs/tags/$(version).zip",
  6. "https://github.com/assimp/assimp.git")
  7. add_versions("v6.0.4", "1eeb63f3e6f6c9d820cc52f7d44fa6b6557256330f45ddaa903aa658c47fece5")
  8. add_versions("v6.0.3", "e9b3208513aa4566955a45cc085e031f7053e28f2e6a0e33d1657450bd0519c5")
  9. add_versions("v6.0.2", "699b455b92ce2b6b39aa06a957e59f9d83e8652c8b51364e811660a4acb9ee49")
  10. add_versions("v6.0.1", "24256974f66e36df6c72b78d4903e1bb6875b6d3f8aa8638639def68f2c50fd0")
  11. add_versions("v5.4.3", "795c29716f4ac123b403e53b677e9f32a8605c4a7b2d9904bfaae3f4053b506d")
  12. add_versions("v5.4.2", "03e38d123f6bf19a48658d197fd09c9a69db88c076b56a476ab2da9f5eb87dcc")
  13. add_versions("v5.4.1", "08837ee7c50b98ca72d2c9e66510ca6640681db8800aa2d3b1fcd61ccc615113")
  14. add_versions("v5.4.0", "0f3698e9ba0110df0b636dbdd95706e7e28d443ff3dbaf5828926c23bfff778d")
  15. add_versions("v5.3.1", "f4020735fe4601de9d85cb335115568cce0e027a65e546dd8895081696d624bd")
  16. add_versions("v5.3.0", "cccbd20522b577613096b0b157f62c222f844bc177356b8301cd74eee3fecadb")
  17. add_versions("v5.2.5", "5384877d53be7b5bbf50c26ab3f054bec91b3df8614372dcd7240f44f61c509b")
  18. add_versions("v5.2.4", "713e9aa035ae019e5f3f0de1605de308d63538897249a2ba3a2d7d40036ad2b1")
  19. add_versions("v5.2.3", "9667cfc8ddabd5dd5e83f3aebb99dbf232fce99f17b9fe59540dccbb5e347393")
  20. add_versions("v5.2.2", "7b833182b89917b3c6e8aee6432b74870fb71f432cc34aec5f5411bd6b56c1b5")
  21. add_versions("v5.2.1", "636fe5c2cfe925b559b5d89e53a42412a2d2ab49a0712b7d655d1b84c51ed504")
  22. add_versions("v5.1.4", "59a00cf72fa5ceff960460677e2b37be5cd1041e85bae9c02828c27ade7e4160")
  23. add_versions("v5.0.1", "d10542c95e3e05dece4d97bb273eba2dfeeedb37a78fb3417fd4d5e94d879192")
  24. add_patches("v5.0.1", path.join(os.scriptdir(), "patches", "5.0.1", "fix-mingw.patch"), "a3375489e2bbb2dd97f59be7dd84e005e7e9c628b4395d7022a6187ca66b5abb")
  25. add_patches("v5.2.1", path.join(os.scriptdir(), "patches", "5.2.1", "fix_zlib_filefunc_def.patch"), "a9f8a9aa1975888ea751b80c8268296dee901288011eeb1addf518eac40b71b1")
  26. add_patches("v5.2.2", path.join(os.scriptdir(), "patches", "5.2.1", "fix_zlib_filefunc_def.patch"), "a9f8a9aa1975888ea751b80c8268296dee901288011eeb1addf518eac40b71b1")
  27. add_patches("v5.2.3", path.join(os.scriptdir(), "patches", "5.2.1", "fix_zlib_filefunc_def.patch"), "a9f8a9aa1975888ea751b80c8268296dee901288011eeb1addf518eac40b71b1")
  28. add_patches("v5.2.3", path.join(os.scriptdir(), "patches", "5.2.3", "cmake_static_crt.patch"), "3872a69976055bed9e40814e89a24a3420692885b50e9f9438036e8d809aafb4")
  29. add_patches("v5.2.4", path.join(os.scriptdir(), "patches", "5.2.4", "fix_x86_windows_build.patch"), "becb4039c220678cf1e888e3479f8e68d1964c49d58f14c5d247c86b4a5c3293")
  30. add_patches("v5.4.3", path.join(os.scriptdir(), "patches", "5.4.3", "fix_mingw.patch"), "2498bb9438a0108becf1c514fcbfc103e012638914c9d21160572ed24a9fa3b3")
  31. if not is_host("windows") then
  32. add_extsources("pkgconfig::assimp")
  33. end
  34. if is_plat("mingw") and is_subhost("msys") then
  35. add_extsources("pacman::assimp")
  36. elseif is_plat("linux") then
  37. add_extsources("pacman::assimp", "apt::libassimp-dev")
  38. elseif is_plat("macosx") then
  39. add_extsources("brew::assimp")
  40. end
  41. add_configs("build_tools", {description = "Build the supplementary tools for Assimp.", default = false, type = "boolean"})
  42. add_configs("double_precision", {description = "Enable double precision processing.", default = false, type = "boolean"})
  43. add_configs("no_export", {description = "Disable Assimp's export functionality (reduces library size).", default = false, type = "boolean"})
  44. add_configs("android_jniiosysystem", {description = "Enable Android JNI IOSystem support.", default = false, type = "boolean"})
  45. add_configs("asan", {description = "Enable AddressSanitizer.", default = false, type = "boolean"})
  46. add_configs("ubsan", {description = "Enable Undefined Behavior sanitizer.", default = false, type = "boolean"})
  47. add_configs("draco", {description = "Enable Draco, primary for GLTF.", default = false, type = "boolean"})
  48. add_deps("cmake", "minizip", "zlib")
  49. if is_plat("windows") then
  50. add_syslinks("advapi32")
  51. end
  52. if on_check then
  53. on_check("android", function (package)
  54. import("core.tool.toolchain")
  55. local ndk = toolchain.load("ndk", {plat = package:plat(), arch = package:arch()})
  56. local ndk_sdkver = ndk:config("ndk_sdkver")
  57. assert(ndk_sdkver and tonumber(ndk_sdkver) >= 26, "package(assimp): need ndk api level >= 26 for android")
  58. end)
  59. end
  60. on_load(function (package)
  61. if not package:gitref() then
  62. if package:version():le("5.1.0") then
  63. package:add("deps", "irrxml")
  64. end
  65. if package:version():eq("5.3.0") then
  66. package:add("deps", "utfcpp")
  67. package:add("defines", "ASSIMP_USE_HUNTER")
  68. end
  69. end
  70. if package:is_plat("linux", "macosx") and package:config("shared") then
  71. package:add("links", "assimp" .. (package:is_debug() and "d" or ""))
  72. end
  73. end)
  74. on_install(function (package)
  75. if package:is_plat("android") then
  76. import("core.tool.toolchain")
  77. local ndk = toolchain.load("ndk", {plat = package:plat(), arch = package:arch()})
  78. local ndk_sdkver = ndk:config("ndk_sdkver")
  79. assert(ndk_sdkver and tonumber(ndk_sdkver) >= 26, "package(assimp): need ndk api level >= 26 for android")
  80. end
  81. local configs = {"-DASSIMP_BUILD_SAMPLES=OFF",
  82. "-DASSIMP_BUILD_TESTS=OFF",
  83. "-DASSIMP_BUILD_DOCS=OFF",
  84. "-DASSIMP_BUILD_FRAMEWORK=OFF",
  85. "-DASSIMP_INSTALL_PDB=ON",
  86. "-DASSIMP_INJECT_DEBUG_POSTFIX=ON",
  87. "-DASSIMP_BUILD_ZLIB=OFF",
  88. "-DSYSTEM_IRRXML=ON",
  89. "-DASSIMP_WARNINGS_AS_ERRORS=OFF"}
  90. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
  91. local function add_config_arg(config_name, cmake_name)
  92. table.insert(configs, "-D" .. cmake_name .. "=" .. (package:config(config_name) and "ON" or "OFF"))
  93. end
  94. add_config_arg("shared", "BUILD_SHARED_LIBS")
  95. add_config_arg("double_precision", "ASSIMP_DOUBLE_PRECISION")
  96. add_config_arg("no_export", "ASSIMP_NO_EXPORT")
  97. add_config_arg("asan", "ASSIMP_ASAN")
  98. add_config_arg("ubsan", "ASSIMP_UBSAN")
  99. if package:version():ge("5.2.5") then
  100. add_config_arg("draco", "ASSIMP_BUILD_DRACO")
  101. end
  102. if package:is_plat("android") then
  103. add_config_arg("android_jniiosysystem", "ASSIMP_ANDROID_JNIIOSYSTEM")
  104. end
  105. if package:is_plat("windows", "linux", "macosx", "mingw") then
  106. add_config_arg("build_tools", "ASSIMP_BUILD_ASSIMP_TOOLS")
  107. else
  108. table.insert(configs, "-DASSIMP_BUILD_ASSIMP_TOOLS=OFF")
  109. end
  110. -- ASSIMP_WARNINGS_AS_ERRORS maybe does not work for some old versions
  111. for _, cmakefile in ipairs(table.join("CMakeLists.txt", os.files("**/CMakeLists.txt"))) do
  112. if package:is_plat("windows") then
  113. io.replace(cmakefile, "/W4 /WX", "", {plain = true})
  114. else
  115. io.replace(cmakefile, "-Werror", "", {plain = true})
  116. end
  117. end
  118. -- fix cmake_install failed
  119. if not package:gitref() and package:version():ge("v5.3.0") and package:is_plat("windows") and package:is_debug() then
  120. io.replace("code/CMakeLists.txt", "IF(GENERATOR_IS_MULTI_CONFIG)", "IF(TRUE)", {plain = true})
  121. end
  122. if package:is_plat("mingw") and package:version():lt("v5.1.5") then
  123. -- CMAKE_COMPILER_IS_MINGW has been removed: https://github.com/assimp/assimp/pull/4311
  124. io.replace("CMakeLists.txt", "CMAKE_COMPILER_IS_MINGW", "MINGW", {plain = true})
  125. end
  126. -- Assimp CMakeLists doesn't find minizip on Windows
  127. local packagedeps
  128. if package:is_plat("windows") then
  129. local minizip = package:dep("minizip")
  130. if minizip and not minizip:is_system() then
  131. packagedeps = table.join2(packagedeps or {}, "minizip")
  132. if minizip:config("bzip2") then
  133. table.insert(packagedeps, "bzip2")
  134. end
  135. end
  136. -- fix ninja debug build
  137. os.mkdir(path.join(package:buildir(), "code/pdb"))
  138. -- MDd == _DEBUG + _MT + _DLL
  139. if package:is_debug() and package:has_runtime("MD", "MT") then
  140. io.replace("CMakeLists.txt", "/D_DEBUG", "", {plain = true})
  141. end
  142. -- fix std::min/max conflict with windows.h
  143. io.insert("code/AssetLib/IFC/IFCLoader.cpp", 1, "#define NOMINMAX")
  144. end
  145. local zlib = package:dep("zlib")
  146. if zlib and not zlib:is_system() then
  147. local fetchinfo = zlib:fetch({external = false})
  148. if fetchinfo then
  149. local includedirs = fetchinfo.includedirs or fetchinfo.sysincludedirs
  150. if includedirs and #includedirs > 0 then
  151. table.insert(configs, "-DZLIB_INCLUDE_DIR=" .. table.concat(includedirs, " "))
  152. end
  153. local libfiles = fetchinfo.libfiles
  154. if libfiles then
  155. table.insert(configs, "-DZLIB_LIBRARY=" .. table.concat(libfiles, " "))
  156. end
  157. end
  158. end
  159. import("package.tools.cmake").install(package, configs, {packagedeps = packagedeps})
  160. -- copy pdb
  161. if package:is_plat("windows") then
  162. if package:config("shared") then
  163. os.trycp(path.join(package:buildir(), "bin", "**.pdb"), package:installdir("bin"))
  164. else
  165. os.trycp(path.join(package:buildir(), "lib", "**.pdb"), package:installdir("lib"))
  166. end
  167. end
  168. end)
  169. on_test(function (package)
  170. assert(package:check_cxxsnippets({test = [[
  171. #include <cassert>
  172. void test() {
  173. Assimp::Importer importer;
  174. }
  175. ]]}, {configs = {languages = "c++11"}, includes = "assimp/Importer.hpp"}))
  176. end)