xmake.lua 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. set_project("libass")
  2. add_requires("freetype", "fribidi", "harfbuzz")
  3. includes("check_cfuncs.lua")
  4. add_rules("mode.debug", "mode.release")
  5. if is_plat("windows") and is_kind("shared") then
  6. add_rules("utils.symbols.export_all")
  7. end
  8. option("asm")
  9. set_default(true)
  10. set_description("compiling with ASM")
  11. add_defines("CONFIG_ASM")
  12. option("large-tiles")
  13. set_default(false)
  14. set_description("use larger tiles in the rasterizer (better performance, slightly worse quality)")
  15. add_defines("CONFIG_LARGE_TILES")
  16. option("system-font-provider")
  17. on_check(function (option)
  18. option:enable(not is_plat("wasm"))
  19. end)
  20. set_description("enable checking for system fonts provider")
  21. target("ass")
  22. set_kind("$(kind)")
  23. add_options("asm", "large-tiles", "system-font-provider")
  24. add_packages("freetype", "fribidi", "harfbuzz")
  25. add_files("libass/*.c|ass_fontconfig.c|ass_directwrite.c|ass_coretext.c",
  26. "libass/c/*.c")
  27. add_includedirs("libass", "libass/c", "$(buildir)")
  28. if not is_plat("windows") then
  29. add_syslinks("m")
  30. end
  31. add_configfiles("config.h.in")
  32. configvar_check_cfuncs("HAVE_STRDUP", "strdup", {includes = "string.h"})
  33. configvar_check_cfuncs("HAVE_STRNDUP", "strndup", {includes = "string.h"})
  34. if has_config("asm") then
  35. if is_arch("x64", "x86", "x86_64") then
  36. set_toolchains("nasm")
  37. add_files("libass/x86/*.asm|utils.asm|x86inc.asm")
  38. add_includedirs("libass/x86")
  39. add_defines("ARCH_X86=1", "private_prefix=ass")
  40. if is_arch("x86") then
  41. add_defines("ARCH_X86_64=0", "BITMODE=32")
  42. else
  43. add_defines("ARCH_X86_64=1", "BITMODE=64")
  44. end
  45. if is_plat("windows") and is_arch("x86") then
  46. add_defines("PREFIX")
  47. elseif is_plat("macosx") then
  48. add_defines("PREFIX", "STACK_ALIGNMENT=16")
  49. elseif is_plat("linux") then
  50. add_defines("STACK_ALIGNMENT=16")
  51. end
  52. elseif is_arch("arm64.*", "aarch64") then
  53. add_files("libass/aarch64/*.S")
  54. add_defines("ARCH_AARCH64")
  55. end
  56. end
  57. if has_config("system-font-provider") then
  58. on_config(function (target)
  59. -- directwrite
  60. if target:is_plat("windows", "mingw") and target:has_cincludes("dwrite_c.h") then
  61. if target:check_csnippets([[#include <winapifamily.h>
  62. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  63. #error Win32 desktop APIs are available
  64. #endif]]) then
  65. target:add("syslinks", "dwrite")
  66. else
  67. target:add("syslinks", "gdi32")
  68. end
  69. if target:kind() == "shared" then
  70. target:add("syslinks", "user32")
  71. end
  72. target:add("files", "libass/ass_directwrite.c")
  73. target:add("defines", "CONFIG_DIRECTWRITE")
  74. end
  75. -- coretext
  76. if target:is_plat("macosx") then
  77. if target:has_cfuncs("CTFontDescriptorCopyAttribute", {includes = "ApplicationServices/ApplicationServices.h"}) then
  78. target:add("frameworks", "ApplicationServices", "CoreFoundation")
  79. target:add("files", "libass/ass_coretext.c")
  80. target:add("defines", "CONFIG_CORETEXT=1")
  81. elseif target:has_cincludes("CoreText/CoreText.h") then
  82. target:add("frameworks", "CoreText", "CoreFoundation")
  83. target:add("files", "libass/ass_coretext.c")
  84. target:add("defines", "CONFIG_CORETEXT=1")
  85. end
  86. end
  87. -- fontconfig
  88. if target:has_cincludes("fontconfig/fontconfig.h") then
  89. target:add("files", "libass/ass_fontconfig.c")
  90. target:add("defines", "CONFIG_FONTCONFIG")
  91. target:add("syslinks", "fontconfig")
  92. end
  93. end)
  94. end
  95. add_headerfiles("libass/ass.h", "libass/ass_types.h", {prefix = "include/libass"})