From 010e0383213297b5215f780990200631d20f9d11 Mon Sep 17 00:00:00 2001 From: ruki Date: Mon, 1 Jul 2024 23:07:55 +0800 Subject: add build.intermediate_directory policy #5278 --- xmake/core/project/policy.lua | 2 ++ xmake/core/project/target.lua | 72 +++++++++++++++++++------------------------ 2 files changed, 33 insertions(+), 41 deletions(-) diff --git a/xmake/core/project/policy.lua b/xmake/core/project/policy.lua index 4e495e449..4b5ef9dae 100644 --- a/xmake/core/project/policy.lua +++ b/xmake/core/project/policy.lua @@ -40,6 +40,8 @@ function policy.policies() ["check.auto_map_flags"] = {description = "Enable map gcc flags to the current compiler and linker automatically.", default = true, type = "boolean"}, -- We will check the compatibility of target and package licenses ["check.target_package_licenses"] = {description = "Enable check the compatibility of target and package licenses.", default = true, type = "boolean"}, + -- Generate intermediate build directory + ["build.intermediate_directory"] = {description = "Generate intermediate build directory.", default = true, type = "boolean"}, -- Provide a way to block all targets build that depends on self ["build.fence"] = {description = "Block all targets build that depends on self.", default = false, type = "boolean"}, -- We can compile the source files for each target in parallel diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua index 3b98e15f2..bb7abc57c 100644 --- a/xmake/core/project/target.lua +++ b/xmake/core/project/target.lua @@ -1374,24 +1374,21 @@ function _instance:objectdir(opt) objectdir = path.join(objectdir, self:name()) -- get root directory of target - if opt and opt.root then + local intermediate_directory = self:policy("build.intermediate_directory") + if (opt and opt.root) or not intermediate_directory then return objectdir end - -- append plat sub-directory + -- generate intermediate directory local plat = self:plat() if plat then objectdir = path.join(objectdir, plat) end - - -- append arch sub-directory local arch = self:arch() if arch then objectdir = path.join(objectdir, arch) end - - -- append mode sub-directory - local mode = config.get("mode") + local mode = config.mode() if mode then objectdir = path.join(objectdir, mode) end @@ -1409,24 +1406,21 @@ function _instance:dependir(opt) dependir = path.join(dependir, self:name()) -- get root directory of target - if opt and opt.root then + local intermediate_directory = self:policy("build.intermediate_directory") + if (opt and opt.root) or not intermediate_directory then return dependir end - -- append plat sub-directory + -- generate intermediate directory local plat = self:plat() if plat then dependir = path.join(dependir, plat) end - - -- append arch sub-directory local arch = self:arch() if arch then dependir = path.join(dependir, arch) end - - -- append mode sub-directory - local mode = config.get("mode") + local mode = config.mode() if mode then dependir = path.join(dependir, mode) end @@ -1440,24 +1434,21 @@ function _instance:autogendir(opt) local autogendir = path.join(config.buildir(), ".gens", self:name()) -- get root directory of target - if opt and opt.root then + local intermediate_directory = self:policy("build.intermediate_directory") + if (opt and opt.root) or not intermediate_directory then return autogendir end - -- append plat sub-directory + -- generate intermediate directory local plat = self:plat() if plat then autogendir = path.join(autogendir, plat) end - - -- append arch sub-directory local arch = self:arch() if arch then autogendir = path.join(autogendir, arch) end - - -- append mode sub-directory - local mode = config.get("mode") + local mode = config.mode() if mode then autogendir = path.join(autogendir, mode) end @@ -1512,32 +1503,31 @@ function _instance:autogenfile(sourcefile, opt) end -- get the target directory -function _instance:targetdir() +function _instance:targetdir(opt) -- the target directory local targetdir = self:get("targetdir") if not targetdir then - - -- get build directory targetdir = config.buildir() + end + -- get root directory of target + local intermediate_directory = self:policy("build.intermediate_directory") + if (opt and opt.root) or not intermediate_directory then + return targetdir + end - -- append plat sub-directory - local plat = self:plat() - if plat then - targetdir = path.join(targetdir, plat) - end - - -- append arch sub-directory - local arch = self:arch() - if arch then - targetdir = path.join(targetdir, arch) - end - - -- append mode sub-directory - local mode = config.get("mode") - if mode then - targetdir = path.join(targetdir, mode) - end + -- generate intermediate directory + local plat = self:plat() + if plat then + targetdir = path.join(targetdir, plat) + end + local arch = self:arch() + if arch then + targetdir = path.join(targetdir, arch) + end + local mode = config.mode() + if mode then + targetdir = path.join(targetdir, mode) end return targetdir end -- cgit v1.3.1 From d59bb8aae509f7cbf62f3e4d72cfd44756f11f4d Mon Sep 17 00:00:00 2001 From: ruki Date: Mon, 1 Jul 2024 23:18:22 +0800 Subject: fix status --- xmake/core/project/target.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua index bb7abc57c..e3a8f71f6 100644 --- a/xmake/core/project/target.lua +++ b/xmake/core/project/target.lua @@ -1375,7 +1375,7 @@ function _instance:objectdir(opt) -- get root directory of target local intermediate_directory = self:policy("build.intermediate_directory") - if (opt and opt.root) or not intermediate_directory then + if (opt and opt.root) or intermediate_directory == false then return objectdir end @@ -1407,7 +1407,7 @@ function _instance:dependir(opt) -- get root directory of target local intermediate_directory = self:policy("build.intermediate_directory") - if (opt and opt.root) or not intermediate_directory then + if (opt and opt.root) or intermediate_directory == false then return dependir end @@ -1435,7 +1435,7 @@ function _instance:autogendir(opt) -- get root directory of target local intermediate_directory = self:policy("build.intermediate_directory") - if (opt and opt.root) or not intermediate_directory then + if (opt and opt.root) or intermediate_directory == false then return autogendir end @@ -1512,7 +1512,7 @@ function _instance:targetdir(opt) end -- get root directory of target local intermediate_directory = self:policy("build.intermediate_directory") - if (opt and opt.root) or not intermediate_directory then + if (opt and opt.root) or intermediate_directory == false then return targetdir end -- cgit v1.3.1 From d7d835d9a2c39d06b8fcb5341d4e5dbb071016bf Mon Sep 17 00:00:00 2001 From: ruki Date: Mon, 1 Jul 2024 23:37:38 +0800 Subject: fix targetdir --- xmake/core/project/target.lua | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua index e3a8f71f6..5a7e9b77c 100644 --- a/xmake/core/project/target.lua +++ b/xmake/core/project/target.lua @@ -1503,31 +1503,32 @@ function _instance:autogenfile(sourcefile, opt) end -- get the target directory -function _instance:targetdir(opt) +function _instance:targetdir() -- the target directory local targetdir = self:get("targetdir") if not targetdir then targetdir = config.buildir() - end - -- get root directory of target - local intermediate_directory = self:policy("build.intermediate_directory") - if (opt and opt.root) or intermediate_directory == false then - return targetdir - end - -- generate intermediate directory - local plat = self:plat() - if plat then - targetdir = path.join(targetdir, plat) - end - local arch = self:arch() - if arch then - targetdir = path.join(targetdir, arch) - end - local mode = config.mode() - if mode then - targetdir = path.join(targetdir, mode) + -- get root directory of target + local intermediate_directory = self:policy("build.intermediate_directory") + if intermediate_directory == false then + return targetdir + end + + -- generate intermediate directory + local plat = self:plat() + if plat then + targetdir = path.join(targetdir, plat) + end + local arch = self:arch() + if arch then + targetdir = path.join(targetdir, arch) + end + local mode = config.mode() + if mode then + targetdir = path.join(targetdir, mode) + end end return targetdir end -- cgit v1.3.1 From c23cbda1060b73f0f24369253d0e051fafb2b318 Mon Sep 17 00:00:00 2001 From: ruki Date: Mon, 1 Jul 2024 23:37:59 +0800 Subject: add set_autogendir --- xmake/core/project/target.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua index 5a7e9b77c..0ed7465d4 100644 --- a/xmake/core/project/target.lua +++ b/xmake/core/project/target.lua @@ -1430,8 +1430,12 @@ end -- get the autogen files directory function _instance:autogendir(opt) - -- the autogen directory - local autogendir = path.join(config.buildir(), ".gens", self:name()) + -- init the autogen directory + local autogendir = self:get("autogendir") + if not autogendir then + autogendir = path.join(config.buildir(), ".gens") + end + autogendir = path.join(autogendir, self:name()) -- get root directory of target local intermediate_directory = self:policy("build.intermediate_directory") @@ -2762,6 +2766,7 @@ function target.apis() "target.set_targetdir" , "target.set_objectdir" , "target.set_dependir" + , "target.set_autogendir" , "target.set_configdir" , "target.set_installdir" , "target.set_rundir" -- cgit v1.3.1