ats-pkg-3.4.0.8: dhall/atspkg-prelude.dhall
{- Dhall prelude functions -}
let concatMapSep =
https://raw.githubusercontent.com/dhall-lang/dhall-lang/9f259cd68870b912fbf2f2a08cd63dc3ccba9dc3/Prelude/Text/concatMapSep sha256:c272aca80a607bc5963d1fcb38819e7e0d3e72ac4d02b1183b1afb6a91340840
let map =
https://raw.githubusercontent.com/dhall-lang/dhall-lang/9f259cd68870b912fbf2f2a08cd63dc3ccba9dc3/Prelude/List/map sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
let ATSConstraint =
{ lower : Optional (List Natural), upper : Optional (List Natural) }
let LibDep = { _1 : Text, _2 : ATSConstraint }
let LinkType = { _1 : Text, _2 : Text }
let ForeignCabal =
{ projectFile : Optional Text, cabalFile : Text, objectFile : Text }
let TargetPair = { hs : Text, ats : Text, cpphs : Bool }
let CCompiler = < CompCert | Clang | GCC | ICC | CC >
let Bin =
{ src : Text
, target : Text
, libs : List Text
, hsDeps : List ForeignCabal
, hs2ats : List TargetPair
, gcBin : Bool
, extras : List Text
}
let Lib =
{ name : Text
, src : List Text
, libTarget : Text
, libs : List Text
, includes : List Text
, hsDeps : List ForeignCabal
, links : List LinkType
, hs2ats : List TargetPair
, extras : List Text
, static : Bool
}
let Src =
{ atsSrc : Text
, cTarget : Text
, atsGen : List TargetPair
, extras : List Text
}
let Script = { configure : Optional Text, build : Text, install : Text }
let Debian =
{ package : Text
, version : List Natural
, maintainer : Text
, description : Text
, target : Text
, manpage : Optional Text
, binaries : List Text
, libraries : List Text
, headers : List Text
, license : Optional Text
, changelog : Optional Text
}
let script =
λ(x : { dir : Text, target : Optional Text })
→ { configure = Some "./configure --prefix=${x.dir}"
, build = "make -j6"
, install = "make install"
}
: Script
let src =
λ(x : { atsSrc : Text, cTarget : Text })
→ { atsSrc = x.atsSrc
, cTarget = x.cTarget
, atsGen = [] : List TargetPair
, extras = [] : List Text
}
let iccFlags = [ "-D__PURE_INTEL_C99_HEADERS__" ]
let mapSrc =
λ(x : List { atsSrc : Text, cTarget : Text })
→ map { atsSrc : Text, cTarget : Text } Src src x
let patsHome = ".atspkg/contrib"
let showVersion = λ(x : List Natural) → concatMapSep "." Natural Natural/show x
let none = None (List Natural)
let plainDeps = λ(x : Text) → { _1 = x, _2 = { lower = none, upper = none } }
let eqDeps =
λ(x : { name : Text, version : List Natural })
→ { _1 = x.name, _2 = { lower = Some x.version, upper = Some x.version } }
let lowerDeps =
λ(x : { name : Text, version : List Natural })
→ { _1 = x.name, _2 = { lower = Some x.version, upper = none } }
let upperDeps =
λ(x : { name : Text, version : List Natural })
→ { _1 = x.name, _2 = { lower = none, upper = Some x.version } }
let mapPlainDeps = λ(x : List Text) → map Text LibDep plainDeps x
let dep =
{ dir = patsHome
, libVersion = [ 0, 1, 0 ]
, libDeps = [] : List LibDep
, libBldDeps = [] : List LibDep
, libCDeps = [] : List LibDep
, description = None Text
, script = [] : List Text
}
let common =
{ libs = [] : List Text
, hsDeps = [] : List ForeignCabal
, hs2ats = [] : List TargetPair
, extras = [] : List Text
}
let bin = common ⫽ { gcBin = False }
let lib =
common
⫽ { links = [] : List { _1 : Text, _2 : Text }
, includes = [] : List Text
, static = False
}
let staticLib = lib ⫽ { static = True }
let Solver = < PatsSolve | Z3 | Ignore >
let solver = Solver.PatsSolve
let ignore = Solver.Ignore
let default =
{ bin = [] : List Bin
, test = [] : List Bin
, bench = [] : List Bin
, libraries = [] : List Lib
, man = None Text
, completions = None Text
, version = [ 0, 3, 13 ]
, compiler = [ 0, 3, 13 ]
, dependencies = [] : List LibDep
, clib = [] : List LibDep
, buildDeps = [] : List LibDep
, ccompiler = "gcc"
, cflags = [ "-O2" ]
, atsFlags = [] : List Text
, atsSource = [] : List Src
, dynLink = True
, extSolve = solver
, debPkg = None Debian
, atsLib = True
}
let debian =
λ(project : Text)
→ { package = project
, target = "target/${project}.deb"
, manpage = None Text
, binaries = [] : List Text
, libraries = [] : List Text
, headers = [] : List Text
, license = None Text
, changelog = None Text
}
let makePkg =
λ(rec : { x : List Natural, name : Text, githubUsername : Text })
→ dep
⫽ { libName = rec.name
, dir = "${patsHome}"
, url =
"https://github.com/${rec.githubUsername}/${rec.name}/archive/${showVersion
rec.x}.tar.gz"
, libVersion = rec.x
}
let makeNpmPkg =
λ(rec : { x : List Natural, name : Text, unpackDir : Text })
→ dep
⫽ { libName = rec.name
, dir = "${patsHome}/${rec.unpackDir}"
, url =
"https://registry.npmjs.org/${rec.unpackDir}/-/${rec.unpackDir}-${showVersion
rec.x}.tgz"
, libVersion = rec.x
}
let makeHsPkg =
λ(rec : { x : List Natural, name : Text })
→ dep
⫽ { libName = rec.name
, dir = "${patsHome}"
, url =
"https://hackage.haskell.org/package/${rec.name}-${showVersion
rec.x}/${rec.name}-${showVersion
rec.x}.tar.gz"
, libVersion = rec.x
}
let makePkgDescr =
λ ( x
: { x : List Natural
, name : Text
, githubUsername : Text
, description : Text
}
)
→ makePkg { x = x.x, name = x.name, githubUsername = x.githubUsername }
⫽ { description = Some x.description }
let cabalDir = "dist-newstyle/lib"
let emptySrc = [] : List Src
let emptyBin = [] : List Bin
let emptyLib = [] : List Lib
let mkDeb = λ(deb : Debian) → Some deb
let noPrelude =
[ "-D_ATS_CCOMP_PRELUDE_NONE_"
, "-D_ATS_CCOMP_EXCEPTION_NONE_"
, "-D_ATS_CCOMP_RUNTIME_NONE_"
]
let atsProject = "target"
let gcc = CCompiler.GCC
let clang = CCompiler.Clang
let compCert = CCompiler.CompCert
let icc = CCompiler.ICC
let cc = CCompiler.CC
let printCompiler =
λ(cc : CCompiler)
→ merge
{ CompCert = "ccomp"
, Clang = "clang"
, GCC = "gcc"
, ICC = "icc"
, CC = "cc"
}
cc
let ccFlags =
λ(cc : CCompiler)
→ merge
{ CompCert = [ "-O2", "-fstruct-passing" ]
, Clang = [ "-O2", "-mtune=native", "-flto" ]
, GCC = [ "-O2", "-mtune=native", "-flto" ]
, ICC =
[ "-O2"
, "-mtune=native"
, "-flto"
, "-D__PURE_INTEL_C99_HEADERS__"
]
, CC = [ "-O2" ]
}
cc
let iccFlags = [ "-D__PURE_INTEL_C99_HEADERS__" ]
in { mkDeb = mkDeb
, emptySrc = emptySrc
, emptyBin = emptyBin
, emptyLib = emptyLib
, showVersion = showVersion
, makePkg = makePkg
, bin = bin
, lib = lib
, dep = dep
, staticLib = staticLib
, default = default
, plainDeps = plainDeps
, lowerDeps = lowerDeps
, upperDeps = upperDeps
, eqDeps = eqDeps
, mapPlainDeps = mapPlainDeps
, src = src
, mapSrc = mapSrc
, makePkgDescr = makePkgDescr
, makeHsPkg = makeHsPkg
, makeNpmPkg = makeNpmPkg
, patsHome = patsHome
, cabalDir = cabalDir
, solver = solver
, ignore = ignore
, debian = debian
, noPrelude = noPrelude
, atsProject = atsProject
, gcc = gcc
, clang = clang
, compCert = compCert
, icc = icc
, cc = cc
, printCompiler = printCompiler
, ccFlags = ccFlags
, iccFlags = iccFlags
}