Skip to content

Commit

Permalink
Add gpp Stratego 2 library.
Browse files Browse the repository at this point in the history
  • Loading branch information
Gohla committed Jan 10, 2022
1 parent 960c460 commit 96a1d37
Show file tree
Hide file tree
Showing 23 changed files with 370 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ public ArrayList<GradleConfiguredDependency> getDependencies(Input input) {
dependencies.add(GradleConfiguredDependency.implementation(shared.pieRuntimeDep()));
if(input.adapterProjectCompilerInput().strategoRuntime().isPresent()) {
dependencies.add(GradleConfiguredDependency.implementation(shared.strategolibDep()));
dependencies.add(GradleConfiguredDependency.implementation(shared.gppDep()));
}
dependencies.add(GradleConfiguredDependency.compileOnly(shared.checkerFrameworkQualifiersDep()));
return dependencies;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ public ArrayList<GradleConfiguredBundleDependency> getBundleDependencies(Input i
}
if(input.adapterProjectCompilerInput().strategoRuntime().isPresent()) {
bundleDependencies.add(GradleConfiguredBundleDependency.bundleApi(shared.strategolibEclipseDep()));
bundleDependencies.add(GradleConfiguredBundleDependency.bundleApi(shared.gppEclipseDep()));
}
if(input.adapterProjectCompilerInput().dependOnRv32Im()) {
bundleDependencies.add(GradleConfiguredBundleDependency.bundleApi(shared.rv32ImEclipseDep()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ public ArrayList<GradleConfiguredDependency> getDependencies(Input input) {
dependencies.add(GradleConfiguredDependency.implementation(shared.daggerDep()));
if(input.adapterProjectCompilerInput().strategoRuntime().isPresent()) {
dependencies.add(GradleConfiguredDependency.implementation(shared.strategolibDep()));
dependencies.add(GradleConfiguredDependency.implementation(shared.gppDep()));
}
dependencies.add(GradleConfiguredDependency.compileOnly(shared.checkerFrameworkQualifiersDep()));
dependencies.add(GradleConfiguredDependency.annotationProcessor(shared.daggerCompilerDep()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,14 @@ static Builder builder() {
return GradleDependency.module(Coordinate.of("org.metaborg", "strategolib.eclipse", spoofax3Version()));
}

@Value.Default default GradleDependency gppDep() {
return GradleDependency.module(Coordinate.of("org.metaborg", "gpp", spoofax3Version()));
}

@Value.Default default GradleDependency gppEclipseDep() {
return GradleDependency.module(Coordinate.of("org.metaborg", "gpp.eclipse", spoofax3Version()));
}


/// Spoofax 3 lang

Expand Down
1 change: 1 addition & 0 deletions lwb.distrib/spoofax.lwb.eclipse/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ dependencies {
bundleImplementation(compositeBuild("spt.eclipse"))

bundleImplementation(compositeBuild("strategolib.eclipse"))
bundleImplementation(compositeBuild("gpp.eclipse"))
bundleImplementation(compositeBuild("libspoofax2.eclipse"))
bundleImplementation(compositeBuild("libstatix.eclipse"))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import mb.cfg.eclipse.CfgLanguageFactory;
import mb.esv.eclipse.EsvEclipseComponent;
import mb.esv.eclipse.EsvLanguageFactory;
import mb.gpp.GppComponent;
import mb.gpp.GppResourcesComponent;
import mb.gpp.eclipse.GppLanguageFactory;
import mb.libspoofax2.LibSpoofax2ResourcesComponent;
import mb.libspoofax2.eclipse.LibSpoofax2EclipseComponent;
import mb.libspoofax2.eclipse.LibSpoofax2LanguageFactory;
Expand Down Expand Up @@ -158,6 +161,8 @@ public TaskDefsProvider getTaskDefsProvider(

final StrategoLibComponent strategoLibComponent = StrategoLibLanguageFactory.getLanguage().getComponent();
final StrategoLibResourcesComponent strategoLibResourcesComponent = StrategoLibLanguageFactory.getLanguage().getResourcesComponent();
final GppComponent gppComponent = GppLanguageFactory.getLanguage().getComponent();
final GppResourcesComponent gppResourcesComponent = GppLanguageFactory.getLanguage().getResourcesComponent();
final LibSpoofax2EclipseComponent libSpoofax2Component = LibSpoofax2LanguageFactory.getLanguage().getComponent();
final LibSpoofax2ResourcesComponent libSpoofax2ResourcesComponent = LibSpoofax2LanguageFactory.getLanguage().getResourcesComponent();
final LibStatixEclipseComponent libStatixComponent = LibStatixLanguageFactory.getLanguage().getComponent();
Expand All @@ -177,6 +182,8 @@ public TaskDefsProvider getTaskDefsProvider(

.strategoLibComponent(strategoLibComponent)
.strategoLibResourcesComponent(strategoLibResourcesComponent)
.gppComponent(gppComponent)
.gppResourcesComponent(gppResourcesComponent)
.libSpoofax2Component(libSpoofax2Component)
.libSpoofax2ResourcesComponent(libSpoofax2ResourcesComponent)
.libStatixComponent(libStatixComponent)
Expand All @@ -197,6 +204,8 @@ public TaskDefsProvider getTaskDefsProvider(

strategoLibComponent,
strategoLibResourcesComponent,
gppComponent,
gppResourcesComponent,
libSpoofax2Component,
libSpoofax2ResourcesComponent,
libStatixComponent,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import dagger.Component;
import mb.cfg.CfgComponent;
import mb.esv.EsvComponent;
import mb.gpp.GppComponent;
import mb.gpp.GppResourcesComponent;
import mb.libspoofax2.LibSpoofax2Component;
import mb.libspoofax2.LibSpoofax2ResourcesComponent;
import mb.libstatix.LibStatixComponent;
Expand Down Expand Up @@ -38,6 +40,8 @@

StrategoLibComponent.class,
StrategoLibResourcesComponent.class,
GppComponent.class,
GppResourcesComponent.class,
LibSpoofax2Component.class,
LibSpoofax2ResourcesComponent.class,
LibStatixComponent.class,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ public static ResourcePath getDefaultMainSourceDirectory(CompileLanguageSpecific

@Value.Default default List<String> includeBuiltinLibraries() {
final ArrayList<String> strategoBuiltinLibs = new ArrayList<>();
strategoBuiltinLibs.add("stratego-gpp");
strategoBuiltinLibs.add("libstratego-sglr");
strategoBuiltinLibs.add("libstratego-aterm");
return strategoBuiltinLibs;
Expand All @@ -52,6 +51,10 @@ default ResourcePath strategoLibUnarchiveDirectory() {
return compileLanguageShared().unarchiveDirectory().appendRelativePath("strategoLib");
}

default ResourcePath gppUnarchiveDirectory() {
return compileLanguageShared().unarchiveDirectory().appendRelativePath("gpp");
}

@Value.Default default boolean includeLibSpoofax2Exports() {
return compileLanguageShared().includeLibSpoofax2Exports();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public Result<Output, MessagesException> exec(ExecContext context, StrategoCompi
config.sourceFileOrigins.asCopy(),
true,
true,
false,
config.outputLibraryName,
config.str2libraries.asCopy()
));
Expand Down
28 changes: 28 additions & 0 deletions lwb/metalib/gpp/gpp.eclipse/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
plugins {
id("org.metaborg.gradle.config.java-library")
id("org.metaborg.spoofax.compiler.gradle.eclipse")
}

languageEclipseProject {
adapterProject.set(project(":gpp"))
compilerInput {
languageGroup("mb.spoofax.lwb")
}
}

tasks {
"jar"(Jar::class) {
val exportPackages = LinkedHashSet<String>()
// Export `strategolib` package.
exportPackages.add("gpp.*")
val existingExportPackages = manifest.attributes.get("Export-Package")
if(existingExportPackages != null) {
exportPackages.add(existingExportPackages.toString())
}
manifest {
attributes(
Pair("Export-Package", exportPackages.joinToString(", "))
)
}
}
}
62 changes: 62 additions & 0 deletions lwb/metalib/gpp/gpp/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import mb.spoofax.compiler.adapter.*
import mb.spoofax.compiler.util.*

plugins {
id("org.metaborg.gradle.config.java-library")
id("org.metaborg.spoofax.compiler.gradle.spoofax2.language")
id("org.metaborg.spoofax.compiler.gradle.adapter")
}

fun compositeBuild(name: String) = "$group:$name:$version"

dependencies {
api(project(":strategolib"))
api("org.metaborg:pie.task.archive")
}

languageProject {
shared {
name("Gpp")
defaultClassPrefix("Gpp")
defaultPackageId("mb.gpp")
}
compilerInput {
withStrategoRuntime().run {
addStrategyPackageIds("gpp.trans")
addInteropRegisterersByReflection("gpp.trans.InteropRegisterer")
}
withExports().run {
addExports("Stratego", "trans")
addExports("Str2Lib", "src-gen/java/gpp/trans/gpp.str2lib")
}
}
}
spoofax2BasedLanguageProject {
compilerInput {
withStrategoRuntime().run {
copyCtree(false)
copyClasses(true)
}
project.run {
addAdditionalCopyResources(
"trans/**/*.str",
"trans/**/*.str2",
"src-gen/java/gpp/trans/gpp.str2lib"
)
languageSpecificationDependency(GradleDependency.module("org.metaborg.devenv:gpp:${ext["spoofax2DevenvVersion"]}"))
}
}
}

languageAdapterProject {
compilerInput {
project.configureCompilerInput()
}
}
fun AdapterProjectCompiler.Input.Builder.configureCompilerInput() {
val packageId = "mb.gpp"

// Extend component
baseComponent(packageId, "BaseGppComponent")
extendComponent(packageId, "GppComponent")
}
5 changes: 5 additions & 0 deletions lwb/metalib/gpp/gpp/spoofaxc.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
shared.defaultArtifactId=gpp
shared.defaultClassPrefix=Gpp
shared.defaultGroupId=org.metaborg
shared.defaultPackageId=mb.gpp
shared.defaultVersion=0.1.0
22 changes: 22 additions & 0 deletions lwb/metalib/gpp/gpp/src/main/java/mb/gpp/GppComponent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package mb.gpp;

import dagger.Component;
import mb.log.dagger.LoggerComponent;
import mb.resource.dagger.ResourceServiceComponent;
import mb.spoofax.core.platform.PlatformComponent;

@GppScope
@Component(
modules = {
mb.gpp.GppModule.class
},
dependencies = {
LoggerComponent.class,
mb.gpp.GppResourcesComponent.class,
ResourceServiceComponent.class,
PlatformComponent.class
}
)
public interface GppComponent extends BaseGppComponent {
GppUtil getGppUtil();
}
43 changes: 43 additions & 0 deletions lwb/metalib/gpp/gpp/src/main/java/mb/gpp/GppInfo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package mb.gpp;

import mb.resource.hierarchical.ResourcePath;
import org.checkerframework.checker.nullness.qual.Nullable;

import java.io.Serializable;
import java.util.ArrayList;

/**
* Copy of Stratego2LibInfo because this Java library cannot depend on `stratego.build` due to `gpp.eclipse`
* needing a dependency to `stratego.eclipse` (because that exports `stratego.build`), which would cause a cycle because
* `stratego.eclipse` requires `gpp.eclipse`.
*/
public class GppInfo implements Serializable {
public final ResourcePath str2libFile;
public final ArrayList<ResourcePath> jarFilesOrDirectories;

public GppInfo(ResourcePath str2libFile, ArrayList<ResourcePath> jarFilesOrDirectories) {
this.str2libFile = str2libFile;
this.jarFilesOrDirectories = jarFilesOrDirectories;
}

@Override public boolean equals(@Nullable Object o) {
if(this == o) return true;
if(o == null || getClass() != o.getClass()) return false;
final GppInfo that = (GppInfo)o;
if(!str2libFile.equals(that.str2libFile)) return false;
return jarFilesOrDirectories.equals(that.jarFilesOrDirectories);
}

@Override public int hashCode() {
int result = str2libFile.hashCode();
result = 31 * result + jarFilesOrDirectories.hashCode();
return result;
}

@Override public String toString() {
return "GppInfo{" +
"str2libFile=" + str2libFile +
", jarFilesOrDirectories=" + jarFilesOrDirectories +
'}';
}
}
Loading

0 comments on commit 96a1d37

Please sign in to comment.