From 1cd989213d7a4fc368251a36163806323aad1c78 Mon Sep 17 00:00:00 2001
From: Robert Wessels <robertinant@yahoo.com>
Date: Tue, 23 Feb 2016 11:00:04 -0800
Subject: [PATCH 1/2] Add build.project_path to global properties

This patch adds the build.project_path to the global properties.
---
 src/arduino.cc/builder/constants/constants.go    | 1 +
 src/arduino.cc/builder/setup_build_properties.go | 1 +
 2 files changed, 2 insertions(+)

diff --git a/src/arduino.cc/builder/constants/constants.go b/src/arduino.cc/builder/constants/constants.go
index deb57fcf..db5cc557 100644
--- a/src/arduino.cc/builder/constants/constants.go
+++ b/src/arduino.cc/builder/constants/constants.go
@@ -44,6 +44,7 @@ const BUILD_PROPERTIES_BUILD_CORE_PATH = "build.core.path"
 const BUILD_PROPERTIES_BUILD_MCU = "build.mcu"
 const BUILD_PROPERTIES_BUILD_PATH = "build.path"
 const BUILD_PROPERTIES_BUILD_PROJECT_NAME = "build.project_name"
+const BUILD_PROPERTIES_BUILD_PROJECT_PATH = "build.project_path"
 const BUILD_PROPERTIES_BUILD_SYSTEM_PATH = "build.system.path"
 const BUILD_PROPERTIES_BUILD_VARIANT = "build.variant"
 const BUILD_PROPERTIES_BUILD_VARIANT_PATH = "build.variant.path"
diff --git a/src/arduino.cc/builder/setup_build_properties.go b/src/arduino.cc/builder/setup_build_properties.go
index 7e9332f7..553bbcb4 100644
--- a/src/arduino.cc/builder/setup_build_properties.go
+++ b/src/arduino.cc/builder/setup_build_properties.go
@@ -59,6 +59,7 @@ func (s *SetupBuildProperties) Run(context map[string]interface{}) error {
 	}
 	if utils.MapHas(context, constants.CTX_SKETCH) {
 		buildProperties[constants.BUILD_PROPERTIES_BUILD_PROJECT_NAME] = filepath.Base(context[constants.CTX_SKETCH].(*types.Sketch).MainFile.Name)
+		buildProperties[constants.BUILD_PROPERTIES_BUILD_PROJECT_PATH] = filepath.Dir(context[constants.CTX_SKETCH].(*types.Sketch).MainFile.Name)
 	}
 	buildProperties[constants.BUILD_PROPERTIES_BUILD_ARCH] = strings.ToUpper(targetPlatform.PlatformId)
 

From 95ebd3c15ac0924693f8739a92ccb946b5978fbe Mon Sep 17 00:00:00 2001
From: Robert Wessels <robertinant@yahoo.com>
Date: Mon, 17 Jul 2017 14:37:48 -0700
Subject: [PATCH 2/2] Crash work-around for EMT targets

---
 src/arduino.cc/builder/container_find_includes.go | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/arduino.cc/builder/container_find_includes.go b/src/arduino.cc/builder/container_find_includes.go
index cc14a4f2..514bebb8 100644
--- a/src/arduino.cc/builder/container_find_includes.go
+++ b/src/arduino.cc/builder/container_find_includes.go
@@ -376,7 +376,16 @@ func queueSourceFilesFromFolder(ctx *types.Context, queue *types.UniqueSourceFil
 		if err != nil {
 			return i18n.WrapError(err)
 		}
-		queue.Push(sourceFile)
+		/*
+		 * hack: This is for Energia EMT targets to skip main.cpp
+		 * When the cache file is build the first time, main.cpp is not there yet
+		 * in the <build folder>/sketch.
+		 * On a second run it is there and the cache mismatches that of what is on disk
+		 * resulting in a pointer outside the cache array.
+		 */
+		if sourceFile.RelativePath != "main.cpp" {
+			queue.Push(sourceFile)
+		}
 	}
 
 	return nil