Skip to content

Using the Generator

When the Djinni file(s) are ready, from the command line you can run:

djinni \
   --java-out JAVA_OUTPUT_FOLDER \
   --java-package com.example.jnigenpackage \
   --java-cpp-exception DbxException \ # Choose between a customized C++ exception in Java and java.lang.RuntimeException (the default).
   --ident-java-field mFooBar \ # Optional, this adds an "m" in front of Java field names
   \
   --cpp-out CPP_OUTPUT_FOLDER \
   \
   --jni-out JNI_OUTPUT_FOLDER \
   --ident-jni-class NativeFooBar \ # This adds a "Native" prefix to JNI class
   --ident-jni-file NativeFooBar \ # This adds a prefix to the JNI filenames otherwise the cpp and jni filenames are the same.
   \
   --objc-out OBJC_OUTPUT_FOLDER \
   --objc-type-prefix DB \ # Apple suggests Objective-C classes have a prefix for each defined type.
   \
   --objcpp-out OBJC_OUTPUT_FOLDER \
   \
   --py-out PYTHON_OUTPUT_FOLDER \
   --pycffi-out CFFI_OUTPUT_FOLDER \ # Required for Python support
   --pycffi-package-name PyCFFIlib \
   --pycffi-dynamic-lib-list mylib \
   --c-wrapper-out C_WRAPPER_OUTPUT_FOLDER \ # Required for Python support
   \
   --idl MY_PROJECT.djinni

Note

If a language's output folder is not specified, that language will not be generated.

All Arguments

General

Argument Description
--help Print help
--version Print version
--idl <in-file> The IDL file with the type definitions, typically with extension .djinni.
--idl-include-path <path> ... An include path to search for Djinni @import and @extern directives. Can specify multiple paths.

Java

Argument Description
--java-out <out-folder> The output for the Java files (Generator disabled if unspecified).
--java-package ... The package name to use for generated Java classes.
--java-class-access-modifier <public/package> The access modifier to use for generated Java classes (default: public).
--java-cpp-exception <exception-class> The type for translated C++ exceptions in Java (default: java.lang.RuntimeException that is not checked)
--java-annotation <annotation-class> Java annotation (@Foo) to place on all generated Java classes
--java-generate-interfaces <true/false> Whether Java interfaces should be used instead of abstract classes where possible (default: false).
--java-nullable-annotation <nullable-annotation-class> Java annotation (@Nullable) to place on all fields and return values that are optional
--java-nonnull-annotation <nonnull-annotation-class> Java annotation (@Nonnull) to place on all fields and return values that are not optional
--java-implement-android-os-parcelable <true/false> all generated java classes will implement the interface android.os.Parcelable
--java-use-final-for-record <use-final-for-record> Whether generated Java classes for records should be marked final (default: true).

C++

Argument Description
--cpp-out <out-folder> The output folder for C++ files (Generator disabled if unspecified).
--cpp-header-out <out-folder> The output folder for C++ header files (default: the same as --cpp-out).
--cpp-include-prefix <prefix> The prefix for #includes of header files from C++ files.
--cpp-namespace ... The namespace name to use for generated C++ classes.
--cpp-ext <ext> The filename extension for C++ files (default: cpp).
--hpp-ext <ext> The filename extension for C++ header files (default: hpp).
--cpp-optional-template <template> The template to use for optional values (default: std::optional)
--cpp-optional-header <header> The header to use for optional values (default: <optional>)
--cpp-enum-hash-workaround <true/false> Work around LWG-2148 by generating std::hash specializations for C++ enums (default: true)
--cpp-nn-header <header> The header to use for non-nullable pointers
--cpp-nn-type <header> The type to use for non-nullable pointers (as a substitute for std::shared_ptr)
--cpp-nn-check-expression <header> The expression to use for building non-nullable pointers
--cpp-use-wide-strings <true/false> Use wide strings in C++ code (default: false)
--cpp-omit-default-record-constructor <true/false> Omit the default constructor for records in C++ code (default: false)
--cpp-json-serialization <nlohmann_json> If specified, generate serializers to/from JSON and C++ types using nlohmann/json.

JNI

Argument Description
--jni-out <out-folder> The folder for the JNI C++ output files (Generator disabled if unspecified).
--jni-header-out <out-folder> The folder for the JNI C++ header files (default: the same as --jni-out).
--jni-include-prefix <prefix> The prefix for #includes of JNI header files from JNI C++ files.
--jni-include-cpp-prefix <prefix> The prefix for #includes of the main header files from JNI C++ files.
--jni-namespace ... The namespace name to use for generated JNI C++ classes.
--jni-generate-main <true/false> Generate a source file (djinni_jni_main.cpp) that includes the default JNI_OnLoad & JNI_OnUnload implementation from the support library. (default: true)

Objective-C

Argument Description
--objc-out <out-folder> The output folder for Objective-C files (Generator disabled if unspecified).
--objc-header-out <out-folder> The output folder for Objective-C header files (default: the same as --objc-out).
--objc-h-ext <ext> The filename extension for Objective-C[++] header files (default: h)
--objc-type-prefix <pre> The prefix for Objective-C data types (usually two or three letters)
--objc-include-prefix <prefix> The prefix for #import of header files from Objective-C files.
--objc-swift-bridging-header <name> The name of Objective-C Bridging Header used in XCode's Swift projects. The output folder is --objc-header-out.
--objc-closed-enums <true/false> All generated Objective-C enums will be NS_CLOSED_ENUM (default: false).
--objc-strict-protocols <true/false> All generated @protocol will implement (default: true).

