diff --git a/legacy/builder/phases/libraries_builder.go b/legacy/builder/phases/libraries_builder.go index 398cc9b3e79..ba8529d865e 100644 --- a/legacy/builder/phases/libraries_builder.go +++ b/legacy/builder/phases/libraries_builder.go @@ -53,6 +53,14 @@ func (s *LibrariesBuilder) Run(ctx *types.Context) error { return nil } +func directoryContainsFile(folder *paths.Path) bool { + if files, err := folder.ReadDir(); err == nil { + files.FilterOutDirs() + return len(files) > 0 + } + return false +} + func findExpectedPrecompiledLibFolder(ctx *types.Context, library *libraries.Library) *paths.Path { mcu := ctx.BuildProperties.Get(constants.BUILD_PROPERTIES_BUILD_MCU) // Add fpu specifications if they exist @@ -86,7 +94,7 @@ func findExpectedPrecompiledLibFolder(ctx *types.Context, library *libraries.Lib if len(fpuSpecs) > 0 { fpuSpecs = strings.TrimRight(fpuSpecs, "-") fullPrecompDir := library.SourceDir.Join(mcu).Join(fpuSpecs) - if fullPrecompDir.Exist() { + if fullPrecompDir.Exist() && directoryContainsFile(fullPrecompDir) { logger.Fprintln(os.Stdout, constants.LOG_LEVEL_INFO, "Using precompiled library in {0}", fullPrecompDir) return fullPrecompDir } @@ -94,7 +102,7 @@ func findExpectedPrecompiledLibFolder(ctx *types.Context, library *libraries.Lib } precompDir := library.SourceDir.Join(mcu) - if precompDir.Exist() { + if precompDir.Exist() && directoryContainsFile(precompDir) { logger.Fprintln(os.Stdout, constants.LOG_LEVEL_INFO, "Using precompiled library in {0}", precompDir) return precompDir } diff --git a/test/test_compile.py b/test/test_compile.py index 0da154ca267..c63556d33aa 100644 --- a/test/test_compile.py +++ b/test/test_compile.py @@ -181,65 +181,39 @@ def test_compile_blacklisted_sketchname(run_command, data_dir): assert result.ok -@pytest.mark.skip() def test_compile_without_precompiled_libraries(run_command, data_dir): # Init the environment explicitly url = "https://adafruit.github.io/arduino-board-index/package_adafruit_index.json" - result = run_command("core update-index --additional-urls={}".format(url)) - assert result.ok - # arduino:mbed 1.1.5 is incompatible with the Arduino_TensorFlowLite library - # see: https://github.com/arduino/ArduinoCore-nRF528x-mbedos/issues/93 - result = run_command("core install arduino:mbed@1.1.4 --additional-urls={}".format(url)) - assert result.ok - result = run_command("core install arduino:samd@1.8.7 --additional-urls={}".format(url)) - assert result.ok - result = run_command("core install adafruit:samd@1.6.0 --additional-urls={}".format(url)) - assert result.ok + assert run_command(f"core update-index --additional-urls={url}") + assert run_command(f"core install arduino:mbed@1.3.1 --additional-urls={url}") - # Install pre-release version of Arduino_TensorFlowLite (will be officially released - # via lib manager after https://github.com/arduino/arduino-builder/issues/353 is in) - import zipfile + # Precompiled version of Arduino_TensorflowLite + assert run_command("lib install Arduino_LSM9DS1") + assert run_command("lib install Arduino_TensorflowLite@2.1.1-ALPHA-precompiled") - with zipfile.ZipFile("test/testdata/Arduino_TensorFlowLite.zip", "r") as zip_ref: - zip_ref.extractall("{}/libraries/".format(data_dir)) - result = run_command("lib install Arduino_LSM9DS1@1.1.0") - assert result.ok - result = run_command( - "compile -b arduino:mbed:nano33ble {}/libraries/Arduino_TensorFlowLite/examples/magic_wand/".format(data_dir) - ) - assert result.ok - result = run_command( - "compile -b adafruit:samd:adafruit_feather_m4 {}/libraries/Arduino_TensorFlowLite/examples/magic_wand/".format( - data_dir - ) - ) - assert result.ok + sketch_path = Path(data_dir, "libraries", "Arduino_TensorFlowLite", "examples", "hello_world") + assert run_command(f"compile -b arduino:mbed:nano33ble {sketch_path}") + + assert run_command(f"core install arduino:samd@1.8.7 --additional-urls={url}") + assert run_command(f"core install adafruit:samd@1.6.4 --additional-urls={url}") + # should work on adafruit too after https://github.com/arduino/arduino-cli/pull/1134 + assert run_command(f"compile -b adafruit:samd:adafruit_feather_m4 {sketch_path}") # Non-precompiled version of Arduino_TensorflowLite - result = run_command("lib install Arduino_TensorflowLite@1.15.0-ALPHA") - assert result.ok - result = run_command( - "compile -b arduino:mbed:nano33ble {}/libraries/Arduino_TensorFlowLite/examples/magic_wand/".format(data_dir) - ) - assert result.ok - result = run_command( - "compile -b adafruit:samd:adafruit_feather_m4 {}/libraries/Arduino_TensorFlowLite/examples/magic_wand/".format( - data_dir - ) - ) - assert result.ok + assert run_command("lib install Arduino_TensorflowLite@2.1.0-ALPHA") + assert run_command(f"compile -b arduino:mbed:nano33ble {sketch_path}") + assert run_command(f"compile -b adafruit:samd:adafruit_feather_m4 {sketch_path}") # Bosch sensor library - result = run_command('lib install "BSEC Software Library@1.5.1474"') - assert result.ok - result = run_command( - "compile -b arduino:samd:mkr1000 {}/libraries/BSEC_Software_Library/examples/basic/".format(data_dir) - ) - assert result.ok - result = run_command( - "compile -b arduino:mbed:nano33ble {}/libraries/BSEC_Software_Library/examples/basic/".format(data_dir) - ) - assert result.ok + assert run_command('lib install "BSEC Software Library@1.5.1474"') + sketch_path = Path(data_dir, "libraries", "BSEC_Software_Library", "examples", "basic") + assert run_command(f"compile -b arduino:samd:mkr1000 {sketch_path}") + assert run_command(f"compile -b arduino:mbed:nano33ble {sketch_path}") + + # USBBlaster library + assert run_command('lib install "USBBlaster@1.0.0"') + sketch_path = Path(data_dir, "libraries", "USBBlaster", "examples", "USB_Blaster") + assert run_command(f"compile -b arduino:samd:mkrvidor4000 {sketch_path}") def test_compile_with_build_properties_flag(run_command, data_dir, copy_sketch):