CMake: add WITH_LINKER_LLD option for unix platforms
[blender-staging.git] / source / blender / makesdna / intern / dna_defaults.c
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * DNA default value access.
17  */
18
19 /** \file
20  * \ingroup DNA
21  *
22  * This API provides direct access to DNA default structs
23  * to avoid duplicating values for initialization, versioning and RNA.
24  * This allows DNA default definitions to be defined in a single header along side the types.
25  * So each `DNA_{name}_types.h` can have an optional `DNA_{name}_defaults.h` file along side it.
26  *
27  * Defining the defaults is optional since it doesn't make sense for some structs to have defaults.
28  *
29  * To create these defaults there is a GDB script which can be handy to get started:
30  * `./source/tools/utils/gdb_struct_repr_c99.py`
31  *
32  * Magic numbers should be replaced with flags before committing.
33  *
34  * The main functions to access these are:
35  * - #DNA_struct_default_get
36  * - #DNA_struct_default_alloc
37  *
38  * These access the struct table #DNA_default_table using the struct number.
39  *
40  * \note Struct members only define their members (pointers are left as NULL set).
41  */
42
43 #include <limits.h>
44 #include <stdio.h>
45 #include <stdlib.h>
46 #include <string.h>
47
48 #include "MEM_guardedalloc.h"
49
50 #include "BLI_endian_switch.h"
51 #include "BLI_math.h"
52 #include "BLI_memarena.h"
53 #include "BLI_utildefines.h"
54
55 #include "DNA_defaults.h"
56
57 #include "DNA_brush_types.h"
58 #include "DNA_cachefile_types.h"
59 #include "DNA_camera_types.h"
60 #include "DNA_curve_types.h"
61 #include "DNA_hair_types.h"
62 #include "DNA_image_types.h"
63 #include "DNA_key_types.h"
64 #include "DNA_lattice_types.h"
65 #include "DNA_light_types.h"
66 #include "DNA_lightprobe_types.h"
67 #include "DNA_linestyle_types.h"
68 #include "DNA_material_types.h"
69 #include "DNA_mesh_types.h"
70 #include "DNA_meta_types.h"
71 #include "DNA_object_types.h"
72 #include "DNA_pointcloud_types.h"
73 #include "DNA_scene_types.h"
74 #include "DNA_simulation_types.h"
75 #include "DNA_space_types.h"
76 #include "DNA_speaker_types.h"
77 #include "DNA_texture_types.h"
78 #include "DNA_volume_types.h"
79 #include "DNA_world_types.h"
80
81 #include "DNA_brush_defaults.h"
82 #include "DNA_cachefile_defaults.h"
83 #include "DNA_camera_defaults.h"
84 #include "DNA_curve_defaults.h"
85 #include "DNA_hair_defaults.h"
86 #include "DNA_image_defaults.h"
87 #include "DNA_lattice_defaults.h"
88 #include "DNA_light_defaults.h"
89 #include "DNA_lightprobe_defaults.h"
90 #include "DNA_linestyle_defaults.h"
91 #include "DNA_material_defaults.h"
92 #include "DNA_mesh_defaults.h"
93 #include "DNA_meta_defaults.h"
94 #include "DNA_object_defaults.h"
95 #include "DNA_pointcloud_defaults.h"
96 #include "DNA_scene_defaults.h"
97 #include "DNA_simulation_defaults.h"
98 #include "DNA_speaker_defaults.h"
99 #include "DNA_texture_defaults.h"
100 #include "DNA_volume_defaults.h"
101 #include "DNA_world_defaults.h"
102
103 #define SDNA_DEFAULT_DECL_STRUCT(struct_name) \
104   static const struct_name DNA_DEFAULT_##struct_name = _DNA_DEFAULT_##struct_name
105
106 /* DNA_brush_defaults.h */
107 SDNA_DEFAULT_DECL_STRUCT(Brush);
108
109 /* DNA_cachefile_defaults.h */
110 SDNA_DEFAULT_DECL_STRUCT(CacheFile);
111
112 /* DNA_camera_defaults.h */
113 SDNA_DEFAULT_DECL_STRUCT(Camera);
114
115 /* DNA_curve_defaults.h */
116 SDNA_DEFAULT_DECL_STRUCT(Curve);
117
118 /* DNA_image_defaults.h */
119 SDNA_DEFAULT_DECL_STRUCT(Image);
120
121 /* DNA_hair_defaults.h */
122 SDNA_DEFAULT_DECL_STRUCT(Hair);
123
124 /* DNA_lattice_defaults.h */
125 SDNA_DEFAULT_DECL_STRUCT(Lattice);
126
127 /* DNA_light_defaults.h */
128 SDNA_DEFAULT_DECL_STRUCT(Light);
129
130 /* DNA_lightprobe_defaults.h */
131 SDNA_DEFAULT_DECL_STRUCT(LightProbe);
132
133 /* DNA_linestyle_defaults.h */
134 SDNA_DEFAULT_DECL_STRUCT(FreestyleLineStyle);
135
136 /* DNA_material_defaults.h */
137 SDNA_DEFAULT_DECL_STRUCT(Material);
138
139 /* DNA_mesh_defaults.h */
140 SDNA_DEFAULT_DECL_STRUCT(Mesh);
141
142 /* DNA_meta_defaults.h */
143 SDNA_DEFAULT_DECL_STRUCT(MetaBall);
144
145 /* DNA_object_defaults.h */
146 SDNA_DEFAULT_DECL_STRUCT(Object);
147
148 /* DNA_pointcloud_defaults.h */
149 SDNA_DEFAULT_DECL_STRUCT(PointCloud);
150
151 /* DNA_scene_defaults.h */
152 SDNA_DEFAULT_DECL_STRUCT(Scene);
153 SDNA_DEFAULT_DECL_STRUCT(ToolSettings);
154
155 /* DNA_simulation_defaults.h */
156 SDNA_DEFAULT_DECL_STRUCT(Simulation);
157
158 /* DNA_speaker_defaults.h */
159 SDNA_DEFAULT_DECL_STRUCT(Speaker);
160
161 /* DNA_texture_defaults.h */
162 SDNA_DEFAULT_DECL_STRUCT(Tex);
163
164 /* DNA_view3d_defaults.h */
165 SDNA_DEFAULT_DECL_STRUCT(View3D);
166
167 /* DNA_volume_defaults.h */
168 SDNA_DEFAULT_DECL_STRUCT(Volume);
169
170 /* DNA_world_defaults.h */
171 SDNA_DEFAULT_DECL_STRUCT(World);
172
173 #undef SDNA_DEFAULT_DECL_STRUCT
174
175 /* Reuse existing definitions. */
176 extern const struct UserDef U_default;
177 #define DNA_DEFAULT_UserDef U_default
178
179 extern const bTheme U_theme_default;
180 #define DNA_DEFAULT_bTheme U_theme_default
181
182 /**
183  * Prevent assigning the wrong struct types since all elements in #DNA_default_table are `void *`.
184  */
185 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
186 #  define SDNA_TYPE_CHECKED(v, t) (&(v) + (_Generic((v), t : 0)))
187 #else
188 #  define SDNA_TYPE_CHECKED(v, t) (&(v))
189 #endif
190
191 #define SDNA_DEFAULT_DECL(struct_name) \
192   [SDNA_TYPE_FROM_STRUCT(struct_name)] = SDNA_TYPE_CHECKED(DNA_DEFAULT_##struct_name, struct_name)
193
194 #define SDNA_DEFAULT_DECL_EX(struct_name, struct_path) \
195   [SDNA_TYPE_FROM_STRUCT(struct_name)] = SDNA_TYPE_CHECKED(DNA_DEFAULT_##struct_path, struct_name)
196
197 /** Keep headers sorted. */
198 const void *DNA_default_table[SDNA_TYPE_MAX] = {
199
200     /* DNA_brush_defaults.h */
201     SDNA_DEFAULT_DECL(Brush),
202
203     /* DNA_cachefile_defaults.h */
204     SDNA_DEFAULT_DECL(CacheFile),
205
206     /* DNA_camera_defaults.h */
207     SDNA_DEFAULT_DECL(Camera),
208     SDNA_DEFAULT_DECL_EX(CameraDOFSettings, Camera.dof),
209     SDNA_DEFAULT_DECL_EX(CameraStereoSettings, Camera.stereo),
210
211     /* DNA_curve_defaults.h */
212     SDNA_DEFAULT_DECL(Curve),
213
214     /* DNA_image_defaults.h */
215     SDNA_DEFAULT_DECL(Image),
216
217     /* DNA_hair_defaults.h */
218     SDNA_DEFAULT_DECL(Hair),
219
220     /* DNA_lattice_defaults.h */
221     SDNA_DEFAULT_DECL(Lattice),
222
223     /* DNA_light_defaults.h */
224     SDNA_DEFAULT_DECL(Light),
225
226     /* DNA_lightprobe_defaults.h */
227     SDNA_DEFAULT_DECL(LightProbe),
228
229     /* DNA_linestyle_defaults.h */
230     SDNA_DEFAULT_DECL(FreestyleLineStyle),
231
232     /* DNA_material_defaults.h */
233     SDNA_DEFAULT_DECL(Material),
234
235     /* DNA_mesh_defaults.h */
236     SDNA_DEFAULT_DECL(Mesh),
237
238     /* DNA_meta_defaults.h */
239     SDNA_DEFAULT_DECL(MetaBall),
240
241     /* DNA_object_defaults.h */
242     SDNA_DEFAULT_DECL(Object),
243
244     /* DNA_pointcloud_defaults.h */
245     SDNA_DEFAULT_DECL(PointCloud),
246
247     /* DNA_scene_defaults.h */
248     SDNA_DEFAULT_DECL(Scene),
249     SDNA_DEFAULT_DECL_EX(RenderData, Scene.r),
250     SDNA_DEFAULT_DECL_EX(ImageFormatData, Scene.r.im_format),
251     SDNA_DEFAULT_DECL_EX(BakeData, Scene.r.bake),
252     SDNA_DEFAULT_DECL_EX(FFMpegCodecData, Scene.r.ffcodecdata),
253     SDNA_DEFAULT_DECL_EX(DisplaySafeAreas, Scene.safe_areas),
254     SDNA_DEFAULT_DECL_EX(AudioData, Scene.audio),
255     SDNA_DEFAULT_DECL_EX(PhysicsSettings, Scene.physics_settings),
256     SDNA_DEFAULT_DECL_EX(SceneDisplay, Scene.display),
257     SDNA_DEFAULT_DECL_EX(SceneEEVEE, Scene.eevee),
258
259     SDNA_DEFAULT_DECL(ToolSettings),
260     SDNA_DEFAULT_DECL_EX(CurvePaintSettings, ToolSettings.curve_paint_settings),
261     SDNA_DEFAULT_DECL_EX(ImagePaintSettings, ToolSettings.imapaint),
262     SDNA_DEFAULT_DECL_EX(ParticleEditSettings, ToolSettings.particle),
263     SDNA_DEFAULT_DECL_EX(ParticleBrushData, ToolSettings.particle.brush[0]),
264     SDNA_DEFAULT_DECL_EX(MeshStatVis, ToolSettings.statvis),
265     SDNA_DEFAULT_DECL_EX(GP_Sculpt_Settings, ToolSettings.gp_sculpt),
266     SDNA_DEFAULT_DECL_EX(GP_Sculpt_Guide, ToolSettings.gp_sculpt.guide),
267
268     /* DNA_simulation_defaults.h */
269     SDNA_DEFAULT_DECL(Simulation),
270
271     /* DNA_speaker_defaults.h */
272     SDNA_DEFAULT_DECL(Speaker),
273
274     /* DNA_texture_defaults.h */
275     SDNA_DEFAULT_DECL(Tex),
276     SDNA_DEFAULT_DECL_EX(MTex, Brush.mtex),
277
278     /* DNA_userdef_types.h */
279     SDNA_DEFAULT_DECL(UserDef),
280     SDNA_DEFAULT_DECL(bTheme),
281     SDNA_DEFAULT_DECL_EX(UserDef_SpaceData, UserDef.space_data),
282     SDNA_DEFAULT_DECL_EX(UserDef_FileSpaceData, UserDef.file_space_data),
283     SDNA_DEFAULT_DECL_EX(WalkNavigation, UserDef.walk_navigation),
284
285     /* DNA_view3d_defaults.h */
286     SDNA_DEFAULT_DECL(View3D),
287     SDNA_DEFAULT_DECL_EX(View3DOverlay, View3D.overlay),
288     SDNA_DEFAULT_DECL_EX(View3DShading, View3D.shading),
289     SDNA_DEFAULT_DECL_EX(View3DCursor, Scene.cursor),
290
291     /* DNA_volume_defaults.h */
292     SDNA_DEFAULT_DECL(Volume),
293
294     /* DNA_world_defaults.h */
295     SDNA_DEFAULT_DECL(World),
296 };
297 #undef SDNA_DEFAULT_DECL
298 #undef SDNA_DEFAULT_DECL_EX
299
300 char *_DNA_struct_default_alloc_impl(const char *data_src, size_t size, const char *alloc_str)
301 {
302   char *data_dst = MEM_mallocN(size, alloc_str);
303   memcpy(data_dst, data_src, size);
304   return data_dst;
305 }