11## Copyright 2021-2024 The Khronos Group
22## SPDX-License-Identifier: Apache-2.0
33
4- if ( CMAKE_VERSION VERSION_GREATER_EQUAL "3.12" )
4+ ## Installation of scripts (independent of code-gen targets) ##
55
6- option (INSTALL_CODE_GEN_SCRIPTS "Install scripts in code_gen/" ON )
6+ option (INSTALL_CODE_GEN_SCRIPTS "Install scripts in code_gen/" ON )
7+ if (INSTALL_CODE_GEN_SCRIPTS)
8+ install (DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
9+ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR} /anari
10+ COMPONENT code_gen
11+ FILES_MATCHING
12+ PATTERN *.py
13+ PATTERN *.h
14+ PATTERN *.cpp
15+ PATTERN *.json
16+ PATTERN templates/CMakeLists.txt
17+ PATTERN ./CMakeLists.txt EXCLUDE
18+ )
19+ endif ()
720
8- find_package (Python3 REQUIRED COMPONENTS Interpreter)
21+ ## Local targets for code-gen + API bindings ##
922
10- set (API_JSON api/anari_core_1_0.json api/khr_frame_completion_callback.json)
23+ if (CMAKE_VERSION VERSION_LESS "3.12" )
24+ return ()
25+ endif ()
1126
12- add_custom_target (generate_type_utility
13- COMMAND ${Python3_EXECUTABLE} generate_headers.py ${CMAKE_SOURCE_DIR} /libs/anari/include /anari/frontend/type_utility.h ${API_JSON}
14- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
15- DEPENDS ${API_JSON} generate_headers.py
16- )
27+ find_package (Python3 OPTIONAL_COMPONENTS Interpreter)
1728
18- add_custom_target (generate_extension_utility
19- COMMAND ${Python3_EXECUTABLE} generate_extension_utility.py
20- -j ${CMAKE_CURRENT_SOURCE_DIR} /api/
21- -d devices/experimental_device.json
22- -o ${CMAKE_SOURCE_DIR} /libs/anari/include /anari/frontend
23- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
24- DEPENDS devices/experimental_device.json generate_extension_utility.py
25- )
29+ if (NOT TARGET Python3::Interpreter)
30+ message (WARNING "Unable to find python interpreter, skipping code-gen + API bindings" )
31+ return ()
32+ endif ()
2633
27- add_custom_target (generate_anari_h
28- COMMAND ${Python3_EXECUTABLE} generate_headers.py ${CMAKE_SOURCE_DIR} /libs/anari/include /anari/anari.h ${API_JSON}
29- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
30- DEPENDS ${API_JSON} generate_headers.py
31- )
34+ option (INSTALL_PYTHON_BINDINGS "Install python bindings" OFF ) # If turned on, draws in all the custom targets below (generate_all)
3235
33- add_custom_target (generate_anari_enums_h
34- COMMAND ${Python3_EXECUTABLE} generate_headers.py ${CMAKE_SOURCE_DIR} /libs/anari/include /anari/frontend/anari_enums.h ${API_JSON}
35- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
36- DEPENDS ${API_JSON} generate_headers.py
37- )
38- add_custom_target (generate_headers DEPENDS
39- generate_type_utility
40- generate_extension_utility
41- generate_anari_h
42- generate_anari_enums_h
43- )
36+ set (API_JSON api/anari_core_1_0.json api/khr_frame_completion_callback.json)
4437
45- add_dependencies (generate_all generate_headers)
46-
47- add_custom_target (python_bindings
48- COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} /pyanari_build.py
49- -d ${CMAKE_CURRENT_SOURCE_DIR} /devices/generic_device.json
50- -j ${CMAKE_CURRENT_SOURCE_DIR} /api/
51- -I ${CMAKE_SOURCE_DIR} /libs/anari/include /
52- -I ${CMAKE_BINARY_DIR} /libs/anari/include /anari/
53- -L ${CMAKE_BINARY_DIR}
54- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
55- DEPENDS pyanari_build.py anari ${API_JSON} devices/generic_device.json
56- )
38+ add_custom_target (generate_type_utility
39+ COMMAND ${Python3_EXECUTABLE} generate_headers.py ${CMAKE_SOURCE_DIR} /src/anari/include /anari/frontend/type_utility.h ${API_JSON}
40+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
41+ DEPENDS ${API_JSON} generate_headers.py
42+ )
5743
58- if (INSTALL_CODE_GEN_SCRIPTS)
59- install (DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
60- DESTINATION ${CMAKE_INSTALL_DATAROOTDIR} /anari
61- COMPONENT code_gen
62- FILES_MATCHING
63- PATTERN *.py
64- PATTERN *.h
65- PATTERN *.cpp
66- PATTERN *.json
67- PATTERN templates/CMakeLists.txt
68- PATTERN ./CMakeLists.txt EXCLUDE
69- )
70- endif ()
44+ add_custom_target (generate_extension_utility
45+ COMMAND ${Python3_EXECUTABLE} generate_extension_utility.py
46+ -j ${CMAKE_CURRENT_SOURCE_DIR} /api/
47+ -d devices/experimental_device.json
48+ -o ${CMAKE_SOURCE_DIR} /src/anari/include /anari/frontend
49+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
50+ DEPENDS devices/experimental_device.json generate_extension_utility.py
51+ )
52+
53+ add_custom_target (generate_anari_h
54+ COMMAND ${Python3_EXECUTABLE} generate_headers.py ${CMAKE_SOURCE_DIR} /src/anari/include /anari/anari.h ${API_JSON}
55+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
56+ DEPENDS ${API_JSON} generate_headers.py
57+ )
58+
59+ add_custom_target (generate_anari_enums_h
60+ COMMAND ${Python3_EXECUTABLE} generate_headers.py ${CMAKE_SOURCE_DIR} /src/anari/include /anari/frontend/anari_enums.h ${API_JSON}
61+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
62+ DEPENDS ${API_JSON} generate_headers.py
63+ )
64+ add_custom_target (generate_headers DEPENDS
65+ generate_type_utility
66+ generate_extension_utility
67+ generate_anari_h
68+ generate_anari_enums_h
69+ )
70+
71+ add_dependencies (generate_all generate_headers)
7172
72- endif ()
73+ if (INSTALL_PYTHON_BINDINGS)
74+ set (BUILD_PYTHON_BINDINGS_BY_DEFAULT ALL )
75+ endif ()
76+
77+ add_custom_target (python_bindings ${BUILD_PYTHON_BINDINGS_BY_DEFAULT}
78+ COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} /pyanari_build.py
79+ -d ${CMAKE_CURRENT_SOURCE_DIR} /devices/generic_device.json
80+ -j ${CMAKE_CURRENT_SOURCE_DIR} /api/
81+ -I ${CMAKE_SOURCE_DIR} /src/anari/include /
82+ -I ${CMAKE_BINARY_DIR} /src/anari/include /anari/
83+ -L ${CMAKE_BINARY_DIR}
84+ -L ${CMAKE_BINARY_DIR} /$<CONFIG>
85+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
86+ DEPENDS pyanari_build.py anari ${API_JSON} devices/generic_device.json
87+ )
88+
89+ if (INSTALL_PYTHON_BINDINGS)
90+ if (WIN32 )
91+ set (PYANARI_LIB_FILE pyanari.pyd)
92+ else ()
93+ set (PYANARI_LIB_FILE pyanari.so)
94+ endif ()
95+ install (
96+ FILES ${CMAKE_CURRENT_BINARY_DIR} /anari.py ${CMAKE_CURRENT_BINARY_DIR} /${PYANARI_LIB_FILE}
97+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /python_bindings)
98+ endif ()
0 commit comments