code generator progress

This commit is contained in:
rusefi 2019-06-29 21:34:25 -04:00
parent ed32a9c7b2
commit a8aad0f885
3 changed files with 26 additions and 15 deletions

View File

@ -32,6 +32,7 @@ public class ConfigDefinition {
public static final String KEY_TS_DESTINATION = "-ts_destination"; public static final String KEY_TS_DESTINATION = "-ts_destination";
private static final String KEY_C_DESTINATION = "-c_destination"; private static final String KEY_C_DESTINATION = "-c_destination";
private static final String KEY_C_DEFINES = "-c_defines"; private static final String KEY_C_DEFINES = "-c_defines";
private static final String KEY_WITH_C_DEFINES = "-with_c_defines";
private static final String KEY_JAVA_DESTINATION = "-java_destination"; private static final String KEY_JAVA_DESTINATION = "-java_destination";
private static final String KEY_ROMRAIDER_DESTINATION = "-romraider_destination"; private static final String KEY_ROMRAIDER_DESTINATION = "-romraider_destination";
public static final String KEY_PREPEND = "-prepend"; public static final String KEY_PREPEND = "-prepend";
@ -80,6 +81,8 @@ public class ConfigDefinition {
destCHeader = args[i + 1]; destCHeader = args[i + 1];
} else if (key.equals(KEY_ZERO_INIT)) { } else if (key.equals(KEY_ZERO_INIT)) {
needZeroInit = true; needZeroInit = true;
} else if (key.equals(KEY_WITH_C_DEFINES)) {
CHeaderConsumer.withC_Defines = Boolean.parseBoolean(args[i + 1]);
} else if (key.equals(KEY_C_DEFINES)) { } else if (key.equals(KEY_C_DEFINES)) {
destCDefines = args[i + 1]; destCDefines = args[i + 1];
} else if (key.equals(KEY_JAVA_DESTINATION)) { } else if (key.equals(KEY_JAVA_DESTINATION)) {
@ -137,7 +140,7 @@ public class ConfigDefinition {
if (destCDefines != null) if (destCDefines != null)
VariableRegistry.INSTANCE.writeNumericsToFile(destCDefines); VariableRegistry.INSTANCE.writeDefinesToFile(destCDefines);
if (romRaiderDestination != null && romRaiderInputFile != null) { if (romRaiderDestination != null && romRaiderInputFile != null) {
String inputFileName = romRaiderInputFile + File.separator + ROM_RAIDER_XML_TEMPLATE; String inputFileName = romRaiderInputFile + File.separator + ROM_RAIDER_XML_TEMPLATE;

View File

@ -96,16 +96,23 @@ public class VariableRegistry extends TreeMap<String, String> {
register(name + "_hex", Integer.toString(value, 16)); register(name + "_hex", Integer.toString(value, 16));
} }
public void writeNumericsToFile(String fileName) throws IOException { public void writeDefinesToFile(String fileName) throws IOException {
SystemOut.println("Writing to " + fileName); SystemOut.println("Writing to " + fileName);
LazyFile cHeader = new LazyFile(fileName); LazyFile cHeader = new LazyFile(fileName);
cHeader.write("//\n// " + ConfigDefinition.GENERATED_AUTOMATICALLY_TAG + ConfigDefinition.definitionInputFile + "\n//\n\n"); cHeader.write("//\n// " + ConfigDefinition.GENERATED_AUTOMATICALLY_TAG + ConfigDefinition.definitionInputFile + "\n//\n\n");
for (String value : cAllDefinitions.values()) cHeader.write(getDefinesSection());
cHeader.write(value);
cHeader.close(); cHeader.close();
} }
public String getDefinesSection() {
StringBuilder sb = new StringBuilder();
for (String value : cAllDefinitions.values())
sb.append(value);
return sb.toString();
}
public String getJavaConstants() { public String getJavaConstants() {
StringBuffer result = new StringBuffer(); StringBuffer result = new StringBuffer();
for (String value : javaDefinitions.values()) for (String value : javaDefinitions.values())

View File

@ -1,9 +1,6 @@
package com.rusefi.output; package com.rusefi.output;
import com.rusefi.ConfigDefinition; import com.rusefi.*;
import com.rusefi.ConfigField;
import com.rusefi.ConfigStructure;
import com.rusefi.TypesHelper;
import com.rusefi.util.LazyFile; import com.rusefi.util.LazyFile;
import com.rusefi.util.SystemOut; import com.rusefi.util.SystemOut;
@ -16,7 +13,9 @@ import static com.rusefi.ConfigDefinition.EOL;
*/ */
public class CHeaderConsumer implements ConfigurationConsumer { public class CHeaderConsumer implements ConfigurationConsumer {
public static final String BOOLEAN_TYPE = "bool"; public static final String BOOLEAN_TYPE = "bool";
public static boolean withC_Defines;
private final LazyFile cHeader; private final LazyFile cHeader;
private final StringBuilder content = new StringBuilder();
public CHeaderConsumer(String destCHeader) { public CHeaderConsumer(String destCHeader) {
SystemOut.println("Writing C header to " + destCHeader); SystemOut.println("Writing C header to " + destCHeader);
@ -57,31 +56,33 @@ public class CHeaderConsumer implements ConfigurationConsumer {
@Override @Override
public void handleEndStruct(ConfigStructure structure) throws IOException { public void handleEndStruct(ConfigStructure structure) throws IOException {
if (structure.comment != null) { if (structure.comment != null) {
cHeader.write("/**" + EOL + ConfigDefinition.packComment(structure.comment, "") + EOL + "*/" + EOL); content.append("/**" + EOL + ConfigDefinition.packComment(structure.comment, "") + EOL + "*/" + EOL);
} }
cHeader.write("// start of " + structure.name + EOL); content.append("// start of " + structure.name + EOL);
cHeader.write("struct " + structure.name + " {" + EOL); content.append("struct " + structure.name + " {" + EOL);
structure.bitState.reset(); structure.bitState.reset();
for (int i = 0; i < structure.cFields.size(); i++) { for (int i = 0; i < structure.cFields.size(); i++) {
ConfigField cf = structure.cFields.get(i); ConfigField cf = structure.cFields.get(i);
cHeader.write(getHeaderText(cf, structure.currentOffset, structure.bitState.get())); content.append(getHeaderText(cf, structure.currentOffset, structure.bitState.get()));
ConfigField next = i == structure.cFields.size() - 1 ? ConfigField.VOID : structure.cFields.get(i + 1); ConfigField next = i == structure.cFields.size() - 1 ? ConfigField.VOID : structure.cFields.get(i + 1);
structure.bitState.incrementBitIndex(cf, next); structure.bitState.incrementBitIndex(cf, next);
structure.currentOffset += cf.getSize(next); structure.currentOffset += cf.getSize(next);
} }
cHeader.write("\t/** total size " + structure.currentOffset + "*/" + EOL); content.append("\t/** total size " + structure.currentOffset + "*/" + EOL);
cHeader.write("};" + EOL + EOL); content.append("};" + EOL + EOL);
// https://stackoverflow.com/questions/1675351/typedef-struct-vs-struct-definitions // https://stackoverflow.com/questions/1675351/typedef-struct-vs-struct-definitions
cHeader.write("typedef struct " + structure.name + " " + structure.name + ";" + EOL + EOL); content.append("typedef struct " + structure.name + " " + structure.name + ";" + EOL + EOL);
} }
@Override @Override
public void endFile() throws IOException { public void endFile() throws IOException {
cHeader.write(VariableRegistry.INSTANCE.getDefinesSection());
cHeader.write(content.toString());
cHeader.write("#endif" + EOL); cHeader.write("#endif" + EOL);
cHeader.write("// end" + EOL); cHeader.write("// end" + EOL);
cHeader.write("// this section " + ConfigDefinition.MESSAGE + EOL); cHeader.write("// this section " + ConfigDefinition.MESSAGE + EOL);