Skip to content

Commit

Permalink
Attempt to pass test with imported preamble.
Browse files Browse the repository at this point in the history
  • Loading branch information
petervdonovan committed Mar 8, 2023
1 parent aefe191 commit f6c0c2f
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 17 deletions.
1 change: 1 addition & 0 deletions org.lflang/src/org/lflang/generator/c/CCmakeGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,7 @@ CodeBuilder generateCMakeCode(

cMakeCode.pr("target_link_libraries(${LF_MAIN_TARGET} PRIVATE core)");

cMakeCode.pr("target_include_directories(${LF_MAIN_TARGET} PUBLIC .)");
cMakeCode.pr("target_include_directories(${LF_MAIN_TARGET} PUBLIC include/)");
cMakeCode.pr("target_include_directories(${LF_MAIN_TARGET} PUBLIC include/api)");
cMakeCode.pr("target_include_directories(${LF_MAIN_TARGET} PUBLIC include/core)");
Expand Down
20 changes: 7 additions & 13 deletions org.lflang/src/org/lflang/generator/c/CGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
Expand Down Expand Up @@ -843,11 +844,6 @@ private void inspectReactorEResource(ReactorDecl reactor) {
if (lfResource != null) {
copyUserFiles(lfResource.getTargetConfig(), lfResource.getFileConfig());
}
// Extract the contents of the imported file for the preambles
var contents = toDefinition(reactor).eResource().getContents();
var model = (Model) contents.get(0);
// Add the preambles from the imported .lf file
toDefinition(reactor).getPreambles().addAll(model.getPreambles());
}
}

Expand Down Expand Up @@ -960,7 +956,7 @@ private void generateHeaders() throws IOException {
false
);
for (Reactor r : reactors) {
CReactorHeaderFileGenerator.doGenerate(types, r, fileConfig, this::generateAuxiliaryStructs);
CReactorHeaderFileGenerator.doGenerate(types, r, fileConfig, this::generateAuxiliaryStructs, this::generateTopLevelPreambles);
}
FileUtil.copyDirectory(fileConfig.getIncludePath(), fileConfig.getSrcGenPath().resolve("include"), false);
}
Expand Down Expand Up @@ -1051,7 +1047,7 @@ private void generateReactorClass(Reactor reactor) throws IOException {
header.pr("#ifndef " + guardMacro);
header.pr("#define " + guardMacro);
generateReactorClassHeaders(reactor, headerName, header, src);
header.pr(generateTopLevelPreambles());
header.pr(generateTopLevelPreambles(reactor));
generateUserPreamblesForReactor(reactor, src);
generateReactorClassBody(reactor, header, src);
header.pr("#endif // " + guardMacro);
Expand Down Expand Up @@ -2056,17 +2052,15 @@ public String generateDirectives() {
/**
* Generate top-level preamble code.
*/
protected String generateTopLevelPreambles() {
protected String generateTopLevelPreambles(EObject reactor) {
CodeBuilder code = new CodeBuilder();
code.pr("#ifndef TOP_LEVEL_PREAMBLE_H");
code.pr("#define TOP_LEVEL_PREAMBLE_H");

// user preambles
if (this.mainDef != null) {
var mainModel = (Model) toDefinition(mainDef.getReactorClass()).eContainer();
for (Preamble p : mainModel.getPreambles()) {
code.pr(toText(p.getCode()));
}
var mainModel = (Model) reactor.eContainer();
for (Preamble p : mainModel.getPreambles()) {
code.pr(toText(p.getCode()));
}
code.pr("#endif");
return code.toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@
import java.io.IOException;
import java.nio.file.Path;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.eclipse.emf.ecore.EObject;

import org.lflang.generator.CodeBuilder;
import org.lflang.lf.Parameter;
import org.lflang.lf.Port;
Expand All @@ -30,13 +33,14 @@ public static Path outputPath(CFileConfig fileConfig, Reactor r) {
.resolve(r.getName() + ".h");
}

public static void doGenerate(CTypes types, Reactor r, CFileConfig fileConfig, GenerateAuxiliaryStructs generator) throws IOException {
String contents = generateHeaderFile(types, r, generator);
public static void doGenerate(CTypes types, Reactor r, CFileConfig fileConfig, GenerateAuxiliaryStructs generator, Function<EObject, String> topLevelPreamble) throws IOException {
String contents = generateHeaderFile(types, r, generator, topLevelPreamble.apply(r));
FileUtil.writeToFile(contents, fileConfig.getIncludePath().resolve(outputPath(fileConfig, r)));
}
private static String generateHeaderFile(CTypes types, Reactor r, GenerateAuxiliaryStructs generator) {
private static String generateHeaderFile(CTypes types, Reactor r, GenerateAuxiliaryStructs generator, String topLevelPreamble) {
CodeBuilder builder = new CodeBuilder();
appendIncludeGuard(builder, r);
builder.pr(topLevelPreamble);
appendPoundIncludes(builder);
appendSelfStruct(builder, types, r);
generator.generate(builder, r, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.xbase.lib.Exceptions;

Expand Down Expand Up @@ -289,7 +290,7 @@ public String generateDirectives() {
* execution setup preamble specified in the target config.
*/
@Override
protected String generateTopLevelPreambles() {
protected String generateTopLevelPreambles(EObject ignored) {
// user preambles
Set<Model> models = new LinkedHashSet<>();
for (Reactor r : ASTUtils.convertToEmptyListIfNull(reactors)) {
Expand Down

0 comments on commit f6c0c2f

Please sign in to comment.