summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2025-04-08 00:44:33 +0800
committerruki <[email protected]>2025-04-08 15:31:58 +0800
commitabd58c9c0e5043d73b127de9cd387e416bd5090f (patch)
tree6194c2b72ac5a6f9a16b68147ec98753e987205f
parentf72d519dfe7b3a3744660ed15c620dbd5344c16c (diff)
prepare targets for more generators
-rw-r--r--xmake/plugins/project/clang/compile_commands.lua1
-rw-r--r--xmake/plugins/project/clang/compile_flags.lua6
-rw-r--r--xmake/plugins/project/cmake/cmakelists.lua9
-rw-r--r--xmake/plugins/project/make/makefile.lua7
-rw-r--r--xmake/plugins/project/ninja/build_ninja.lua8
-rw-r--r--xmake/plugins/project/utils/target_cmds.lua7
-rw-r--r--xmake/plugins/project/vstudio/impl/vs201x.lua13
7 files changed, 23 insertions, 28 deletions
diff --git a/xmake/plugins/project/clang/compile_commands.lua b/xmake/plugins/project/clang/compile_commands.lua
index 46a9bfa64..c36cb8ade 100644
--- a/xmake/plugins/project/clang/compile_commands.lua
+++ b/xmake/plugins/project/clang/compile_commands.lua
@@ -317,6 +317,7 @@ end
function make(outputdir)
local oldir = os.cd(os.projectdir())
local jsonfile = io.open(path.join(outputdir, "compile_commands.json"), "w")
+ target_cmds.prepare_targets()
_add_targets(jsonfile)
jsonfile:close()
os.cd(oldir)
diff --git a/xmake/plugins/project/clang/compile_flags.lua b/xmake/plugins/project/clang/compile_flags.lua
index 3c76b1bdb..5cfedbb19 100644
--- a/xmake/plugins/project/clang/compile_flags.lua
+++ b/xmake/plugins/project/clang/compile_flags.lua
@@ -85,10 +85,11 @@ end
-- - https://clang.llvm.org/docs/JSONCompilationDatabase.html
--
function make(outputdir)
-
- -- enter project directory
local oldir = os.cd(os.projectdir())
+ -- prepare targets
+ target_cmds.prepare_targets()
+
-- make all
local flags = {}
flags = _make_all(flags)
@@ -100,6 +101,5 @@ function make(outputdir)
end
flagfile:close()
- -- leave project directory
os.cd(oldir)
end
diff --git a/xmake/plugins/project/cmake/cmakelists.lua b/xmake/plugins/project/cmake/cmakelists.lua
index 464101268..f826cc453 100644
--- a/xmake/plugins/project/cmake/cmakelists.lua
+++ b/xmake/plugins/project/cmake/cmakelists.lua
@@ -31,7 +31,6 @@ import("lib.detect.find_tool")
import("private.utils.batchcmds")
import("private.utils.rule_groups")
import("private.utils.target", {alias = "target_utils"})
-import("private.action.build.target", {alias = "target_buildutils"})
import("plugins.project.utils.target_cmds", {rootdir = os.programdir()})
import("rules.c++.modules.modules_support.compiler_support", {alias = "module_compiler_support", rootdir = os.programdir()})
@@ -299,12 +298,6 @@ function _get_flags_from_target(target, flagkind)
return results
end
--- prepare targets
-function _prepare_targets()
- local targets_root = target_buildutils.get_root_targets()
- target_buildutils.run_targetjobs(targets_root, {job_kind = "prepare"})
-end
-
-- set compiler
function _set_compiler(cmakelists)
if config.get("toolchain") then
@@ -1341,7 +1334,7 @@ end
function make(outputdir)
local oldir = os.cd(os.projectdir())
local cmakelists = io.open(path.join(outputdir, "CMakeLists.txt"), "w")
- _prepare_targets()
+ target_cmds.prepare_targets()
_generate_cmakelists(cmakelists, outputdir)
cmakelists:close()
os.cd(oldir)
diff --git a/xmake/plugins/project/make/makefile.lua b/xmake/plugins/project/make/makefile.lua
index 3d4d5507f..e123943de 100644
--- a/xmake/plugins/project/make/makefile.lua
+++ b/xmake/plugins/project/make/makefile.lua
@@ -687,10 +687,11 @@ function _add_clean(makefile, outputdir)
end
function make(outputdir)
-
- -- enter project directory
local oldir = os.cd(os.projectdir())
+ -- prepare targets
+ target_cmds.prepare_targets()
+
-- open the makefile
local makefile = io.open(path.join(outputdir, "makefile"), "w")
@@ -715,7 +716,5 @@ function make(outputdir)
-- close the makefile
makefile:close()
-
- -- leave project directory
os.cd(oldir)
end
diff --git a/xmake/plugins/project/ninja/build_ninja.lua b/xmake/plugins/project/ninja/build_ninja.lua
index 819758447..11be6f4ae 100644
--- a/xmake/plugins/project/ninja/build_ninja.lua
+++ b/xmake/plugins/project/ninja/build_ninja.lua
@@ -28,6 +28,7 @@ import("core.tool.compiler")
import("lib.detect.find_tool")
import("lib.detect.find_toolname")
import("core.tools.cl.parse_include")
+import("plugins.project.utils.target_cmds", {rootdir = os.programdir()})
-- this sourcebatch is built?
function _sourcebatch_is_built(sourcebatch)
@@ -449,10 +450,11 @@ function _add_build_for_targets(ninjafile, outputdir)
end
function make(outputdir)
-
- -- enter project directory
local oldir = os.cd(os.projectdir())
+ -- prepare targets
+ target_cmds.prepare_targets()
+
-- open the build.ninja file
--
-- we need to change encoding to support msvc_deps_prefix
@@ -474,8 +476,6 @@ function make(outputdir)
-- close the ninjafile
ninjafile:close()
-
- -- leave project directory
os.cd(oldir)
end
diff --git a/xmake/plugins/project/utils/target_cmds.lua b/xmake/plugins/project/utils/target_cmds.lua
index 332e4858d..debc6fdc5 100644
--- a/xmake/plugins/project/utils/target_cmds.lua
+++ b/xmake/plugins/project/utils/target_cmds.lua
@@ -25,6 +25,7 @@ import("core.base.hashset")
import("core.project.rule")
import("private.utils.batchcmds")
import("private.utils.rule_groups")
+import("private.action.build.target", {alias = "target_buildutils"})
-- this sourcebatch is built?
function _sourcebatch_is_built(sourcebatch)
@@ -115,3 +116,9 @@ function get_target_buildcmd_sourcegroups(target, cmds, sourcegroups, opt)
end
end
+-- prepare targets
+function prepare_targets()
+ local targets_root = target_buildutils.get_root_targets()
+ target_buildutils.run_targetjobs(targets_root, {job_kind = "prepare"})
+end
+
diff --git a/xmake/plugins/project/vstudio/impl/vs201x.lua b/xmake/plugins/project/vstudio/impl/vs201x.lua
index b6b2e11d7..0a23a1847 100644
--- a/xmake/plugins/project/vstudio/impl/vs201x.lua
+++ b/xmake/plugins/project/vstudio/impl/vs201x.lua
@@ -386,17 +386,14 @@ end
-- make vstudio project
function make(outputdir, vsinfo)
-
- -- enter project directory
local oldir = os.cd(project.directory())
- -- init solution directory
- vsinfo.solution_dir = path.join(outputdir, "vs" .. vsinfo.vstudio_version)
+ -- prepare targets
+ target_cmds.prepare_targets()
- -- init modes
+ -- init vsinfo
+ vsinfo.solution_dir = path.join(outputdir, "vs" .. vsinfo.vstudio_version)
vsinfo.modes = _make_vsinfo_modes()
-
- -- init archs
vsinfo.archs = _make_vsinfo_archs()
-- load targets
@@ -519,7 +516,5 @@ function make(outputdir, vsinfo)
-- clear local cache
_clear_cache()
-
- -- leave project directory
os.cd(oldir)
end