coder.CodeConfig
Configuration parameters for C/C++ code generation from MATLAB code
Description
A
coder.CodeConfig
object contains the configuration parameters
that codegen
uses for generating a static library, a dynamically
linked library, or an executable program. Pass the object to the
codegen
function by using the -config
option.
Creation
Create a coder.CodeConfig
object by using the coder.config
function.
Once you create a coder.CodeConfig
object, you can modify its
properties programmatically at the command line or interactively by using the
Configuration Parameter Dialog Box. See Specify Configuration Parameters in Command-Line Workflow Interactively.
Properties
BuildConfiguration
— Compiler optimization or debug settings for toolchain
'Faster Runs'
(default) | 'Faster Builds'
| 'Debug'
| 'Specify'
Compiler optimization or debug settings for toolchain, specified as one of the values in this table.
Value | Description |
---|---|
'Faster Builds' | Optimizes the build for shorter build times. |
'Faster Runs' | Optimizes the build for faster running executables. |
'Debug' | Optimizes the build for debugging. |
'Specify' | Enables the
|
If you set the Toolchain
property to one of the
available CMake toolchain definitions, the allowed values of this property
are 'Release'
, 'Debug'
,
'RelWithDebInfo'
, 'MinSizeRel'
,
and 'Specify'
. See Configure CMake Build Process.
CacheDynamicArrayDataPointer
— Dynamic array optimization
true
(default) | false
Dynamic array optimization, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. The code generator improves the execution time of generated C code by optimizing dynamic array access. |
false | The code generator does not optimize dynamic array access. |
CodeFormattingTool
— Formatting tool for the generated code
'Auto'
(default) | 'Clang-format'
| 'bat365'
Code formatting options for generated code, specified as one of the values in the table.
Value | Description |
---|---|
'Clang-format' | The code generator formats the generated code
according to a |
'Auto' | Uses an internal heuristic to determine if the
generated code is formatted by
To
determine whether the generated code is formatted by
|
'bat365' | Causes the code generator to revert to the bat365 formatting tool. |
clang-format
does not have native CUDA® C++ support. When generating CUDA code using GPU Coder™, setting the formatting tool to
'Clang-format'
might result in build failures during
code compilation.
CodeReplacementLibrary
— Code replacement library for generated code
character vector
Code replacement library for generated code, specified as one of the values in this table:
Value | Description |
---|---|
'None' | This value is the default value. Does not use a code replacement library. |
Named code replacement library | Generates calls to a specific platform, compiler, or standards code replacement library. The list of named libraries depends on:
|
Compatible libraries depend on these parameters:
TargetLang
TargetLangStandard
ProdHWDeviceType
in the hardware implementation configuration object.
Embedded Coder offers more libraries and the ability to create and use custom code replacement libraries.
MATLAB®
Coder™ generates the minimal set of #include
statements for header files required by the selected code replacement
library.
Before setting this parameter, verify that your compiler supports the library that you want to use. If you select a parameter value that your compiler does not support, compiler errors can occur.
Note
MATLAB Coder software does not support TLC callbacks.
CompileTimeRecursionLimit
— Maximum number of function specializations for compile-time recursion
50 (default) | positive integer
Maximum number of function specializations for compile-time recursion,
specified as a positive integer. To disallow recursion in the MATLAB code, set CompileTimeRecursionLimit
to 0.
The default compile-time recursion limit is large enough for most recursive
functions that require this type of recursion. If code generation fails
because of the compile-time recursion limit, and you want compile-time
recursion, try to increase the limit. Alternatively, change your MATLAB code so that the code generator uses run-time recursion. See
Compile-Time Recursion Limit Reached.
ConstantFoldingTimeout
— Maximum number of instructions to be executed by the constant folder
40000 (default) | positive integer
Maximum number of instructions that the constant folder executes. In some
situations, code generation requires specific instructions to be constant.
If constant folding stops before these instructions are constant-folded,
code generation fails. In this case, increase the value of
ConstantFoldingTimeout
.
CppGenerateEnumClass
— Generate C++11 enumeration class for MATLAB enumeration
true
(default) | false
Whether to generate C++11 code that contains enumeration classes or ordinary C enumerations, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. The code generator produces enumeration classes for MATLAB enumerations in the generated C++11 code. See Code Generation for Enumerations. |
false | The code generator produces ordinary C enumerations for MATLAB enumerations in the generated C++11 code. |
Dependency:
Setting
TargetLang
to'C++'
enables this parameter.
CppInterfaceClassName
— Interface class name for generated C++ code
''
(default) | character vector
Name of interface class when you generate C++ code with
CppInterfaceStyle
set to
'Methods'
. In this case, the generated code for
MATLAB entry-point functions consists of methods contained in a C++
class with name specified by CppInterfaceClassName
. This
property has no
effect when you set
CppInterfaceStyle
to
'Functions'
.
CppInterfaceStyle
— Interface style for generated C++ code
'Functions'
(default) | 'Methods'
Style of interface to the generated C++ code for the MATLAB entry-point functions that you generate code from. By default,
entry-point functions become C++ functions. If you choose
'Methods'
, then entry-point functions become methods
in a C++ class. Specify the name of the class by using the property
CppInterfaceClassName
.
See Generate C++ Code with Class Interface.
Dependency:
Setting
TargetLang
to'C++'
enables this parameter.
CppPackagesToNamespaces
— Generate C++ namespaces for MATLAB packages
true
(default) | false
Whether to generate C++ namespaces for the packages in your MATLAB code, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. The code generator produces C++ namespaces for the packages in your MATLAB code. See Organize Generated C++ Code into Namespaces. |
false | The code generator does not produce C++ namespaces for the packages in your MATLAB code. |
Dependency:
Setting
TargetLang
to'C++'
enables this parameter.
Data Types: logical
CppNamespace
— Namespace name for generated C++ code
''
(default) | character vector
Namespace for the generated C++ code. The code generator does not produce code in a namespace unless you specify a nonempty character vector.
See Organize Generated C++ Code into Namespaces.
Dependency:
Setting
TargetLang
to'C++'
enables this parameter.
CppNamespaceForbat365Code
— Place C++ code generated for bat365 code in a separate namespace
'coder'
(default) | character vector
Namespace for the C++ code generated for bat365 code. The code generator does not produce such a namespace if you specify this property as an empty character vector.
See Organize Generated C++ Code into Namespaces.
Dependency:
Setting
TargetLang
to'C++'
enables this parameter.
Data Types: char
CppPreserveClasses
— Generate C++ classes for MATLAB classes
true
(default) | false
Whether to generate C++ classes or C style structures for MATLAB classes, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. The code generator produces C++ classes for MATLAB classes. See Generate C++ Classes for MATLAB Classes. |
false | The code generator produces C style structures for MATLAB classes. |
When using GPU Coder, the code generator always disables this parameter.
Dependency:
Setting
TargetLang
to'C++'
enables this parameter.
Data Types: logical
CustomBLASCallback
— BLAS callback class
' ' (default) | character vector
Callback class for BLAS library calls in code generated for certain low-level vector and matrix operations in MATLAB code, specified as a character vector.
If you specify a BLAS callback class, for certain low-level vector and matrix functions, the code generator produces BLAS calls by using the CBLAS C interface to your BLAS library. The callback class provides the name of your CBLAS header file, the names of CBLAS data types, and the information required to link to your BLAS library. If this parameter is empty, the code generator produces code for matrix functions instead of a BLAS call.
See Speed Up Matrix Operations in Generated Standalone Code by Using BLAS Calls.
CustomFFTCallback
— Callback class for FFTW library calls
' ' (default) | character vector
Callback class for FFTW library calls in code generated for FFT functions in MATLAB code, specified as a character vector.
To improve the execution speed of FFT functions, the code generator produces calls to the FFTW library that you specify in the callback class. If this parameter is empty, the code generator uses its own algorithms for FFT functions instead of calling the FFTW library.
UseBuiltinFFTWLibrary
takes precedence over
CustomFFTCallback
if you enable both these
properties.
See Speed Up Fast Fourier Transforms in Generated Standalone Code by Using FFTW Library Calls.
CustomHeaderCode
— Custom code that appears at top of generated C/C++ header files
' ' (default) | character vector
Custom code that appears near the top of each C/C++ header file generated
from your MATLAB code, except rtwtypes.h
and
rtwhalf.h
, specified as a character vector.
CustomInclude
— Include folders to add to include path for compiling generated code
' ' (default) | string array | cell array of character vectors | character vector
Include folders to add to the include path when compiling the generated code. Specify the list of include folders as a string array, cell array of character vector, or character vector.
Multiple folder names, specified as one of the values in this table.
Value | Description |
---|---|
String array | A string array in
|
Cell array of character vectors | A cell array of character vectors in
|
Character vector | Separate include folders by a Note Specifying multiple entries in code configuration objects by using character vectors produces a warning and will be removed in a future release. Use string array and cell array of character vector instead. For more information, see Compatibility Considerations. |
CustomInitializer
— Custom code to include in the generated initialize function
' ' (default) | character vector
Custom code to include in the generated initialize function, specified as a character vector.
CustomLAPACKCallback
— LAPACK callback class
' ' (default) | character vector
Callback class for LAPACK library calls in code generated for certain linear algebra functions in MATLAB code, specified as a character vector.
If you specify a LAPACK callback class, for certain linear algebra functions, the code generator produces LAPACK calls by using the LAPACKE C interface to your LAPACK library. The callback class provides the name of your LAPACKE header file and the information required to link to your LAPACK library. If this parameter is empty, the code generator produces code for linear algebra functions instead of a LAPACK call.
See Speed Up Linear Algebra in Generated Standalone Code by Using LAPACK Calls.
CustomLibrary
— Static library files to link with the generated code
' ' (default) | string array | cell array of character vectors | character vector
Static library files to link with the generated code, specified as a string array, cell array of character vector, or character vector.
Multiple static library file names, specified as one of the values in this table.
Value | Description |
---|---|
String array | A string array in
|
Cell array of character vectors | A cell array of character vectors in
|
Character vector | Separate static library file names by a
Note Specifying multiple entries in code configuration objects by using character vectors produces a warning and will be removed in a future release. Use string array and cell array of character vector instead. For more information, see Compatibility Considerations. |
CustomSource
— Source files to compile and link with the generated code
' ' (default) | string array | cell array of character vectors | character vector
Source files to compile and link with the generated code, specified as a string array, cell array of character vector, or character vector.
The build process searches for the source files first in the current
folder, and then in the include folders that you specify in
CustomInclude
. If source files with the same name
occur in multiple folders on the search path, the build process might use a
different file than the file that you specified.
Suppose that you specify foo.cpp
as a source file. If
foo.c
and foo.cpp
are both on the
search path, you cannot be sure whether the build process uses
foo.c
or foo.cpp
.
Multiple source file names, specified as one of the values in this table.
Value | Description |
---|---|
String array | A string array in
|
Cell array of character vectors | A cell array of character vectors in
|
Character vector | Separate source file names by a Note Specifying multiple entries in code configuration objects by using character vectors produces a warning and will be removed in a future release. Use string array and cell array of character vector instead. For more information, see Compatibility Considerations. |
CustomSourceCode
— Code to appear near the top of generated .c
or .cpp
files
' ' (default) | character vector
Specify code to appear near the top of each generated
.c
or .cpp
file (except
rtwhalf.c
or rtwhalf.cpp
), outside
of any function. Specify code as a character
vector.
Do not specify a C static function definition.
CustomTerminator
— Code that appears in the generated terminate function
' ' (default) | character vector
Code that appears in the generated terminate function, specified as a character vector.
CustomToolchainOptions
— Custom settings for tools in selected toolchain
cell array
Custom settings for tools in selected toolchain, specified as a cell array.
Dependencies:
The
Toolchain
property determines which tools and options appear in the cell array.Setting the
BuildConfiguration
property toSpecify
enablesCustomToolchainOptions
.
First, get the current settings. For example:
cfg = coder.config('lib'); cfg.BuildConfiguration='Specify'; opt = cfg.CustomToolchainOptions
Then, edit the values in opt
.
These values derive from the toolchain definition file and the third-party compiler options. See Custom Toolchain Registration.
DataTypeReplacement
— Data type replacement in generated code
'CBuiltIn'
| 'CoderTypeDefs'
Data type replacement in generated code, specified as one of the values in this table.
Value | Description |
---|---|
'CBuiltIn' | This value is the default value. The code generator uses built-in C data types. |
'CoderTypeDefs' | The code generator uses predefined data types from
rtwtypes.h |
DeepLearningConfig
— Configuration object for deep learning code generation
coder.MklDNNConfig
object | coder.ARMNEONConfig
object | coder.CuDNNConfig
object | coder.TensorRTConfig
object
Configuration object for code generation for deep learning networks, specified as specified as one of the objects in this table.
Object | Requires | Description |
---|---|---|
coder.MklDNNConfig |
| A cfg = coder.config('mex'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn'); See Code Generation for Deep Learning Networks with MKL-DNN. |
coder.ARMNEONConfig |
| A cfg = coder.config('lib'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('arm-compute'); See Code Generation for Deep Learning Networks with ARM Compute Library. |
coder.CuDNNConfig (GPU Coder) |
| A cfg = coder.gpuConfig('lib'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn'); See Code Generation for Deep Learning Networks by Using cuDNN (GPU Coder). |
coder.TensorRTConfig (GPU Coder) |
| A cfg = coder.gpuConfig('lib'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('tensorrt'); See Code Generation for Deep Learning Networks by Using TensorRT (GPU Coder). |
Dependency: If DeepLearningConfig
is set,
codegen
sets TargetLang
to
C++
.
Description
— Object description
'class CodeConfig: C code generation
configuration.'
(default) | character vector
Object description, specified as a character vector.
DynamicMemoryAllocation
— Dynamic memory allocation mode
'Threshold'
(default) | 'AllVariableSizeArrays'
| 'Off'
Dynamic memory allocation mode, specified as one of the values in this table.
Value | Description |
---|---|
'Threshold' | This value is the default value. The code generator allocates
memory dynamically on the heap for variable-size
arrays whose size (in bytes) is greater than or
equal to
|
'AllVariableSizeArrays' | The code generator dynamically allocates memory for all variable-size arrays on the heap. |
'Off' | The code generator statically allocates memory for variable-size arrays on the stack. |
Unbounded variable-size arrays require dynamic memory allocation.
Dependencies:
EnableVariableSizing
enables this parameter.Setting this
DynamicMemoryAllocation
to'Threshold'
enables theDynamicMemoryAllocationThreshold
parameter.
See Generate Code for Variable-Size Data.
Note
DynamicMemoryAllocation
configuration option
will be removed in a future release. To dynamically allocation
memory for variable-sized arrays, use the
EnableDynamicMemoryAllocation
option. Use the
DynamicMemoryAllocationThreshold
option to
configure the dynamic memory allocation threshold value.
DynamicMemoryAllocationForFixedSizeArrays
— Dynamic memory allocation for fixed-size arrays
false
(default) | true
Dynamic memory allocation for fixed-size arrays, specified as one of the values in this table.
Value | Description |
---|---|
true | The code generator allocates memory dynamically
on the heap for fixed-size arrays whose size (in
bytes) is greater than or equal to
|
false | This value is the default value. The code generator statically allocates memory for fixed-size arrays on the stack. |
Dependency:
Setting
EnableDynamicMemoryAllocation
totrue
enables this option.
See, Control Dynamic Memory Allocation for Fixed-Size Arrays.
DynamicMemoryAllocationInterface
— Dynamically allocated array at generated function interface
'Auto'
(default) | 'C'
| 'C++'
Implementation of dynamically allocated array at the interface of the generated C/C++ function, specified as one of the values in this table.
Value | Description |
---|---|
'Auto' | This is the default value. If you set the
|
'C' | The generated code uses the C style
|
'C++' | If you set the Otherwise, the generated code uses
the |
When using GPU Coder, the code generator always
uses the C style emxArray
data structure.
Dependency:
EnableVariableSizing
enables this parameter.
DynamicMemoryAllocationThreshold
— Size threshold for dynamic memory allocation of variable-size arrays
65536
(default) | positive integer
Size threshold for dynamic memory allocation of variable-size arrays, specified as a positive integer. The code generator uses dynamic memory allocation for variable-size arrays whose size (in bytes) is greater than or equal to the threshold.
Dependency:
Setting
EnableDynamicMemoryAllocation
totrue
enables this option.
EnableAutoExtrinsicCalls
— Automatic extrinsic function calls
true
(default) | false
Automatic extrinsic function calls, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. The code generator treats some
common visualization functions as extrinsic
functions. You do not have to declare these
functions as extrinsic by using |
false | The code generator does not treat common
visualization functions as extrinsic functions unless
you declare them as extrinsic by using coder.extrinsic . |
Some common visualization functions are plot
,
disp
, and figure
. See Use MATLAB Engine to Execute a Function Call in Generated Code.
EnableAutoParallelization
— Automatic parallelization of for
loops
false
(default) | true
Automatic parallelization of for
loops, specified as
one of the values in this table.
Value | Description |
---|---|
false | This value is the default value. Code
generator does not automatically parallelize
|
true | The code generator automatically parallelizes
|
When using GPU Coder, the code generator always
enables automatic parallelization of for
loops.
Data Types: logical
EnableAutoParallelizationReporting
— Reporting for automatic parallelization of for
loops
true
(default) | false
Reporting for automatic parallelization of for
loops,
specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. If
you set |
false | The code generator does not produce a code generation
report for automatic parallelization of
for loops. |
EnableDynamicMemoryAllocation
— Enable dynamic memory allocation for variable-size arrays
true
(default) | false
Dynamic memory allocation for variable-size arrays, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. The code generator allocates
memory dynamically on the heap for variable-size
arrays whose size (in bytes) is greater than or
equal to
|
false | The code generator statically allocates memory for variable-size arrays on the stack. |
EnableImplictExpansion
— Implicit expansion capabilities in generated code
true
(default) | false
Implicit expansion capabilities in the generated code, specified as one of the values listed in this table.
Value | Description |
---|---|
true | This value is the default value. The code generator enables implicit expansion in the generated code. The code generator includes modifications in the generated code to apply implicit expansion. See Compatible Array Sizes for Basic Operations. |
false | The generated code does not follow the rules of implicit expansion. |
Data Types: logical
EnableMemcpy
— memcpy
optimization
true
(default) | false
memcpy
optimization, specified as one of the values in
this table.
Value | Description |
---|---|
true | This value is the default value. If
possible, the code generator uses the
|
false | The code generator does not use the
|
When using GPU Coder, the code generator always
disables Memcpy
optimization.
EnableOpenMP
— Parallelization of parfor
-loops
true
(default) | false
Parallelization of parfor
-loops, specified as one of
the values in this table.
Value | Description |
---|---|
true | This value is the default value. If possible, the code generator uses the OpenMP library to produce loop iterations that run in parallel. |
false | The code generator treats
|
See parfor
.
Use of the OpenMP library is not compatible with just-in-time (JIT)
compilation. If EnableJIT
and
EnableOpenMP
are true
, the code
generator uses JIT compilation and treats parfor
-loops as
for
-loops.
When using GPU Coder, the code generator always
treats parfor
-loops as
for
-loops.
EnableRuntimeRecursion
— Run-time recursion support
true
(default) | false
Run-time recursion support, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. Recursive functions are allowed in the generated code. |
false | Recursive functions are not allowed in the generated code. |
Some coding standards, such as MISRA™, do not allow recursion. To increase the likelihood of
generating code that is compliant with MISRA C™, set EnableRuntimeRecursion
to
false
.
If your MATLAB code requires run-time recursion and
EnableRuntimeRecursion
is false
,
code generation fails.
EnableVariableSizing
— Variable-size array support
true
(default) | false
Variable-size array support, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. Variable-size arrays are allowed for code generation. |
false | Variable-size arrays are not allowed for code generation. |
Dependency:
Enables
Dynamic memory allocation
.
FilePartitionMethod
— File partitioning mode
'MapMFileToCFile'
(default) | 'SingleFile'
File partitioning mode specified as one of the values in this table.
Value | Description |
---|---|
'MapMFileToCFile' | This value is the default value. The code generator produces separate C/C++ files for each MATLAB language file. |
'SingleFile' | The code generator produces a single file for C/C++ functions that map to your MATLAB entry-point functions. The code generator produces separate C/C++ files for utility functions. |
GenCodeOnly
— Generation of only source code
false
(default) | true
Generation of only source code, specified as one of the values in this table.
Value | Description |
---|---|
false | This value is the default value. The code generator produces C/C++ source code and builds object code. |
true | The code generator produces C/C++ source code, but does not invoke the make command or build object code. When you iterate between modifying MATLAB code and generating C/C++ code, generating only code can save time. |
GenerateComments
— Comments in generated code
true
(default) | false
Comments in generated code, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. The code generator places comments in the generated code. |
false | The code generator does not place comments in the generated code. |
GenerateExampleMain
— Example C/C++ main file generation
'GenerateCodeOnly'
(default) | 'DoNotGenerate'
| 'GenerateCodeAndCompile'
Example C/C++ main file generation, specified as one of the values in this table.
Value | Description |
---|---|
'GenerateCodeOnly' | This value is the default value. The code generator generates an example C/C++ main function but does not compile it. |
'DoNotGenerate' | The code generator does not generate an example C/C++ main function. |
'GenerateCodeAndCompile' | The code generator generates an example C/C++ main function and compiles it to create a test executable. This executable does not return output. If
the |
An example main function is a template to help you to write a C/C++ main function that calls generated C/C++ code. See Incorporate Generated Code Using an Example Main Function.
GenerateMakefile
— Makefile generation
true
(default) | false
Makefile generation during the build process, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. The code generator generates a makefile during the build process. |
false | The code generator does not generate a makefile during the build process. Specify instructions for post-code-generation processing, including compilation and linking, in a post-code-generation command. See Build Process Customization. |
GenerateNonFiniteFilesIfUsed
— Generate support files for nonfinite data only if nonfinite data is used
true
(default) | false
Generation of support files for nonfinite data, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. The code generator produces the
support files for nonfinite data
( |
false | The code generator
always produces
the support files for nonfinite data
( |
Dependency:
Setting
SupportNonFinite
totrue
enables this parameter.
GenerateReport
— Code generation report
false
(default) | true
Code generation report, specified as one of the values in this table.
Value | Description |
---|---|
false | This value is the default value. The code generator produces a
report only if error or warning messages occur, or
if you set |
true | The code generator produces a code generation report. |
GpuConfig
— Configuration object for GPU code generation
GpuCodeConfig
object
Configuration object for generating CUDA GPU code using GPU Coder. A GpuCodeConfig
object contains parameters
specific to CUDA GPU code generation. To create a
GpuCodeConfig
object, use coder.gpuConfig
(GPU Coder). For example:
cfg = coder.gpuConfig('lib'); cfg.GpuConfig ans = GpuCodeConfig with properties: Enabled: 1 MallocMode: 'discrete' KernelNamePrefix: '' EnableCUBLAS: 1 EnableCUSOLVER: 1 EnableCUFFT: 1 Benchmarking: 0 SafeBuild: 0 ComputeCapability: '3.5' CustomComputeCapability: '' CompilerFlags: '' StackLimitPerThread: 1024 MallocThreshold: 200 MaximumBlocksPerKernel: 0 EnableMemoryManager: 0 BlockAlignment: 256 FreeMode: 'Never' MinPoolSize: 8 MaxPoolSize: 2048 SelectCudaDevice: -1
For more information, see Code Generation Using the Command Line Interface (GPU Coder).
Dependencies: If GpuConfig
is set,
codegen
modifies the
coder.CodeConfig
properties to values in this
table.
Property | Value |
---|---|
CppPreserveClasses | false |
DynamicMemoryAllocationInterface | 'C' when
MallocMode property of
GpuCodeConfig is set to
'unified' |
EnableAutoParallelization | true |
EnableMemcpy | false |
EnableOpenMP | false |
InstructionSetExtensions | 'None' |
MultiInstanceCode | false |
TargetLang | 'C++' |
Hardware
— Object that specifies a hardware board
coder.Hardware
object
Object that specifies a hardware board. To create the coder.Hardware
object, use coder.hardware
. For
example:
cfg = coder.config('lib'); hw = coder.hardware('Raspberry Pi'); cfg.Hardware = hw;
Before you use coder.hardware
, you must install the
support package for the hardware.
Dependencies:
Setting
Hardware
customizes the hardware implementation object and other configuration parameters for a particular hardware board.If
DeepLearningConfig
is set to acoder.ARMNEONConfig
object andHardware
is empty, thencodegen
sets theGenCodeOnly
property totrue
.
Note:
Suppose that you create a
coder.CodeConfig
objectcfg
in a MATLAB session and use it in another MATLAB session. If the MATLAB host computer for the second session does not have the hardware board specified in thecfg.Hardware
property installed on it, this parameter reverts to its default value. The default value is[]
. Setting the Hardware Board option toMATLAB Host Computer
in the app is equivalent to usingcfg.Hardware
andcfg.HardwareImplementation.ProdHWDeviceType
with their default value.
HardwareImplementation
— Hardware implementation object
coder.HardwareImplementation
object.
Hardware implementation object that specifies hardware-specific
configuration parameters for C/C++ code generation. coder.config
creates a
coder.CodeConfig
object with the
HardwareImplementation
property set to a coder.HardwareImplementation
object with default parameter values for the MATLAB host computer.
HeaderGuardStyle
— Style of preprocessor directive in generated code
'UseIncludeGuard'
(default) | 'UsePragmaOnce'
To prevent compilation errors due to multiple inclusion of header files,
the code generator produces either #ifndef
or
#pragma once
constructs in generated header files. If
your project uses distinct files that use the same preprocessor macros, then
generate code with the #pragma once
construct. The
compilation behavior of #pragma once
is not
standardized.
Specify HeaderGuardStyle
as one of the values in this
table.
Value | Description |
---|---|
UseIncludeGuard | The code generator produces
|
UsePragmaOnce | The code generator produces #pragma
once style #include
guards. |
HighlightPotentialRowMajorIssues
— Potential row-major layout issues
true
(default) | false
Display of potential row-major layout efficiency issues, specified as one of the values in this table.
Value | Description |
---|---|
true | The code generation report displays potential efficiency issues due to row-major layout. (This value is the default value.) |
false | The code generation report does not display issues related to array layout. |
InitFltsAndDblsToZero
— Assignment of float and double zero with memset
true
(default) | false
Assignment of float and double zero with memset
,
specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. If
possible, the code generator uses the
|
false | The code generator does not use the
|
InlineBetweenbat365Functions
— Control inlining between bat365 functions
'Speed'
(default) | 'Always'
| 'Readability'
| 'Never'
Inlining behavior at all call sites where a bat365 calls another bat365 function, specified as one of the values in this table.
Value | Description |
---|---|
'Speed' | This value is the default value. Uses internal heuristics to determine whether to perform inlining at a call site. This setting usually leads to highly optimized code. |
'Always' | Always performs inlining at a call site. |
'Readability' | Almost never inlines function calls, except for calls to very small functions. Preserves modularity of code without sacrificing too much speed, whenever possible. Results in highly readable code. |
'Never' | Never inlines function calls. Results in maximum readability. This setting might significantly reduce the performance of the generated code. |
Even if you select the 'Always'
or the
'Never'
option for a setting, in certain cases, the
code generator might not strictly follow that instruction. For example, if
there is a conflict, the coder.inline('always')
or
coder.inline('never')
directive placed inside a
function body overrides this option. For more information, see Interaction Between Different Inlining Controls.
See Control Inlining to Fine-Tune Performance and Readability of Generated Code.
InlineBetweenUserAndbat365Functions
— Control inlining between user-written functions and bat365 functions
'Speed'
(default) | 'Always'
| 'Readability'
| 'Never'
Inlining behavior at all call sites where a function that you wrote calls a bat365 function, or a bat365 function calls a function that you wrote. Specified as one of the values in this table.
Value | Description |
---|---|
'Speed' | This value is the default value. Uses internal heuristics to determine whether to perform inlining at a call site. This setting usually leads to highly optimized code. |
'Always' | Always performs inlining at a call site. |
'Readability' | Almost never inlines function calls, except for calls to very small functions. Preserves modularity of code without sacrificing too much speed, whenever possible. Results in highly readable code. |
'Never' | Never inlines function calls. Results in maximum readability. This setting might significantly reduce the performance of the generated code. |
Even if you select the 'Always'
or the
'Never'
option for a setting, in certain cases, the
code generator might not strictly follow that instruction. For example, if
there is a conflict, the coder.inline('always')
or
coder.inline('never')
directive placed inside a
function body overrides this option. For more information, see Interaction Between Different Inlining Controls.
See Control Inlining to Fine-Tune Performance and Readability of Generated Code.
InlineBetweenUserFunctions
— Control inlining between user-written functions
'Speed'
(default) | 'Always'
| 'Readability'
| 'Never'
Inlining behavior at all call sites where a function that you wrote calls another function that you wrote, specified as one of the values in this table.
Value | Description |
---|---|
'Speed' | This value is the default value. Uses internal heuristics to determine whether to perform inlining at a call site. This setting usually leads to highly optimized code. |
'Always' | Always performs inlining at a call site. |
'Readability' | Almost never inlines function calls, except for calls to very small functions. Preserves modularity of code without sacrificing too much speed, whenever possible. Results in highly readable code. |
'Never' | Never inlines function calls. Results in maximum readability. This setting might significantly reduce the performance of the generated code. |
Even if you select the 'Always'
or the
'Never'
option for a setting, in certain cases, the
code generator might not strictly follow that instruction. For example, if
there is a conflict, the coder.inline('always')
or
coder.inline('never')
directive placed inside a
function body overrides this option. For more information, see Interaction Between Different Inlining Controls.
See Control Inlining to Fine-Tune Performance and Readability of Generated Code.
InstructionSetExtensions
— SIMD instruction set for target hardware
'None'
(default) | 'SSE2'
Instruction sets to generate single instruction, multiple data (SIMD) code for target hardware. The code generator loads the selected instruction set and the instruction sets that it depends on.
See Generate SIMD Code for MATLAB Functions.
When using GPU Coder, the code generator always
disables InstructionSetExtensions
.
JustifyMISRAViolations
— Add annotations to suppress known MISRA/AUTOSAR violations
false
(default) | true
Annotates the generated C/C++ code to suppress known MISRA and AUTOSAR violations, specified as one of the values in this table.
Value | Description |
---|---|
false | This value is the default value. The code generator does not add annotations to the generated C/C++ code. |
true | The code generator adds annotations to the generated
C/C++ code only if GenerateComments is
also true . |
LaunchReport
— Automatic open of code generation report
false
(default) | true
Automatic open of code generation report, specified as one of the values in this table.
Value | Description |
---|---|
false | This value is the default value. If
errors or warnings occur, or if
|
true | The code generator produces and opens a code generation report. |
LoopUnrollThreshold
— Threshold on the number of iterations that determines whether to automatically unroll a for
-loop or
parfor
-loop
5 (default) | positive integer
Loops with fewer iterations than this threshold are candidates for
automatic unrolling by the code generator. This threshold applies to all
for
-loops and parfor
-loops in your
MATLAB code. For an individual for
-loop, a
coder.unroll
directive placed
immediately before the loop takes precedence over the loop unrolling
optimization. The threshold can also apply to some
for
-loops produced during code generation.
MATLABSourceComments
— Inclusion of MATLAB source code as comments in generated code
false
(default) | true
Inclusion of MATLAB source code as comments in generated code, specified as one of the values in this table.
Value | Description |
---|---|
false | This value is the default value. The code generator does not insert MATLAB source code as comments in the generated code. The code generator does not include the MATLAB function signature in the function banner. |
true | The code generator inserts MATLAB source code as comments in the generated code. A traceability tag immediately precedes each line of source code. The traceability tag helps you to locate the corresponding MATLAB source code. See Tracing Generated C/C++ Code to MATLAB Source Code. If you have Embedded Coder, in the code generation report, the traceability tag links to the source code. The code generator also includes the MATLAB function signature in the function banner. |
Dependency:
Setting
GenerateComments
totrue
enables this parameter.
MATLABSourceCommentLineNumbers
— Include line numbers of MATLAB source code as comments in the generated code
true
(default) | false
Whether to include line numbers of MATLAB source code as comments in the generated code, specified as
true
or false
.
Dependency:
MATLABSourceComments
enables this parameter.
MaxIdLength
— Maximum number of characters in generated identifiers
31
| 1024
| positive integer
Maximum number of characters in generated identifiers, specified as a positive integer in the range [31, 2048]. This property applies to generated function, type definition, and variable names. To avoid truncation of identifiers by the target C/C++ compiler, specify a value that matches the maximum identifier length of the target C/C++ compiler.
This property does not apply to exported identifiers, such as the generated names for entry-point functions or emxArray API functions. If the length of an exported identifier exceeds the maximum identifier length of the target C compiler, the target C/C++ compiler truncates the exported identifier.
Default values:
If
TargetLang
is set to'C'
, the default value ofMaxIdLength
is31
.If
TargetLang
is set to'C++'
, the default value ofMaxIdLength
is1024
.
MemcpyThreshold
— Minimum size for memcpy
or memset
optimization
64 (default) | positive integer
Minimum size, in bytes, for memcpy or memset optimization, specified as a positive integer.
To optimize generated code that copies consecutive array elements, the
code generator tries to replace the code with a memcpy
call. To optimize generated code that assigns a literal constant to
consecutive array elements, the code generator tries to replace the code
with a memset
call.
The number of bytes is the number of array elements to copy or assign multiplied by the number of bytes required for the C/C++ data type.
If the number of elements to copy or assign is variable (not known at
compile time), the code generator ignores the
MemcpyThreshold
property.
See memcpy Optimization and memset Optimization.
MultiInstanceCode
— Multi-instance, reentrant code
false
(default) | true
Multi-instance, reentrant code, specified as one of the values in this table.
Value | Description |
---|---|
false | This value is the default value. The code generator does not produce multi-instance, reentrant code. |
true | The code generator produces reusable, multi-instance code that is reentrant. |
See Reentrant Code.
This option is not supported by the GPU Coder product.
Name
— Object name
'CodeConfig'
(default) | character vector
Object name, specified as a character vector.
NumberOfCpuThreads
— Maximum number of CPU threads to run parallel for-loops
0 (default) | positive integer
Maximum number of CPU threads to run parallel for
-loops
in the generated C/C++ code, specified as a positive integer.
See Specify Maximum Number of Threads to Run Parallel for-Loops in the Generated Code.
OptimizeReductions
— Generate SIMD code for reduction operations | Parallelize for-loops performing reduction operations
'false'
(default) | 'true'
To generate SIMD code for reduction operations, use one of the values as specified in this table.
Value | Description |
---|---|
false | This value is the default value. Code generator does not generate SIMD code for reduction operations. |
true | To use this parameter, you must select an
instruction set for the
|
See Generate SIMD Code for MATLAB Functions.
To generate parallel for
-loops performing reduction
operations, use one of the values as specified in this table.
Value | Description |
---|---|
false | This value is the default value. Code generator does not
automatically parallelize
|
true | The code generator automatically parallelizes
|
See Reduction Operations Supported for Automatic Parallelization of for-loops.
Note
Vectorizing and parallelizing reduction operations might introduce slight numerical deviations. For more information, see Handling Overflow in Automatic Parallelization of for-loops.
OutputType
— Output to build from generated C/C++ code
'LIB'
| 'DLL'
| 'EXE'
Output to build from generated C/C++ code, specified as one of the values in this table.
Value | Description |
---|---|
'LIB' | Static library |
'DLL' | Dynamically linked library |
'EXE' | Executable program |
PassStructByReference
— Pass structures by reference
true
(default) | false
Pass structures by reference to entry-point functions, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. The generated code passes structures by reference, which reduces memory usage and execution time by minimizing the number of copies of parameters at entry-point function boundaries. Note An entry-point function that writes to a field of a structure parameter overwrites the input value.
|
false | The generated code passes structures by value. |
This parameter applies only to entry-point functions.
See Pass Structure Arguments by Reference or by Value in Generated Code.
PostCodeGenCommand
— Command to customize build processing
''
(default) | character vector
Command to customize build processing after MEX function generation with
codegen
, specified as a character vector.
PreserveArrayDimensions
— N-dimensional indexing
false
(default) | true
Generation of code that uses N-dimensional indexing, specified as one of the values in this table.
Value | Description |
---|---|
false | Generate code that uses one-dimensional indexing. (This value is the default value.) |
true | Generate code that uses N-dimensional indexing. |
PreserveVariableNames
— Variable names to preserve in the generated code
'None'
(default) | 'UserNames'
| 'All'
Variable names to preserve in the generated code, specified as one of the values in this table.
Value | Description |
---|---|
'None' | This value is the default value. The code generator does not have to preserve any variable names. It can reuse any variables that meet the requirements for variable reuse. If
your code uses large structures or arrays, setting
|
'UserNames' | The code generator preserves names that
correspond to variables that you define in the
MATLAB code. It does not replace your
variable name with another name and does not use
your name for another variable. To improve
readability, set
Setting
|
'All' | Preserve all variable names. This parameter value disables variable reuse. Use it only for testing or debugging, not for production code. |
ReportInfoVarName
— Name of variable containing code generation report information
''
(default) | character vector
Name of variable to which you export information about code generation, specified as a character vector. The code generator creates this variable in the base MATLAB workspace. This variable contains information about code generation settings, input files, generated files, and code generation messages.
See Access Code Generation Report Information Programmatically and coder.ReportInfo Properties.
ReportPotentialDifferences
— Potential differences reporting
true
(default) | false
Potential difference reporting, specified as one of the values in this table:
Value | Description |
---|---|
true | The code generator reports potential behavior differences between generated code and MATLAB code. The potential differences are listed on a tab of the code generation report. A potential difference is a difference that occurs at run time only under certain conditions. |
false | The code generator does not report potential differences. |
ReservedNameArray
— Names that code generator must not use for functions or variables
''
(default) | string array | cell array of character vectors | character vector
List of names that the code generator must not use for functions or variables, specified as a string arrays, cell array of character vectors, or character vector.
Multiple reserved names, specified as one of the values in this table.
Value | Description |
---|---|
String arrays | A string array in
|
Cell array of character vectors | A cell array of character vectors in
|
Character vectors | A semicolon-separated list of reserved names in
Note Specifying multiple entries in code configuration objects by using character vectors will be removed in a future release. Use string array and cell array of character vector instead. For more information, see Compatibility Considerations. |
RowMajor
— Row-major array layout
false
(default) | true
Generation of code that uses row-major array layout, specified as one of the values in this table.
Value | Description |
---|---|
false | Generate code that uses column-major array layout. (This value is the default value.) |
true | Generate code that uses row-major array layout. |
RunInitializeFcn
— Automatically run the initialize function
true (default) | false
Generation of a call to the initialize function at the beginning of the generated entry-point functions, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. A call to the initialize function is included at the beginning of the generated entry-point functions. The generated code includes checks to make sure that the initialize function is called only once, even if there are multiple entry-point functions. |
false | The generated entry-point functions do not include calls to the initialize function. |
See Use Generated Initialize and Terminate Functions.
Dependency:
Setting
MultiInstanceCode
totrue
disables this parameter.
RuntimeChecks
— Run-time error detection and reporting in generated code
false
(default) | true
Run-time error detection and reporting in generated code, specified as one of the values in this table.
Value | Description |
---|---|
false | This value is the default value. The generated code does not check for errors such as out-of-bounds array indexing. |
true | The generated code checks for errors such as out-of-bounds array indexing. The
error-reporting software uses
Error messages are in English. |
See Generate Standalone C/C++ Code That Detects and Reports Run-Time Errors.
SaturateOnIntegerOverflow
— Integer overflow support
true
(default) | false
Integer overflow support, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. The code generator produces code to handle integer overflow. Overflows saturate to either the minimum or maximum value that the data type can represent. |
false | The code generator does not produce code to
handle integer overflow. Do not set
|
This parameter applies only to MATLAB built-in integer types. It does not apply to doubles, singles, or fixed-point data types.
StackUsageMax
— Maximum stack usage per application
200000
(default) | positive integer
Maximum stack usage per application, in bytes, specified as a positive integer. Set a limit that is lower than the available stack size. Otherwise, a run-time stack overflow might occur. The C compiler detects and reports stack overflows.
SupportNonFinite
— Support for nonfinite values
true
(default) | false
Support for nonfinite values, specified as one of the values in this table.
Value | Description |
---|---|
true | This value is the default value. If
If
|
false | The code generator does not produce code to support nonfinite values. |
TargetLang
— Language to use in generated code
'C'
(default) | 'C++'
Language to use in generated code, specified as 'C'
or
'C++'
.
When using GPU Coder, the code generator sets TargetLang
to
C++
.
Dependency: If DeepLearningConfig
is set,
codegen
sets TargetLang
to
C++
.
TargetLangStandard
— Language standard to use for the generated code
'Auto'
(default) | 'C89/C90 (ANSI)'
| 'C99 (ISO)'
| 'C++03 (ISO)'
| 'C++11 (ISO)'
Language standard to use for the generated code, specified as one of these character vectors:
'Auto'
'C89/C90 (ANSI)'
'C99 (ISO)'
'C++03 (ISO)'
'C++11 (ISO)'
Selecting the 'Auto'
option sets the
TargetLangStandard
based on the
TargetLang
setting. For C, the default standard is
'C99 (ISO)'
. For C++, the default standard is
'C++11 (ISO)'
. The code generator uses the language
features and the math libraries available in the selected C/C++ standard.
See Change the Language Standard.
Toolchain
— Toolchain to use for building a C/C++ library or executable program
'Automatically locate an installed toolchain'
(default) | character vector
Toolchain to use for building a C/C++ library or executable program, specified as a character vector. The list of available toolchains depends on the host computer platform, and can include custom toolchains that you added. If you do not specify a toolchain, the code generator locates an installed toolchain.
Note:
Suppose that you create a
coder.CodeConfig
objectcfg
in a MATLAB session and use it in another MATLAB session. If the MATLAB host computer for the second session does not have the toolchain specified in thecfg.Toolchain
property installed on it, this parameter reverts to its default value. The default value is'Automatically locate an installed toolchain'
.
UseBuiltinFFTWLibrary
— Generate code that uses the FFTW library shipped with MATLAB
false
(default) | true
Whether to generate code that produces calls to the FFTW library shipped with MATLAB for fast Fourier transform (FFT) functions in your MATLAB code, specified as one of the values in this table.
Value | Description |
---|---|
false | This value is the default value. The code generator does not produce calls to the built-in FFTW library for FFT functions in your MATLAB code. |
true | The code generator produces calls to the built-in FFTW library for FFT functions in your MATLAB code. |
UseBuiltinFFTWLibrary
takes precedence over
CustomFFTCallback
if you enable both these
properties.
Data Types: logical
Verbose
— Code generation progress display (to be removed)
false (default) | ltrue
Code generation progress display, specified as one of the values in this table.
Value | Description |
---|---|
false | This value is the default value. The code generator does not display code generation progress. |
true | The code generator displays code generation progress, including code generation stages and compiler output. |
Verbosity
— Code generation progress display
'Info'
(default) | 'Silent'
| 'Verbose'
Whether to display the status of the code generation progress at the MATLAB command line, specified as one of the values in this table.
Value | Description |
---|---|
'Silent' | If code generation succeeds without warning, all messages are suppressed, including when you generate a report. Warning and error messages are displayed. |
'Info' | This value is the default value. Compared to the
|
'Verbose' | In addition to the messages shown in the
|
Examples
Specify Configuration Parameters for Generation of Standalone Code
Write a MATLAB function from which you can generate code. This example uses
the function myadd
that returns the sum of its
inputs.
function c = myadd(a,b) c = a + b; end
Create a configuration object for generation of standalone C/C++ code (a static library, a dynamically linked library, or an executable program). For example, create a configuration object for generation of a static library.
cfg = coder.config('lib');
Change the values of the properties for which you do not want to use the default values. For example, enable run-time error detection and reporting in the generated C/C++ code.
cfg.RuntimeChecks = true;
Generate code by using codegen
. Pass the
configuration object to codegen
by using the
-config
option. Specify that the input arguments are
scalar
double.
codegen myadd -config cfg -args {1 1} -report
Alternative Functionality
To use default configuration parameters for build types 'LIB'
,
'DLL'
, or 'EXE'
, use the
codegen
option -config:lib
,
-config:dll
, or -config:exe
, respectively.
Then, you do not have to create and pass a configuration object to
codegen
.
Version History
Introduced in R2011aR2023b: Specifying Multiple Entries in Code Configuration Objects by Using Character Vector Errors
Specifying multiple file names, paths, or reserved names in code configuration
objects by using character vectors or string scalars that have delimiters produces
an error. Use string arrays and a cell array of character vector instead. For
example, to include multiple folder names, you can use either a string array in
CustomInclude
as cfg.CustomInclude =
["C:\Project","C:\Custom Files"];
or a cell array of character vectors
as cfg.CustomInclude = {'C:\Project','C:\Custom Files'};
to
include the path for compiling the generated code.
R2023b: Using Quotes to Specify Single Filename or Path That Contains White Spaces Warns
Using quotes to specify a single filename or path that contains white spaces (for
example, '"sp ace/fun3.c"'
) for the
CustomInclude
, CustomLibrary
, and
CustomSource
code configuration properties produces a warning
and will be removed in a future release.
R2023a: DynamicMemoryAllocation
Property To Be Removed
In a future release, the DynamicMemoryAllocation
property will
be removed.
To dynamically allocate memory for variable-size arrays, use the
EnableDynamicMemoryAllocation
property. To configure the
dynamic memory allocation threshold, use
DynamicMemoryAllocationThreshold
property.
R2022b: Capability to Specify Multiple Entries in Code Configuration Objects by Using Character Vector Warns
Specifying multiple file names, paths, or reserved names in code configuration
objects by using character vectors or string scalars that have delimiters produces a
warning and will be removed in a future release. Use string arrays and a cell array
of character vector instead. For example, to include multiple folder names, you can
use either a string array in CustomInclude
as
cfg.CustomInclude = ["C:\Project","C:\Custom Files"];
or a
cell array of character vectors as cfg.CustomInclude =
{'C:\Project','C:\Custom Files'};
to include the path for compiling
the generated code.
R2021a: Capability to Specify Multiple Entries in Code Configuration Objects by Using Character Vector Will Be Removed
In a future release, specifying multiple file names, paths, or reserved names in
code configuration objects by using character vectors or string scalars that have
delimiters will be removed. Use string arrays and a cell array of character vector
instead. For example, to include multiple folder names, you can use either a string
array in CustomInclude
as cfg.CustomInclude =
["C:\Project","C:\Custom Files"];
or a cell array of character vectors
as cfg.CustomInclude = {'C:\Project','C:\Custom Files'};
to
include the path for compiling the generated code.
R2021a: Verbose
Property To Be Removed
In a future release, the Verbose
property will be
removed.
To configure the code generation progress display, use the
Verbosity
property.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other bat365 country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)