generate.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #!/usr/bin/env python3
  2. # Copyright (c) 2023 Xiaomi Corporation
  3. import argparse
  4. import re
  5. from pathlib import Path
  6. import jinja2
  7. SHERPA_NCNN_DIR = Path(__file__).resolve().parent.parent.parent
  8. def get_version():
  9. cmake_file = SHERPA_NCNN_DIR / "CMakeLists.txt"
  10. with open(cmake_file) as f:
  11. content = f.read()
  12. version = re.search(r"set\(SHERPA_NCNN_VERSION (.*)\)", content).group(1)
  13. return version.strip('"')
  14. def read_proj_file(filename):
  15. with open(filename) as f:
  16. return f.read()
  17. def get_dict():
  18. version = get_version()
  19. return {
  20. "version": get_version(),
  21. }
  22. def process_linux(s):
  23. libs = [
  24. "libkaldi-native-fbank-core.so",
  25. "libncnn.so",
  26. "libsherpa-ncnn-c-api.so",
  27. "libsherpa-ncnn-core.so",
  28. "libgomp-a34b3233.so.1.0.0",
  29. ]
  30. prefix = f"{SHERPA_NCNN_DIR}/linux/sherpa_ncnn/lib/"
  31. libs = [prefix + lib for lib in libs]
  32. libs = "\n ;".join(libs)
  33. d = get_dict()
  34. d["dotnet_rid"] = "linux-x64"
  35. d["libs"] = libs
  36. environment = jinja2.Environment()
  37. template = environment.from_string(s)
  38. s = template.render(**d)
  39. with open("./linux/sherpa-ncnn.runtime.csproj", "w") as f:
  40. f.write(s)
  41. def process_macos(s):
  42. libs = [
  43. "libkaldi-native-fbank-core.dylib",
  44. "libncnn.dylib",
  45. "libsherpa-ncnn-c-api.dylib",
  46. "libsherpa-ncnn-core.dylib",
  47. ]
  48. prefix = f"{SHERPA_NCNN_DIR}/macos/sherpa_ncnn/lib/"
  49. libs = [prefix + lib for lib in libs]
  50. libs = "\n ;".join(libs)
  51. d = get_dict()
  52. d["dotnet_rid"] = "osx-x64"
  53. d["libs"] = libs
  54. environment = jinja2.Environment()
  55. template = environment.from_string(s)
  56. s = template.render(**d)
  57. with open("./macos/sherpa-ncnn.runtime.csproj", "w") as f:
  58. f.write(s)
  59. def process_windows(s):
  60. libs = [
  61. "kaldi-native-fbank-core.dll",
  62. "ncnn.dll",
  63. "sherpa-ncnn-c-api.dll",
  64. "sherpa-ncnn-core.dll",
  65. ]
  66. prefix = f"{SHERPA_NCNN_DIR}/windows/sherpa_ncnn/lib/"
  67. libs = [prefix + lib for lib in libs]
  68. libs = "\n ;".join(libs)
  69. d = get_dict()
  70. d["dotnet_rid"] = "win-x64"
  71. d["libs"] = libs
  72. environment = jinja2.Environment()
  73. template = environment.from_string(s)
  74. s = template.render(**d)
  75. with open("./windows/sherpa-ncnn.runtime.csproj", "w") as f:
  76. f.write(s)
  77. def main():
  78. s = read_proj_file("./sherpa-ncnn.csproj.runtime.in")
  79. process_linux(s)
  80. process_macos(s)
  81. process_windows(s)
  82. s = read_proj_file("./sherpa-ncnn.csproj.in")
  83. d = get_dict()
  84. d["packages_dir"] = str(SHERPA_NCNN_DIR / "scripts/dotnet/packages")
  85. environment = jinja2.Environment()
  86. template = environment.from_string(s)
  87. s = template.render(**d)
  88. with open("./all/sherpa-ncnn.csproj", "w") as f:
  89. f.write(s)
  90. if __name__ == "__main__":
  91. main()