mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
refactor(tools): public header check also checks c++ now
* Also changed --only-dir argument to accept system-wide directories instead of directories from IDF root
This commit is contained in:
parent
44e4ef79e2
commit
8b9f8555ea
@ -32,8 +32,16 @@ class HeaderFailedSdkconfig(HeaderFailed):
|
||||
|
||||
|
||||
class HeaderFailedBuildError(HeaderFailed):
|
||||
def __init__(self, compiler: str):
|
||||
self.compiler = compiler
|
||||
|
||||
def __str__(self) -> str:
|
||||
return 'Header Build Error'
|
||||
return 'Header Build Error with {}'.format(self.compiler)
|
||||
|
||||
|
||||
class HeaderFailedPreprocessError(HeaderFailed):
|
||||
def __str__(self) -> str:
|
||||
return 'Header Procecessing Error'
|
||||
|
||||
|
||||
class HeaderFailedCppGuardMissing(HeaderFailed):
|
||||
@ -164,7 +172,7 @@ class PublicHeaderChecker:
|
||||
elif res == self.COMPILE_ERR_ERROR_MACRO_HDR_OK:
|
||||
return self.compile_one_header(header)
|
||||
elif res == self.COMPILE_ERR_HDR_FAILED:
|
||||
raise HeaderFailedBuildError()
|
||||
raise HeaderFailedPreprocessError()
|
||||
elif res == self.PREPROC_OUT_ZERO_HDR_OK:
|
||||
return self.compile_one_header(header)
|
||||
elif res == self.PREPROC_OUT_SAME_HRD_FAILED:
|
||||
@ -186,7 +194,11 @@ class PublicHeaderChecker:
|
||||
os.unlink(temp_header)
|
||||
|
||||
def compile_one_header(self, header: str) -> None:
|
||||
rc, out, err, cmd = exec_cmd([self.gcc, '-S', '-o-', '-include', header, self.main_c] + self.include_dir_flags)
|
||||
self.compile_one_header_with(self.gcc, header)
|
||||
self.compile_one_header_with(self.gpp, header)
|
||||
|
||||
def compile_one_header_with(self, compiler: str, header: str) -> None:
|
||||
rc, out, err, cmd = exec_cmd([compiler, '-S', '-o-', '-include', header, self.main_c] + self.include_dir_flags)
|
||||
if rc == 0:
|
||||
if not re.sub(self.assembly_nocode, '', out, flags=re.M).isspace():
|
||||
raise HeaderFailedContainsCode()
|
||||
@ -194,7 +206,7 @@ class PublicHeaderChecker:
|
||||
self.log('{}: FAILED: compilation issue'.format(header), True)
|
||||
self.log(err, True)
|
||||
self.log('\nCompilation command failed:\n{}\n'.format(cmd), True)
|
||||
raise HeaderFailedBuildError()
|
||||
raise HeaderFailedBuildError(compiler)
|
||||
|
||||
def preprocess_one_header(self, header: str, num: int, ignore_common_issues: bool=False) -> int:
|
||||
all_compilation_flags = ['-w', '-P', '-E', '-DESP_PLATFORM', '-include', header, self.main_c] + self.include_dir_flags
|
||||
@ -292,7 +304,7 @@ class PublicHeaderChecker:
|
||||
all_include_files = []
|
||||
files_to_check = []
|
||||
for d in include_dirs:
|
||||
if only_dir is not None and not os.path.relpath(d, idf_path).startswith(only_dir):
|
||||
if only_dir is not None and not os.path.relpath(d, idf_path).startswith(os.path.relpath(only_dir, idf_path)):
|
||||
self.log('{} - directory ignored (not in "{}")'.format(d, only_dir))
|
||||
continue
|
||||
if os.path.relpath(d, idf_path).startswith(tuple(ignore_dirs)):
|
||||
@ -331,6 +343,7 @@ def check_all_headers() -> None:
|
||||
* Check that all referenced macros, types are available (defined or included)
|
||||
* Check that all included header files are available (included in paths)
|
||||
* Check for possible compilation issues
|
||||
* If only the C++ compilation fails, check that the header is C++ compatible
|
||||
* Try to compile only the offending header file
|
||||
3) "Header Missing C++ Guard": Preprocessing the header by C and C++ should produce different output
|
||||
* Check if the "#ifdef __cplusplus" header sentinels are present
|
||||
|
@ -114,7 +114,6 @@ components/esp_wifi/include/esp_wifi_crypto_types.h
|
||||
components/esp_wifi/include/esp_wifi_netif.h
|
||||
components/esp_wifi/include/smartconfig_ack.h
|
||||
components/esp_wifi/include/esp_wifi_default.h
|
||||
components/esp_netif/include/esp_netif_sta_list.h
|
||||
components/esp_netif/include/esp_netif_defaults.h
|
||||
components/esp_netif/include/esp_netif_net_stack.h
|
||||
components/esp_netif/include/esp_netif_ppp.h
|
||||
@ -126,6 +125,138 @@ components/wifi_provisioning/include/wifi_provisioning/scheme_softap.h
|
||||
components/usb/include/esp_private/usb_phy.h
|
||||
components/usb/include/usb/usb_types_stack.h
|
||||
|
||||
### Headers that don't compile with C++
|
||||
#
|
||||
components/bootloader_support/bootloader_flash/include/bootloader_flash.h
|
||||
components/bootloader_support/bootloader_flash/include/bootloader_flash_priv.h
|
||||
components/esp_hw_support/include/esp_private/regdma_link.h
|
||||
components/hal/esp32/include/hal/aes_ll.h
|
||||
components/hal/esp32/include/hal/cache_ll.h
|
||||
components/hal/esp32/include/hal/i2c_ll.h
|
||||
components/hal/esp32/include/hal/ledc_ll.h
|
||||
components/hal/esp32/include/hal/mcpwm_ll.h
|
||||
components/hal/esp32/include/hal/mpi_ll.h
|
||||
components/hal/esp32/include/hal/pcnt_ll.h
|
||||
components/hal/esp32/include/hal/sdio_slave_ll.h
|
||||
components/hal/esp32/include/hal/spi_flash_ll.h
|
||||
components/hal/esp32c2/include/hal/adc_ll.h
|
||||
components/hal/esp32c2/include/hal/cache_ll.h
|
||||
components/hal/esp32c2/include/hal/ecc_ll.h
|
||||
components/hal/esp32c2/include/hal/gpspi_flash_ll.h
|
||||
components/hal/esp32c2/include/hal/i2c_ll.h
|
||||
components/hal/esp32c2/include/hal/ledc_ll.h
|
||||
components/hal/esp32c2/include/hal/mpu_ll.h
|
||||
components/hal/esp32c2/include/hal/spi_flash_ll.h
|
||||
components/hal/esp32c2/include/hal/spi_ll.h
|
||||
components/hal/esp32c2/include/hal/spimem_flash_ll.h
|
||||
components/hal/esp32c3/include/hal/adc_ll.h
|
||||
components/hal/esp32c3/include/hal/aes_ll.h
|
||||
components/hal/esp32c3/include/hal/cache_ll.h
|
||||
components/hal/esp32c3/include/hal/gpspi_flash_ll.h
|
||||
components/hal/esp32c3/include/hal/i2c_ll.h
|
||||
components/hal/esp32c3/include/hal/ledc_ll.h
|
||||
components/hal/esp32c3/include/hal/memprot_ll.h
|
||||
components/hal/esp32c3/include/hal/mpi_ll.h
|
||||
components/hal/esp32c3/include/hal/mpu_ll.h
|
||||
components/hal/esp32c3/include/hal/spi_flash_ll.h
|
||||
components/hal/esp32c3/include/hal/spi_ll.h
|
||||
components/hal/esp32c3/include/hal/spimem_flash_ll.h
|
||||
components/hal/esp32c3/include/hal/uhci_ll.h
|
||||
components/hal/esp32c6/include/hal/aes_ll.h
|
||||
components/hal/esp32c6/include/hal/cache_ll.h
|
||||
components/hal/esp32c6/include/hal/ecc_ll.h
|
||||
components/hal/esp32c6/include/hal/gpspi_flash_ll.h
|
||||
components/hal/esp32c6/include/hal/i2c_ll.h
|
||||
components/hal/esp32c6/include/hal/ieee802154_ll.h
|
||||
components/hal/esp32c6/include/hal/mcpwm_ll.h
|
||||
components/hal/esp32c6/include/hal/mpi_ll.h
|
||||
components/hal/esp32c6/include/hal/mpu_ll.h
|
||||
components/hal/esp32c6/include/hal/pcnt_ll.h
|
||||
components/hal/esp32c6/include/hal/sdio_slave_ll.h
|
||||
components/hal/esp32c6/include/hal/spi_flash_ll.h
|
||||
components/hal/esp32c6/include/hal/spi_ll.h
|
||||
components/hal/esp32c6/include/hal/spimem_flash_ll.h
|
||||
components/hal/esp32h2/include/hal/aes_ll.h
|
||||
components/hal/esp32h2/include/hal/cache_ll.h
|
||||
components/hal/esp32h2/include/hal/ecc_ll.h
|
||||
components/hal/esp32h2/include/hal/ecdsa_ll.h
|
||||
components/hal/esp32h2/include/hal/gpspi_flash_ll.h
|
||||
components/hal/esp32h2/include/hal/i2c_ll.h
|
||||
components/hal/esp32h2/include/hal/ieee802154_ll.h
|
||||
components/hal/esp32h2/include/hal/mcpwm_ll.h
|
||||
components/hal/esp32h2/include/hal/mpi_ll.h
|
||||
components/hal/esp32h2/include/hal/mpu_ll.h
|
||||
components/hal/esp32h2/include/hal/pcnt_ll.h
|
||||
components/hal/esp32h2/include/hal/spi_flash_ll.h
|
||||
components/hal/esp32h2/include/hal/spi_ll.h
|
||||
components/hal/esp32h2/include/hal/spimem_flash_ll.h
|
||||
components/hal/esp32p4/include/hal/cache_ll.h
|
||||
components/hal/esp32p4/include/hal/clk_tree_ll.h
|
||||
components/hal/esp32p4/include/hal/ecc_ll.h
|
||||
components/hal/esp32p4/include/hal/gpspi_flash_ll.h
|
||||
components/hal/esp32p4/include/hal/mcpwm_ll.h
|
||||
components/hal/esp32p4/include/hal/mpi_ll.h
|
||||
components/hal/esp32p4/include/hal/mpu_ll.h
|
||||
components/hal/esp32p4/include/hal/spi_flash_ll.h
|
||||
components/hal/esp32p4/include/hal/spimem_flash_ll.h
|
||||
components/hal/esp32s2/include/hal/aes_ll.h
|
||||
components/hal/esp32s2/include/hal/cache_ll.h
|
||||
components/hal/esp32s2/include/hal/dedic_gpio_ll.h
|
||||
components/hal/esp32s2/include/hal/gpspi_flash_ll.h
|
||||
components/hal/esp32s2/include/hal/i2c_ll.h
|
||||
components/hal/esp32s2/include/hal/ledc_ll.h
|
||||
components/hal/esp32s2/include/hal/memprot_peri_ll.h
|
||||
components/hal/esp32s2/include/hal/mpi_ll.h
|
||||
components/hal/esp32s2/include/hal/pcnt_ll.h
|
||||
components/hal/esp32s2/include/hal/spi_flash_ll.h
|
||||
components/hal/esp32s2/include/hal/spi_ll.h
|
||||
components/hal/esp32s2/include/hal/spimem_flash_ll.h
|
||||
components/hal/esp32s2/include/hal/touch_sensor_hal.h
|
||||
components/hal/esp32s2/include/hal/touch_sensor_ll.h
|
||||
components/hal/esp32s2/include/hal/usb_ll.h
|
||||
components/hal/esp32s2/include/hal/usb_phy_ll.h
|
||||
components/hal/esp32s3/include/hal/aes_ll.h
|
||||
components/hal/esp32s3/include/hal/cache_ll.h
|
||||
components/hal/esp32s3/include/hal/gpspi_flash_ll.h
|
||||
components/hal/esp32s3/include/hal/i2c_ll.h
|
||||
components/hal/esp32s3/include/hal/ledc_ll.h
|
||||
components/hal/esp32s3/include/hal/mcpwm_ll.h
|
||||
components/hal/esp32s3/include/hal/memprot_ll.h
|
||||
components/hal/esp32s3/include/hal/mpi_ll.h
|
||||
components/hal/esp32s3/include/hal/mspi_timing_tuning_ll.h
|
||||
components/hal/esp32s3/include/hal/pcnt_ll.h
|
||||
components/hal/esp32s3/include/hal/spi_flash_ll.h
|
||||
components/hal/esp32s3/include/hal/spi_ll.h
|
||||
components/hal/esp32s3/include/hal/spimem_flash_ll.h
|
||||
components/hal/esp32s3/include/hal/touch_sensor_hal.h
|
||||
components/hal/esp32s3/include/hal/touch_sensor_ll.h
|
||||
components/hal/esp32s3/include/hal/uhci_ll.h
|
||||
components/hal/esp32s3/include/hal/usb_ll.h
|
||||
components/hal/esp32s3/include/hal/usb_phy_ll.h
|
||||
components/hal/include/hal/adc_hal.h
|
||||
components/hal/include/hal/aes_hal.h
|
||||
components/hal/include/hal/assist_debug_hal.h
|
||||
components/hal/include/hal/i2c_hal.h
|
||||
components/hal/include/hal/ieee802154_common_ll.h
|
||||
components/hal/include/hal/ledc_hal.h
|
||||
components/hal/include/hal/sdio_slave_hal.h
|
||||
components/hal/include/hal/spi_flash_hal.h
|
||||
components/hal/include/hal/spi_hal.h
|
||||
components/hal/include/hal/spi_slave_hal.h
|
||||
components/hal/include/hal/spi_slave_hd_hal.h
|
||||
components/lwip/include/lwip/netdb.h
|
||||
components/soc/esp32c2/include/soc/ext_mem_defs.h
|
||||
components/soc/esp32c2/include/soc/mmu.h
|
||||
components/soc/esp32c3/include/soc/ext_mem_defs.h
|
||||
components/soc/esp32c3/include/soc/mmu.h
|
||||
components/soc/esp32c6/include/soc/ext_mem_defs.h
|
||||
components/soc/esp32c6/include/soc/mmu.h
|
||||
components/soc/esp32h2/include/soc/ext_mem_defs.h
|
||||
components/soc/esp32h2/include/soc/mmu.h
|
||||
components/soc/esp32p4/include/soc/ext_mem_defs.h
|
||||
components/soc/esp32p4/include/soc/mmu.h
|
||||
components/spi_flash/include/esp_private/spi_flash_os.h
|
||||
|
||||
### To be fixed: files which don't compile for esp32s2 target:
|
||||
|
||||
components/esp_psram/include/esp32/himem.h
|
||||
|
@ -5,11 +5,11 @@
|
||||
|
||||
This build-only app can be used to check if certain headers, macros or features can be successfully compiled in a C++ source file. It furthermore checks the current C++ language standard set in IDF is the expected one.
|
||||
|
||||
**Note:** C++ compatibility of all public header files is checked by [general public header check](../../../ci/check_public_headers.py) already.
|
||||
|
||||
## This App Broke My Build :(
|
||||
|
||||
It is likely that one of the following situations occurred:
|
||||
1. The language standard for IDF has been changed without changing the test in this application.
|
||||
2. Code incompatible to C++ has been added to one of the public header files in IDF. Check the C++ documentation section [Combining C and C++ code](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/cplusplus.html#combining-c-and-c-code) for more details.
|
||||
It is possible that the language standard for IDF has been changed without changing the test in this application.
|
||||
|
||||
## Adding New Test
|
||||
Create a new file `main/test_<name>.cpp` and add it to main/CMakeLists.txt. If you need to check specific compiler flags, use `set_source_files_properties` CMake function to adjust the compilation flags for the given source file.
|
||||
|
@ -1,9 +1,6 @@
|
||||
idf_component_register(SRCS cxx_build_test_main.cpp
|
||||
test_soc_reg_macros.cpp
|
||||
test_esp_hw_support.cpp
|
||||
test_cxx_standard.cpp
|
||||
INCLUDE_DIRS "."
|
||||
PRIV_REQUIRES driver
|
||||
REQUIRES soc)
|
||||
|
||||
set_source_files_properties(test_esp_hw_support.cpp PROPERTIES COMPILE_FLAGS -Wsign-conversion)
|
||||
|
@ -1,41 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
|
||||
#include "esp_cpu.h"
|
||||
#include "clk_ctrl_os.h"
|
||||
//#include "clk_tree.h" TODO: outdated header name (IDF-7286)
|
||||
#include "dport_access.h"
|
||||
#include "esp_async_memcpy.h"
|
||||
#include "esp_chip_info.h"
|
||||
#include "esp_crc.h"
|
||||
#include "esp_etm.h"
|
||||
#include "esp_fault.h"
|
||||
#include "esp_interface.h"
|
||||
#include "esp_intr_alloc.h"
|
||||
#include "esp_mac.h"
|
||||
#include "esp_memory_utils.h"
|
||||
#include "esp_memprot_err.h"
|
||||
#include "esp_memprot.h"
|
||||
#include "esp_memprot_types.h"
|
||||
#include "esp_random.h"
|
||||
#include "esp_sleep.h"
|
||||
#include "esp_wake_stub.h"
|
||||
#include "intr_types.h"
|
||||
#include "rtc_wdt.h"
|
||||
#include "spinlock.h"
|
||||
|
||||
#include "soc/soc_caps.h"
|
||||
|
||||
#if SOC_HMAC_SUPPORTED
|
||||
#include "esp_hmac.h"
|
||||
#endif
|
||||
|
||||
#if SOC_DIG_SIGN_SUPPORTED
|
||||
#include "esp_ds_err.h"
|
||||
#include "esp_ds.h"
|
||||
#endif
|
||||
|
||||
extern "C" void app_main() { }
|
Loading…
Reference in New Issue
Block a user