Objective-C++

Argument Description
--objcpp-out <out-folder> The output folder for private Objective-C++ files (Generator disabled if unspecified).
--objcpp-header-out <out-folder> The folder for the Objective-C++ header files (default: the same as --objcpp-out).
--objcpp-ext <ext> The filename extension for Objective-C++ files (default: mm)
--objcpp-include-prefix <prefix> The prefix for #import of Objective-C++ header files from Objective-C++ files.
--objcpp-include-cpp-prefix <prefix> The prefix for #include of the main C++ header files from Objective-C++ files.
--objcpp-include-objc-prefix <prefix> The prefix for #import of the Objective-C header files from Objective-C++ files (default: the same as --objcpp-include-prefix)
--cpp-extended-record-include-prefix <prefix> The prefix path for #include of the extended record C++ header (.hpp) files
--objc-extended-record-include-prefix <prefix> The prefix path for #import of the extended record Objective-C header (.h) files
--objcpp-namespace <prefix> The namespace name to use for generated Objective-C++ classes.

Python

Argument Description
--py-out <out-folder> The output folder for Python files (Generator disabled if unspecified).
--pycffi-out <out-folder> The output folder for PyCFFI files (Generator disabled if unspecified).
--pycffi-package-name ... The package name to use for the generated PyCFFI classes.
--pycffi-dynamic-lib-list ... The names of the dynamic libraries to be linked with PyCFFI.
--py-import-prefix <import-prefix> The import prefix used within python generated files (default: "")

C wrapper

Argument Description
--c-wrapper-out <out-folder> The output folder for C wrapper files (Generator disabled if unspecified).
--c-wrapper-header-out <out-folder> The output folder for C wrapper header files (default: the same as --c-wrapper-out).
--c-wrapper-include-prefix <prefix> The prefix for #includes of C wrapper header files from C wrapper C++ files.
--c-wrapper-include-cpp-prefix <prefix> The prefix for #includes of C++ header files from C wrapper C++ files.

C++/CLI

Argument Description
--cppcli-out <out-folder> The output folder for C++/CLI files (Generator disabled if unspecified).
--cppcli-namespace ... The namespace name to use for generated C++/CLI classes.
--cppcli-include-cpp-prefix <prefix> The prefix for #include of the main C++ header files from C++/CLI files.

Yaml Generation

Argument Description
--yaml-out <out-folder> The output folder for YAML files (Generator disabled if unspecified).
--yaml-out-file <out-file> If specified all types are merged into a single YAML file instead of generating one file per type (relative to --yaml-out).
--yaml-prefix <pre> The prefix to add to type names stored in YAML files (default: "").

Other

Argument Description
--list-in-files <list-in-files> Optional file in which to write the list of input files parsed.
--list-out-files <list-out-files> Optional file in which to write the list of output files produced.
--skip-generation <true/false> Way of specifying if file generation should be skipped (default: false)

Identifier Style

The Identifier Style is a text conversion hint on how to generate names from the djinni idl file.

Possible values: FooBar, fooBar, foo_bar, FOO_BAR, m_fooBar.

C++

Argument Default
--ident-cpp-enum FOO_BAR
--ident-cpp-field foo_bar
--ident-cpp-method foo_bar
--ident-cpp-type FooBar
--ident-cpp-enum-type FooBar
--ident-cpp-type-param FooBar
--ident-cpp-local foo_bar
--ident-cpp-file foo_bar

Java

Argument Default
--ident-java-enum FOO_BAR
--ident-java-field fooBar
--ident-java-type FooBar
--ident-jni-class FooBar
--ident-jni-file foo_bar

Objective C

Argument Default
--ident-objc-enum FooBar
--ident-objc-field fooBar
--ident-objc-method fooBar
--ident-objc-type FooBar
--ident-objc-type-param FooBar
--ident-objc-local fooBar
--ident-objc-file FooBar

Python

Argument Default
--ident-py-type foo_bar
--ident-py-class-name FooBar
--ident-py-type-param foo_bar
--ident-py-method foo_bar
--ident-py-field foo_bar
--ident-py-local foo_bar
--ident-py-enum Foo_Bar
--ident-py-const FOO_BAR

C++/CLI

Argument Default
--ident-cppcli-type FooBar
--ident-cppcli-type-param FooBar
--ident-cppcli-property FooBar
--ident-cppcli-method FooBar
--ident-cppcli-local fooBar
--ident-cppcli-enum FooBar
--ident-cppcli-const FooBar
--ident-cppcli-file FooBar

Example:

The djinni idl for an enum

SomeEnum = enum {
    Value;
}

transforms per default to the following Java code

public enum SomeEnum {
    VALUE,
    ;
}
As you see, VALUE is now in upper case letters.

If you use --ident-java-enum foo_bar then Value will not be transformed into upper case and the following Java code will be generated.

public enum SomeEnum {
    Value,
    ;
}

This way you can adopt code generation to some extend to your existing coding style.

The best way to find out how that works is playing around with different values for different identifier options.

If you wish no text transformation to happen, use the foo_bar style.

Note

Some identifiers do have text transformation enabled by default. Nevertheless make sure to explicitly set text transformation styles if you need them! All text transformation may be disabled by default in a future release of the generator.


Last update: July 10, 2022