summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2025-09-07 22:58:40 +0800
committerruki <[email protected]>2025-09-07 22:58:40 +0800
commit936758a450866cc95090001aab5e21bf095980ea (patch)
treea8932938a2bbcd9f09b9013a4eadb09287ca8542
parente0c9112837c5619b1407c7a8b3eab8a30f5a883d (diff)
add build_targets test
-rw-r--r--tests/benchmarks/build_targets/.gitignore8
-rw-r--r--tests/benchmarks/build_targets/CMakeLists.txt6
-rw-r--r--tests/benchmarks/build_targets/meson.build5
-rw-r--r--tests/benchmarks/build_targets/src/main.cpp6
-rw-r--r--tests/benchmarks/build_targets/test.lua74
-rw-r--r--tests/benchmarks/build_targets/xmake.lua7
6 files changed, 106 insertions, 0 deletions
diff --git a/tests/benchmarks/build_targets/.gitignore b/tests/benchmarks/build_targets/.gitignore
new file mode 100644
index 000000000..152105761
--- /dev/null
+++ b/tests/benchmarks/build_targets/.gitignore
@@ -0,0 +1,8 @@
+# Xmake cache
+.xmake/
+build/
+
+# MacOS Cache
+.DS_Store
+
+
diff --git a/tests/benchmarks/build_targets/CMakeLists.txt b/tests/benchmarks/build_targets/CMakeLists.txt
new file mode 100644
index 000000000..a2530191d
--- /dev/null
+++ b/tests/benchmarks/build_targets/CMakeLists.txt
@@ -0,0 +1,6 @@
+cmake_minimum_required(VERSION 3.10)
+project(test)
+
+foreach(i RANGE 1 30)
+ add_executable(test${i} src/main.cpp)
+endforeach()
diff --git a/tests/benchmarks/build_targets/meson.build b/tests/benchmarks/build_targets/meson.build
new file mode 100644
index 000000000..11a834c57
--- /dev/null
+++ b/tests/benchmarks/build_targets/meson.build
@@ -0,0 +1,5 @@
+project('test', 'cpp')
+
+foreach i : range(1, 31)
+ executable('test' + i.to_string(), 'src/main.cpp')
+endforeach
diff --git a/tests/benchmarks/build_targets/src/main.cpp b/tests/benchmarks/build_targets/src/main.cpp
new file mode 100644
index 000000000..7c775d288
--- /dev/null
+++ b/tests/benchmarks/build_targets/src/main.cpp
@@ -0,0 +1,6 @@
+#include <iostream>
+
+int main(int argc, char** argv) {
+ std::cout << "hello world!" << std::endl;
+ return 0;
+}
diff --git a/tests/benchmarks/build_targets/test.lua b/tests/benchmarks/build_targets/test.lua
new file mode 100644
index 000000000..0107e44fa
--- /dev/null
+++ b/tests/benchmarks/build_targets/test.lua
@@ -0,0 +1,74 @@
+import("lib.detect.find_tool")
+import("core.tool.toolchain")
+
+function test_build(t)
+
+ -- xmake
+ os.tryrm("build")
+ local xmake_dt = os.mclock()
+ os.runv(os.programfile())
+ xmake_dt = os.mclock() - xmake_dt
+ print("build targets/30: xmake: %d ms", xmake_dt)
+
+ -- cmake
+ local cmake = find_tool("cmake")
+ if cmake then
+ os.tryrm("build")
+ os.mkdir("build")
+ local cmake_default_dt = os.mclock()
+ os.runv(cmake.program, {".."}, {curdir = "build"})
+ os.runv(cmake.program, {"--build", "."}, {curdir = "build"})
+ cmake_default_dt = os.mclock() - cmake_default_dt
+ print("build targets/30: cmake/default: %d ms", cmake_default_dt)
+ t:require((cmake_default_dt > xmake_dt) or (cmake_default_dt + 1000 > xmake_dt))
+
+ local ninja = find_tool("ninja")
+ if ninja then
+ os.tryrm("build")
+ os.mkdir("build")
+ local configs = {}
+ local envs
+ if is_host("windows") then
+ table.insert(configs, "-DCMAKE_MAKE_PROGRAM=" .. ninja.program)
+ local msvc = toolchain.load("msvc")
+ if msvc:check() then
+ table.insert(configs, "-DCMAKE_CXX_COMPILER=" .. (msvc:tool("cxx")))
+ table.insert(configs, "-DCMAKE_C_COMPILER=" .. (msvc:tool("cc")))
+ envs = os.joinenvs(msvc:runenvs())
+ end
+ end
+ local cmake_ninja_dt = os.mclock()
+ os.runv(cmake.program, table.join("..", "-G", "Ninja", configs), {curdir = "build", envs = envs})
+ os.runv(cmake.program, {"--build", "."}, {curdir = "build", envs = envs})
+ cmake_ninja_dt = os.mclock() - cmake_ninja_dt
+ print("build targets/30: cmake/ninja: %d ms", cmake_ninja_dt)
+ t:require((cmake_ninja_dt > xmake_dt) or (cmake_ninja_dt + 1000 > xmake_dt))
+ end
+
+ local make = find_tool("make")
+ if make and not is_subhost("windows") then
+ os.tryrm("build")
+ os.mkdir("build")
+ local cmake_makefile_dt = os.mclock()
+ os.runv(cmake.program, {"..", "-G", "Unix Makefiles"}, {curdir = "build"})
+ os.runv(cmake.program, {"--build", "."}, {curdir = "build"})
+ cmake_makefile_dt = os.mclock() - cmake_makefile_dt
+ print("build targets/30: cmake/makefile: %d ms", cmake_makefile_dt)
+ t:require((cmake_makefile_dt > xmake_dt) or (cmake_makefile_dt + 1000 > xmake_dt))
+ end
+ end
+
+ -- meson
+ local meson = find_tool("meson")
+ if meson then
+ os.tryrm("build")
+ local meson_dt = os.mclock()
+ os.runv(meson.program, {"setup", "build"})
+ os.runv("ninja", {"-C", "build"})
+ meson_dt = os.mclock() - meson_dt
+ print("build targets/30: meson: %d ms", meson_dt)
+ t:require((meson_dt > xmake_dt) or (meson_dt + 1000 > xmake_dt))
+ end
+end
+
+
diff --git a/tests/benchmarks/build_targets/xmake.lua b/tests/benchmarks/build_targets/xmake.lua
new file mode 100644
index 000000000..157d50ded
--- /dev/null
+++ b/tests/benchmarks/build_targets/xmake.lua
@@ -0,0 +1,7 @@
+add_rules("mode.debug", "mode.release")
+
+for i = 1, 30 do
+ target("test" .. i)
+ set_kind("binary")
+ add_files("src/main.cpp")
+end