# Copyright 2022 The Pigweed Authors # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. """Tests for pw_ide.cpp""" import json from pathlib import Path from typing import cast import unittest # pylint: disable=protected-access from pw_ide.cpp import ( COMPDB_FILE_NAME, command_parts, path_to_executable, CppCompilationDatabase, CppCompilationDatabasesMap, CppCompileCommand, CppCompileCommandDict, CppIdeFeaturesTarget, CppIdeFeaturesState, infer_target, _infer_target_pos, ) from pw_ide.exceptions import UnresolvablePathException from test_cases import PwIdeTestCase class TestPathToExecutable(PwIdeTestCase): """Tests path_to_executable""" def test_valid_absolute_path_in_env_returns_same_path(self): executable_path = self.temp_dir_path / 'clang' query_drivers = [f'{self.temp_dir_path}/*'] result = path_to_executable( str(executable_path.absolute()), path_globs=query_drivers ) self.assertIsNotNone(result) self.assertEqual(str(result), str(executable_path.absolute())) def test_valid_absolute_path_outside_env_returns_same_path(self): executable_path = Path('/usr/bin/clang') query_drivers = ['/**/*'] result = path_to_executable( str(executable_path.absolute()), path_globs=query_drivers ) self.assertIsNotNone(result) self.assertEqual(str(result), str(executable_path.absolute())) def test_valid_relative_path_returns_same_path(self): executable_path = Path('../clang') query_drivers = [f'{self.temp_dir_path}/*'] result = path_to_executable( str(executable_path), path_globs=query_drivers ) self.assertIsNotNone(result) self.assertEqual(str(result), str(executable_path)) def test_valid_no_path_returns_new_path(self): executable_path = Path('clang') query_drivers = [f'{self.temp_dir_path}/*'] expected_path = self.temp_dir_path / executable_path self.touch_temp_file(expected_path) result = path_to_executable( str(executable_path), path_globs=query_drivers ) self.assertIsNotNone(result) self.assertEqual(str(result), str(expected_path)) def test_invalid_absolute_path_in_env_returns_same_path(self): executable_path = self.temp_dir_path / '_pw_invalid_exe' query_drivers = [f'{self.temp_dir_path}/*'] result = path_to_executable( str(executable_path.absolute()), path_globs=query_drivers ) self.assertIsNone(result) def test_invalid_absolute_path_outside_env_returns_same_path(self): executable_path = Path('/usr/bin/_pw_invalid_exe') query_drivers = ['/**/*'] result = path_to_executable( str(executable_path.absolute()), path_globs=query_drivers ) self.assertIsNone(result) def test_invalid_relative_path_returns_same_path(self): executable_path = Path('../_pw_invalid_exe') query_drivers = [f'{self.temp_dir_path}/*'] result = path_to_executable( str(executable_path), path_globs=query_drivers ) self.assertIsNone(result) def test_invalid_no_path_returns_new_path(self): executable_path = Path('_pw_invalid_exe') query_drivers = [f'{self.temp_dir_path}/*'] expected_path = self.temp_dir_path / executable_path self.touch_temp_file(expected_path) result = path_to_executable( str(executable_path), path_globs=query_drivers ) self.assertIsNone(result) class TestInferTarget(unittest.TestCase): """Tests infer_target""" def test_infer_target_pos(self): test_cases = [ ('?', [0]), ('*/?', [1]), ('*/*/?', [2]), ('*/?/?', [1, 2]), ] for glob, result in test_cases: self.assertEqual(_infer_target_pos(glob), result) def test_infer_target(self): test_cases = [ ('?', 'target/thing.o', 'target'), ('*/?', 'variants/target/foo/bar/thing.o', 'target'), ('*/*/*/*/?', 'foo/bar/baz/hi/target/obj/thing.o', 'target'), ('*/?/?', 'variants/target/foo/bar/thing.o', 'target_foo'), ] for glob, output_path, result in test_cases: self.assertEqual( infer_target(glob, Path(''), Path(output_path)), result ) class TestCppCompileCommand(PwIdeTestCase): """Tests CppCompileCommand""" def run_process_test_with_valid_commands( self, command: str, expected_executable: str | None ) -> None: compile_command = CppCompileCommand( command=command, file='', directory='' ) processed_compile_command = cast( CppCompileCommand, compile_command.process(default_path=self.temp_dir_path), ) self.assertIsNotNone(processed_compile_command) self.assertEqual( processed_compile_command.executable_name, expected_executable ) def run_process_test_with_invalid_commands(self, command: str) -> None: compile_command = CppCompileCommand( command=command, file='', directory='' ) with self.assertRaises(UnresolvablePathException): compile_command.process(default_path=self.temp_dir_path) def test_process_valid_with_gn_compile_command(self) -> None: """Test output against typical GN-generated compile commands.""" cases: list[dict[str, str]] = [ { # pylint: disable=line-too-long 'command': 'arm-none-eabi-g++ -MMD -MF stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_ARMV7M_ENABLE_FPU=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o', # pylint: enable=line-too-long 'executable': 'arm-none-eabi-g++', }, { # pylint: disable=line-too-long 'command': '../environment/cipd/packages/pigweed/bin/clang++ -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o', # pylint: enable=line-too-long 'executable': 'clang++', }, ] for case in cases: self.run_process_test_with_valid_commands( case['command'], case['executable'] ) def test_process_invalid_with_gn_compile_command(self) -> None: """Test output against typical GN-generated compile commands.""" # pylint: disable=line-too-long command = "python ../pw_toolchain/py/pw_toolchain/clang_tidy.py --source-exclude 'third_party/.*' --source-exclude '.*packages/mbedtls.*' --source-exclude '.*packages/boringssl.*' --skip-include-path 'mbedtls/include' --skip-include-path 'mbedtls' --skip-include-path 'boringssl/src/include' --skip-include-path 'boringssl' --skip-include-path 'pw_tls_client/generate_test_data' --source-file ../pw_allocator/freelist.cc --source-root '../' --export-fixes pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/freelist.freelist.cc.o.yaml -- ../environment/cipd/packages/pigweed/bin/clang++ END_OF_INVOKER -MMD -MF pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/freelist.freelist.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_containers/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/freelist.cc -o pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/freelist.freelist.cc.o && touch pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/freelist.freelist.cc.o" # pylint: enable=line-too-long compile_command = CppCompileCommand( command=command, file='', directory='' ) self.assertIsNone( compile_command.process(default_path=self.temp_dir_path) ) def test_process_unresolvable_with_gn_compile_command(self) -> None: """Test output against typical GN-generated compile commands.""" # pylint: disable=line-too-long command = 'clang++ -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o' # pylint: enable=line-too-long compile_command = CppCompileCommand( command=command, file='', directory='' ) processed_compile_command = cast( CppCompileCommand, compile_command.process() ) self.assertIsNotNone(processed_compile_command) self.assertIsNotNone(processed_compile_command.command) # .split() to avoid failing on whitespace differences. self.assertCountEqual( cast(str, processed_compile_command.command).split(), command.split(), ) def test_process_unresolvable_strict_with_gn_compile_command(self) -> None: """Test output against typical GN-generated compile commands.""" # pylint: disable=line-too-long command = 'clang++ -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o' # pylint: enable=line-too-long compile_command = CppCompileCommand( command=command, file='', directory='' ) with self.assertRaises(UnresolvablePathException): compile_command.process(strict=True) def test_process_blank_with_gn_compile_command(self) -> None: """Test output against typical GN-generated compile commands.""" command = '' compile_command = CppCompileCommand( command=command, file='', directory='' ) result = compile_command.process(default_path=self.temp_dir_path) self.assertIsNone(result) class TestCommandParts(unittest.TestCase): """Test command_parts""" def test_command_parts(self): """Test command_parts""" # pylint: disable=line-too-long test_cases = [ "python ../pw_toolchain/py/pw_toolchain/clang_tidy.py --source-exclude 'third_party/.*' --source-exclude '.*packages/mbedtls.*' --source-exclude '.*packages/boringssl.*' --skip-include-path 'mbedtls/include' --skip-include-path 'mbedtls' --skip-include-path 'boringssl/src/include' --skip-include-path 'boringssl' --skip-include-path 'pw_tls_client/generate_test_data' --source-file ../pw_allocator/block.cc --source-root '../' --export-fixes pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.yaml -- ../environment/cipd/packages/pigweed/bin/clang++ END_OF_INVOKER -MMD -MF pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o && touch pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o", 'arm-none-eabi-g++ -MMD -MF stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_ARMV7M_ENABLE_FPU=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o', '../environment/cipd/packages/pigweed/bin/isosceles-clang++ -MMD -MF isosceles_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o isosceles_debug/obj/pw_allocator/block.block.cc.o', '../environment/cipd/packages/pigweed/bin/clang++ -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o', 'ccache arm-none-eabi-g++ -MMD -MF stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_ARMV7M_ENABLE_FPU=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o', 'ccache ../environment/cipd/packages/pigweed/bin/isosceles-clang++ -MMD -MF isosceles_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o isosceles_debug/obj/pw_allocator/block.block.cc.o', 'ccache ../environment/cipd/packages/pigweed/bin/clang++ -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o', 'ccache debug=true max_size=10G arm-none-eabi-g++ -MMD -MF stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_ARMV7M_ENABLE_FPU=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o', 'ccache debug=true max_size=10G ../environment/cipd/packages/pigweed/bin/isosceles-clang++ -MMD -MF isosceles_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o isosceles_debug/obj/pw_allocator/block.block.cc.o', 'ccache debug=true max_size=10G ../environment/cipd/packages/pigweed/bin/clang++ -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o', "ccache python ../pw_toolchain/py/pw_toolchain/clang_tidy.py --source-exclude 'third_party/.*' --source-exclude '.*packages/mbedtls.*' --source-exclude '.*packages/boringssl.*' --skip-include-path 'mbedtls/include' --skip-include-path 'mbedtls' --skip-include-path 'boringssl/src/include' --skip-include-path 'boringssl' --skip-include-path 'pw_tls_client/generate_test_data' --source-file ../pw_allocator/block.cc --source-root '../' --export-fixes pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.yaml -- ../environment/cipd/packages/pigweed/bin/clang++ END_OF_INVOKER -MMD -MF pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o && touch pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o", ] expected_results = [ ( None, 'python', [ '../pw_toolchain/py/pw_toolchain/clang_tidy.py', '--source-exclude', "'third_party/.*'", '--source-exclude', "'.*packages/mbedtls.*'", '--source-exclude', "'.*packages/boringssl.*'", '--skip-include-path', "'mbedtls/include'", '--skip-include-path', "'mbedtls'", '--skip-include-path', "'boringssl/src/include'", '--skip-include-path', "'boringssl'", '--skip-include-path', "'pw_tls_client/generate_test_data'", '--source-file', '../pw_allocator/block.cc', '--source-root', "'../'", '--export-fixes', 'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.yaml', '--', '../environment/cipd/packages/pigweed/bin/clang++', 'END_OF_INVOKER', '-MMD', '-MF', 'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.d', '-g3', '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk', '-Og', '-Wshadow', '-Wredundant-decls', '-Wthread-safety', '-Wswitch-enum', '-fdiagnostics-color', '-g', '-fno-common', '-fno-exceptions', '-ffunction-sections', '-fdata-sections', '-Wall', '-Wextra', '-Wimplicit-fallthrough', '-Wcast-qual', '-Wundef', '-Wpointer-arith', '-Werror', '-Wno-error=cpp', '-Wno-error=deprecated-declarations', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-ffile-prefix-map=/pigweed/pigweed/=', '-ffile-prefix-map=../=', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-Wextra-semi', '-fno-rtti', '-Wnon-virtual-dtor', '-std=c++17', '-Wno-register', '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1', '-DPW_STATUS_CFG_CHECK_IF_USED=1', '-I../pw_allocator/public', '-I../pw_assert/public', '-I../pw_assert/print_and_abort_assert_public_overrides', '-I../pw_preprocessor/public', '-I../pw_assert_basic/public_overrides', '-I../pw_assert_basic/public', '-I../pw_span/public', '-I../pw_polyfill/public', '-I../pw_polyfill/standard_library_public', '-I../pw_status/public', '-c', '../pw_allocator/block.cc', '-o', 'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o', '&&', 'touch', 'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o', ], ), ( None, 'arm-none-eabi-g++', [ '-MMD', '-MF', 'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d', '-Wno-psabi', '-mabi=aapcs', '-mthumb', '--sysroot=../environment/cipd/packages/arm', '-specs=nano.specs', '-specs=nosys.specs', '-mcpu=cortex-m4', '-mfloat-abi=hard', '-mfpu=fpv4-sp-d16', '-Og', '-Wshadow', '-Wredundant-decls', '-u_printf_float', '-fdiagnostics-color', '-g', '-fno-common', '-fno-exceptions', '-ffunction-sections', '-fdata-sections', '-Wall', '-Wextra', '-Wimplicit-fallthrough', '-Wcast-qual', '-Wundef', '-Wpointer-arith', '-Werror', '-Wno-error=cpp', '-Wno-error=deprecated-declarations', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-ffile-prefix-map=/pigweed/pigweed/=', '-ffile-prefix-map=../=', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-fno-rtti', '-Wnon-virtual-dtor', '-std=c++17', '-Wno-register', '-DPW_ARMV7M_ENABLE_FPU=1', '-I../pw_allocator/public', '-I../pw_assert/public', '-I../pw_assert/assert_compatibility_public_overrides', '-I../pw_preprocessor/public', '-I../pw_assert_basic/public_overrides', '-I../pw_assert_basic/public', '-I../pw_span/public', '-I../pw_polyfill/public', '-I../pw_polyfill/standard_library_public', '-I../pw_status/public', '-c', '../pw_allocator/block.cc', '-o', 'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o', ], ), ( None, '../environment/cipd/packages/pigweed/bin/isosceles-clang++', [ '-MMD', '-MF', 'isosceles_debug/obj/pw_allocator/block.block.cc.o.d', '-g3', '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk', '-Og', '-Wshadow', '-Wredundant-decls', '-Wthread-safety', '-Wswitch-enum', '-fdiagnostics-color', '-g', '-fno-common', '-fno-exceptions', '-ffunction-sections', '-fdata-sections', '-Wall', '-Wextra', '-Wimplicit-fallthrough', '-Wcast-qual', '-Wundef', '-Wpointer-arith', '-Werror', '-Wno-error=cpp', '-Wno-error=deprecated-declarations', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-ffile-prefix-map=/pigweed/pigweed/=', '-ffile-prefix-map=../=', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-Wextra-semi', '-fno-rtti', '-Wnon-virtual-dtor', '-std=c++17', '-Wno-register', '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1', '-DPW_STATUS_CFG_CHECK_IF_USED=1', '-I../pw_allocator/public', '-I../pw_assert/public', '-I../pw_assert/print_and_abort_assert_public_overrides', '-I../pw_preprocessor/public', '-I../pw_assert_basic/public_overrides', '-I../pw_assert_basic/public', '-I../pw_span/public', '-I../pw_polyfill/public', '-I../pw_polyfill/standard_library_public', '-I../pw_status/public', '-c', '../pw_allocator/block.cc', '-o', 'isosceles_debug/obj/pw_allocator/block.block.cc.o', ], ), ( None, '../environment/cipd/packages/pigweed/bin/clang++', [ '-MMD', '-MF', 'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d', '-g3', '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk', '-Og', '-Wshadow', '-Wredundant-decls', '-Wthread-safety', '-Wswitch-enum', '-fdiagnostics-color', '-g', '-fno-common', '-fno-exceptions', '-ffunction-sections', '-fdata-sections', '-Wall', '-Wextra', '-Wimplicit-fallthrough', '-Wcast-qual', '-Wundef', '-Wpointer-arith', '-Werror', '-Wno-error=cpp', '-Wno-error=deprecated-declarations', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-ffile-prefix-map=/pigweed/pigweed/=', '-ffile-prefix-map=../=', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-Wextra-semi', '-fno-rtti', '-Wnon-virtual-dtor', '-std=c++17', '-Wno-register', '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1', '-DPW_STATUS_CFG_CHECK_IF_USED=1', '-I../pw_allocator/public', '-I../pw_assert/public', '-I../pw_assert/print_and_abort_assert_public_overrides', '-I../pw_preprocessor/public', '-I../pw_assert_basic/public_overrides', '-I../pw_assert_basic/public', '-I../pw_span/public', '-I../pw_polyfill/public', '-I../pw_polyfill/standard_library_public', '-I../pw_status/public', '-c', '../pw_allocator/block.cc', '-o', 'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o', ], ), ( 'ccache', 'arm-none-eabi-g++', [ '-MMD', '-MF', 'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d', '-Wno-psabi', '-mabi=aapcs', '-mthumb', '--sysroot=../environment/cipd/packages/arm', '-specs=nano.specs', '-specs=nosys.specs', '-mcpu=cortex-m4', '-mfloat-abi=hard', '-mfpu=fpv4-sp-d16', '-Og', '-Wshadow', '-Wredundant-decls', '-u_printf_float', '-fdiagnostics-color', '-g', '-fno-common', '-fno-exceptions', '-ffunction-sections', '-fdata-sections', '-Wall', '-Wextra', '-Wimplicit-fallthrough', '-Wcast-qual', '-Wundef', '-Wpointer-arith', '-Werror', '-Wno-error=cpp', '-Wno-error=deprecated-declarations', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-ffile-prefix-map=/pigweed/pigweed/=', '-ffile-prefix-map=../=', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-fno-rtti', '-Wnon-virtual-dtor', '-std=c++17', '-Wno-register', '-DPW_ARMV7M_ENABLE_FPU=1', '-I../pw_allocator/public', '-I../pw_assert/public', '-I../pw_assert/assert_compatibility_public_overrides', '-I../pw_preprocessor/public', '-I../pw_assert_basic/public_overrides', '-I../pw_assert_basic/public', '-I../pw_span/public', '-I../pw_polyfill/public', '-I../pw_polyfill/standard_library_public', '-I../pw_status/public', '-c', '../pw_allocator/block.cc', '-o', 'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o', ], ), ( 'ccache', '../environment/cipd/packages/pigweed/bin/isosceles-clang++', [ '-MMD', '-MF', 'isosceles_debug/obj/pw_allocator/block.block.cc.o.d', '-g3', '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk', '-Og', '-Wshadow', '-Wredundant-decls', '-Wthread-safety', '-Wswitch-enum', '-fdiagnostics-color', '-g', '-fno-common', '-fno-exceptions', '-ffunction-sections', '-fdata-sections', '-Wall', '-Wextra', '-Wimplicit-fallthrough', '-Wcast-qual', '-Wundef', '-Wpointer-arith', '-Werror', '-Wno-error=cpp', '-Wno-error=deprecated-declarations', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-ffile-prefix-map=/pigweed/pigweed/=', '-ffile-prefix-map=../=', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-Wextra-semi', '-fno-rtti', '-Wnon-virtual-dtor', '-std=c++17', '-Wno-register', '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1', '-DPW_STATUS_CFG_CHECK_IF_USED=1', '-I../pw_allocator/public', '-I../pw_assert/public', '-I../pw_assert/print_and_abort_assert_public_overrides', '-I../pw_preprocessor/public', '-I../pw_assert_basic/public_overrides', '-I../pw_assert_basic/public', '-I../pw_span/public', '-I../pw_polyfill/public', '-I../pw_polyfill/standard_library_public', '-I../pw_status/public', '-c', '../pw_allocator/block.cc', '-o', 'isosceles_debug/obj/pw_allocator/block.block.cc.o', ], ), ( 'ccache', '../environment/cipd/packages/pigweed/bin/clang++', [ '-MMD', '-MF', 'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d', '-g3', '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk', '-Og', '-Wshadow', '-Wredundant-decls', '-Wthread-safety', '-Wswitch-enum', '-fdiagnostics-color', '-g', '-fno-common', '-fno-exceptions', '-ffunction-sections', '-fdata-sections', '-Wall', '-Wextra', '-Wimplicit-fallthrough', '-Wcast-qual', '-Wundef', '-Wpointer-arith', '-Werror', '-Wno-error=cpp', '-Wno-error=deprecated-declarations', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-ffile-prefix-map=/pigweed/pigweed/=', '-ffile-prefix-map=../=', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-Wextra-semi', '-fno-rtti', '-Wnon-virtual-dtor', '-std=c++17', '-Wno-register', '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1', '-DPW_STATUS_CFG_CHECK_IF_USED=1', '-I../pw_allocator/public', '-I../pw_assert/public', '-I../pw_assert/print_and_abort_assert_public_overrides', '-I../pw_preprocessor/public', '-I../pw_assert_basic/public_overrides', '-I../pw_assert_basic/public', '-I../pw_span/public', '-I../pw_polyfill/public', '-I../pw_polyfill/standard_library_public', '-I../pw_status/public', '-c', '../pw_allocator/block.cc', '-o', 'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o', ], ), ( 'ccache debug=true max_size=10G', 'arm-none-eabi-g++', [ '-MMD', '-MF', 'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d', '-Wno-psabi', '-mabi=aapcs', '-mthumb', '--sysroot=../environment/cipd/packages/arm', '-specs=nano.specs', '-specs=nosys.specs', '-mcpu=cortex-m4', '-mfloat-abi=hard', '-mfpu=fpv4-sp-d16', '-Og', '-Wshadow', '-Wredundant-decls', '-u_printf_float', '-fdiagnostics-color', '-g', '-fno-common', '-fno-exceptions', '-ffunction-sections', '-fdata-sections', '-Wall', '-Wextra', '-Wimplicit-fallthrough', '-Wcast-qual', '-Wundef', '-Wpointer-arith', '-Werror', '-Wno-error=cpp', '-Wno-error=deprecated-declarations', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-ffile-prefix-map=/pigweed/pigweed/=', '-ffile-prefix-map=../=', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-fno-rtti', '-Wnon-virtual-dtor', '-std=c++17', '-Wno-register', '-DPW_ARMV7M_ENABLE_FPU=1', '-I../pw_allocator/public', '-I../pw_assert/public', '-I../pw_assert/assert_compatibility_public_overrides', '-I../pw_preprocessor/public', '-I../pw_assert_basic/public_overrides', '-I../pw_assert_basic/public', '-I../pw_span/public', '-I../pw_polyfill/public', '-I../pw_polyfill/standard_library_public', '-I../pw_status/public', '-c', '../pw_allocator/block.cc', '-o', 'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o', ], ), ( 'ccache debug=true max_size=10G', '../environment/cipd/packages/pigweed/bin/isosceles-clang++', [ '-MMD', '-MF', 'isosceles_debug/obj/pw_allocator/block.block.cc.o.d', '-g3', '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk', '-Og', '-Wshadow', '-Wredundant-decls', '-Wthread-safety', '-Wswitch-enum', '-fdiagnostics-color', '-g', '-fno-common', '-fno-exceptions', '-ffunction-sections', '-fdata-sections', '-Wall', '-Wextra', '-Wimplicit-fallthrough', '-Wcast-qual', '-Wundef', '-Wpointer-arith', '-Werror', '-Wno-error=cpp', '-Wno-error=deprecated-declarations', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-ffile-prefix-map=/pigweed/pigweed/=', '-ffile-prefix-map=../=', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-Wextra-semi', '-fno-rtti', '-Wnon-virtual-dtor', '-std=c++17', '-Wno-register', '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1', '-DPW_STATUS_CFG_CHECK_IF_USED=1', '-I../pw_allocator/public', '-I../pw_assert/public', '-I../pw_assert/print_and_abort_assert_public_overrides', '-I../pw_preprocessor/public', '-I../pw_assert_basic/public_overrides', '-I../pw_assert_basic/public', '-I../pw_span/public', '-I../pw_polyfill/public', '-I../pw_polyfill/standard_library_public', '-I../pw_status/public', '-c', '../pw_allocator/block.cc', '-o', 'isosceles_debug/obj/pw_allocator/block.block.cc.o', ], ), ( 'ccache debug=true max_size=10G', '../environment/cipd/packages/pigweed/bin/clang++', [ '-MMD', '-MF', 'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d', '-g3', '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk', '-Og', '-Wshadow', '-Wredundant-decls', '-Wthread-safety', '-Wswitch-enum', '-fdiagnostics-color', '-g', '-fno-common', '-fno-exceptions', '-ffunction-sections', '-fdata-sections', '-Wall', '-Wextra', '-Wimplicit-fallthrough', '-Wcast-qual', '-Wundef', '-Wpointer-arith', '-Werror', '-Wno-error=cpp', '-Wno-error=deprecated-declarations', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-ffile-prefix-map=/pigweed/pigweed/=', '-ffile-prefix-map=../=', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-Wextra-semi', '-fno-rtti', '-Wnon-virtual-dtor', '-std=c++17', '-Wno-register', '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1', '-DPW_STATUS_CFG_CHECK_IF_USED=1', '-I../pw_allocator/public', '-I../pw_assert/public', '-I../pw_assert/print_and_abort_assert_public_overrides', '-I../pw_preprocessor/public', '-I../pw_assert_basic/public_overrides', '-I../pw_assert_basic/public', '-I../pw_span/public', '-I../pw_polyfill/public', '-I../pw_polyfill/standard_library_public', '-I../pw_status/public', '-c', '../pw_allocator/block.cc', '-o', 'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o', ], ), ( 'ccache', 'python', [ '../pw_toolchain/py/pw_toolchain/clang_tidy.py', '--source-exclude', "'third_party/.*'", '--source-exclude', "'.*packages/mbedtls.*'", '--source-exclude', "'.*packages/boringssl.*'", '--skip-include-path', "'mbedtls/include'", '--skip-include-path', "'mbedtls'", '--skip-include-path', "'boringssl/src/include'", '--skip-include-path', "'boringssl'", '--skip-include-path', "'pw_tls_client/generate_test_data'", '--source-file', '../pw_allocator/block.cc', '--source-root', "'../'", '--export-fixes', 'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.yaml', '--', '../environment/cipd/packages/pigweed/bin/clang++', 'END_OF_INVOKER', '-MMD', '-MF', 'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.d', '-g3', '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk', '-Og', '-Wshadow', '-Wredundant-decls', '-Wthread-safety', '-Wswitch-enum', '-fdiagnostics-color', '-g', '-fno-common', '-fno-exceptions', '-ffunction-sections', '-fdata-sections', '-Wall', '-Wextra', '-Wimplicit-fallthrough', '-Wcast-qual', '-Wundef', '-Wpointer-arith', '-Werror', '-Wno-error=cpp', '-Wno-error=deprecated-declarations', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-ffile-prefix-map=/pigweed/pigweed/=', '-ffile-prefix-map=../=', '-ffile-prefix-map=/pigweed/pigweed/out=out', '-Wextra-semi', '-fno-rtti', '-Wnon-virtual-dtor', '-std=c++17', '-Wno-register', '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1', '-DPW_STATUS_CFG_CHECK_IF_USED=1', '-I../pw_allocator/public', '-I../pw_assert/public', '-I../pw_assert/print_and_abort_assert_public_overrides', '-I../pw_preprocessor/public', '-I../pw_assert_basic/public_overrides', '-I../pw_assert_basic/public', '-I../pw_span/public', '-I../pw_polyfill/public', '-I../pw_polyfill/standard_library_public', '-I../pw_status/public', '-c', '../pw_allocator/block.cc', '-o', 'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o', '&&', 'touch', 'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o', ], ), ] # pylint: enable=line-too-long for test_case, expected in zip(test_cases, expected_results): self.assertEqual(command_parts(test_case), expected) class TestCppCompilationDatabase(PwIdeTestCase): """Tests CppCompilationDatabase""" def setUp(self): self.root_dir = Path('/pigweed/pigweed/out') self.fixture: list[CppCompileCommandDict] = [ { # pylint: disable=line-too-long 'command': 'arm-none-eabi-g++ -MMD -MF stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_ARMV7M_ENABLE_FPU=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o', # pylint: enable=line-too-long 'directory': '/pigweed/pigweed/out', 'file': '../pw_allocator/block.cc', }, { # pylint: disable=line-too-long 'command': '../environment/cipd/packages/pigweed/bin/clang++ -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o', # pylint: enable=line-too-long 'directory': '/pigweed/pigweed/out', 'file': '../pw_allocator/block.cc', }, ] self.expected: list[CppCompileCommandDict] = [ { **self.fixture[0], # pylint: disable=line-too-long 'output': 'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o', # pylint: enable=line-too-long }, { **self.fixture[1], # pylint: disable=line-too-long 'output': 'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o', # pylint: enable=line-too-long }, ] self.fixture_merge_1 = [ { # pylint: disable=line-too-long 'command': 'g++ -MMD -MF pw_strict_host_gcc_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_SPAN_ENABLE_ASSERTS=true -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_gcc_debug/obj/pw_allocator/block.block.cc.o', 'directory': '/pigweed/pigweed/out', 'file': '../pw_allocator/block.cc', 'output': 'pw_strict_host_gcc_debug/obj/pw_allocator/block.block.cc.o', # pylint: enable=line-too-long }, { # pylint: disable=line-too-long 'command': 'g++ -MMD -MF pw_strict_host_gcc_debug/obj/pw_allocator/freelist.freelist.cc.o.d -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=//pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_SPAN_ENABLE_ASSERTS=true -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_containers/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_span/public -I../pw_status/public -c ../pw_allocator/freelist.cc -o pw_strict_host_gcc_debug/obj/pw_allocator/freelist.freelist.cc.o', 'directory': '/pigweed/pigweed/out', 'file': '../pw_allocator/freelist.cc', 'output': 'pw_strict_host_gcc_debug/obj/pw_allocator/freelist.freelist.cc.o', # pylint: enable=line-too-long }, ] self.fixture_merge_2 = [ { # pylint: disable=line-too-long 'command': 'g++ -MMD -MF pw_strict_host_gcc_debug/obj/pw_base64/pw_base64.base64.cc.o.d -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_SPAN_ENABLE_ASSERTS=true -I../pw_base64/public -I../pw_string/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_span/public -c ../pw_base64/base64.cc -o pw_strict_host_gcc_debug/obj/pw_base64/pw_base64.base64.cc.o', 'directory': '/pigweed/pigweed/out', 'file': '../pw_base64/base64.cc', 'output': 'pw_strict_host_gcc_debug/obj/pw_base64/pw_base64.base64.cc.o', # pylint: enable=line-too-long }, { # pylint: disable=line-too-long 'command': 'g++ -MMD -MF pw_strict_host_gcc_debug/obj/pw_checksum/pw_checksum.crc32.cc.o.d -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_SPAN_ENABLE_ASSERTS=true -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_checksum/public -I../pw_bytes/public -I../pw_containers/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_preprocessor/public -I../pw_span/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_status/public -c ../pw_checksum/crc32.cc -o pw_strict_host_gcc_debug/obj/pw_checksum/pw_checksum.crc32.cc.o', 'directory': 'pigweed/pigweed/out', 'file': '../pw_checksum/crc32.cc', 'output': 'pw_strict_host_gcc_debug/obj/pw_checksum/pw_checksum.crc32.cc.o', # pylint: enable=line-too-long }, ] return super().setUp() def test_merge(self): compdb1 = CppCompilationDatabase.load( self.fixture_merge_1, self.root_dir ) compdb2 = CppCompilationDatabase.load( self.fixture_merge_2, self.root_dir ) compdb1.merge(compdb2) result = [compile_command.as_dict() for compile_command in compdb1] expected = [*self.fixture_merge_1, *self.fixture_merge_2] self.assertCountEqual(result, expected) def test_merge_no_dupes(self): compdb1 = CppCompilationDatabase.load( self.fixture_merge_1, self.root_dir ) fixture_combo = [*self.fixture_merge_1, *self.fixture_merge_2] compdb2 = CppCompilationDatabase.load(fixture_combo, self.root_dir) compdb1.merge(compdb2) result = [compile_command.as_dict() for compile_command in compdb1] expected = [*self.fixture_merge_1, *self.fixture_merge_2] self.assertCountEqual(result, expected) def test_load_from_dicts(self): compdb = CppCompilationDatabase.load(self.fixture, self.root_dir) self.assertCountEqual(compdb.as_dicts(), self.expected) def test_load_from_json(self): compdb = CppCompilationDatabase.load( json.dumps(self.fixture), self.root_dir ) self.assertCountEqual(compdb.as_dicts(), self.expected) def test_load_from_path(self): with self.make_temp_file( COMPDB_FILE_NAME, json.dumps(self.fixture), ) as (_, file_path): path = file_path compdb = CppCompilationDatabase.load(path, self.root_dir) self.assertCountEqual(compdb.as_dicts(), self.expected) def test_load_from_file_handle(self): with self.make_temp_file( COMPDB_FILE_NAME, json.dumps(self.fixture), ) as (file, _): compdb = CppCompilationDatabase.load(file, self.root_dir) self.assertCountEqual(compdb.as_dicts(), self.expected) def test_process(self): """Test processing against a typical sample of raw output from GN.""" targets = [ 'pw_strict_host_clang_debug', 'stm32f429i_disc1_debug', 'isosceles_debug', ] settings = self.make_ide_settings(targets_include=targets) # pylint: disable=line-too-long raw_db: list[CppCompileCommandDict] = [ { 'command': 'arm-none-eabi-g++ -MMD -MF stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_ARMV7M_ENABLE_FPU=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o', 'directory': str(self.root_dir), 'file': '../pw_allocator/block.cc', }, { 'command': '../environment/cipd/packages/pigweed/bin/isosceles-clang++ -MMD -MF isosceles_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o isosceles_debug/obj/pw_allocator/block.block.cc.o', 'directory': str(self.root_dir), 'file': '../pw_allocator/block.cc', }, { 'command': 'ccache ../environment/cipd/packages/pigweed/bin/clang++ -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o', 'directory': str(self.root_dir), 'file': '../pw_allocator/block.cc', }, { 'command': "python ../pw_toolchain/py/pw_toolchain/clang_tidy.py --source-exclude 'third_party/.*' --source-exclude '.*packages/mbedtls.*' --source-exclude '.*packages/boringssl.*' --skip-include-path 'mbedtls/include' --skip-include-path 'mbedtls' --skip-include-path 'boringssl/src/include' --skip-include-path 'boringssl' --skip-include-path 'pw_tls_client/generate_test_data' --source-file ../pw_allocator/block.cc --source-root '../' --export-fixes pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.yaml -- ../environment/cipd/packages/pigweed/bin/clang++ END_OF_INVOKER -MMD -MF pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o && touch pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o", 'directory': str(self.root_dir), 'file': '../pw_allocator/block.cc', }, ] expected_compdbs = { 'isosceles_debug': [ { 'command': # Ensures path format matches OS (e.g. Windows) f'{Path("../environment/cipd/packages/pigweed/bin/isosceles-clang++")} -MMD -MF isosceles_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o isosceles_debug/obj/pw_allocator/block.block.cc.o', 'directory': str(self.root_dir), 'file': '../pw_allocator/block.cc', 'output': 'isosceles_debug/obj/pw_allocator/block.block.cc.o', }, ], 'pw_strict_host_clang_debug': [ { 'command': # Ensures path format matches OS (e.g. Windows) f'ccache {Path("../environment/cipd/packages/pigweed/bin/clang++")} -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o', 'directory': str(self.root_dir), 'file': '../pw_allocator/block.cc', 'output': 'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o', }, ], 'stm32f429i_disc1_debug': [ { 'command': # Ensures this test avoids the unpathed compiler search f'{self.temp_dir_path / "arm-none-eabi-g++"} -MMD -MF stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_ARMV7M_ENABLE_FPU=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o', 'directory': str(self.root_dir), 'file': '../pw_allocator/block.cc', 'output': 'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o', }, ], } # pylint: enable=line-too-long compdbs = CppCompilationDatabase.load( raw_db, root_dir=self.root_dir ).process(settings, default_path=self.temp_dir_path) compdbs_as_dicts = { target: compdb.as_dicts() for target, compdb in compdbs.items() } self.assertCountEqual( list(compdbs_as_dicts.keys()), list(expected_compdbs.keys()) ) self.assertDictEqual(compdbs_as_dicts, expected_compdbs) class TestCppCompilationDatabasesMap(PwIdeTestCase): """Tests CppCompilationDatabasesMap""" def setUp(self): # pylint: disable=line-too-long self.fixture_1 = lambda target: [ CppCompileCommand( **{ 'command': f'g++ -MMD -MF {target}/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_SPAN_ENABLE_ASSERTS=true -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_gcc_debug/obj/pw_allocator/block.block.cc.o', 'directory': '/pigweed/pigweed/out', 'file': '../pw_allocator/block.cc', } ), CppCompileCommand( **{ 'command': f'g++ -MMD -MF {target}/obj/pw_allocator/freelist.freelist.cc.o.d -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=//pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_SPAN_ENABLE_ASSERTS=true -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_containers/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_span/public -I../pw_status/public -c ../pw_allocator/freelist.cc -o pw_strict_host_gcc_debug/obj/pw_allocator/freelist.freelist.cc.o', 'directory': '/pigweed/pigweed/out', 'file': '../pw_allocator/freelist.cc', } ), ] self.fixture_2 = lambda target: [ CppCompileCommand( **{ 'command': f'g++ -MMD -MF {target}/obj/pw_base64/pw_base64.base64.cc.o.d -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_SPAN_ENABLE_ASSERTS=true -I../pw_base64/public -I../pw_string/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_span/public -c ../pw_base64/base64.cc -o pw_strict_host_gcc_debug/obj/pw_base64/pw_base64.base64.cc.o', 'directory': '/pigweed/pigweed/out', 'file': '../pw_base64/base64.cc', } ), CppCompileCommand( **{ 'command': f'g++ -MMD -MF {target}/obj/pw_checksum/pw_checksum.crc32.cc.o.d -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_SPAN_ENABLE_ASSERTS=true -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_checksum/public -I../pw_bytes/public -I../pw_containers/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_preprocessor/public -I../pw_span/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_status/public -c ../pw_checksum/crc32.cc -o pw_strict_host_gcc_debug/obj/pw_checksum/pw_checksum.crc32.cc.o', 'directory': 'pigweed/pigweed/out', 'file': '../pw_checksum/crc32.cc', } ), ] # pylint: enable=line-too-long super().setUp() def test_merge_0_db_set(self): with self.assertRaises(ValueError): CppCompilationDatabasesMap.merge() def test_merge_1_db_set(self): settings = self.make_ide_settings() target = 'test_target' db_set = CppCompilationDatabasesMap(settings) db_set[target] = self.fixture_1(target) result = CppCompilationDatabasesMap.merge(db_set) self.assertCountEqual(result._dbs, db_set._dbs) def test_merge_2_db_sets_different_targets(self): settings = self.make_ide_settings() target1 = 'test_target_1' target2 = 'test_target_2' db_set1 = CppCompilationDatabasesMap(settings) db_set1[target1] = self.fixture_1(target1) db_set2 = CppCompilationDatabasesMap(settings) db_set2[target2] = self.fixture_2(target2) result = CppCompilationDatabasesMap.merge(db_set1, db_set2) self.assertEqual(len(result), 2) self.assertCountEqual(result._dbs, {**db_set1._dbs, **db_set2._dbs}) def test_merge_2_db_sets_duplicated_targets(self): settings = self.make_ide_settings() target1 = 'test_target_1' target2 = 'test_target_2' db_set1 = CppCompilationDatabasesMap(settings) db_set1[target1] = self.fixture_1(target1) db_set2 = CppCompilationDatabasesMap(settings) db_set2[target2] = self.fixture_2(target2) db_set_combo = CppCompilationDatabasesMap.merge(db_set1, db_set2) result = CppCompilationDatabasesMap.merge(db_set1, db_set_combo) self.assertEqual(len(result), 2) self.assertCountEqual(result._dbs, {**db_set1._dbs, **db_set2._dbs}) def test_cascade_disabled(self): settings = self.make_ide_settings( cascade_targets=False, targets_include=['test_target_1', 'test_target_2'], ) target1 = 'test_target_1' target2 = 'test_target_2' db_set = CppCompilationDatabasesMap(settings) db_set[target1] = self.fixture_1(target1) db_set[target2] = self.fixture_2(target2) result = db_set._compdb_to_write(target1) self.assertCountEqual(result._db, [*db_set[target1]]) def test_cascade_enabled(self): settings = self.make_ide_settings( cascade_targets=True, targets_include=['test_target_1', 'test_target_2'], ) target1 = 'test_target_1' target2 = 'test_target_2' db_set = CppCompilationDatabasesMap(settings) db_set[target1] = self.fixture_1(target1) db_set[target2] = self.fixture_2(target2) result = db_set._compdb_to_write(target1) self.assertCountEqual(result._db, [*db_set[target1], *db_set[target2]]) class TestCppIdeFeaturesState(PwIdeTestCase): """Test CppIdeFeaturesState""" def test_targets_all(self): all_targets = { "a": CppIdeFeaturesTarget("a", Path("/dev/null"), 1), "b": CppIdeFeaturesTarget("b", Path("/dev/null"), 1), "c": CppIdeFeaturesTarget("c", Path("/dev/null"), 1), } settings = self.make_ide_settings() state = CppIdeFeaturesState(settings) state.targets = all_targets self.assertListEqual(list(state.targets.keys()), ["a", "b", "c"]) def test_targets_exclude(self): all_targets = { "a": CppIdeFeaturesTarget("a", Path("/dev/null"), 1), "b": CppIdeFeaturesTarget("b", Path("/dev/null"), 1), "c": CppIdeFeaturesTarget("c", Path("/dev/null"), 1), } settings = self.make_ide_settings(targets_exclude=["a"]) state = CppIdeFeaturesState(settings) state.targets = all_targets self.assertListEqual(list(state.targets.keys()), ["b", "c"]) def test_targets_include(self): all_targets = { "a": CppIdeFeaturesTarget("a", Path("/dev/null"), 1), "b": CppIdeFeaturesTarget("b", Path("/dev/null"), 1), "c": CppIdeFeaturesTarget("c", Path("/dev/null"), 1), } settings = self.make_ide_settings(targets_include=["a"]) state = CppIdeFeaturesState(settings) state.targets = all_targets self.assertListEqual(list(state.targets.keys()), ["a"]) if __name__ == '__main__': unittest.main()