Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support TI-CGT C2000 compiler #6113

Merged
merged 3 commits into from
Jan 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
* [#5945](https://github.com/xmake-io/xmake/issues/5945): Check pkgconfig/cmake importfiles for package
* [#6054](https://github.com/xmake-io/xmake/issues/6054): Add xmake bundle for linux
* [#6071](https://github.com/xmake-io/xmake/issues/6071): Improve to download package for git url, support for sparse-checkout
* [#5163](https://github.com/xmake-io/xmake/issues/5163): Support TI-CGT C6000 compiler
* [#5163](https://github.com/xmake-io/xmake/issues/5163): Support TI-CGT C2000/C6000 compiler

### Changes

Expand Down Expand Up @@ -1950,7 +1950,7 @@
* [#5945](https://github.com/xmake-io/xmake/issues/5945): 检测 pkgconfig/cmake 导入文件
* [#6054](https://github.com/xmake-io/xmake/issues/6054): 为 linux 添加 xmake bundle 包
* [#6071](https://github.com/xmake-io/xmake/issues/6071): 改进 git 包下载,支持仅仅 clone 指定子目录
* [#5163](https://github.com/xmake-io/xmake/issues/5163): 支持 TI-CGT C6000 编译器
* [#5163](https://github.com/xmake-io/xmake/issues/5163): 支持 TI-CGT C2000/C6000 编译器

### 改进

Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@ iverilog Icarus Verilog
verilator Verilator open-source SystemVerilog simulator and lint system
cosmocc build-once run-anywhere
hdk Harmony SDK
ti-c2000 TI-CGT C2000 compiler
ti-c6000 TI-CGT C6000 compiler
```

Expand Down
1 change: 1 addition & 0 deletions README_zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,7 @@ iverilog Icarus Verilog
verilator Verilator open-source SystemVerilog simulator and lint system
cosmocc build-once run-anywhere
hdk Harmony SDK
ti-c2000 TI-CGT C2000 compiler
ti-c6000 TI-CGT C6000 compiler
```

Expand Down
27 changes: 27 additions & 0 deletions xmake/modules/core/tools/ar2000.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
--!A cross-platform build utility based on Lua
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-- Copyright (C) 2015-present, TBOOX Open Source Group.
--
-- @author ruki
-- @file ar2000.lua
--

inherit("ar")

-- init it
function init(self)
self:set("arflags", "-r")
end

207 changes: 207 additions & 0 deletions xmake/modules/core/tools/cl2000.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
--!A cross-platform build utility based on Lua
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-- Copyright (C) 2015-present, TBOOX Open Source Group.
--
-- @author ruki
-- @file cl2000.lua
--

-- imports
import("core.base.option")
import("core.base.global")
import("core.project.policy")
import("core.language.language")
import("utils.progress")

-- init it
function init(self)
end

-- make the symbol flag
function nf_symbol(self, level)
-- only for source kind
local kind = self:kind()
if language.sourcekinds()[kind] then
local maps = _g.symbol_maps
if not maps then
maps =
{
debug = "-g"
}
_g.symbol_maps = maps
end
return maps[level .. '_' .. kind] or maps[level]
end
end

-- make the optimize flag
function nf_optimize(self, level)
local maps =
{
none = "-O0"
, fast = "-O1"
, faster = "-O2"
, fastest = "-O3"
, smallest = "-m3"
, aggressive = "-O3"
}
return maps[level]
end

-- make the define flag
function nf_define(self, macro)
return "-D" .. macro
end

-- make the undefine flag
function nf_undefine(self, macro)
return "-U" .. macro
end

-- make the includedir flag
function nf_includedir(self, dir)
return {"-I" .. dir}
end

-- make the sysincludedir flag
function nf_sysincludedir(self, dir)
return nf_includedir(self, dir)
end

-- make the link flag
function nf_link(self, lib)
if not lib:endswith(".a") and not lib:endswith(".so") then
lib = "lib" .. lib .. ".a"
end
return "-l" .. lib
end

-- make the syslink flag
function nf_syslink(self, lib)
return nf_link(self, lib)
end

-- make the linkdir flag
function nf_linkdir(self, dir)
return {"-i" .. path.translate(dir)}
end

-- make the rpathdir flag
function nf_rpathdir(self, dir, opt)
opt = opt or {}
local extra = opt.extra
if extra and extra.installonly then
return
end
dir = path.translate(dir)
return {"-rpath=" .. dir}
end

-- make the link arguments list
function linkargv(self, objectfiles, targetkind, targetfile, flags, opt)
local argv = table.join("-z", "--output_file=" .. targetfile, objectfiles, flags)
return self:program(), argv
end

-- link the target file
--
-- maybe we need to use os.vrunv() to show link output when enable verbose information
-- @see https://github.com/xmake-io/xmake/discussions/2916
--
function link(self, objectfiles, targetkind, targetfile, flags, opt)
opt = opt or {}
os.mkdir(path.directory(targetfile))
local program, argv = linkargv(self, objectfiles, targetkind, targetfile, flags)
if option.get("verbose") then
os.execv(program, argv, {envs = self:runenvs(), shell = opt.shell})
else
os.vrunv(program, argv, {envs = self:runenvs(), shell = opt.shell})
end
end

-- make the compile arguments list
function compargv(self, sourcefile, objectfile, flags)
return self:program(), table.join("-c", "--preproc_with_compile", flags, "--output_file=" .. objectfile, sourcefile)
end

-- compile the source file
function compile(self, sourcefile, objectfile, dependinfo, flags, opt)
os.mkdir(path.directory(objectfile))
local depfile = dependinfo and os.tmpfile() or nil
try
{
function ()
local compflags = flags
if depfile then
compflags = table.join(compflags, "-ppd=" .. depfile)
end
local outdata, errdata = os.iorunv(compargv(self, sourcefile, objectfile, compflags))
return (outdata or "") .. (errdata or "")
end,
catch
{
function (errors)

-- try removing the old object file for forcing to rebuild this source file
os.tryrm(objectfile)

-- find the start line of error
local lines = tostring(errors):split("\n")
local start = 0
for index, line in ipairs(lines) do
if line:find("error:", 1, true) or line:find("错误:", 1, true) then
start = index
break
end
end

-- get 16 lines of errors
if start > 0 or not option.get("verbose") then
if start == 0 then start = 1 end
errors = table.concat(table.slice(lines, start, start + ((#lines - start > 16) and 16 or (#lines - start))), "\n")
end

-- raise compiling errors
raise(errors)
end
},
finally
{
function (ok, warnings)

-- print some warnings
if warnings and #warnings > 0 and policy.build_warnings(opt) then
if progress.showing_without_scroll() then
print("")
end
cprint("${color.warning}%s", table.concat(table.slice(warnings:split('\n'), 1, 8), '\n'))
end

-- generate the dependent includes
if depfile and os.isfile(depfile) then
if dependinfo then
dependinfo.depfiles_format = "cl2000"
dependinfo.depfiles = io.readfile(depfile, {continuation = "\\"})
end

-- remove the temporary dependent file
os.tryrm(depfile)
end
end
}
}
end


23 changes: 23 additions & 0 deletions xmake/modules/detect/tools/cl2000/has_flags.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
--!A cross-platform build utility based on Lua
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-- Copyright (C) 2015-present, TBOOX Open Source Group.
--
-- @author ruki
-- @file has_flags.lua
--

-- imports
inherit("detect.tools.cl6x.has_flags")

58 changes: 58 additions & 0 deletions xmake/modules/detect/tools/find_ar2000.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
--!A cross-platform build utility based on Lua
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-- Copyright (C) 2015-present, TBOOX Open Source Group.
--
-- @author ruki
-- @file find_ar2000.lua
--

-- imports
import("lib.detect.find_program")

-- check
function _check(program)

-- make a stub object file
local libraryfile = os.tmpfile() .. ".a"
local objectfile = os.tmpfile() .. ".o"
io.writefile(objectfile, "")

-- archive it
os.execv(program, {"-r", libraryfile, objectfile})

-- remove files
os.rm(objectfile)
os.rm(libraryfile)
end

-- find ar
--
-- @param opt the argument options, e.g. {version = true}
--
-- @return program, version
--
-- @code
--
-- local ar = find_ar2000()
-- local ar, version = find_ar2000({program = "xcrun -sdk macosx g++", version = true})
--
-- @endcode
--
function main(opt)
opt = opt or {}
opt.check = opt.check or _check
return find_program(opt.program or "ar2000", opt)
end

Loading
Loading