Skip to content

Commit

Permalink
Skip empty folders when precompiled library is used (#1134)
Browse files Browse the repository at this point in the history
* Precompiled libraries: only select a folder if it contains files

* Restore precompiled tests

* slightly refactored directoryContainsFile function

* [skip changelog] Fix compile tests

* [skip changelog] Fix compile test

Co-authored-by: Cristian Maglie <c.maglie@arduino.cc>
Co-authored-by: Silvano Cerza <silvanocerza@gmail.com>
  • Loading branch information
3 people committed Jan 18, 2021
1 parent 7269102 commit c6be6fa
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 52 deletions.
12 changes: 10 additions & 2 deletions legacy/builder/phases/libraries_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -86,15 +94,15 @@ 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
}
logger.Fprintln(os.Stdout, constants.LOG_LEVEL_INFO, "Precompiled library in \"{0}\" not found", fullPrecompDir)
}

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
}
Expand Down
74 changes: 24 additions & 50 deletions test/test_compile.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down

0 comments on commit c6be6fa

Please sign in to comment.