premake/modules/d/_preload.lua

268 lines
4.1 KiB
Lua

--
-- Name: d/_preload.lua
-- Purpose: Define the D language API's.
-- Author: Manu Evans
-- Created: 2013/10/28
-- Copyright: (c) 2013-2015 Manu Evans and the Premake project
--
-- TODO:
-- MonoDevelop/Xamarin Studio has 'workspaces', which correspond to collections
-- of Premake workspaces. If premake supports multiple workspaces, we should
-- write out a workspace file...
local p = premake
local api = p.api
--
-- Register the D extension
--
p.D = "D"
api.addAllowed("language", p.D)
api.addAllowed("floatingpoint", "None")
api.addAllowed("flags", {
"CodeCoverage",
"Color",
"Documentation",
"GenerateHeader",
"GenerateJSON",
"GenerateMap",
"LowMem",
"Profile",
"Quiet",
"RetainPaths",
"SymbolsLikeC",
"UnitTest",
-- These are used by C++/D mixed $todo move them somewhere else? "flags2" "Dflags"?
-- [Code Generation Flags]
"UseLDC",
"ProfileGC",
"StackFrame",
"StackStomp",
"AllInstantiate",
"BetterC",
"Main",
"PerformSyntaxCheckOnly",
-- [Messages Flags]
"ShowCommandLine",
"Verbose",
"ShowTLS",
"ShowGC",
"IgnorePragma",
"ShowDependencies",
})
--
-- Register some D specific properties
--
api.register {
name = "boundscheck",
scope = "config",
kind = "string",
allowed = {
"Default",
"Off",
"On",
"SafeOnly",
},
}
api.register {
name = "compilationmodel",
scope = "config",
kind = "string",
allowed = {
"Default",
"File",
"Package", -- TODO: this doesn't work with gmake!!
"Project",
},
}
api.register {
name = "checkaction",
scope = "config",
kind = "string",
allowed = {
"Default",
"D",
"C",
"Halt",
"Context",
},
}
api.register {
name = "computetargets",
scope = "config",
kind = "list:string",
}
-- api.register {
-- name = "debugcode",
-- scope = "config",
-- kind = "string",
-- }
api.register {
name = "debugconstants",
scope = "config",
kind = "list:string",
tokens = true,
}
api.register {
name = "debuglevel",
scope = "config",
kind = "integer",
}
api.register {
name = "dependenciesfile",
scope = "config",
kind = "path",
tokens = true,
}
api.register {
name = "deprecatedfeatures",
scope = "config",
kind = "string",
allowed = {
"Default",
"Allow",
"Warn",
"Error",
},
}
api.register {
name = "docdir",
scope = "config",
kind = "path",
tokens = true,
}
api.register {
name = "docname",
scope = "config",
kind = "string",
tokens = true,
}
api.register {
name = "headerdir",
scope = "config",
kind = "path",
tokens = true,
}
api.register {
name = "headername",
scope = "config",
kind = "string",
tokens = true,
}
api.register {
name = "jsonfile",
scope = "config",
kind = "path",
tokens = true,
}
api.register {
name = "importdirs",
scope = "config",
kind = "list:path",
tokens = true,
}
api.register {
name = "preview",
scope = "config",
kind = "list:string",
allowed = {
"dip25",
"dip1000",
"dip1008",
"fieldwise",
"markdown",
"fixAliasThis",
"intpromote",
"dtorfields",
},
}
api.register {
name = "revert",
scope = "config",
kind = "list:string",
allowed = {
"dip25",
"import",
},
}
api.register {
name = "stringimportdirs",
scope = "config",
kind = "list:path",
tokens = true,
}
api.register {
name = "transition",
scope = "config",
kind = "list:string",
allowed = {
"field",
"checkimports",
"complex",
"tls",
"vmarkdown",
},
}
api.register {
name = "versionconstants",
scope = "config",
kind = "list:string",
tokens = true,
}
api.register {
name = "versionlevel",
scope = "config",
kind = "integer",
}
--
-- Provide information for the help output
--
newoption
{
category = "compilers",
trigger = "dc",
value = "VALUE",
description = "Choose a D compiler",
allowed = {
{ "dmd", "Digital Mars (dmd)" },
{ "gdc", "GNU GDC (gdc)" },
{ "ldc", "LLVM LDC (ldc2)" },
}
}
--
-- Decide when to load the full module
--
return function (cfg)
return (cfg.language == p.D or cfg.language == "C" or cfg.language == "C++")
end