From ffefe603ae91d3a839d67bc35861abb58bb36367 Mon Sep 17 00:00:00 2001 From: Renz Bagaporo Date: Thu, 12 Nov 2020 23:17:17 +0800 Subject: [PATCH] ci: enabled ldgen mapping check in ci --- tools/ci/check_ldgen_mapping_exceptions.txt | 1 + tools/ci/config/build.yml | 4 +++- tools/cmake/ldgen.cmake | 7 +++++++ tools/ldgen/generation.py | 13 +++++++++---- 4 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 tools/ci/check_ldgen_mapping_exceptions.txt diff --git a/tools/ci/check_ldgen_mapping_exceptions.txt b/tools/ci/check_ldgen_mapping_exceptions.txt new file mode 100644 index 0000000000..0a9ce4f3e2 --- /dev/null +++ b/tools/ci/check_ldgen_mapping_exceptions.txt @@ -0,0 +1 @@ +libc diff --git a/tools/ci/config/build.yml b/tools/ci/config/build.yml index fb2d74d6b7..079c3257bd 100644 --- a/tools/ci/config/build.yml +++ b/tools/ci/config/build.yml @@ -57,7 +57,8 @@ build_ssc_esp32s2beta: build_esp_idf_tests_make: extends: .build_esp_idf_unit_test_template variables: - PYTHON_VER: 3 + PYTHON_VER: 3 + LDGEN_CHECK_MAPPING: 0 script: - export EXTRA_CFLAGS=${PEDANTIC_CFLAGS} - export EXTRA_CXXFLAGS=${PEDANTIC_CXXFLAGS} @@ -108,6 +109,7 @@ build_examples_make: - $LOG_PATH expire_in: 4 days variables: + LDGEN_CHECK_MAPPING: 0 LOG_PATH: "$CI_PROJECT_DIR/log_examples_make" only: # Here both 'variables' and 'refs' conditions are given. They are combined with "AND" logic. diff --git a/tools/cmake/ldgen.cmake b/tools/cmake/ldgen.cmake index 22d7fe672d..1e4341e8b3 100644 --- a/tools/cmake/ldgen.cmake +++ b/tools/cmake/ldgen.cmake @@ -56,6 +56,12 @@ function(__ldgen_process_template template output) idf_build_get_property(config_env_path CONFIG_ENV_PATH) + if($ENV{LDGEN_CHECK_MAPPING}) + set(ldgen_check "--check-mapping" + "--check-mapping-exceptions=${idf_path}/tools/ci/check_ldgen_mapping_exceptions.txt") + message(STATUS "Mapping check enabled in ldgen") + endif() + add_custom_command( OUTPUT ${output} COMMAND ${python} ${idf_path}/tools/ldgen/ldgen.py @@ -67,6 +73,7 @@ function(__ldgen_process_template template output) --env-file "${config_env_path}" --libraries-file ${build_dir}/ldgen_libraries --objdump ${CMAKE_OBJDUMP} + ${ldgen_check} DEPENDS ${template} ${ldgen_fragment_files} ${ldgen_depends} ${SDKCONFIG} ) diff --git a/tools/ldgen/generation.py b/tools/ldgen/generation.py index 159c1916f4..01e6e51c4b 100644 --- a/tools/ldgen/generation.py +++ b/tools/ldgen/generation.py @@ -344,14 +344,19 @@ class GenerationModel: try: if not (obj == Mapping.MAPPING_ALL_OBJECTS and symbol is None and scheme_name == GenerationModel.DEFAULT_SCHEME): - if self.check_mappings and mapping.name not in self.check_mapping_exceptions: if not obj == Mapping.MAPPING_ALL_OBJECTS: - obj_section = sections_infos.get_obj_sections(archive, obj) - if not obj_section: - message = "'%s\:%s' not found" % (archive, obj) + obj_sections = sections_infos.get_obj_sections(archive, obj) + if not obj_sections: + message = "'%s:%s' not found" % (archive, obj) raise GenerationException(message, mapping) + if symbol: + obj_sym = fnmatch.filter(obj_sections, "*%s" % symbol) + if not obj_sym: + message = "'%s:%s %s' not found" % (archive, obj, symbol) + raise GenerationException(message, mapping) + self._add_mapping_rules(archive, obj, symbol, scheme_name, scheme_dictionary, mapping_rules) except KeyError: message = GenerationException.UNDEFINED_REFERENCE + " to scheme '" + scheme_name + "'."