diff options
| author | ruki <[email protected]> | 2021-07-28 23:16:16 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-07-28 23:16:16 +0800 |
| commit | 0ab40eb6af59286eb13fa780381d59d4fb48ecad (patch) | |
| tree | 9c3c1c2b2607bf75252493409d6fcb75ee088a0c /xmake/languages/c++ | |
| parent | 62d98516dcf2f7d6b5381adc429c977deba7674b (diff) | |
remove api.lua
Diffstat (limited to 'xmake/languages/c++')
| -rw-r--r-- | xmake/languages/c++/api.lua | 260 | ||||
| -rw-r--r-- | xmake/languages/c++/load.lua | 238 | ||||
| -rw-r--r-- | xmake/languages/c++/xmake.lua | 39 |
3 files changed, 237 insertions, 300 deletions
diff --git a/xmake/languages/c++/api.lua b/xmake/languages/c++/api.lua deleted file mode 100644 index e33580fc4..000000000 --- a/xmake/languages/c++/api.lua +++ /dev/null @@ -1,260 +0,0 @@ ---!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 api.lua --- - --- get function name and function info --- --- sigsetjmp --- sigsetjmp((void*)0, 0) --- sigsetjmp{sigsetjmp((void*)0, 0);} --- sigsetjmp{int a = 0; sigsetjmp((void*)a, a);} --- -function _funcinfo(func) - local name, code = string.match(func, "(.+){(.+)}") - if code == nil then - local pos = func:find("%(") - if pos then - name = func:sub(1, pos - 1) - code = func - else - name = func - code = string.format("volatile void* p%s = (void*)&%s;", name, name) - end - end - return name:trim(), code -end - --- TODO add c function, deprecated -function _api_add_cfunc(interp, module, alias, links, includes, func) - - -- parse the function info - local funcname, funccode = _funcinfo(func) - - -- make the option name - local name = nil - if module ~= nil then - name = format("__%s_%s", module, funcname) - else - name = format("__%s", funcname) - end - - -- uses the alias name - if alias ~= nil then - funcname = alias - end - - -- make the option define - local define = nil - if module ~= nil then - define = format("$(prefix)_%s_HAVE_%s", module:upper(), funcname:upper()) - else - define = format("$(prefix)_HAVE_%s", funcname:upper()) - end - - -- save the current scope - local scope = interp:scope_save() - - -- check option - interp:api_call("option", name) - interp:api_call("set_category", "cfuncs") - interp:api_call("add_cfuncs", func) - if links then interp:api_call("add_links", links) end - if includes then interp:api_call("add_cincludes", includes) end - - -- restore the current scope - interp:scope_restore(scope) - - -- add this option - interp:api_call("add_options", name) -end - --- TODO add c functions, deprecated -function _api_add_cfuncs(interp, module, links, includes, ...) - wprint("target.add_cfuncs is deprecated, please use option.add_cfuncs()") - for _, func in ipairs({...}) do - _api_add_cfunc(interp, module, nil, links, includes, func) - end -end - --- TODO add c++ function, deprecated -function _api_add_cxxfunc(interp, module, alias, links, includes, func) - - -- parse the function info - local funcname, funccode = _funcinfo(func) - - -- make the option name - local name = nil - if module ~= nil then - name = format("__%s_%s", module, funcname) - else - name = format("__%s", funcname) - end - - -- uses the alias name - if alias ~= nil then - funcname = alias - end - - -- make the option define - local define = nil - if module ~= nil then - define = format("$(prefix)_%s_HAVE_%s", module:upper(), funcname:upper()) - else - define = format("$(prefix)_HAVE_%s", funcname:upper()) - end - - -- save the current scope - local scope = interp:scope_save() - - -- check option - interp:api_call("option", name) - interp:api_call("set_category", "cxxfuncs") - interp:api_call("add_cxxfuncs", func) - if links then interp:api_call("add_links", links) end - if includes then interp:api_call("add_cxxincludes", includes) end - - -- restore the current scope - interp:scope_restore(scope) - - -- add this option - interp:api_call("add_options", name) -end - --- TODO add c++ functions, deprecated -function _api_add_cxxfuncs(interp, module, links, includes, ...) - wprint("target.add_cxxfuncs is deprecated, please use option.add_cxxfuncs()") - for _, func in ipairs({...}) do - _api_add_cxxfunc(interp, module, nil, links, includes, func) - end -end - - --- get apis -function apis() - - -- init apis - _g.values = - { - -- target.add_xxx - "target.add_links" - , "target.add_syslinks" - , "target.add_cflags" - , "target.add_cxflags" - , "target.add_cxxflags" - , "target.add_ldflags" - , "target.add_arflags" - , "target.add_shflags" - , "target.add_defines" - , "target.add_undefines" - , "target.add_frameworks" - , "target.add_rpathdirs" -- @note do not translate path, it's usually an absolute path or contains $ORIGIN/@loader_path - -- option.add_xxx - , "option.add_cincludes" - , "option.add_cxxincludes" - , "option.add_cfuncs" - , "option.add_cxxfuncs" - , "option.add_ctypes" - , "option.add_cxxtypes" - , "option.add_links" - , "option.add_syslinks" - , "option.add_cflags" - , "option.add_cxflags" - , "option.add_cxxflags" - , "option.add_ldflags" - , "option.add_arflags" - , "option.add_shflags" - , "option.add_defines" - , "option.add_undefines" - , "option.add_frameworks" - , "option.add_rpathdirs" - -- package.add_xxx - , "package.add_links" - , "package.add_syslinks" - , "package.add_cflags" - , "package.add_cxflags" - , "package.add_cxxflags" - , "package.add_ldflags" - , "package.add_arflags" - , "package.add_shflags" - , "package.add_defines" - , "package.add_undefines" - , "package.add_frameworks" - , "package.add_rpathdirs" - , "package.add_linkdirs" - , "package.add_includedirs" --@note we need not uses paths for package, see https://github.com/xmake-io/xmake/issues/717 - , "package.add_sysincludedirs" - , "package.add_frameworkdirs" - -- toolchain.add_xxx - , "toolchain.add_links" - , "toolchain.add_syslinks" - , "toolchain.add_cflags" - , "toolchain.add_cxflags" - , "toolchain.add_cxxflags" - , "toolchain.add_ldflags" - , "toolchain.add_arflags" - , "toolchain.add_shflags" - , "toolchain.add_defines" - , "toolchain.add_undefines" - , "toolchain.add_frameworks" - , "toolchain.add_rpathdirs" - , "toolchain.add_linkdirs" - , "toolchain.add_includedirs" - , "toolchain.add_sysincludedirs" - , "toolchain.add_frameworkdirs" - } - _g.paths = - { - -- target.set_xxx - "target.set_headerdir" -- TODO deprecated - , "target.set_config_header" -- TODO deprecated - , "target.set_pcheader" - , "target.set_pcxxheader" - -- target.add_xxx - , "target.add_headers" -- TODO deprecated - , "target.add_headerfiles" - , "target.add_linkdirs" - , "target.add_includedirs" - , "target.add_sysincludedirs" - , "target.add_frameworkdirs" - -- option.add_xxx - , "option.add_linkdirs" - , "option.add_includedirs" - , "option.add_sysincludedirs" - , "option.add_frameworkdirs" - } - _g.dictionary = - { - -- option.add_xxx - "option.add_csnippets" - , "option.add_cxxsnippets" - } - _g.custom = - { - -- target.add_xxx - {"target.add_cfunc", _api_add_cfunc } - , {"target.add_cfuncs", _api_add_cfuncs } - , {"target.add_cxxfunc", _api_add_cxxfunc } - , {"target.add_cxxfuncs", _api_add_cxxfuncs } - } - - -- ok - return _g -end - - diff --git a/xmake/languages/c++/load.lua b/xmake/languages/c++/load.lua index fd547b488..a26238c59 100644 --- a/xmake/languages/c++/load.lua +++ b/xmake/languages/c++/load.lua @@ -18,17 +18,239 @@ -- @file load.lua -- --- imports -import("api") +-- get function name and function info +-- +-- sigsetjmp +-- sigsetjmp((void*)0, 0) +-- sigsetjmp{sigsetjmp((void*)0, 0);} +-- sigsetjmp{int a = 0; sigsetjmp((void*)a, a);} +-- +function _funcinfo(func) + local name, code = string.match(func, "(.+){(.+)}") + if code == nil then + local pos = func:find("%(") + if pos then + name = func:sub(1, pos - 1) + code = func + else + name = func + code = string.format("volatile void* p%s = (void*)&%s;", name, name) + end + end + return name:trim(), code +end --- load it -function main() +-- TODO add c function, deprecated +function _api_add_cfunc(interp, module, alias, links, includes, func) + + -- parse the function info + local funcname, funccode = _funcinfo(func) + + -- make the option name + local name = nil + if module ~= nil then + name = format("__%s_%s", module, funcname) + else + name = format("__%s", funcname) + end + + -- uses the alias name + if alias ~= nil then + funcname = alias + end + + -- make the option define + local define = nil + if module ~= nil then + define = format("$(prefix)_%s_HAVE_%s", module:upper(), funcname:upper()) + else + define = format("$(prefix)_HAVE_%s", funcname:upper()) + end + + -- save the current scope + local scope = interp:scope_save() + + -- check option + interp:api_call("option", name) + interp:api_call("set_category", "cfuncs") + interp:api_call("add_cfuncs", func) + if links then interp:api_call("add_links", links) end + if includes then interp:api_call("add_cincludes", includes) end + + -- restore the current scope + interp:scope_restore(scope) + + -- add this option + interp:api_call("add_options", name) +end + +-- TODO add c functions, deprecated +function _api_add_cfuncs(interp, module, links, includes, ...) + wprint("target.add_cfuncs is deprecated, please use option.add_cfuncs()") + for _, func in ipairs({...}) do + _api_add_cfunc(interp, module, nil, links, includes, func) + end +end - -- init apis - _g.apis = api.apis() +-- TODO add c++ function, deprecated +function _api_add_cxxfunc(interp, module, alias, links, includes, func) - -- ok - return _g + -- parse the function info + local funcname, funccode = _funcinfo(func) + + -- make the option name + local name = nil + if module ~= nil then + name = format("__%s_%s", module, funcname) + else + name = format("__%s", funcname) + end + + -- uses the alias name + if alias ~= nil then + funcname = alias + end + + -- make the option define + local define = nil + if module ~= nil then + define = format("$(prefix)_%s_HAVE_%s", module:upper(), funcname:upper()) + else + define = format("$(prefix)_HAVE_%s", funcname:upper()) + end + + -- save the current scope + local scope = interp:scope_save() + + -- check option + interp:api_call("option", name) + interp:api_call("set_category", "cxxfuncs") + interp:api_call("add_cxxfuncs", func) + if links then interp:api_call("add_links", links) end + if includes then interp:api_call("add_cxxincludes", includes) end + + -- restore the current scope + interp:scope_restore(scope) + + -- add this option + interp:api_call("add_options", name) +end + +-- TODO add c++ functions, deprecated +function _api_add_cxxfuncs(interp, module, links, includes, ...) + wprint("target.add_cxxfuncs is deprecated, please use option.add_cxxfuncs()") + for _, func in ipairs({...}) do + _api_add_cxxfunc(interp, module, nil, links, includes, func) + end +end + +-- get apis +function apiset_apis() + local apis = {} + apis.values = { + -- target.add_xxx + "target.add_links" + , "target.add_syslinks" + , "target.add_cflags" + , "target.add_cxflags" + , "target.add_cxxflags" + , "target.add_ldflags" + , "target.add_arflags" + , "target.add_shflags" + , "target.add_defines" + , "target.add_undefines" + , "target.add_frameworks" + , "target.add_rpathdirs" -- @note do not translate path, it's usually an absolute path or contains $ORIGIN/@loader_path + -- option.add_xxx + , "option.add_cincludes" + , "option.add_cxxincludes" + , "option.add_cfuncs" + , "option.add_cxxfuncs" + , "option.add_ctypes" + , "option.add_cxxtypes" + , "option.add_links" + , "option.add_syslinks" + , "option.add_cflags" + , "option.add_cxflags" + , "option.add_cxxflags" + , "option.add_ldflags" + , "option.add_arflags" + , "option.add_shflags" + , "option.add_defines" + , "option.add_undefines" + , "option.add_frameworks" + , "option.add_rpathdirs" + -- package.add_xxx + , "package.add_links" + , "package.add_syslinks" + , "package.add_cflags" + , "package.add_cxflags" + , "package.add_cxxflags" + , "package.add_ldflags" + , "package.add_arflags" + , "package.add_shflags" + , "package.add_defines" + , "package.add_undefines" + , "package.add_frameworks" + , "package.add_rpathdirs" + , "package.add_linkdirs" + , "package.add_includedirs" --@note we need not uses paths for package, see https://github.com/xmake-io/xmake/issues/717 + , "package.add_sysincludedirs" + , "package.add_frameworkdirs" + -- toolchain.add_xxx + , "toolchain.add_links" + , "toolchain.add_syslinks" + , "toolchain.add_cflags" + , "toolchain.add_cxflags" + , "toolchain.add_cxxflags" + , "toolchain.add_ldflags" + , "toolchain.add_arflags" + , "toolchain.add_shflags" + , "toolchain.add_defines" + , "toolchain.add_undefines" + , "toolchain.add_frameworks" + , "toolchain.add_rpathdirs" + , "toolchain.add_linkdirs" + , "toolchain.add_includedirs" + , "toolchain.add_sysincludedirs" + , "toolchain.add_frameworkdirs" + } + apis.paths = { + -- target.set_xxx + "target.set_headerdir" -- TODO deprecated + , "target.set_config_header" -- TODO deprecated + , "target.set_pcheader" + , "target.set_pcxxheader" + -- target.add_xxx + , "target.add_headers" -- TODO deprecated + , "target.add_headerfiles" + , "target.add_linkdirs" + , "target.add_includedirs" + , "target.add_sysincludedirs" + , "target.add_frameworkdirs" + -- option.add_xxx + , "option.add_linkdirs" + , "option.add_includedirs" + , "option.add_sysincludedirs" + , "option.add_frameworkdirs" + } + apis.dictionary = { + -- option.add_xxx + "option.add_csnippets" + , "option.add_cxxsnippets" + } + apis.custom = { + -- target.add_xxx + {"target.add_cfunc", _api_add_cfunc } + , {"target.add_cfuncs", _api_add_cfuncs } + , {"target.add_cxxfunc", _api_add_cxxfunc } + , {"target.add_cxxfuncs", _api_add_cxxfuncs } + } + return apis +end + +function main() + return {apis = apiset_apis()} end diff --git a/xmake/languages/c++/xmake.lua b/xmake/languages/c++/xmake.lua index 4a18dc5df..52c7baa91 100644 --- a/xmake/languages/c++/xmake.lua +++ b/xmake/languages/c++/xmake.lua @@ -18,41 +18,20 @@ -- @file xmake.lua -- --- define language language("c++") - - -- set source file kinds + add_rules("c++") set_sourcekinds {cc = ".c", cxx = {".cpp", ".cc", ".cxx"}} - - -- set source file flags set_sourceflags {cc = {"cflags", "cxflags"}, cxx = {"cxxflags", "cxflags"}} - - -- set target kinds set_targetkinds {binary = "ld", static = "ar", shared = "sh"} - - -- set target flags set_targetflags {binary = "ldflags", static = "arflags", shared = "shflags"} - - -- set language kinds - set_langkinds {c = "cc", cxx = "cxx"} - - -- set mixing kinds + set_langkinds {c = "cc", cxx = "cxx"} set_mixingkinds("cc", "cxx", "as", "mrc") - -- add rules - add_rules("c++") - - -- on load on_load("load") - - -- on check_main on_check_main("check_main") - -- set name flags - set_nameflags - { - object = - { + set_nameflags { + object = { "config.includedirs" , "config.frameworkdirs" , "config.frameworks" @@ -78,8 +57,7 @@ language("c++") , "target.sysincludedirs" , "toolchain.sysincludedirs" } - , binary = - { + , binary = { "config.linkdirs" , "config.frameworkdirs" , "target.linkdirs" @@ -101,8 +79,7 @@ language("c++") , "target.syslinks" , "toolchain.syslinks" } - , shared = - { + , shared = { "config.linkdirs" , "config.frameworkdirs" , "target.linkdirs" @@ -124,14 +101,12 @@ language("c++") , "target.syslinks" , "toolchain.syslinks" } - , static = - { + , static = { "target.strip" , "target.symbols" } } - -- set menu set_menu { config = { |
