code generator progress
This commit is contained in:
parent
ed32a9c7b2
commit
a8aad0f885
|
@ -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;
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue