1 /** 2 * \file common.h 3 * 4 * \brief Utility macros for internal use in the library 5 */ 6 /* 7 * Copyright The Mbed TLS Contributors 8 * SPDX-License-Identifier: Apache-2.0 9 * 10 * Licensed under the Apache License, Version 2.0 (the "License"); you may 11 * not use this file except in compliance with the License. 12 * You may obtain a copy of the License at 13 * 14 * http://www.apache.org/licenses/LICENSE-2.0 15 * 16 * Unless required by applicable law or agreed to in writing, software 17 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 18 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 * See the License for the specific language governing permissions and 20 * limitations under the License. 21 */ 22 23 #ifndef MBEDTLS_LIBRARY_COMMON_H 24 #define MBEDTLS_LIBRARY_COMMON_H 25 26 #include "mbedtls/build_info.h" 27 28 /** Helper to define a function as static except when building invasive tests. 29 * 30 * If a function is only used inside its own source file and should be 31 * declared `static` to allow the compiler to optimize for code size, 32 * but that function has unit tests, define it with 33 * ``` 34 * MBEDTLS_STATIC_TESTABLE int mbedtls_foo(...) { ... } 35 * ``` 36 * and declare it in a header in the `library/` directory with 37 * ``` 38 * #if defined(MBEDTLS_TEST_HOOKS) 39 * int mbedtls_foo(...); 40 * #endif 41 * ``` 42 */ 43 #if defined(MBEDTLS_TEST_HOOKS) 44 #define MBEDTLS_STATIC_TESTABLE 45 #else 46 #define MBEDTLS_STATIC_TESTABLE static 47 #endif 48 49 /** Allow library to access its structs' private members. 50 * 51 * Although structs defined in header files are publicly available, 52 * their members are private and should not be accessed by the user. 53 */ 54 #define MBEDTLS_ALLOW_PRIVATE_ACCESS 55 56 #endif /* MBEDTLS_LIBRARY_COMMON_H */ 57