105 lines
2.5 KiB
Lua
105 lines
2.5 KiB
Lua
local p = premake
|
|
local project = p.project
|
|
local workspace = p.workspace
|
|
local tree = p.tree
|
|
local vscode = p.modules.vscode
|
|
|
|
vscode.workspace = {}
|
|
vscode.workspace.tasks = {}
|
|
|
|
local m = vscode.workspace
|
|
|
|
function m.generate(wks)
|
|
p.utf8()
|
|
|
|
p.push('{')
|
|
p.push('"folders": [')
|
|
|
|
-- Project List
|
|
tree.traverse(workspace.grouptree(wks), {
|
|
onleaf = function(n)
|
|
local prj = n.project
|
|
|
|
local prjpath = path.getrelative(prj.workspace.location, prj.location)
|
|
p.push('{')
|
|
p.w('"path": "%s"', prjpath)
|
|
p.pop('},')
|
|
end,
|
|
})
|
|
|
|
-- HACK(Peter): Hack around the tasks not being picked up when workspace is opened
|
|
local prjpath = path.getrelative(wks.location, "Tasks")
|
|
p.push('{')
|
|
p.w('"path": "%s"', prjpath)
|
|
p.pop('}')
|
|
|
|
p.pop(']')
|
|
p.pop('}')
|
|
end
|
|
|
|
local tasks = vscode.workspace.tasks
|
|
|
|
function tasks.buildSolutionTask(wks)
|
|
local solutionFile = p.filename(wks, ".sln")
|
|
|
|
local enablePreReleases = _OPTIONS["enable_prereleases"]
|
|
local vswhere = '"C:\\Program Files (x86)\\Microsoft Visual Studio\\Installer\\vswhere.exe" -latest';
|
|
|
|
if enablePreReleases then
|
|
vswhere = vswhere .. ' -prerelease'
|
|
end
|
|
|
|
vswhere = vswhere .. ' -find MSBuild'
|
|
|
|
local msBuildPath, err = os.outputof(vswhere)
|
|
msBuildPath = path.normalize(path.join(msBuildPath, "Current", "Bin", "MSBuild.exe"))
|
|
|
|
for cfg in workspace.eachconfig(wks) do
|
|
p.push('{')
|
|
p.w('"type": "shell",')
|
|
p.w('"label": "Build All (%s)",', cfg.name)
|
|
p.w('"command": "%s",', msBuildPath)
|
|
p.w('"args": ["%s", "-p:Configuration=%s"],', solutionFile, cfg.name)
|
|
p.w('"problemMatcher": "$msCompile",')
|
|
p.w('"group": "build"')
|
|
p.pop('},')
|
|
end
|
|
end
|
|
|
|
function tasks.buildMakefileTask(wks)
|
|
for cfg in workspace.eachconfig(wks) do
|
|
p.push('{')
|
|
p.w('"type": "shell",')
|
|
p.w('"label": "Build All (%s)",', cfg.name)
|
|
p.w('"command": "make",')
|
|
p.w('"args": ["-j$((`nproc` - 1))", "config=%s"],', cfg.name)
|
|
p.w('"problemMatcher": "$gcc",')
|
|
p.w('"group": "build"')
|
|
p.pop('},')
|
|
end
|
|
end
|
|
|
|
tasks.buildTasks = function(wks)
|
|
if _TARGET_OS == "windows" then
|
|
return {
|
|
tasks.buildSolutionTask
|
|
}
|
|
else
|
|
return {
|
|
tasks.buildMakefileTask
|
|
}
|
|
end
|
|
|
|
end
|
|
|
|
function tasks.generate(wks)
|
|
p.push('{')
|
|
p.w('"version": "2.0.0",')
|
|
p.push('"tasks": [')
|
|
|
|
p.callArray(tasks.buildTasks, wks)
|
|
|
|
p.pop(']')
|
|
p.pop('}')
|
|
end
|