packages feed

helium-1.8: src/Makefile

#-----------------------------------------------------------------------
#  Compiling attribute grammar code for The Helium Compiler
#  This Makefile only needs to be invoked after modifying files with
#  extension .ag. Otherwise it suffices to use cabal install.
#-----------------------------------------------------------------------

# make		     - build Haskell sources out of AG code
# make cleanag - remove all .hs files that are derivatives of .ag files

default: all
all: ag

AG      = uuagc -P Helium/Syntax -P Helium/StaticAnalysis/StaticChecks -P Helium/StaticAnalysis/Inferencers -P Helium/CodeGeneration -P Helium/StaticAnalysis/Directives
AG_OPTS = -mscfrw --kennedywarren

# AG sources
AGSOURCES = \
     Helium/Syntax/UHA_Pretty.hs \
     Helium/Syntax/UHA_OneLine.hs \
     Helium/StaticAnalysis/StaticChecks/StaticChecks.hs \
     Helium/StaticAnalysis/Inferencers/TypeInferencing.hs \
     Helium/StaticAnalysis/Inferencers/KindInferencing.hs \
     Helium/CodeGeneration/CodeGeneration.hs \
     Helium/Syntax/UHA_Syntax.hs \
     Helium/ModuleSystem/ExtractImportDecls.hs \
     Helium/StaticAnalysis/Directives/TS_Syntax.hs \
     Helium/StaticAnalysis/Directives/TS_Apply.hs \
     Helium/StaticAnalysis/Directives/TS_Analyse.hs \
     Helium/StaticAnalysis/Directives/TS_CoreSyntax.hs \
     Helium/StaticAnalysis/Directives/TS_ToCore.hs \
     Helium/Parser/ResolveOperators.hs

libraries:
	@echo "****************************************************"
	@echo "  Libraries (with overloading)"
	@echo "****************************************************"
	cd ../lib; $(MAKE) 
	@echo "****************************************************"
	@echo "  Simple libraries (without overloading)"
	@echo "****************************************************"
	cd ../lib/simple; $(MAKE) 

# AG sources

ag : $(AGSOURCES)

cleanag : 
	$(RM) $(AGSOURCES)

ifdef AG
Helium/Parser/ResolveOperators.hs : \
		Helium/Parser/ResolveOperators.ag \
		Helium/Syntax/UHA_Syntax.ag
	# AG ResolveOperators
	$(AG) $(AG_OPTS) --self --module=Helium.Parser.ResolveOperators Helium/Parser/ResolveOperators.ag

Helium/Syntax/UHA_Pretty.hs : \
		Helium/Syntax/UHA_Pretty.ag Helium/Syntax/UHA_Syntax.ag
	# AG UHA_Pretty
	$(AG) $(AG_OPTS) --module=Helium.Syntax.UHA_Pretty Helium/Syntax/UHA_Pretty.ag

Helium/Syntax/UHA_OneLine.hs : \
		Helium/Syntax/UHA_OneLine.ag Helium/Syntax/UHA_Syntax.ag
	# AG UHA_OneLine
	$(AG) $(AG_OPTS) --self --module=Helium.Syntax.UHA_OneLine Helium/Syntax/UHA_OneLine.ag

Helium/StaticAnalysis/StaticChecks/StaticChecks.hs : \
		Helium/StaticAnalysis/StaticChecks/StaticChecks.ag \
		Helium/StaticAnalysis/StaticChecks/KindChecking.ag \
    Helium/StaticAnalysis/StaticChecks/TopLevelErrors.ag \
    Helium/StaticAnalysis/StaticChecks/MiscErrors.ag \
    Helium/StaticAnalysis/StaticChecks/Warnings.ag \
		Helium/StaticAnalysis/StaticChecks/ExportErrors.ag \
    Helium/StaticAnalysis/StaticChecks/Collect.ag \
    Helium/StaticAnalysis/StaticChecks/HeliumPartialSyntax.ag \
    Helium/StaticAnalysis/StaticChecks/Scope.ag \
    Helium/StaticAnalysis/StaticChecks/ScopeErrors.ag \
		Helium/Syntax/UHA_Syntax.ag 
                
	# AG StaticAnalysis
	$(AG) $(AG_OPTS) --self --module=Helium.StaticAnalysis.StaticChecks.StaticChecks Helium/StaticAnalysis/StaticChecks/StaticChecks.ag

Helium/StaticAnalysis/Inferencers/TypeInferencing.hs : \
		Helium/StaticAnalysis/Inferencers/TypeInferencing.ag \
    Helium/StaticAnalysis/Inferencers/TypeInferenceRules.ag \
    Helium/StaticAnalysis/Inferencers/TypeInferenceOverloading.ag \
    Helium/StaticAnalysis/Inferencers/TypeInferenceCollect.ag \
    Helium/StaticAnalysis/Inferencers/TypeInferenceInfo.ag \
    Helium/StaticAnalysis/Inferencers/PatternMatchWarnings.ag \
    Helium/StaticAnalysis/Inferencers/LocalInfo.ag \
    Helium/StaticAnalysis/Inferencers/GlobalInfo.ag \
    Helium/StaticAnalysis/StaticChecks/HeliumPartialSyntax.ag \
		Helium/Syntax/UHA_Syntax.ag \
    Helium/StaticAnalysis/StaticChecks/Scope.ag\
    Helium/StaticAnalysis/Directives/TS_PatternMatching.ag
                
	# AG TypeInferencing
	$(AG) $(AG_OPTS) --self --module=Helium.StaticAnalysis.Inferencers.TypeInferencing Helium/StaticAnalysis/Inferencers/TypeInferencing.ag

