translate_headers.jl 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # StarPU --- Runtime system for heterogeneous multicore architectures.
  2. #
  3. # Copyright (C) 2020 Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
  4. #
  5. # StarPU is free software; you can redistribute it and/or modify
  6. # it under the terms of the GNU Lesser General Public License as published by
  7. # the Free Software Foundation; either version 2.1 of the License, or (at
  8. # your option) any later version.
  9. #
  10. # StarPU is distributed in the hope that it will be useful, but
  11. # WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  13. #
  14. # See the GNU Lesser General Public License in COPYING.LGPL for more details.
  15. #
  16. using Clang
  17. using Clang.LibClang.LLVM_jll
  18. function starpu_translate_headers()
  19. debug_print("Translating StarPU headers...")
  20. if !isdir(joinpath(fstarpu_build_dir(), "julia/gen"))
  21. mkdir(joinpath(fstarpu_build_dir(), "julia/gen"))
  22. end
  23. STARPU_BUILD_INCLUDE=joinpath(fstarpu_build_dir(), "include")
  24. STARPU_SRC_INCLUDE=joinpath(fstarpu_src_dir(), "include")
  25. STARPU_HEADERS = [joinpath(STARPU_BUILD_INCLUDE, header) for header in readdir(STARPU_BUILD_INCLUDE) if endswith(header, ".h")]
  26. if STARPU_SRC_INCLUDE != STARPU_BUILD_INCLUDE
  27. for header in readdir(STARPU_SRC_INCLUDE)
  28. if endswith(header, ".h")
  29. push!(STARPU_HEADERS, joinpath(STARPU_SRC_INCLUDE, header))
  30. end
  31. end
  32. end
  33. LIBCLANG_INCLUDE = joinpath(dirname(LLVM_jll.libclang_path), "..", "include", "clang-c") |> normpath
  34. clang_args = ["-I", STARPU_BUILD_INCLUDE, "-I", STARPU_SRC_INCLUDE]
  35. for header in find_std_headers()
  36. push!(clang_args, "-I")
  37. push!(clang_args, header)
  38. end
  39. only_select_symbols = Set(["starpu_task",
  40. "starpu_cublas_init",
  41. "starpu_codelet",
  42. "starpu_data_filter",
  43. "starpu_tag_t",
  44. "starpu_perfmodel",
  45. "starpu_perfmodel_type",
  46. "starpu_data_handle_t",
  47. "starpu_init",
  48. "starpu_data_acquire_on_node",
  49. "starpu_data_release_on_node",
  50. "starpu_data_unregister",
  51. "starpu_data_partition",
  52. "starpu_data_unpartition",
  53. "starpu_data_get_sub_data",
  54. "starpu_data_map_filters",
  55. "starpu_data_get_default_sequential_consistency_flag",
  56. "starpu_data_set_default_sequential_consistency_flag",
  57. "starpu_data_get_sequential_consistency_flag",
  58. "starpu_data_set_sequential_consistency_flag",
  59. "starpu_data_wont_use",
  60. "starpu_matrix_data_register",
  61. "starpu_block_data_register",
  62. "starpu_vector_data_register",
  63. "starpu_variable_data_register",
  64. "starpu_memory_pin",
  65. "starpu_memory_unpin",
  66. "starpu_task_end_dep_add",
  67. "starpu_task_end_dep_release",
  68. "starpu_task_init",
  69. "starpu_task_destroy",
  70. "starpu_task_submit",
  71. "starpu_task_wait",
  72. "starpu_task_wait_for_n_submitted",
  73. "starpu_tag_remove",
  74. "starpu_tag_wait",
  75. "starpu_tag_declare_deps_array",
  76. "starpu_tag_notify_from_apps",
  77. "starpu_task_declare_end_deps_array",
  78. "starpu_task_declare_deps_array",
  79. "starpu_iteration_push",
  80. "starpu_iteration_pop",
  81. "starpu_worker_get_count",
  82. "starpu_cpu_worker_get_count",
  83. "starpu_cuda_worker_get_count",
  84. "starpu_opencl_worker_get_count",
  85. "starpu_mic_worker_get_count",
  86. "STARPU_CPU",
  87. "STARPU_CUDA",
  88. "STARPU_CUDA_ASYNC",
  89. "STARPU_OPENCL",
  90. "STARPU_MAIN_RAM",
  91. "STARPU_NMAXBUFS",
  92. "STARPU_USE_CUDA"])
  93. wc = init(; headers = STARPU_HEADERS,
  94. output_file = joinpath(fstarpu_build_dir(), "julia/gen/libstarpu_api.jl"),
  95. common_file = joinpath(fstarpu_build_dir(), "julia/gen/libstarpu_common.jl"),
  96. clang_includes = vcat(LIBCLANG_INCLUDE, CLANG_INCLUDE),
  97. clang_args = clang_args,
  98. header_library = x->"starpu_wrapper_library_name",
  99. clang_diagnostics = false,
  100. rewriter = x->x,
  101. only_select_symbols = only_select_symbols,
  102. fields_align = Dict((:starpu_pthread_spinlock_t,:taken) => 16)
  103. )
  104. run(wc)
  105. end