# Doxyfile for onnx-light C++ API documentation
# Used by breathe to integrate C++ docs into the Sphinx documentation.

PROJECT_NAME           = "onnx-light"
PROJECT_BRIEF          = "ONNX without protobuf"
OUTPUT_DIRECTORY       = $(DOXYGEN_OUTPUT_DIR)
INPUT                  = ../onnx_light/onnx_helpers/include \
                         ../onnx_light/onnx_core \
                         ../onnx_light/onnx_op \
                         ../onnx_light/onnx_extensions/shapes \
                         ../onnx_light/onnx_extensions/backend_test \
                         ../onnx_light/onnx_extensions/kernels \
                         ../onnx_light/onnx_proto \
                         ../onnx_light/onnx_manipulations \
                         ../onnx_light/onnx_lib
FILE_PATTERNS          = *.h *.hpp
RECURSIVE              = YES
EXCLUDE_PATTERNS       = */stream_class_print.hpp \
                         */stream_class_read.hpp \
                         */stream_class_size.hpp \
                         */stream_class_write.hpp \
                         */stream_class.hpp \
                         */stream_class_adapters.hpp \
                         */fields.hpp \
                         */defs/operator_sets*.h \
                         */common/schema.h \
                         */onnx_lib/onnx-data.pb.h \
                         */onnx_lib/onnx_pb.h \
                         */onnx_core/onnx_core.h \
                         */run_nodes_internal.h \
                         */blake3/*

# Output formats: XML is required for Breathe; disable HTML (Sphinx handles it)
GENERATE_XML           = YES
GENERATE_HTML          = NO
GENERATE_LATEX         = NO

# Extraction settings
EXTRACT_ALL            = YES
EXTRACT_PRIVATE        = NO
EXTRACT_STATIC         = YES

# Preprocessing
ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES
EXPAND_ONLY_PREDEF     = YES

# Expand the code-generation macros from stream_class.h so that Doxygen sees
# the full class hierarchy defined in onnx.h.
#
# BEGIN_PROTO / BEGIN_PROTO_NOINIT open a class with the embedded doc-string.
# END_PROTO closes the class.
# FIELD* macros each expand to a documented member declaration.
# SERIALIZATION_METHOD expands to the parse/serialize method signatures.
PREDEFINED             = \
    "ONNX_API=" \
    "ONNX_LIGHT_NAMESPACE=onnx_light" \
    "ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(domain,ver,name)=name" \
    "BEGIN_PROTO(cls,doc)=/** doc */ class cls : public onnx_light::Message { public:" \
    "BEGIN_PROTO_NOINIT(cls,doc)=/** doc */ class cls : public onnx_light::Message { public:" \
    "END_PROTO()=};" \
    "FIELD(type,name,order,doc)=/** doc */ type name;" \
    "FIELD_DEFAULT(type,name,order,default_value,doc)=/** doc */ type name;" \
    "FIELD_STR(name,order,doc)=/** doc */ onnx_light::utils::OptionalString name;" \
    "FIELD_REPEATED(type,name,order,doc)=/** doc */ onnx_light::utils::RepeatedField<type> name;" \
    "FIELD_REPEATED_STR(type,name,order,doc)=/** doc */ onnx_light::utils::RepeatedStringField name;" \
    "FIELD_REPEATED_PROTO(type,name,order,doc)=/** doc */ onnx_light::utils::RepeatedProtoField<type> name;" \
    "FIELD_REPEATED_PACKED(type,name,order,doc)=/** doc */ onnx_light::utils::RepeatedField<type> name;" \
    "FIELD_OPTIONAL(type,name,order,doc)=/** doc */ onnx_light::utils::OptionalField<type> name;" \
    "FIELD_OPTIONAL_ONEOF(type,name,order,oneof,doc)=/** doc */ onnx_light::utils::OptionalField<type> name;" \
    "FIELD_OPTIONAL_ENUM(type,name,order,doc)=/** doc */ onnx_light::utils::OptionalEnumField<type> name;" \
    "SERIALIZATION_METHOD()=uint64_t SerializeSize() const; void ParseFromString(const std::string &raw); void ParseFromString(const std::string &raw, onnx_light::ParseOptions &options); void SerializeToString(std::string &out) const; void SerializeToString(std::string &out, onnx_light::SerializeOptions &options) const; uint64_t SerializeSize(onnx_light::utils::BinaryWriteStream &stream, onnx_light::SerializeOptions &options) const; void ParseFromStream(onnx_light::utils::BinaryStream &stream, onnx_light::ParseOptions &options); void SerializeToStream(onnx_light::utils::BinaryWriteStream &stream, onnx_light::SerializeOptions &options) const; void PrintToStringStream(std::stringstream &ss, onnx_light::utils::PrintOptions &options) const;" \
    "define_data(type, field)=/** doc */ template <> inline type *Tensor::data<type>() { if (is_raw_data_) { return reinterpret_cast<type *>(raw_data_.data()); } return field.data(); } template <> inline const type *Tensor::data<type>() const { if (is_raw_data_) { return reinterpret_cast<const type *>(raw_data_.data()); } return field.data(); }"

# Quiet mode
QUIET                  = YES
WARNINGS               = YES
WARN_IF_UNDOCUMENTED   = NO
WARN_IF_DOC_ERROR      = NO
WARN_NO_PARAMDOC       = NO
WARN_IF_INCOMPLETE_DOC = NO

# Disable dot-based graphs entirely. KernelBase has 150+ derived kernel classes
# and triggers an "inheritance graph ... too many nodes" warning when DOT graphs
# are enabled; the graphs are not used by the published documentation anyway.
HAVE_DOT               = NO
CLASS_GRAPH            = NO
COLLABORATION_GRAPH    = NO
