From 452d57aa7aa1bd4dee015f245a0e681aaaf600d5 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Wed, 22 Jun 2016 23:03:04 -0500 Subject: [PATCH] Things I do to get Intel Arduino Working. Use versions in platform installs just like tools. Make sure those version numbers don't have +'s in them since it screws up Freemarker. Add cheat in so that the Intel toolchains extract properly. Change-Id: I7f4e6a92844461b6cbfe21436151d876558a4d2a --- .../arduino/core/tests/FullIntegration.java | 22 +++------- .../core/internal/board/ArduinoManager.java | 11 ++++- .../core/internal/board/ArduinoPackage.java | 40 +++++-------------- .../core/internal/board/ArduinoPlatform.java | 7 ++-- .../core/internal/board/ArduinoTool.java | 23 +---------- .../core/internal/board/ToolDependency.java | 6 +-- .../build/ArduinoBuildConfiguration.java | 2 +- 7 files changed, 35 insertions(+), 76 deletions(-) diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/FullIntegration.java b/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/FullIntegration.java index 9e963be93a6..3cff8906361 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/FullIntegration.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/FullIntegration.java @@ -63,11 +63,13 @@ public class FullIntegration { private ArduinoBoard board; private static void setPreferences() throws Exception { - URL[] urls = new URL[] { new URL("http://downloads.arduino.cc/packages/package_index.json"), + URL[] urls = new URL[] { + new URL("http://downloads.arduino.cc/packages/package_index.json"), new URL("https://adafruit.github.io/arduino-board-index/package_adafruit_index.json"), new URL("http://arduino.esp8266.com/stable/package_esp8266com_index.json"), - new URL("http://drazzy.com/package_drazzy.com_index.json") }; - // new URL("https://github.com/chipKIT32/chipKIT-core/raw/master/package_chipkit_index.json") + new URL("http://drazzy.com/package_drazzy.com_index.json"), + //new URL("https://github.com/chipKIT32/chipKIT-core/raw/master/package_chipkit_index.json"), + }; ArduinoPreferences.setBoardUrlList(urls); Path workspace = Paths.get(ResourcesPlugin.getWorkspace().getRoot().getLocationURI()); @@ -84,20 +86,6 @@ public class FullIntegration { // What is Microsoft doing? skipBuild.add(arduinoManager.getBoard("Microsoft", "win10", "w10iotcore")); - - if (Platform.getOS().equals(Platform.OS_WIN32)) { - // tool chain incorrect? - skipBuild.add(arduinoManager.getBoard("Intel", "i586", "izmir_fd")); - skipBuild.add(arduinoManager.getBoard("Intel", "i586", "izmir_fg")); - skipBuild.add(arduinoManager.getBoard("Intel", "i686", "izmir_ec")); - } - - if (Platform.getOS().equals(Platform.OS_LINUX)) { - // i586/pokysdk missing - skipBuild.add(arduinoManager.getBoard("Intel", "i586", "izmir_fd")); - skipBuild.add(arduinoManager.getBoard("Intel", "i586", "izmir_fg")); - skipBuild.add(arduinoManager.getBoard("Intel", "i686", "izmir_ec")); - } } private static void setupSkipUpload() throws Exception { diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoManager.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoManager.java index d894855033b..536c244efae 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoManager.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoManager.java @@ -577,7 +577,16 @@ public class ArduinoManager { } // Strip the first directory of the path - Path entryPath = installPath.resolve(path.subpath(1, path.getNameCount())); + Path entryPath; + switch (path.getName(0).toString()) { + case "i586": + case "i686": + // Cheat for Intel + entryPath = installPath.resolve(path); + break; + default: + entryPath = installPath.resolve(path.subpath(1, path.getNameCount())); + } Files.createDirectories(entryPath.getParent()); diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java index b06fe7d7968..5e0f865e25c 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java @@ -7,20 +7,15 @@ *******************************************************************************/ package org.eclipse.cdt.arduino.core.internal.board; -import java.io.FileReader; -import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.eclipse.cdt.arduino.core.internal.Activator; import org.eclipse.cdt.arduino.core.internal.ArduinoPreferences; -import org.eclipse.cdt.arduino.core.internal.LinkedProperties; import org.eclipse.core.runtime.CoreException; public class ArduinoPackage { @@ -89,32 +84,19 @@ public class ArduinoPackage { if (installedPlatforms == null) { installedPlatforms = new HashMap<>(); - if (Files.isDirectory(getInstallPath())) { - Path platformTxt = Paths.get("platform.txt"); //$NON-NLS-1$ - try { - Path hardware = getInstallPath().resolve("hardware"); //$NON-NLS-1$ - if (Files.exists(hardware)) { - Files.find(hardware, 2, // $NON-NLS-1$ - (path, attrs) -> path.getFileName().equals(platformTxt)).forEach(path -> { - try (FileReader reader = new FileReader(path.toFile())) { - LinkedProperties platformProperties = new LinkedProperties(); - platformProperties.load(reader); - String arch = path.getName(path.getNameCount() - 2).toString(); - String version = platformProperties.getProperty("version"); //$NON-NLS-1$ + Path hardware = getInstallPath().resolve("hardware"); //$NON-NLS-1$ + if (Files.isDirectory(hardware)) { + for (ArduinoPlatform platform : platforms) { + String arch = platform.getArchitecture(); + String version = platform.getVersion(); - ArduinoPlatform platform = getPlatform(arch, version); - if (platform != null) { - platform.setPlatformProperties(platformProperties); - installedPlatforms.put(arch, platform); - } // TODO manually add it if was removed - // from index - } catch (IOException e) { - throw new RuntimeException(e); - } - }); + Path platPath = hardware.resolve(arch).resolve(version); + if (Files.exists(platPath)) { + ArduinoPlatform current = installedPlatforms.get(arch); + if (current == null || ArduinoManager.compareVersions(version, current.getVersion()) > 0) { + installedPlatforms.put(arch, platform); + } } - } catch (IOException e) { - throw Activator.coreException(e); } } } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPlatform.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPlatform.java index 0bf01f5d595..8a71a479295 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPlatform.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPlatform.java @@ -24,7 +24,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Properties; import org.eclipse.cdt.arduino.core.internal.Activator; import org.eclipse.cdt.arduino.core.internal.ArduinoPreferences; @@ -83,7 +82,7 @@ public class ArduinoPlatform { } public String getVersion() { - return version; + return version.replace('+', '_'); } public String getCategory() { @@ -219,7 +218,7 @@ public class ArduinoPlatform { } else { // TODO for now, grab the one from the arduino package ArduinoManager manager = Activator.getService(ArduinoManager.class); - ArduinoPackage arduinoPkg = manager.getPackage("arduino"); + ArduinoPackage arduinoPkg = manager.getPackage("arduino"); //$NON-NLS-1$ if (arduinoPkg != null) { ArduinoPlatform arduinoPlat = arduinoPkg.getInstalledPlatform(getArchitecture()); if (arduinoPlat != null) { @@ -232,7 +231,7 @@ public class ArduinoPlatform { } public Path getInstallPath() { - return getPackage().getInstallPath().resolve("hardware").resolve(architecture); //$NON-NLS-1$ + return getPackage().getInstallPath().resolve("hardware").resolve(getArchitecture()).resolve(getVersion()); //$NON-NLS-1$ } private void initLibraries() throws CoreException { diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoTool.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoTool.java index 2561cbcc2bd..8329942d1cd 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoTool.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoTool.java @@ -38,7 +38,7 @@ public class ArduinoTool { } public String getVersion() { - return version; + return version.replace('+', '_'); } public List getSystems() { @@ -53,26 +53,7 @@ public class ArduinoTool { } public Path getInstallPath() { - // TODO remove migration in Neon - Path oldPath = ArduinoPreferences.getArduinoHome().resolve("tools").resolve(pkg.getName()).resolve(name) //$NON-NLS-1$ - .resolve(version); - Path newPath = getPackage().getInstallPath().resolve("tools").resolve(name).resolve(version); //$NON-NLS-1$ - if (Files.exists(oldPath)) { - try { - Files.createDirectories(newPath.getParent()); - Files.move(oldPath, newPath); - for (Path parent = oldPath.getParent(); parent != null; parent = parent.getParent()) { - if (Files.newDirectoryStream(parent).iterator().hasNext()) { - break; - } else { - Files.delete(parent); - } - } - } catch (IOException e) { - Activator.log(e); - } - } - return newPath; + return getPackage().getInstallPath().resolve("tools").resolve(getName()).resolve(getVersion()); //$NON-NLS-1$ } public boolean isInstalled() { diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ToolDependency.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ToolDependency.java index ac9f5c0dff0..8659ba5310d 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ToolDependency.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ToolDependency.java @@ -28,18 +28,18 @@ public class ToolDependency { } public String getVersion() { - return version; + return version.replace('+', '_'); } public ArduinoTool getTool() throws CoreException { - return Activator.getService(ArduinoManager.class).getTool(packager, name, version); + return Activator.getService(ArduinoManager.class).getTool(getPackager(), getName(), getVersion()); } public void install(IProgressMonitor monitor) throws CoreException { ArduinoTool tool = getTool(); if (tool == null) { throw new CoreException(new Status(IStatus.ERROR, Activator.getId(), - String.format("Tool not found %s %s", name, version))); + String.format("Tool not found %s %s", getName(), getVersion()))); } getTool().install(monitor); } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfiguration.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfiguration.java index 0afd951ef54..0668aab4c99 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfiguration.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfiguration.java @@ -381,7 +381,7 @@ public class ArduinoBuildConfiguration extends CBuildConfiguration implements Te getSources(variantSources, variantPath, true); } buildModel.put("platform_variant_srcs", variantSources); //$NON-NLS-1$ - + properties.put("object_file", "$@"); //$NON-NLS-1$ //$NON-NLS-2$ properties.put("source_file", "$<"); //$NON-NLS-1$ //$NON-NLS-2$ properties.put("archive_file", "core.a"); //$NON-NLS-1$ //$NON-NLS-2$