package("v8") set_homepage("https://chromium.googlesource.com/v8/v8.git") set_description("V8 JavaScript Engine") add_urls("https://github.com/v8/v8.git") add_versions("10.0.58", "d75903764c8547b6fc35c7a3fe4991320be03135") add_deps("depot_tools") if is_plat("linux", "bsd") then add_syslinks("pthread", "dl") end add_links("v8_monolith", "v8_initializers", "v8_init", "v8_compiler", "v8_compiler_opt", "v8_cppgc_shared", "v8_bigint", "v8_snapshot", "v8_base_without_compiler", "v8_libplatform", "v8_libbase", "torque_base", "torque_generated_definitions", "cppgc_base", "torque_ls_base") on_install("linux", "macosx", function (package) import("core.base.global") -- maybe we need set proxy, e.g. `xmake g --proxy=http://127.0.0.1:xxxx` local envs = {} local proxy = global.get("proxy") if proxy then envs.HTTP_PROXY = proxy envs.HTTPS_PROXY = proxy envs.ALL_PROXY = proxy end io.writefile(".gclient", [=[solutions = [ { "name": ".", "url": "https://github.com/v8/v8.git", "deps_file": "DEPS", "managed": False, "custom_deps": {}, }]]=]) local gclient = is_host("windows") and "gclient.bat" or "gclient" os.vrunv(gclient, {"sync", "-v"}, {envs = envs}) local configs = { is_official_build = false, is_component_build = false, is_debug = package:debug(), is_shared_library = package:config("shared"), symbol_level = 0, treat_warnings_as_errors = false, use_custom_libcxx = false, v8_static_library = not package:config("shared"), v8_monolithic = true, v8_use_external_startup_data = false, v8_enable_test_features = false, v8_enable_i18n_support = false} if package:is_arch("x86", "i386") then configs.target_cpu = "x86" elseif package:is_arch("x64", "x86_64") then configs.target_cpu = "x64" elseif package:is_arch("arm64", "arm64-v8a") then configs.target_cpu = "arm64" end if not package:is_plat("windows") then configs.cc = package:build_getenv("cc") configs.cxx = package:build_getenv("cxx") else configs.extra_cflags = {(package:config("vs_runtime"):startswith("MT") and "/MT" or "/MD")} end if package:is_plat("macosx") then configs.extra_ldflags = {"-lstdc++"} local xcode = import("core.tool.toolchain").load("xcode", {plat = package:plat(), arch = package:arch()}) configs.xcode_sysroot = xcode:config("xcode_sysroot") end import("package.tools.gn").build(package, configs, {buildir = "out"}) os.cp("include", package:installdir()) os.trycp("out/obj/*.a", package:installdir("lib")) os.trycp("out/obj/*.lib", package:installdir("lib")) os.trycp("out/obj/*.dll", package:installdir("bin")) end) on_test(function (package) assert(package:has_cxxfuncs("v8::V8::InitializePlatform(0)", {configs = {languages = "c++17"}, includes = "v8.h"})) end)