Helium/StaticAnalysis/Inferencers/KindInferencing.hs : \
		Helium/StaticAnalysis/Inferencers/KindInferencing.ag \
    Helium/Syntax/UHA_Syntax.ag \
                
	# AG TypeInferencing
	$(AG) $(AG_OPTS) --self --module=Helium.StaticAnalysis.Inferencers.KindInferencing Helium/StaticAnalysis/Inferencers/KindInferencing.ag

Helium/CodeGeneration/CodeGeneration.hs : \
		Helium/CodeGeneration/CodeGeneration.ag \
		Helium/Syntax/UHA_Syntax.ag \
		Helium/CodeGeneration/ToCoreModule.ag \
		Helium/CodeGeneration/ToCoreDecl.ag \
		Helium/CodeGeneration/ToCoreExpr.ag \
		Helium/CodeGeneration/ToCorePat.ag \
		Helium/CodeGeneration/ToCoreName.ag
	# AG CodeGeneration
	$(AG) $(AG_OPTS) --self --module=Helium.CodeGeneration.CodeGeneration Helium/CodeGeneration/CodeGeneration.ag

Helium/Syntax/UHA_Syntax.hs : Helium/Syntax/UHA_Syntax.ag
	# AG UHA_Syntax
	$(AG) -dmr --module=Helium.Syntax.UHA_Syntax Helium/Syntax/UHA_Syntax.ag

Helium/ModuleSystem/ExtractImportDecls.hs : \
		Helium/ModuleSystem/ExtractImportDecls.ag \
		Helium/CodeGeneration/ToCoreName.ag \
		Helium/Syntax/UHA_Syntax.ag
	# AG ExtractImportDecls
	$(AG) $(AG_OPTS) --self --module=Helium.ModuleSystem.ExtractImportDecls Helium/ModuleSystem/ExtractImportDecls.ag
        
Helium/StaticAnalysis/Directives/TS_Syntax.hs : \
	  Helium/StaticAnalysis/Directives/TS_Syntax.ag
	# AG TS_Syntax
	$(AG) -dmr --module=Helium.StaticAnalysis.Directives.TS_Syntax Helium/StaticAnalysis/Directives/TS_Syntax.ag

Helium/StaticAnalysis/Directives/TS_Analyse.hs : \
    Helium/StaticAnalysis/Directives/TS_Syntax.ag \
    Helium/StaticAnalysis/Directives/TS_Collect.ag \
    Helium/StaticAnalysis/Directives/TS_Analyse.ag \
    Helium/Syntax/UHA_Syntax.ag 
	# AG TS_Analyse
	$(AG) $(AG_OPTS) --self --module=Helium.StaticAnalysis.Directives.TS_Analyse Helium/StaticAnalysis/Directives/TS_Analyse.ag

Helium/StaticAnalysis/Directives/TS_Apply.hs : \
    Helium/StaticAnalysis/Directives/TS_Syntax.ag \
    Helium/StaticAnalysis/Directives/TS_Collect.ag \
    Helium/StaticAnalysis/Directives/TS_Apply.ag \
    Helium/StaticAnalysis/Directives/TS_CoreSyntax.ag \
    Helium/Syntax/UHA_Syntax.ag \
	# AG TS_Syntax
	$(AG) -mscfw --module=Helium.StaticAnalysis.Directives.TS_Apply Helium/StaticAnalysis/Directives/TS_Apply.ag

Helium/StaticAnalysis/Directives/TS_CoreSyntax.hs : \
	  Helium/StaticAnalysis/Directives/TS_CoreSyntax.ag \
	# AG TS_CoreSyntax
	$(AG) -md --module=Helium.StaticAnalysis.Directives.TS_CoreSyntax Helium/StaticAnalysis/Directives/TS_CoreSyntax.ag

Helium/StaticAnalysis/Directives/TS_ToCore.hs : \
    Helium/StaticAnalysis/Directives/TS_Syntax.ag \
    Helium/StaticAnalysis/Directives/TS_Collect.ag \
    Helium/StaticAnalysis/Directives/TS_ToCore.ag \
    Helium/Syntax/UHA_Syntax.ag \
    Helium/Syntax/UHA_OneLine.ag 
	# AG TS_Syntax
	$(AG) -mscrfw --self --module=Helium.StaticAnalysis.Directives.TS_ToCore Helium/StaticAnalysis/Directives/TS_ToCore.ag                 
endif