-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathctypes_bindings.cmake
More file actions
59 lines (50 loc) · 2.4 KB
/
ctypes_bindings.cmake
File metadata and controls
59 lines (50 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
find_program(CTYPESGEN_PATH ctypesgen REQUIRED)
set(_THIS_MODULE_BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
function(ctypesgen_json target_name input_header output_filename)
add_custom_command(OUTPUT "${output_filename}"
COMMAND ${CTYPESGEN_PATH} --output-language=json --no-macro-warnings
"-I $<JOIN:$<TARGET_PROPERTY:${target_name},INCLUDE_DIRECTORIES>, -I >"
-L "$<TARGET_FILE_DIR:${target_name}>" -l "$<TARGET_FILE_NAME:${target_name}>"
"${input_header}"
-o "${output_filename}"
BYPRODUCTS "${output_filename}")
if (NOT TARGET ${target_name}_json)
add_custom_target(${target_name}_json
ALL
DEPENDS "${output_filename}")
else()
set_property(TARGET ${target_name}_json APPEND
PROPERTY DEPENDS "${output_filename}")
endif()
endfunction()
function(ctypesgen_bindings target_name input_header output_filename)
add_custom_command(OUTPUT "${output_filename}"
COMMAND ${CTYPESGEN_PATH} --no-macro-warnings
"-I $<JOIN:$<TARGET_PROPERTY:${target_name},INCLUDE_DIRECTORIES>, -I >"
-L "$<TARGET_FILE_DIR:${target_name}>" -l "$<TARGET_FILE_NAME:${target_name}>"
"${input_header}"
-o "${output_filename}"
BYPRODUCTS "${output_filename}")
if (NOT TARGET ${target_name}_bindings)
add_custom_target(${target_name}_bindings
ALL
DEPENDS "${output_filename}")
else()
set_property(TARGET ${target_name}_bindings APPEND
PROPERTY DEPENDS "${output_filename}")
endif()
endfunction()
function(ctypes_bindings target_name input_header output_filename)
ctypesgen_bindings(${target_name} ${input_header} ${output_filename})
get_filename_component(json_filename_no_ext ${output_filename} NAME_WE)
set(json_filename ${json_filename_no_ext}.json)
ctypesgen_json(${target_name} ${input_header} ${json_filename})
get_filename_component(output_directory ${output_filename} DIRECTORY)
add_custom_command(OUTPUT ${output_filename}
COMMAND ${Python3_EXECUTABLE} ${_THIS_MODULE_BASE_DIR}/gen_callbackwrappers.py
--bindings ${output_filename} --json ${json_filename}
APPEND)
get_filename_component(dest_filename ${output_filename} NAME)
install(FILES ${output_filename} DESTINATION ${Python3_SITEARCH})
endfunction()