Skip to content

Commit 325d37e

Browse files
author
jantje
committed
#927 #984 pre/post link and pre build
added support for pre_link post_link and pre_build though pre_build is not documented :-(
1 parent 8c0dffc commit 325d37e

File tree

3 files changed

+42
-2
lines changed

3 files changed

+42
-2
lines changed

io.sloeber.core/plugin.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@
342342
<tool
343343
announcement="%tool.Arduino.combiner.announcement"
344344
command="${A.RECIPE.C.COMBINE.PATTERN}"
345-
commandLinePattern="${A.RECIPE.C.COMBINE.PATTERN.1} ${FLAGS} ${INPUTS} ${A.RECIPE.C.COMBINE.PATTERN.2} ${A.ARCHIVE_FILE_PATH} ${A.RECIPE.C.COMBINE.PATTERN.3} ${JANTJE.EXTRA.ALL} ${JANTJE.EXTRA.LINK}"
345+
commandLinePattern="${A.JANTJE.PRE.LINK}${A.RECIPE.C.COMBINE.PATTERN.1} ${FLAGS} ${INPUTS} ${A.RECIPE.C.COMBINE.PATTERN.2} ${A.ARCHIVE_FILE_PATH} ${A.RECIPE.C.COMBINE.PATTERN.3} ${JANTJE.EXTRA.ALL} ${JANTJE.EXTRA.LINK}${A.JANTJE.POST.LINK}"
346346
errorParsers="org.eclipse.cdt.core.GLDErrorParser"
347347
id="io.sloeber.tool.combine"
348348
name="%tool.combiner.name"

io.sloeber.core/src/io/sloeber/core/toolchain/ArduinoGnuMakefileGenerator.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,6 +1132,18 @@ private StringBuffer addTargets(List<String> outputVarsAdditionsList, boolean re
11321132
// IConfiguration config = info.getDefaultConfiguration();
11331133
// Assemble the information needed to generate the targets
11341134
String prebuildStep = config.getPrebuildStep();
1135+
//JABA issue927 adding recipe.hooks.sketch.prebuild.NUMBER.pattern as cdt prebuild command if needed
1136+
ICConfigurationDescription confDesc = ManagedBuildManager.getDescriptionForConfiguration(config);
1137+
String sketchPrebuild= io.sloeber.core.common.Common.getBuildEnvironmentVariable(confDesc, "A.JANTJE.PREBUILD", new String(), false);
1138+
if (!sketchPrebuild.isEmpty()) {
1139+
String separator = new String();
1140+
if (!prebuildStep.isEmpty()) {
1141+
prebuildStep = prebuildStep + "\n\t" + sketchPrebuild;
1142+
} else {
1143+
prebuildStep = sketchPrebuild;
1144+
}
1145+
}
1146+
//end off JABA issue927
11351147
try {
11361148
// try to resolve the build macros in the prebuild step
11371149
prebuildStep = ManagedBuildManager.getBuildMacroProvider().resolveValueToMakefileFormat(prebuildStep, EMPTY_STRING, WHITESPACE, IBuildMacroProvider.CONTEXT_CONFIGURATION, config);

io.sloeber.core/src/io/sloeber/core/tools/Helpers.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -934,11 +934,39 @@ private static void setTheEnvironmentVariablesPostProcessing(IContributedEnviron
934934
Collections.sort(objcopyCommand);
935935
setBuildEnvironmentVariable(contribEnv, confDesc, "JANTJE.OBJCOPY", StringUtil.join(objcopyCommand, "\n\t"));
936936

937+
//handle the hooks
938+
setHookBuildEnvironmentVariable(contribEnv, confDesc, "A.JANTJE.PRE.LINK","A.RECIPE.HOOKS.LINKING.PRELINK.XX.PATTERN",false);
939+
setHookBuildEnvironmentVariable(contribEnv, confDesc, "A.JANTJE.POST.LINK","A.RECIPE.HOOKS.LINKING.POSTLINK.XX.PATTERN",true);
940+
setHookBuildEnvironmentVariable(contribEnv, confDesc, "A.JANTJE.PREBUILD","A.RECIPE.HOOKS.PREBUILD.XX.PATTERN",false);
941+
937942
}
938943

939944

940945

941-
/**
946+
private static void setHookBuildEnvironmentVariable(IContributedEnvironment contribEnv,
947+
ICConfigurationDescription confDesc, String varName, String hookName, boolean post) {
948+
String envVarString = new String();
949+
String postSeparator = "}\n\t";
950+
String preSeparator = "${";
951+
if (post) {
952+
postSeparator = "${";
953+
preSeparator = "}\n\t";
954+
}
955+
for (int numDigits = 1; numDigits <= 2; numDigits++) {
956+
int counter = 1;
957+
String hookVarName = hookName.replace("XX",
958+
String.format("%0" + Integer.toString(numDigits) + "d", new Integer(counter)));
959+
while (!getBuildEnvironmentVariable(confDesc, hookVarName, "", true).isEmpty()) {
960+
envVarString = envVarString + preSeparator + hookVarName + postSeparator;
961+
hookVarName = hookName.replace("XX",
962+
String.format("%0" + Integer.toString(numDigits) + "d", new Integer(++counter)));
963+
}
964+
if (!envVarString.isEmpty()) {
965+
setBuildEnvironmentVariable(contribEnv, confDesc, varName, envVarString);
966+
}
967+
}
968+
}
969+
/**
942970
* When parsing boards.txt and platform.txt some processing needs to be done to
943971
* get "acceptable environment variable values" This method does the parsing
944972
* {xx} is replaced with ${XX} if to uppercase is true {xx} is replaced with

0 commit comments

Comments
 (0)