Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

config.py: don't rely on section names #9604

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion framework
71 changes: 39 additions & 32 deletions scripts/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,33 @@
from mbedtls_framework import config_common


def is_full_section(section):
"""Is this section affected by "config.py full" and friends?

In a config file where the sections are not used the whole config file
is an empty section (with value None) and the whole file is affected.
def is_boolean_setting(name, value):
"""Is this a boolean setting?

Mbed TLS boolean settings are enabled if the preprocessor macro is
defined, and disabled if the preprocessor macro is not defined. The
macro definition line in the configuration file has an empty expansion.

PSA_WANT_xxx settings are also boolean, but when they are enabled,
they expand to a nonzero value. We leave them undefined when they
are disabled. (Setting them to 0 currently means to enable them, but
this might change to mean disabling them. Currently we just never set
them to 0.)
"""
return section is None or section.endswith('support') or section.endswith('modules')
if name.startswith('PSA_WANT_'):
return True
if not value:
return True
return False

def realfull_adapter(_name, active, section):
"""Activate all symbols found in the global and boolean feature sections.
def realfull_adapter(_name, _value, _active):
"""Activate all symbols.

This is intended for building the documentation, including the
documentation of settings that are activated by defining an optional
preprocessor macro.

Do not activate definitions in the section containing symbols that are
supposed to be defined and documented in their own module.
preprocessor macro. There is no expectation that the resulting
configuration can be built.
"""
if section == 'Module configuration options':
return active
mpg marked this conversation as resolved.
Show resolved Hide resolved
return True

PSA_UNSUPPORTED_FEATURE = frozenset([
Expand Down Expand Up @@ -138,9 +145,9 @@ def include_in_full(name):
return is_seamless_alt(name)
return True

def full_adapter(name, active, section):
def full_adapter(name, value, active):
"""Config adapter for "full"."""
if not is_full_section(section):
if not is_boolean_setting(name, value):
return active
return include_in_full(name)

Expand Down Expand Up @@ -176,9 +183,9 @@ def keep_in_baremetal(name):
return False
return True

def baremetal_adapter(name, active, section):
def baremetal_adapter(name, value, active):
"""Config adapter for "baremetal"."""
if not is_full_section(section):
if not is_boolean_setting(name, value):
return active
if name == 'MBEDTLS_NO_PLATFORM_ENTROPY':
# No OS-provided entropy source
Expand All @@ -195,10 +202,10 @@ def baremetal_adapter(name, active, section):
'MBEDTLS_TEST_HOOKS', # only useful with the hosted test framework, increases code size
])

def baremetal_size_adapter(name, active, section):
def baremetal_size_adapter(name, value, active):
if name in EXCLUDE_FOR_SIZE:
return False
return baremetal_adapter(name, active, section)
return baremetal_adapter(name, value, active)

def include_in_crypto(name):
"""Rules for symbols in a crypto configuration."""
Expand All @@ -219,15 +226,15 @@ def include_in_crypto(name):
def crypto_adapter(adapter):
"""Modify an adapter to disable non-crypto symbols.

``crypto_adapter(adapter)(name, active, section)`` is like
``adapter(name, active, section)``, but unsets all X.509 and TLS symbols.
``crypto_adapter(adapter)(name, value, active)`` is like
``adapter(name, value, active)``, but unsets all X.509 and TLS symbols.
"""
def continuation(name, active, section):
def continuation(name, value, active):
if not include_in_crypto(name):
return False
if adapter is None:
return active
return adapter(name, active, section)
return adapter(name, value, active)
return continuation

DEPRECATED = frozenset([
Expand All @@ -237,34 +244,34 @@ def continuation(name, active, section):
def no_deprecated_adapter(adapter):
"""Modify an adapter to disable deprecated symbols.

``no_deprecated_adapter(adapter)(name, active, section)`` is like
``adapter(name, active, section)``, but unsets all deprecated symbols
``no_deprecated_adapter(adapter)(name, value, active)`` is like
``adapter(name, value, active)``, but unsets all deprecated symbols
and sets ``MBEDTLS_DEPRECATED_REMOVED``.
"""
def continuation(name, active, section):
def continuation(name, value, active):
if name == 'MBEDTLS_DEPRECATED_REMOVED':
return True
if name in DEPRECATED:
return False
if adapter is None:
return active
return adapter(name, active, section)
return adapter(name, value, active)
return continuation

def no_platform_adapter(adapter):
"""Modify an adapter to disable platform symbols.

``no_platform_adapter(adapter)(name, active, section)`` is like
``adapter(name, active, section)``, but unsets all platform symbols other
``no_platform_adapter(adapter)(name, value, active)`` is like
``adapter(name, value, active)``, but unsets all platform symbols other
``than MBEDTLS_PLATFORM_C.
"""
def continuation(name, active, section):
def continuation(name, value, active):
# Allow MBEDTLS_PLATFORM_C but remove all other platform symbols.
if name.startswith('MBEDTLS_PLATFORM_') and name != 'MBEDTLS_PLATFORM_C':
return False
if adapter is None:
return active
return adapter(name, active, section)
return adapter(name, value, active)
return continuation


Expand Down