From d1f31a6ae438888694fc42aceae5b37cb3f035bf Mon Sep 17 00:00:00 2001 From: Jamie Mair Date: Wed, 2 Aug 2023 16:04:26 +0100 Subject: [PATCH 1/2] Changed the clang ast generation command Previous command cannot find include of other files and errors. This specifically misses some of the type union struct defintions. --- introspect/codegen/generate_enums.py | 4 ++-- introspect/codegen/generate_functions.py | 4 ++-- introspect/codegen/generate_structs.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/introspect/codegen/generate_enums.py b/introspect/codegen/generate_enums.py index 68e9592f7e..4e53a381d6 100644 --- a/introspect/codegen/generate_enums.py +++ b/introspect/codegen/generate_enums.py @@ -14,8 +14,8 @@ # ============================================================================== """Generates enums.py. -The JSON input can be generated via: - clang -Xclang -ast-dump=json -fsyntax-only -fparse-all-comments -x c mujoco.h +The JSON input can be generated via running the following in the `mujoco/include` directory: + clang -Xclang -ast-dump=json -fsyntax-only -fparse-all-comments -x c -I$(pwd) mujoco/mujoco.h """ import json diff --git a/introspect/codegen/generate_functions.py b/introspect/codegen/generate_functions.py index 1966e32895..fa0d097dd5 100644 --- a/introspect/codegen/generate_functions.py +++ b/introspect/codegen/generate_functions.py @@ -14,8 +14,8 @@ # ============================================================================== """Generates functions.py. -The JSON input can be generated via: - clang -Xclang -ast-dump=json -fsyntax-only -fparse-all-comments -x c mujoco.h +The JSON input can be generated via running the following in the `mujoco/include` directory: + clang -Xclang -ast-dump=json -fsyntax-only -fparse-all-comments -x c -I$(pwd) mujoco/mujoco.h """ import json diff --git a/introspect/codegen/generate_structs.py b/introspect/codegen/generate_structs.py index 956b548fbe..6872568271 100644 --- a/introspect/codegen/generate_structs.py +++ b/introspect/codegen/generate_structs.py @@ -14,8 +14,8 @@ # ============================================================================== """Generates structs.py. -The JSON input can be generated via: - clang -Xclang -ast-dump=json -fsyntax-only -fparse-all-comments -x c mujoco.h +The JSON input can be generated via running the following in the `mujoco/include` directory: + clang -Xclang -ast-dump=json -fsyntax-only -fparse-all-comments -x c -I$(pwd) mujoco/mujoco.h """ import itertools From 6bc0aa76be34ca86aea477ae5a40ce186a702469 Mon Sep 17 00:00:00 2001 From: Jamie Mair Date: Wed, 2 Aug 2023 18:18:03 +0100 Subject: [PATCH 2/2] Added typedefs for the mjuiItemX union types Required to generate the API for mjuiItem, otherwise the struct information itself is not discovered. --- include/mujoco/mjui.h | 4 ++ introspect/structs.py | 85 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 85 insertions(+), 4 deletions(-) diff --git a/include/mujoco/mjui.h b/include/mujoco/mjui.h index 2f96d7e2ee..f930acb0e5 100644 --- a/include/mujoco/mjui.h +++ b/include/mujoco/mjui.h @@ -208,24 +208,28 @@ struct mjuiItemSingle_ { // check and button-related int modifier; // 0: none, 1: control, 2: shift; 4: alt int shortcut; // shortcut key; 0: undefined }; +typedef struct mjuiItemSingle_ mjuiItemSingle; struct mjuiItemMulti_ { // static, radio and select-related int nelem; // number of elements in group char name[mjMAXUIMULTI][mjMAXUINAME]; // element names }; +typedef struct mjuiItemMulti_ mjuiItemMulti; struct mjuiItemSlider_ { // slider-related double range[2]; // slider range double divisions; // number of range divisions }; +typedef struct mjuiItemSlider_ mjuiItemSlider; struct mjuiItemEdit_ { // edit-related int nelem; // number of elements in list double range[mjMAXUIEDIT][2]; // element range (min>=max: ignore) }; +typedef struct mjuiItemEdit_ mjuiItemEdit; struct mjuiItem_ { // UI item diff --git a/introspect/structs.py b/introspect/structs.py index 300b0f7942..be72f73b85 100644 --- a/introspect/structs.py +++ b/introspect/structs.py @@ -7134,6 +7134,83 @@ ), ), )), + ('mjuiItemSingle', + StructDecl( + name='mjuiItemSingle', + declname='struct mjuiItemSingle_', + fields=( + StructFieldDecl( + name='modifier', + type=ValueType(name='int'), + doc='0: none, 1: control, 2: shift; 4: alt', + ), + StructFieldDecl( + name='shortcut', + type=ValueType(name='int'), + doc='shortcut key; 0: undefined', + ), + ), + )), + ('mjuiItemMulti', + StructDecl( + name='mjuiItemMulti', + declname='struct mjuiItemMulti_', + fields=( + StructFieldDecl( + name='nelem', + type=ValueType(name='int'), + doc='number of elements in group', + ), + StructFieldDecl( + name='name', + type=ArrayType( + inner_type=ValueType(name='char'), + extents=(35, 40), + ), + doc='element names', + ), + ), + )), + ('mjuiItemSlider', + StructDecl( + name='mjuiItemSlider', + declname='struct mjuiItemSlider_', + fields=( + StructFieldDecl( + name='range', + type=ArrayType( + inner_type=ValueType(name='double'), + extents=(2,), + ), + doc='slider range', + ), + StructFieldDecl( + name='divisions', + type=ValueType(name='double'), + doc='number of range divisions', + ), + ), + )), + ('mjuiItemEdit', + StructDecl( + name='mjuiItemEdit', + declname='struct mjuiItemEdit_', + fields=( + StructFieldDecl( + name='nelem', + type=ValueType(name='int'), + doc='number of elements in list', + ), + StructFieldDecl( + name='range', + type=ArrayType( + inner_type=ValueType(name='double'), + extents=(7, 2), + ), + doc='element range (min>=max: ignore)', + ), + ), + )), ('mjuiItem', StructDecl( name='mjuiItem', @@ -7178,22 +7255,22 @@ fields=( StructFieldDecl( name='single', - type=ValueType(name='struct mjuiItemSingle_'), + type=ValueType(name='mjuiItemSingle'), doc='check and button', ), StructFieldDecl( name='multi', - type=ValueType(name='struct mjuiItemMulti_'), + type=ValueType(name='mjuiItemMulti'), doc='static, radio and select', ), StructFieldDecl( name='slider', - type=ValueType(name='struct mjuiItemSlider_'), + type=ValueType(name='mjuiItemSlider'), doc='slider', ), StructFieldDecl( name='edit', - type=ValueType(name='struct mjuiItemEdit_'), + type=ValueType(name='mjuiItemEdit'), doc='edit', ), ),