diff options
| author | ruki <[email protected]> | 2021-12-11 10:10:28 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-12-11 10:10:28 +0800 |
| commit | a64f493f3b6812bef7f78fa973f11cc963d1b8a3 (patch) | |
| tree | c09b8e6ad27b3a0ff878c442207eec03ad99e7ca /xmake/rules/platform/linux/driver/driver_modules.lua | |
| parent | ec7711e4c84733a71b1932eeb59eed9844ea5b2d (diff) | |
get gcc_incluedir
Diffstat (limited to 'xmake/rules/platform/linux/driver/driver_modules.lua')
| -rw-r--r-- | xmake/rules/platform/linux/driver/driver_modules.lua | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/xmake/rules/platform/linux/driver/driver_modules.lua b/xmake/rules/platform/linux/driver/driver_modules.lua index a482b8527..7addb3764 100644 --- a/xmake/rules/platform/linux/driver/driver_modules.lua +++ b/xmake/rules/platform/linux/driver/driver_modules.lua @@ -46,6 +46,43 @@ function _get_linux_headers_sdk(target) return {version = version, sdkdir = linux_headersdir, includedir = includedir} end +-- get c system search include directory of gcc +-- +-- e.g. gcc -E -Wp,-v -xc /dev/null +-- +-- ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" +-- ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/10/include-fixed" +-- ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include" +-- #include "..." search starts here: +-- #include <...> search starts here: +-- /usr/lib/gcc/x86_64-linux-gnu/10/include <-- we need get it +-- /usr/local/include +-- /usr/include/x86_64-linux-gnu +-- /usr/include +-- End of search list. +function _get_gcc_includedir(target) + local includedir = _g.includedir + if includedir == nil then + local gcc, toolname = target:tool("cc") + assert(toolname, "gcc") + + local _, result = try {function () return os.iorunv(gcc, {"-E", "-Wp,-v", "-xc", os.nuldev()}) end} + if result then + for _, line in ipairs(result:split("\n", {plain = true})) do + line = line:trim() + if os.isdir(line) then + includedir = line + break + elseif line:startswith("End") then + break + end + end + end + _g.includedir = includedir or false + end + return includedir or nil +end + function load(target) -- we need only need binary kind, because we will rewrite on_link target:set("kind", "binary") @@ -66,7 +103,10 @@ function load(target) archsubdir = path.join(sdkdir, "arch", "x86") end assert(archsubdir, "unknown arch(%s) for linux driver modules!", target:arch()) - target:add("sysincludedirs", "/usr/lib/gcc/x86_64-linux-gnu/10/include") -- TODO + local gcc_includedir = _get_gcc_includedir(target) + if gcc_includedir then + target:add("sysincludedirs", gcc_includedir) + end target:add("includedirs", path.join(archsubdir, "include")) target:add("includedirs", path.join(archsubdir, "include", "generated")) target:add("includedirs", includedir) |
