parent
7d989642f4
commit
a9b8fef332
Binary file not shown.
|
@ -16,8 +16,7 @@ import java.util.*;
|
||||||
* @see ConfigurationConsumer
|
* @see ConfigurationConsumer
|
||||||
*/
|
*/
|
||||||
public class ConfigDefinition {
|
public class ConfigDefinition {
|
||||||
static final String SIGNATURE_HASH = "SIGNATURE_HASH";
|
public static final String SIGNATURE_HASH = "SIGNATURE_HASH";
|
||||||
public static String MESSAGE;
|
|
||||||
|
|
||||||
private static final String ROM_RAIDER_XML_TEMPLATE = "rusefi_template.xml";
|
private static final String ROM_RAIDER_XML_TEMPLATE = "rusefi_template.xml";
|
||||||
private static final String KEY_DEFINITION = "-definition";
|
private static final String KEY_DEFINITION = "-definition";
|
||||||
|
@ -68,7 +67,6 @@ public class ConfigDefinition {
|
||||||
|
|
||||||
String tsInputFileFolder = null;
|
String tsInputFileFolder = null;
|
||||||
String destCDefinesFileName = null;
|
String destCDefinesFileName = null;
|
||||||
String javaDestinationFileName = null;
|
|
||||||
String romRaiderDestination = null;
|
String romRaiderDestination = null;
|
||||||
// we postpone reading so that in case of cache hit we do less work
|
// we postpone reading so that in case of cache hit we do less work
|
||||||
List<String> prependFiles = new ArrayList<>();
|
List<String> prependFiles = new ArrayList<>();
|
||||||
|
@ -96,6 +94,7 @@ public class ConfigDefinition {
|
||||||
break;
|
break;
|
||||||
case KEY_DEFINITION:
|
case KEY_DEFINITION:
|
||||||
definitionInputFile = args[i + 1];
|
definitionInputFile = args[i + 1];
|
||||||
|
state.headerMessage = ToolUtil.getGeneratedAutomaticallyTag() + definitionInputFile + " " + new Date();
|
||||||
inputFiles.add(definitionInputFile);
|
inputFiles.add(definitionInputFile);
|
||||||
break;
|
break;
|
||||||
case KEY_TS_DESTINATION:
|
case KEY_TS_DESTINATION:
|
||||||
|
@ -105,7 +104,7 @@ public class ConfigDefinition {
|
||||||
tsOutputsDestination = args[i + 1];
|
tsOutputsDestination = args[i + 1];
|
||||||
break;
|
break;
|
||||||
case KEY_C_DESTINATION:
|
case KEY_C_DESTINATION:
|
||||||
destinations.add(new CHeaderConsumer(state.variableRegistry, args[i + 1], withC_Defines));
|
destinations.add(new CHeaderConsumer(state, args[i + 1], withC_Defines));
|
||||||
break;
|
break;
|
||||||
case KEY_ZERO_INIT:
|
case KEY_ZERO_INIT:
|
||||||
needZeroInit = Boolean.parseBoolean(args[i + 1]);
|
needZeroInit = Boolean.parseBoolean(args[i + 1]);
|
||||||
|
@ -117,7 +116,7 @@ public class ConfigDefinition {
|
||||||
destCDefinesFileName = args[i + 1];
|
destCDefinesFileName = args[i + 1];
|
||||||
break;
|
break;
|
||||||
case KEY_JAVA_DESTINATION:
|
case KEY_JAVA_DESTINATION:
|
||||||
javaDestinationFileName = args[i + 1];
|
destinations.add(new FileJavaFieldsConsumer(state, args[i + 1]));
|
||||||
break;
|
break;
|
||||||
case "-field_lookup_file":
|
case "-field_lookup_file":
|
||||||
destinations.add(new GetConfigValueConsumer(args[i + 1]));
|
destinations.add(new GetConfigValueConsumer(args[i + 1]));
|
||||||
|
@ -195,9 +194,6 @@ public class ConfigDefinition {
|
||||||
|
|
||||||
ExtraUtil.handleFiringOrder(firingEnumFileName, state.variableRegistry, parseState);
|
ExtraUtil.handleFiringOrder(firingEnumFileName, state.variableRegistry, parseState);
|
||||||
|
|
||||||
MESSAGE = ToolUtil.getGeneratedAutomaticallyTag() + definitionInputFile + " " + new Date();
|
|
||||||
|
|
||||||
SystemOut.println("Reading definition from " + definitionInputFile);
|
|
||||||
|
|
||||||
for (String prependFile : prependFiles)
|
for (String prependFile : prependFiles)
|
||||||
state.variableRegistry.readPrependValues(prependFile);
|
state.variableRegistry.readPrependValues(prependFile);
|
||||||
|
@ -235,8 +231,6 @@ public class ConfigDefinition {
|
||||||
// writer.writeTunerstudio(parseState, tsPath + "/rusefi.input", tsPath + "/" + TSProjectConsumer.TS_FILE_OUTPUT_NAME);
|
// writer.writeTunerstudio(parseState, tsPath + "/rusefi.input", tsPath + "/" + TSProjectConsumer.TS_FILE_OUTPUT_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
BufferedReader definitionReader = new BufferedReader(new InputStreamReader(new FileInputStream(definitionInputFile), IoUtils.CHARSET.name()));
|
|
||||||
|
|
||||||
if (tsOutputsDestination != null) {
|
if (tsOutputsDestination != null) {
|
||||||
destinations.add(new OutputsSectionConsumer(tsOutputsDestination + File.separator + "generated/output_channels.ini", state));
|
destinations.add(new OutputsSectionConsumer(tsOutputsDestination + File.separator + "generated/output_channels.ini", state));
|
||||||
destinations.add(new DataLogConsumer(tsOutputsDestination + File.separator + "generated/data_logs.ini"));
|
destinations.add(new DataLogConsumer(tsOutputsDestination + File.separator + "generated/data_logs.ini"));
|
||||||
|
@ -253,16 +247,14 @@ public class ConfigDefinition {
|
||||||
destinations.add(new SignatureConsumer(signatureDestination, tmpRegistry));
|
destinations.add(new SignatureConsumer(signatureDestination, tmpRegistry));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (javaDestinationFileName != null) {
|
|
||||||
destinations.add(new FileJavaFieldsConsumer(state, javaDestinationFileName));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (destinations.isEmpty())
|
if (destinations.isEmpty())
|
||||||
throw new IllegalArgumentException("No destinations specified");
|
throw new IllegalArgumentException("No destinations specified");
|
||||||
/*
|
/*
|
||||||
* this is the most important invocation - here we read the primary input file and generated code into all
|
* this is the most important invocation - here we read the primary input file and generated code into all
|
||||||
* the destinations/writers
|
* the destinations/writers
|
||||||
*/
|
*/
|
||||||
|
SystemOut.println("Reading definition from " + definitionInputFile);
|
||||||
|
BufferedReader definitionReader = new BufferedReader(new InputStreamReader(new FileInputStream(definitionInputFile), IoUtils.CHARSET.name()));
|
||||||
state.readBufferedReader(definitionReader, destinations);
|
state.readBufferedReader(definitionReader, destinations);
|
||||||
|
|
||||||
if (destCDefinesFileName != null) {
|
if (destCDefinesFileName != null) {
|
||||||
|
|
|
@ -31,6 +31,7 @@ public class ReaderState {
|
||||||
public final Map<String, Integer> tsCustomSize = new HashMap<>();
|
public final Map<String, Integer> tsCustomSize = new HashMap<>();
|
||||||
public final Map<String, String> tsCustomLine = new HashMap<>();
|
public final Map<String, String> tsCustomLine = new HashMap<>();
|
||||||
public final Map<String, ConfigStructure> structures = new HashMap<>();
|
public final Map<String, ConfigStructure> structures = new HashMap<>();
|
||||||
|
public String headerMessage;
|
||||||
|
|
||||||
public final EnumsReader enumsReader = new EnumsReader();
|
public final EnumsReader enumsReader = new EnumsReader();
|
||||||
public final VariableRegistry variableRegistry = new VariableRegistry();
|
public final VariableRegistry variableRegistry = new VariableRegistry();
|
||||||
|
@ -277,4 +278,9 @@ public class ReaderState {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getHeader() {
|
||||||
|
if (headerMessage == null)
|
||||||
|
throw new NullPointerException("No header message yet");
|
||||||
|
return headerMessage;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,4 @@
|
||||||
package com.rusefi.output;
|
package com.rusefi.output;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public abstract class AbstractConfigurationConsumer implements ConfigurationConsumer {
|
public abstract class AbstractConfigurationConsumer implements ConfigurationConsumer {
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startFile() throws IOException {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void endFile() throws IOException {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import com.rusefi.*;
|
||||||
|
|
||||||
import static com.rusefi.ToolUtil.EOL;
|
import static com.rusefi.ToolUtil.EOL;
|
||||||
|
|
||||||
public abstract class BaseCHeaderConsumer extends AbstractConfigurationConsumer {
|
public class BaseCHeaderConsumer extends AbstractConfigurationConsumer {
|
||||||
private static final String BOOLEAN_TYPE = "bool";
|
private static final String BOOLEAN_TYPE = "bool";
|
||||||
private final StringBuilder content = new StringBuilder();
|
private final StringBuilder content = new StringBuilder();
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,8 @@ import static com.rusefi.ToolUtil.EOL;
|
||||||
* Configuration consumer which writes C header file
|
* Configuration consumer which writes C header file
|
||||||
*/
|
*/
|
||||||
public class CHeaderConsumer extends BaseCHeaderConsumer {
|
public class CHeaderConsumer extends BaseCHeaderConsumer {
|
||||||
|
@org.jetbrains.annotations.NotNull
|
||||||
|
private final ReaderState state;
|
||||||
/**
|
/**
|
||||||
* looks like sometimes we want to not include "define XXX value" into generated C headers
|
* looks like sometimes we want to not include "define XXX value" into generated C headers
|
||||||
* TODO: document the use-case better
|
* TODO: document the use-case better
|
||||||
|
@ -20,12 +22,13 @@ public class CHeaderConsumer extends BaseCHeaderConsumer {
|
||||||
private final LazyFile cHeader;
|
private final LazyFile cHeader;
|
||||||
private final VariableRegistry variableRegistry;
|
private final VariableRegistry variableRegistry;
|
||||||
|
|
||||||
public CHeaderConsumer(VariableRegistry variableRegistry, String destCHeader, boolean withC_Defines) {
|
public CHeaderConsumer(ReaderState state, String destCHeader, boolean withC_Defines) {
|
||||||
this.variableRegistry = variableRegistry;
|
this.variableRegistry = state.variableRegistry;
|
||||||
|
this.state = state;
|
||||||
this.withC_Defines = withC_Defines;
|
this.withC_Defines = withC_Defines;
|
||||||
SystemOut.println("Writing C header to " + destCHeader);
|
SystemOut.println("Writing C header to " + destCHeader);
|
||||||
cHeader = new LazyFile(destCHeader);
|
cHeader = new LazyFile(destCHeader);
|
||||||
cHeader.write("// this section " + ConfigDefinition.MESSAGE + EOL);
|
cHeader.write("// this section " + state.getHeader() + EOL);
|
||||||
cHeader.write("// by " + getClass() + EOL);
|
cHeader.write("// by " + getClass() + EOL);
|
||||||
cHeader.write("// begin" + EOL);
|
cHeader.write("// begin" + EOL);
|
||||||
cHeader.write("#pragma once" + EOL);
|
cHeader.write("#pragma once" + EOL);
|
||||||
|
@ -38,7 +41,7 @@ public class CHeaderConsumer extends BaseCHeaderConsumer {
|
||||||
cHeader.write(variableRegistry.getDefinesSection());
|
cHeader.write(variableRegistry.getDefinesSection());
|
||||||
cHeader.write(getContent().toString());
|
cHeader.write(getContent().toString());
|
||||||
cHeader.write("// end" + EOL);
|
cHeader.write("// end" + EOL);
|
||||||
cHeader.write("// this section " + ConfigDefinition.MESSAGE + EOL);
|
cHeader.write("// this section " + state.getHeader() + EOL);
|
||||||
cHeader.close();
|
cHeader.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,13 @@ import com.rusefi.ReaderState;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public interface ConfigurationConsumer {
|
public interface ConfigurationConsumer {
|
||||||
void startFile() throws IOException;
|
default void startFile() {
|
||||||
|
|
||||||
void endFile() throws IOException;
|
}
|
||||||
|
|
||||||
|
default void endFile() throws IOException {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void handleEndStruct(ReaderState readerState, ConfigStructure structure) throws IOException;
|
void handleEndStruct(ReaderState readerState, ConfigStructure structure) throws IOException;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class FileJavaFieldsConsumer extends JavaFieldsConsumer {
|
||||||
@Override
|
@Override
|
||||||
public void startFile() {
|
public void startFile() {
|
||||||
javaFields.write("package " + JAVA_PACKAGE + ";" + ToolUtil.EOL + ToolUtil.EOL);
|
javaFields.write("package " + JAVA_PACKAGE + ";" + ToolUtil.EOL + ToolUtil.EOL);
|
||||||
javaFields.write("// this file " + ConfigDefinition.MESSAGE + ToolUtil.EOL + EOL);
|
javaFields.write("// this file " + state.getHeader() + ToolUtil.EOL + EOL);
|
||||||
javaFields.write("// by " + getClass() + EOL);
|
javaFields.write("// by " + getClass() + EOL);
|
||||||
javaFields.write("import com.rusefi.config.*;" + EOL + EOL);
|
javaFields.write("import com.rusefi.config.*;" + EOL + EOL);
|
||||||
javaFields.write("public class " + className + " {" + ToolUtil.EOL);
|
javaFields.write("public class " + className + " {" + ToolUtil.EOL);
|
||||||
|
|
|
@ -47,10 +47,6 @@ public class GetConfigValueConsumer extends AbstractConfigurationConsumer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startFile() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void endFile() throws IOException {
|
public void endFile() throws IOException {
|
||||||
writeStringToFile(outputFileName, getContent());
|
writeStringToFile(outputFileName, getContent());
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class TSProjectConsumer implements ConfigurationConsumer {
|
||||||
tsHeader.write(tsContent.getPrefix());
|
tsHeader.write(tsContent.getPrefix());
|
||||||
|
|
||||||
tsHeader.write("; " + CONFIG_DEFINITION_START + ToolUtil.EOL);
|
tsHeader.write("; " + CONFIG_DEFINITION_START + ToolUtil.EOL);
|
||||||
tsHeader.write("; this section " + ConfigDefinition.MESSAGE + ToolUtil.EOL + ToolUtil.EOL);
|
tsHeader.write("; this section " + state.getHeader() + ToolUtil.EOL + ToolUtil.EOL);
|
||||||
tsHeader.write("pageSize = " + totalTsSize + ToolUtil.EOL);
|
tsHeader.write("pageSize = " + totalTsSize + ToolUtil.EOL);
|
||||||
tsHeader.write("page = 1" + ToolUtil.EOL);
|
tsHeader.write("page = 1" + ToolUtil.EOL);
|
||||||
tsHeader.write(fieldsSection);
|
tsHeader.write(fieldsSection);
|
||||||
|
@ -138,10 +138,6 @@ public class TSProjectConsumer implements ConfigurationConsumer {
|
||||||
return tsPath + File.separator + TS_FILE_INPUT_NAME;
|
return tsPath + File.separator + TS_FILE_INPUT_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startFile() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void endFile() throws IOException {
|
public void endFile() throws IOException {
|
||||||
writeTunerStudioFile(tsPath, tsWriter.toString());
|
writeTunerStudioFile(tsPath, tsWriter.toString());
|
||||||
|
|
|
@ -30,6 +30,7 @@ public class BitParsingTest {
|
||||||
writeContent(fieldsSection, new TsFileContent("", ""), createOutput(sw));
|
writeContent(fieldsSection, new TsFileContent("", ""), createOutput(sw));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
state.headerMessage = "test";
|
||||||
state.readBufferedReader(inputString, Collections.singletonList(javaFieldsConsumer));
|
state.readBufferedReader(inputString, Collections.singletonList(javaFieldsConsumer));
|
||||||
|
|
||||||
System.out.printf("start[" + sw + "]end");
|
System.out.printf("start[" + sw + "]end");
|
||||||
|
|
|
@ -71,11 +71,7 @@ public class ConfigFieldParserTest {
|
||||||
"end_struct\n";
|
"end_struct\n";
|
||||||
ReaderState state = new ReaderState();
|
ReaderState state = new ReaderState();
|
||||||
|
|
||||||
BaseCHeaderConsumer consumer = new BaseCHeaderConsumer() {
|
BaseCHeaderConsumer consumer = new BaseCHeaderConsumer();
|
||||||
@Override
|
|
||||||
public void endFile() {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
state.readBufferedReader(test, Collections.singletonList(consumer));
|
state.readBufferedReader(test, Collections.singletonList(consumer));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -282,11 +278,7 @@ public class ConfigFieldParserTest {
|
||||||
"int[ERROR_BUFFER_SIZE iterate] field\n" +
|
"int[ERROR_BUFFER_SIZE iterate] field\n" +
|
||||||
"end_struct\n" +
|
"end_struct\n" +
|
||||||
"";
|
"";
|
||||||
BaseCHeaderConsumer consumer = new BaseCHeaderConsumer() {
|
BaseCHeaderConsumer consumer = new BaseCHeaderConsumer();
|
||||||
@Override
|
|
||||||
public void endFile() {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
new ReaderState().readBufferedReader(test, Collections.singletonList(consumer));
|
new ReaderState().readBufferedReader(test, Collections.singletonList(consumer));
|
||||||
assertEquals("// start of pid_s\n" +
|
assertEquals("// start of pid_s\n" +
|
||||||
"struct pid_s {\n" +
|
"struct pid_s {\n" +
|
||||||
|
|
|
@ -47,11 +47,7 @@ public class TSProjectConsumerTest {
|
||||||
JavaFieldsConsumer javaFieldsConsumer = new TestJavaFieldsConsumer(state);
|
JavaFieldsConsumer javaFieldsConsumer = new TestJavaFieldsConsumer(state);
|
||||||
|
|
||||||
|
|
||||||
BaseCHeaderConsumer consumer = new BaseCHeaderConsumer() {
|
BaseCHeaderConsumer consumer = new BaseCHeaderConsumer();
|
||||||
@Override
|
|
||||||
public void endFile() {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
state.readBufferedReader(test, Arrays.asList(javaFieldsConsumer, consumer, tsProjectConsumer));
|
state.readBufferedReader(test, Arrays.asList(javaFieldsConsumer, consumer, tsProjectConsumer));
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,6 @@ public class TestJavaFieldsConsumer extends JavaFieldsConsumer {
|
||||||
super(state);
|
super(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startFile() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void endFile() {
|
public void endFile() {
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue