code generator progress

This commit is contained in:
rusefi 2019-06-29 21:34:25 -04:00
parent 3309475d78
commit 6fd5f2a644
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";
private static final String KEY_C_DESTINATION = "-c_destination";
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_ROMRAIDER_DESTINATION = "-romraider_destination";
public static final String KEY_PREPEND = "-prepend";
@ -80,6 +81,8 @@ public class ConfigDefinition {
destCHeader = args[i + 1];
} else if (key.equals(KEY_ZERO_INIT)) {
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)) {
destCDefines = args[i + 1];
} else if (key.equals(KEY_JAVA_DESTINATION)) {
@ -137,7 +140,7 @@ public class ConfigDefinition {
if (destCDefines != null)
VariableRegistry.INSTANCE.writeNumericsToFile(destCDefines);
VariableRegistry.INSTANCE.writeDefinesToFile(destCDefines);
if (romRaiderDestination != null && romRaiderInputFile != null) {
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));
}
public void writeNumericsToFile(String fileName) throws IOException {
public void writeDefinesToFile(String fileName) throws IOException {
SystemOut.println("Writing to " + fileName);
LazyFile cHeader = new LazyFile(fileName);
cHeader.write("//\n// " + ConfigDefinition.GENERATED_AUTOMATICALLY_TAG + ConfigDefinition.definitionInputFile + "\n//\n\n");
for (String value : cAllDefinitions.values())
cHeader.write(value);
cHeader.write(getDefinesSection());
cHeader.close();
}
public String getDefinesSection() {
StringBuilder sb = new StringBuilder();
for (String value : cAllDefinitions.values())
sb.append(value);
return sb.toString();
}
public String getJavaConstants() {
StringBuffer result = new StringBuffer();
for (String value : javaDefinitions.values())

View File

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