.. SPDX-License-Identifier: MIT OR Apache-2.0 SPDX-FileCopyrightText: The Ferrocene Developers .. default-domain:: qualification Constraints =========== Source code related +++++++++++++++++++ Only use certified subset ------------------------- .. id:: CORE_CSTR_0010_SUBSET Associated requirement ID: :id:`CORE_AVD_SUBSET_001`. The user shall only use the certified subset of the core library. The list of the certified subset is documented in the `Certified core library API docs <../../certification/api-docs/core/index.html>`_. Compliance must be proven by following :ref:`core/subset:Compliance with subset`. Only use stable functions ------------------------- .. id:: CORE_CSTR_0030_SUBSET_ONLY_STABLE Associated requirement ID: :id:`CORE_AVD_SUBSET_001`. The user shall not use experimental functions in the certified subset of the core library. Verify macro correctness ------------------------ .. id:: CORE_CSTR_0060_VERIFY_MACROS Associated requirement ID: :id:`CORE_AVD_MACROS_002`. The user shall verify that all code generated by macros is correct. Verify architecture specific code --------------------------------- .. id:: CORE_CSTR_0060_VERIFY_ARCH Associated requirement ID: :id:`CORE_AVD_ARCH_003`. Architecture specific code needs to be reasoned about and tested in the context of your application. We only guarantee that the compiler emits the correct instructions that you asked for, not that the instructions make sense in context. This becomes and obligation of the user. Architecture specific functions are: * All functions in the ``core::arch`` module * ``core::hint::spin_loop`` Tool related ++++++++++++ Compile with panic abort ------------------------ .. id:: CORE_CSTR_0020_PANIC_ABORT Associated requirement ID: :id:`CORE_AVD_SUBSET_001`. The user shall always provide the ``-C panic=abort`` option to ``rustc``. Use matching version of the core library and rustc -------------------------------------------------- .. id:: CORE_CSTR_0040_MATCHING_VERSION The user shall verify that the version of the core library and the version of rustc used to compile code match. This is ensured by following the :doc:`Installation Procedures <../procedures>`.