Skip to content
Snippets Groups Projects
Commit 0bbe5b44 authored by Frederik Hennig's avatar Frederik Hennig
Browse files

add a CONFIG_MODULE parameter to SFG cmake registration function

parent 94fbd0a9
No related branches found
No related tags found
2 merge requests!12Improve versatility and robustness of `cpptype`, and document it in the user guide,!8Add CONFIG_MODULE parameter to CMake function. Add Tests for CMake Integration.
Pipeline #71210 passed
...@@ -74,6 +74,7 @@ find_package( PystencilsSfg ) ...@@ -74,6 +74,7 @@ find_package( PystencilsSfg )
Make sure to set the `Python_ROOT_DIR` cache variable to point to the correct Python interpreter Make sure to set the `Python_ROOT_DIR` cache variable to point to the correct Python interpreter
(i.e. the virtual environment you have installed *pystencils-sfg* into). (i.e. the virtual environment you have installed *pystencils-sfg* into).
(cmake_add_generator_scripts)=
### Add generator scripts ### Add generator scripts
The primary interaction point in CMake is the function `pystencilssfg_generate_target_sources`, The primary interaction point in CMake is the function `pystencilssfg_generate_target_sources`,
...@@ -85,6 +86,7 @@ pystencilssfg_generate_target_sources( <target> ...@@ -85,6 +86,7 @@ pystencilssfg_generate_target_sources( <target>
[DEPENDS dependency1.py [dependency2.py...]] [DEPENDS dependency1.py [dependency2.py...]]
[FILE_EXTENSIONS <header-extension> <impl-extension>] [FILE_EXTENSIONS <header-extension> <impl-extension>]
[OUTPUT_MODE <standalone|inline|header-only>] [OUTPUT_MODE <standalone|inline|header-only>]
[CONFIG_MODULE <path-to-config-module.py>]
) )
``` ```
...@@ -97,6 +99,9 @@ The function takes the following options: ...@@ -97,6 +99,9 @@ The function takes the following options:
- `DEPENDS`: A list of dependencies for the generator scripts - `DEPENDS`: A list of dependencies for the generator scripts
- `FILE_EXTENSION`: The desired extensions for the generated files - `FILE_EXTENSION`: The desired extensions for the generated files
- `OUTPUT_MODE`: Sets the output mode of the code generator; see {any}`SfgConfig.output_mode`. - `OUTPUT_MODE`: Sets the output mode of the code generator; see {any}`SfgConfig.output_mode`.
- `CONFIG_MODULE`: Set the configuration module for all scripts registered with this call.
If set, this overrides the value of `PystencilsSfg_CONFIG_MODULE`
in the current scope (see [](#cmake_set_config_module))
### Include generated files ### Include generated files
...@@ -110,9 +115,13 @@ path, such that generated header files for a target `<target>` may be included v ...@@ -110,9 +115,13 @@ path, such that generated header files for a target `<target>` may be included v
(cmake_set_config_module)= (cmake_set_config_module)=
### Set a Configuration Module ### Set a Configuration Module
To specify a [configuration module](#config_module) for your project, There are two ways of specifying a [configuration module](#config_module) for generator scripts
set the scoped variable `PystencilsSfg_CONFIG_MODULE` to point at the respective Python file. registered with CMake:
The pystencils-sfg CMake system will then pass that module to each generator script invocation. - To set a configuration module for scripts registered with a single call to `pystencilssfg_generate_target_sources`,
use the `CONFIG_MODULE` function parameter (see [](#cmake_add_generator_scripts)).
- To set a config module for all generator scripts within the current CMake directory and its subdirectories,
set the scoped variable `PystencilsSfg_CONFIG_MODULE` to point at the respective Python file, e.g.
`set( PystencilsSfg_CONFIG_MODULE ProjectConfig.py )`.
You might want to populate your configuration module with information about the current You might want to populate your configuration module with information about the current
build setup and environment. build setup and environment.
......
...@@ -43,7 +43,7 @@ endfunction() ...@@ -43,7 +43,7 @@ endfunction()
function(pystencilssfg_generate_target_sources TARGET) function(pystencilssfg_generate_target_sources TARGET)
set(options) set(options)
set(oneValueArgs OUTPUT_MODE) set(oneValueArgs OUTPUT_MODE CONFIG_MODULE)
set(multiValueArgs SCRIPTS DEPENDS FILE_EXTENSIONS) set(multiValueArgs SCRIPTS DEPENDS FILE_EXTENSIONS)
cmake_parse_arguments(_pssfg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) cmake_parse_arguments(_pssfg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
...@@ -53,21 +53,27 @@ function(pystencilssfg_generate_target_sources TARGET) ...@@ -53,21 +53,27 @@ function(pystencilssfg_generate_target_sources TARGET)
list(APPEND generatorArgs "--sfg-output-mode=${_pssfg_OUTPUT_MODE}") list(APPEND generatorArgs "--sfg-output-mode=${_pssfg_OUTPUT_MODE}")
endif() endif()
if(DEFINED PystencilsSfg_CONFIGURATOR_SCRIPT) if(DEFINED _pssfg_CONFIG_MODULE)
message(AUTHOR_WARNING "The variable PystencilsSfg_CONFIGURATOR_SCRIPT is deprecated. Set PystencilsSfg_CONFIG_MODULE instead.")
cmake_path(ABSOLUTE_PATH PystencilsSfg_CONFIGURATOR_SCRIPT OUTPUT_VARIABLE configscript)
list(APPEND generatorArgs "--sfg-config-module=${configscript}")
list(APPEND _pssfg_DEPENDS ${configscript})
endif()
if(DEFINED PystencilsSfg_CONFIG_MODULE)
if(DEFINED PystencilsSfg_CONFIGURATOR_SCRIPT)
message(FATAL_ERROR "At most one of PystencilsSfg_CONFIGURATOR_SCRIPT and PystencilsSfg_CONFIG_MODULE may be set.")
endif()
cmake_path(ABSOLUTE_PATH PystencilsSfg_CONFIG_MODULE OUTPUT_VARIABLE config_module) cmake_path(ABSOLUTE_PATH PystencilsSfg_CONFIG_MODULE OUTPUT_VARIABLE config_module)
list(APPEND generatorArgs "--sfg-config-module=${config_module}") list(APPEND generatorArgs "--sfg-config-module=${config_module}")
list(APPEND _pssfg_DEPENDS ${config_module}) list(APPEND _pssfg_DEPENDS ${config_module})
else()
if(DEFINED PystencilsSfg_CONFIGURATOR_SCRIPT)
message(AUTHOR_WARNING "The variable PystencilsSfg_CONFIGURATOR_SCRIPT is deprecated. Set PystencilsSfg_CONFIG_MODULE instead.")
cmake_path(ABSOLUTE_PATH PystencilsSfg_CONFIGURATOR_SCRIPT OUTPUT_VARIABLE configscript)
list(APPEND generatorArgs "--sfg-config-module=${configscript}")
list(APPEND _pssfg_DEPENDS ${configscript})
endif()
if(DEFINED PystencilsSfg_CONFIG_MODULE)
if(DEFINED PystencilsSfg_CONFIGURATOR_SCRIPT)
message(FATAL_ERROR "At most one of PystencilsSfg_CONFIGURATOR_SCRIPT and PystencilsSfg_CONFIG_MODULE may be set.")
endif()
cmake_path(ABSOLUTE_PATH PystencilsSfg_CONFIG_MODULE OUTPUT_VARIABLE config_module)
list(APPEND generatorArgs "--sfg-config-module=${config_module}")
list(APPEND _pssfg_DEPENDS ${config_module})
endif()
endif() endif()
if(DEFINED _pssfg_FILE_EXTENSIONS) if(DEFINED _pssfg_FILE_EXTENSIONS)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment