mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-15 01:40:02 -04:00
Add Windows support for cl.exe
Co-authored-by: Stephan Seitz <stephan.seitz@fau.de>
This commit is contained in:
parent
a74da044a8
commit
c7422dd257
2 changed files with 41 additions and 24 deletions
|
|
@ -11,7 +11,7 @@ local shell = require'nvim-treesitter.shell_command_selectors'
|
||||||
local M = {}
|
local M = {}
|
||||||
local lockfile = {}
|
local lockfile = {}
|
||||||
|
|
||||||
M.compilers = { vim.fn.getenv('CC'), "cc", "gcc", "clang" }
|
M.compilers = { vim.fn.getenv('CC'), "cc", "gcc", "clang", "cl" }
|
||||||
|
|
||||||
local started_commands = 0
|
local started_commands = 0
|
||||||
local finished_commands = 0
|
local finished_commands = 0
|
||||||
|
|
@ -93,13 +93,6 @@ function M.iter_cmd(cmd_list, i, lang, success_message)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_command(cmd)
|
local function get_command(cmd)
|
||||||
local ret = ''
|
|
||||||
if cmd.opts and cmd.opts.cwd then
|
|
||||||
ret = string.format('cd %s;\n', cmd.opts.cwd)
|
|
||||||
end
|
|
||||||
|
|
||||||
ret = string.format('%s%s ', ret, cmd.cmd)
|
|
||||||
|
|
||||||
local options = ""
|
local options = ""
|
||||||
if cmd.opts and cmd.opts.args then
|
if cmd.opts and cmd.opts.args then
|
||||||
for _, opt in ipairs(cmd.opts.args) do
|
for _, opt in ipairs(cmd.opts.args) do
|
||||||
|
|
@ -107,7 +100,11 @@ local function get_command(cmd)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return string.format('%s%s', ret, options)
|
local final = string.format('%s %s', cmd.cmd, options)
|
||||||
|
if cmd.opts and cmd.opts.cwd then
|
||||||
|
final = shell.make_directory_change_for_command(cmd.opts.cwd, final)
|
||||||
|
end
|
||||||
|
return final
|
||||||
end
|
end
|
||||||
|
|
||||||
local function iter_cmd_sync(cmd_list)
|
local function iter_cmd_sync(cmd_list)
|
||||||
|
|
@ -151,7 +148,8 @@ local function run_install(cache_folder, install_folder, lang, repo, with_sync,
|
||||||
if from_local_path then
|
if from_local_path then
|
||||||
compile_location = repo.url
|
compile_location = repo.url
|
||||||
else
|
else
|
||||||
compile_location = cache_folder..path_sep..(repo.location or project_name)
|
local repo_location = string.gsub(repo.location or project_name, '/', path_sep)
|
||||||
|
compile_location = cache_folder..path_sep..repo_location
|
||||||
end
|
end
|
||||||
local parser_lib_name = install_folder..path_sep..lang..".so"
|
local parser_lib_name = install_folder..path_sep..lang..".so"
|
||||||
|
|
||||||
|
|
@ -192,7 +190,7 @@ local function run_install(cache_folder, install_folder, lang, repo, with_sync,
|
||||||
info = 'Compiling...',
|
info = 'Compiling...',
|
||||||
err = 'Error during compilation',
|
err = 'Error during compilation',
|
||||||
opts = {
|
opts = {
|
||||||
args = vim.tbl_flatten(shell.select_compiler_args(repo)),
|
args = vim.tbl_flatten(shell.select_compiler_args(repo, cc)),
|
||||||
cwd = compile_location
|
cwd = compile_location
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -53,20 +53,31 @@ function M.select_executable(executables)
|
||||||
return vim.tbl_filter(function(c) return c ~= vim.NIL and fn.executable(c) == 1 end, executables)[1]
|
return vim.tbl_filter(function(c) return c ~= vim.NIL and fn.executable(c) == 1 end, executables)[1]
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.select_compiler_args(repo)
|
function M.select_compiler_args(repo, compiler)
|
||||||
local args = {
|
if (string.match(compiler, 'cl$') or string.match(compiler, 'cl.exe$')) then
|
||||||
'-o',
|
return {
|
||||||
'parser.so',
|
'/Fe:',
|
||||||
'-I./src',
|
'parser.so',
|
||||||
repo.files,
|
'/Isrc',
|
||||||
'-shared',
|
repo.files,
|
||||||
'-Os',
|
'-Os',
|
||||||
'-lstdc++',
|
'/LD',
|
||||||
}
|
}
|
||||||
if fn.has('win32') == 0 then
|
else
|
||||||
table.insert(args, '-fPIC')
|
local args = {
|
||||||
|
'-o',
|
||||||
|
'parser.so',
|
||||||
|
'-I./src',
|
||||||
|
repo.files,
|
||||||
|
'-shared',
|
||||||
|
'-Os',
|
||||||
|
'-lstdc++',
|
||||||
|
}
|
||||||
|
if fn.has('win32') == 0 then
|
||||||
|
table.insert(args, '-fPIC')
|
||||||
|
end
|
||||||
|
return args
|
||||||
end
|
end
|
||||||
return args
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.select_install_rm_cmd(cache_folder, project_name)
|
function M.select_install_rm_cmd(cache_folder, project_name)
|
||||||
|
|
@ -179,4 +190,12 @@ function M.select_download_commands(repo, project_name, cache_folder, revision)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M.make_directory_change_for_command(dir, command)
|
||||||
|
if fn.has('win32') == 1 then
|
||||||
|
return string.format("pushd %s & %s & popd", dir, command)
|
||||||
|
else
|
||||||
|
return string.format("cd %s;\n %s", dir, command)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue