diff --git a/legacy/builder/phases/linker.go b/legacy/builder/phases/linker.go index 9c8fc15d98f..f42f431bfe9 100644 --- a/legacy/builder/phases/linker.go +++ b/legacy/builder/phases/linker.go @@ -78,6 +78,10 @@ func link(ctx *types.Context, objectFiles paths.PathList, coreDotARelPath *paths properties := buildProperties.Clone() archives := paths.NewPathList() for _, object := range objectFiles { + if object.HasSuffix(".a") { + archives.Add(object) + continue + } archive := object.Parent().Join("objs.a") if !archives.Contains(archive) { archives.Add(archive) diff --git a/test/test_compile.py b/test/test_compile.py index 0da154ca267..6d81615854e 100644 --- a/test/test_compile.py +++ b/test/test_compile.py @@ -594,3 +594,25 @@ def test_compile_with_custom_libraries(run_command, copy_sketch): # This compile command has been taken from this issue: # https://github.com/arduino/arduino-cli/issues/973 assert run_command(f"compile --libraries {first_lib},{second_lib} -b {fqbn} {sketch_path}") + + +def test_compile_with_archives_and_long_paths(run_command): + # Creates config with additional URL to install necessary core + url = "http://arduino.esp8266.com/stable/package_esp8266com_index.json" + assert run_command(f"config init --dest-dir . --additional-urls {url}") + + # Init the environment explicitly + assert run_command("update") + + # Install core to compile + assert run_command("core install esp8266:esp8266") + + # Install test library + assert run_command("lib install ArduinoIoTCloud") + + result = run_command("lib examples ArduinoIoTCloud --format json") + assert result.ok + lib_output = json.loads(result.stdout) + sketch_path = Path(lib_output[0]["library"]["install_dir"], "examples", "ArduinoIoTCloud-Advanced") + + assert run_command(f"compile -b esp8266:esp8266:huzzah {sketch_path}")