Search in sources :

Example 1 with CompileGoal

use of org.metaborg.core.action.CompileGoal in project spoofax by metaborg.

the class ActionFacetFromESV method addCompileGoal.

private static void addCompileGoal(IStrategoAppl esv, Multimap<ITransformGoal, ITransformAction> actions) {
    final List<IStrategoAppl> onSaveHandlers = ESVReader.collectTerms(esv, "OnSave");
    if (onSaveHandlers.isEmpty()) {
        return;
    }
    for (IStrategoAppl onSaveHandler : onSaveHandlers) {
        final String strategyName = Tools.asJavaString(onSaveHandler.getSubterm(0).getSubterm(0));
        final ITransformGoal goal = new CompileGoal();
        final ITransformAction action = new TransformAction("Compile", goal, new TransformActionFlags(), strategyName);
        actions.put(goal, action);
    }
}
Also used : CompileGoal(org.metaborg.core.action.CompileGoal) ITransformGoal(org.metaborg.core.action.ITransformGoal) TransformActionFlags(org.metaborg.core.action.TransformActionFlags) IStrategoAppl(org.spoofax.interpreter.terms.IStrategoAppl) ITransformAction(org.metaborg.core.action.ITransformAction) ITransformAction(org.metaborg.core.action.ITransformAction)

Example 2 with CompileGoal

use of org.metaborg.core.action.CompileGoal in project spoofax by metaborg.

the class LanguageSpecBuilder method compile.

public void compile(LanguageSpecBuildInput input) throws MetaborgException {
    logger.debug("Running pre-Java build for {}", input.languageSpec().location());
    initPluto();
    try {
        final String path = path(input);
        plutoBuild(GenerateSourcesBuilder.request(generateSourcesBuilderInput(input)), path);
    } catch (RequiredBuilderFailed e) {
        if (e.getMessage().contains("no rebuild of failing builder")) {
            throw new MetaborgException(failingRebuildMessage, e);
        } else {
            throw new MetaborgException();
        }
    } catch (RuntimeException e) {
        throw e;
    } catch (Throwable e) {
        throw new MetaborgException(e);
    }
    final SpoofaxCommonPaths paths = new SpoofaxLangSpecCommonPaths(input.languageSpec().location());
    // HACK: compile the main ESV file to make sure that packed.esv file is always available.
    final Iterable<FileObject> esvRoots = languagePathService.sourcePaths(input.project(), SpoofaxConstants.LANG_ESV_NAME);
    final FileObject mainEsvFile = paths.findEsvMainFile(esvRoots);
    try {
        if (mainEsvFile != null && mainEsvFile.exists()) {
            logger.info("Compiling Main ESV file {}", mainEsvFile);
            // @formatter:off
            final BuildInput buildInput = new BuildInputBuilder(input.languageSpec()).addSource(mainEsvFile).addTransformGoal(new CompileGoal()).withMessagePrinter(new StreamMessagePrinter(sourceTextService, false, true, logger)).build(dependencyService, languagePathService);
            // @formatter:on
            final ISpoofaxBuildOutput result = runner.build(buildInput, null, null).schedule().block().result();
            if (!result.success()) {
                throw new MetaborgException("Compiling Main ESV file failed");
            }
        }
    } catch (FileSystemException e) {
        final String message = logger.format("Could not compile ESV file {}", mainEsvFile);
        throw new MetaborgException(message, e);
    } catch (InterruptedException e) {
    // Ignore
    }
    // HACK: compile the main DS file if available, after generating sources (because ds can depend on Stratego
    // strategies), to generate an interpreter.
    final Iterable<FileObject> dsRoots = languagePathService.sourcePaths(input.project(), SpoofaxConstants.LANG_DYNSEM_NAME);
    final FileObject mainDsFile = paths.findDsMainFile(dsRoots, input.languageSpec().config().strategoName());
    try {
        if (mainDsFile != null && mainDsFile.exists()) {
            if (languageIdentifierService.identify(mainDsFile, input.project()) == null) {
                logger.error("Could not identify DynSem main file {}, please add DynSem as a compile dependency", mainDsFile);
            }
            logger.info("Compiling main DynSem file {}", mainDsFile);
            // @formatter:off
            final BuildInput buildInput = new BuildInputBuilder(input.languageSpec()).addSource(mainDsFile).addTransformGoal(new EndNamedGoal("Generate interpreter")).withMessagePrinter(new StreamMessagePrinter(sourceTextService, false, true, logger)).build(dependencyService, languagePathService);
            // @formatter:on
            final ISpoofaxBuildOutput result = runner.build(buildInput, null, null).schedule().block().result();
            if (!result.success()) {
                logger.error("Compiling main DynSem file {} failed", mainDsFile);
            }
        }
    } catch (FileSystemException e) {
        final String message = logger.format("Could not compile DynSem file {}", mainDsFile);
        throw new MetaborgException(message, e);
    } catch (InterruptedException e) {
    // Ignore
    }
    for (IBuildStep buildStep : buildSteps) {
        buildStep.execute(LanguageSpecBuildPhase.compile, input);
    }
}
Also used : StreamMessagePrinter(org.metaborg.core.messages.StreamMessagePrinter) CompileGoal(org.metaborg.core.action.CompileGoal) ISpoofaxBuildOutput(org.metaborg.spoofax.core.build.ISpoofaxBuildOutput) MetaborgException(org.metaborg.core.MetaborgException) BuildInputBuilder(org.metaborg.core.build.BuildInputBuilder) FileSystemException(org.apache.commons.vfs2.FileSystemException) BuildInput(org.metaborg.core.build.BuildInput) EndNamedGoal(org.metaborg.core.action.EndNamedGoal) RequiredBuilderFailed(build.pluto.builder.RequiredBuilderFailed) FileObject(org.apache.commons.vfs2.FileObject) SpoofaxCommonPaths(org.metaborg.spoofax.core.build.SpoofaxCommonPaths)

Aggregations

CompileGoal (org.metaborg.core.action.CompileGoal)2 RequiredBuilderFailed (build.pluto.builder.RequiredBuilderFailed)1 FileObject (org.apache.commons.vfs2.FileObject)1 FileSystemException (org.apache.commons.vfs2.FileSystemException)1 MetaborgException (org.metaborg.core.MetaborgException)1 EndNamedGoal (org.metaborg.core.action.EndNamedGoal)1 ITransformAction (org.metaborg.core.action.ITransformAction)1 ITransformGoal (org.metaborg.core.action.ITransformGoal)1 TransformActionFlags (org.metaborg.core.action.TransformActionFlags)1 BuildInput (org.metaborg.core.build.BuildInput)1 BuildInputBuilder (org.metaborg.core.build.BuildInputBuilder)1 StreamMessagePrinter (org.metaborg.core.messages.StreamMessagePrinter)1 ISpoofaxBuildOutput (org.metaborg.spoofax.core.build.ISpoofaxBuildOutput)1 SpoofaxCommonPaths (org.metaborg.spoofax.core.build.SpoofaxCommonPaths)1 IStrategoAppl (org.spoofax.interpreter.terms.IStrategoAppl)1