xmake.lua 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package("librime")
  2. set_homepage("https://rime.im")
  3. set_description("Rime Input Method Engine, the core library")
  4. set_license("BSD-3-Clause")
  5. add_urls("https://github.com/rime/librime/archive/refs/tags/$(version).tar.gz",
  6. "https://github.com/rime/librime.git", {submodules = false})
  7. add_versions("1.15.0", "a6283cb6a9fa9445dbd7fac58f614884edd662486fa79809ca63686c8f59c6da")
  8. add_versions("1.14.0", "b2b29c3551eec6b45af1ba8fd3fcffb99e2b7451aa974c1c9ce107e69ce3ea68")
  9. add_deps("cmake")
  10. add_deps("glog >=0.7", {configs = {gflags = true}})
  11. add_deps("boost >=1.74", {configs = {regex = true, container = true}})
  12. add_deps("leveldb", "opencc >=1.0.2", "yaml-cpp >=0.5")
  13. on_load("windows", "mingw", function (package)
  14. if package:config("shared") then
  15. package:add("defines", "RIME_IMPORTS")
  16. end
  17. end)
  18. on_install(function (package)
  19. -- remove hardcode abi flags
  20. io.replace("CMakeLists.txt", "set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cxx_flag_overrides.cmake)", "", {plain = true})
  21. -- config mode will find gflags automatically
  22. io.replace("CMakeLists.txt", "find_package(Glog REQUIRED)", "find_package(Glog CONFIG REQUIRED)", {plain = true})
  23. io.replace("src/CMakeLists.txt", "${Glog_LIBRARY}", "glog::glog", {plain = true})
  24. io.replace("src/CMakeLists.txt", "${CMAKE_INSTALL_FULL_LIBDIR})", [[
  25. RUNTIME DESTINATION bin
  26. LIBRARY DESTINATION lib
  27. ARCHIVE DESTINATION lib)
  28. ]], {plain = true})
  29. local deps = {
  30. ["Boost_USE_STATIC_LIBS"] = "boost",
  31. ["Gflags_STATIC"] = "gflags",
  32. ["Glog_STATIC"] = "glog",
  33. ["LevelDb_STATIC"] = "leveldb",
  34. ["Marisa_STATIC"] = "marisa",
  35. ["Opencc_STATIC"] = "opencc",
  36. ["YamlCpp_STATIC"] = "yaml-cpp",
  37. }
  38. for str, dep in pairs(deps) do
  39. local value = (package:dep(dep):config("shared") and "0" or "1")
  40. io.replace("CMakeLists.txt", format("set(%s ${BUILD_STATIC})", str), format("set(%s %s)", str, value), {plain = true})
  41. end
  42. local configs = {
  43. "-DBUILD_TEST=OFF",
  44. "-DENABLE_LOGGING=ON",
  45. }
  46. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
  47. table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
  48. table.insert(configs, "-DENABLE_ASAN=" .. (package:config("asan") and "ON" or "OFF"))
  49. import("package.tools.cmake").install(package, configs)
  50. -- Can't use `extern "C"` in c code
  51. if package:config("shared") then
  52. io.replace(path.join(package:installdir("include"), "rime_api.h"), [[extern "C" RIME_DLL]], "RIME_DLL", {plain = true})
  53. end
  54. end)
  55. on_test(function (package)
  56. assert(package:has_cfuncs("rime_get_api", {includes = "rime_api.h"}))
  57. end)