Skip to content

Commit

Permalink
make query code generation completely transparent in CMake
Browse files Browse the repository at this point in the history
  • Loading branch information
jeffamstutz committed Jan 6, 2025
1 parent 25fd6f5 commit 433d482
Show file tree
Hide file tree
Showing 17 changed files with 47 additions and 38,951 deletions.
36 changes: 19 additions & 17 deletions cmake/anari_generate_codegen.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -12,47 +12,49 @@ function(anari_generate_queries)
# options
""
# single-arg options
"PREFIX;NAME;CPP_NAMESPACE;JSON_DEFINITIONS_FILE;JSON_ROOT_LOCATION;OUTPUT_LOCATION"
"CPP_NAMESPACE;JSON_DEFINITIONS_FILE;JSON_ROOT_LOCATION;JSON_EXTENSION_FILES;DEVICE_TARGET"
# multi-arg options
""
# string to parse
${ARGN}
)

file(GLOB_RECURSE CORE_JSONS ${ANARI_CODE_GEN_ROOT}/api/*.json)

find_package(Python3 OPTIONAL_COMPONENTS Interpreter)
if (NOT TARGET Python3::Interpreter)
message(WARNING "Unable to find python interpreter, skipping code-gen targets")
return()
endif()

if (NOT DEFINED GENERATE_DEVICE_TARGET)
message(FATAL_ERROR "DEVICE_TARGET option required for anari_generate_queries()")
endif()

set(GENERATE_PREFIX "${GENERATE_DEVICE_TARGET}")

if (DEFINED GENERATE_JSON_ROOT_LOCATION)
set(EXTRA_JSON_OPTION --json ${GENERATE_JSON_ROOT_LOCATION})
endif()

if (DEFINED GENERATE_OUTPUT_LOCATION)
set(OUTPUT_LOCATION ${GENERATE_OUTPUT_LOCATION})
else()
set(OUTPUT_LOCATION ${CMAKE_CURRENT_SOURCE_DIR})
endif()
set(OUTPUT_LOC ${CMAKE_CURRENT_BINARY_DIR})
set(OUTPUT_H ${OUTPUT_LOC}/${GENERATE_PREFIX}_queries.h)
set(OUTPUT_CPP ${OUTPUT_LOC}/${GENERATE_PREFIX}_queries.cpp)

add_custom_target(generate_${GENERATE_NAME}
add_custom_command(
OUTPUT ${OUTPUT_H} ${OUTPUT_CPP}
COMMAND ${Python3_EXECUTABLE} ${ANARI_CODE_GEN_ROOT}/generate_queries.py
--json ${ANARI_CODE_GEN_ROOT}
${EXTRA_JSON_OPTION}
--prefix ${GENERATE_PREFIX}
--device ${GENERATE_JSON_DEFINITIONS_FILE}
--namespace ${GENERATE_CPP_NAMESPACE}
--output ${OUTPUT_LOCATION}
--output ${OUTPUT_LOC}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${GENERATE_JSON_DEFINITIONS_FILE}
)

set_source_files_properties(
${OUTPUT_LOCATION}/${GENERATE_PREFIX}Queries.h ${OUTPUT_LOCATION}/${GENERATE_PREFIX}Queries.cpp
PROPERTIES GENERATED ON
DEPENDS ${CORE_JSONS} ${GENERATE_JSON_DEFINITIONS_FILE} ${GENERATE_JSON_EXTENSION_FILES}
)

if (TARGET generate_all)
add_dependencies(generate_all generate_${GENERATE_NAME})
endif()
set_source_files_properties(${OUTPUT_H} ${OUTPUT_CPP} PROPERTIES GENERATED ON)
target_sources(${GENERATE_DEVICE_TARGET} PRIVATE ${OUTPUT_CPP})
target_include_directories(${GENERATE_DEVICE_TARGET} PRIVATE ${OUTPUT_LOC})
endfunction()
4 changes: 2 additions & 2 deletions code_gen/generate_queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -456,7 +456,7 @@ def end_namespaces(args):
output += "}\n"
return output

with open(args.outdir/(args.prefix + "Queries.cpp"), mode='w') as f:
with open(args.outdir/(args.prefix + "_queries.cpp"), mode='w') as f:
f.write("// Copyright 2024 The Khronos Group\n")
f.write("// SPDX-License-Identifier: Apache-2.0\n\n")
f.write("// This file was generated by "+os.path.basename(__file__)+"\n")
Expand All @@ -474,7 +474,7 @@ def end_namespaces(args):
f.write(end_namespaces(args))


with open(args.outdir/(args.prefix + "Queries.h"), mode='w') as f:
with open(args.outdir/(args.prefix + "_queries.h"), mode='w') as f:
f.write("// Copyright 2024 The Khronos Group\n")
f.write("// SPDX-License-Identifier: Apache-2.0\n\n")
f.write("// This file was generated by "+os.path.basename(__file__)+"\n")
Expand Down
20 changes: 8 additions & 12 deletions examples/empty_helium_device/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,23 +43,11 @@ include(GNUInstallDirs)

find_package(anari REQUIRED)

## Code generation ##

anari_generate_queries(
NAME hecore_queries
PREFIX HeCoreDevice
CPP_NAMESPACE hecore
JSON_DEFINITIONS_FILE ${CMAKE_CURRENT_SOURCE_DIR}/HeCoreDefinitions.json
)
if (TARGET generate_all AND TARGET generate_hecore_queries)
add_dependencies(generate_all generate_hecore_queries)
endif()

## Build device target ##

add_library(${PROJECT_NAME} SHARED
HeCoreDevice.cpp
HeCoreDeviceQueries.cpp
HeCoreDeviceGlobalState.cpp
HeCoreLibrary.cpp
Object.cpp
Expand Down Expand Up @@ -89,6 +77,14 @@ PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
)

## Code generation ##

anari_generate_queries(
DEVICE_TARGET ${PROJECT_NAME}
CPP_NAMESPACE hecore
JSON_DEFINITIONS_FILE ${CMAKE_CURRENT_SOURCE_DIR}/HeCoreDefinitions.json
)

## Installation ##

install(TARGETS ${PROJECT_NAME}
Expand Down
2 changes: 1 addition & 1 deletion examples/empty_helium_device/HeCoreDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#include "frame/Frame.h"
#include "scene/volume/spatial_field/SpatialField.h"

#include "HeCoreDeviceQueries.h"
#include "anari_library_hecore_queries.h"

namespace hecore {

Expand Down
Loading

0 comments on commit 433d482

Please sign in to comment.