| # Copyright 2016 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| ################################################################################ |
| # DEFAULT BUILD CONFIGURATION |
| ################################################################################ |
| |
| import("compiler.gni") |
| import("platform.gni") |
| import("sysroot.gni") |
| |
| if (mini_chromium_is_mac) { |
| declare_args() { |
| # The minimum runtime macOS version that built products are expected to run |
| # on. If empty, the toolchain will choose its own default, typically the |
| # older of the SDK version and the build host’s OS version. |
| mac_deployment_target = "10.9" |
| } |
| } else if (mini_chromium_is_ios) { |
| import("ios/ios_sdk.gni") |
| } else if (mini_chromium_is_linux) { |
| declare_args() { |
| # Path to the Clang toolchain. If unset, uses the system-installed Clang. |
| clang_path = "" |
| |
| # If set, link against libstdc++ statically. |
| link_libstdcpp_statically = false |
| } |
| } else if (mini_chromium_is_fuchsia) { |
| declare_args() { |
| # Path to the Fuchsia Clang toolchain. |
| clang_path = "//third_party/fuchsia/clang/" + host_os + "-amd64" |
| } |
| } else if (mini_chromium_is_win) { |
| declare_args() { |
| # Path to the Windows toolchain. If "<autodetect>", discovery of the |
| # system-installed toolchain will be attempted. Otherwise, |
| # win_sdk\bin\SetEnv.cmd inside this path will be used to configure the |
| # Windows toolchain. |
| win_toolchain_path = "<autodetect>" |
| } |
| } |
| |
| declare_args() { |
| # Extra flags passed to the C compiler. |
| # Space-separated string of flags. |
| # "cflags" are passed to all invocations of the C, C++, Objective-C, and |
| # Objective-C++ compilers. |
| extra_cflags = "" |
| |
| # Extra flags passed to the C compiler. |
| # Space-separated string of flags. |
| extra_cflags_c = "" |
| |
| # Extra flags passed to the C++ compiler. |
| # Space-separated string of flags. |
| extra_cflags_cc = "" |
| |
| # Extra flags passed to the Objective-C compiler. |
| # Space-separated string of flags. |
| extra_cflags_objc = "" |
| |
| # Extra flags passed to the Objective-C++ compiler. |
| # Space-separated string of flags. |
| extra_cflags_objcc = "" |
| |
| # Extra flags passed to the linker. |
| # Space-separated string of flags. |
| # These flags are passed on the command-line to the linker and generally |
| # specify various linking options. |
| extra_ldflags = "" |
| |
| # Extra arguments passed to static_library archiver |
| # Space-separated string of flags. |
| # A list of flags passed to the archive/lib command that creates static |
| # libraries. |
| extra_arflags = "" |
| } |
| |
| config("debug") { |
| if (!mini_chromium_is_win) { |
| cflags = [ "-g" ] |
| } |
| } |
| |
| config("release") { |
| defines = [ "NDEBUG" ] |
| |
| if (mini_chromium_is_posix || mini_chromium_is_fuchsia) { |
| cflags = [ "-O3" ] |
| if (mini_chromium_is_mac || mini_chromium_is_ios) { |
| ldflags = [ "-Wl,-dead_strip" ] |
| } else { |
| cflags += [ |
| "-fdata-sections", |
| "-ffunction-sections", |
| ] |
| ldflags = [ |
| "-Wl,-O1", |
| "-Wl,--gc-sections", |
| ] |
| } |
| } else if (mini_chromium_is_win) { |
| cflags = [ |
| "/GL", # LTCG. |
| "/O2", |
| "/Ob2", # Both explicit and auto inlining. |
| "/Oy-", # Disable omitting frame pointers, must be after /O2. |
| "/Zc:inline", # Remove unreferenced COMDAT (faster links). |
| "/d2Zi+", # Improve debugging of optimized code. |
| ] |
| ldflags = [ |
| "/OPT:ICF", |
| "/OPT:REF", |
| "/LTCG", |
| ] |
| arflags = [ "/LTCG" ] |
| } |
| } |
| |
| config("default") { |
| common_flags = [] |
| |
| asmflags = [] |
| ldflags = [] |
| if (mini_chromium_is_posix || mini_chromium_is_fuchsia) { |
| cflags = [ |
| "-Wall", |
| "-Wendif-labels", |
| "-Werror", |
| "-Wextra", |
| "-Wextra-semi", |
| "-Wno-missing-field-initializers", |
| "-Wno-unused-parameter", |
| "-Wsign-compare", |
| "-fno-exceptions", |
| "-fno-rtti", |
| "-fno-strict-aliasing", # See https://crbug.com/32204 |
| "-fobjc-call-cxx-cdtors", |
| "-fstack-protector-all", # Implies -fstack-protector |
| "-fvisibility-inlines-hidden", |
| "-fvisibility=hidden", |
| ] |
| |
| cflags_c = [ "-std=c11" ] |
| cflags_cc = [ "-std=c++14" ] |
| cflags_objc = cflags_c |
| cflags_objcc = cflags_cc |
| |
| cflags += [ |
| "-Wheader-hygiene", |
| "-Wnewline-eof", |
| "-Wstring-conversion", |
| ] |
| |
| if (sysroot != "") { |
| if (sysroot == rebase_path(sysroot)) { |
| # If it’s already system-absolute, leave it alone. |
| sysroot_path = sysroot |
| } else { |
| sysroot_path = rebase_path(sysroot, root_build_dir) |
| } |
| if (mini_chromium_is_mac || mini_chromium_is_ios) { |
| common_flags += [ |
| "-isysroot", |
| sysroot_path, |
| ] |
| } else { |
| common_flags += [ "--sysroot=" + sysroot_path ] |
| } |
| } |
| |
| if (mini_chromium_is_mac || mini_chromium_is_ios) { |
| if (current_cpu == "x86") { |
| common_flags += [ |
| "-arch", |
| "i386", |
| ] |
| } else if (current_cpu == "x64") { |
| common_flags += [ |
| "-arch", |
| "x86_64", |
| ] |
| } else if (current_cpu == "arm64") { |
| common_flags += [ |
| "-arch", |
| "arm64", |
| ] |
| } |
| } |
| |
| if (mini_chromium_is_fuchsia) { |
| common_flags += [ |
| # The Fuchsia SDK no longer dumps everything in the sysroot, preferring |
| # the layout described in |
| # https://fuchsia.googlesource.com/docs/+/master/development/sdk/layout.md. |
| # Eventually /sysroot will be replaced by /pkg/system, but this work is |
| # not yet complete. |
| "-isystem", |
| rebase_path(fuchsia_sdk + "/pkg/fdio/include", root_build_dir), |
| ] |
| |
| lib_dirs = [ fuchsia_sdk + "/arch/$target_cpu/lib" ] |
| } |
| } |
| |
| if (mini_chromium_is_mac) { |
| if (mac_deployment_target != "") { |
| common_flags += [ "-mmacosx-version-min=" + mac_deployment_target ] |
| } |
| } |
| |
| if (mini_chromium_is_ios) { |
| if (ios_deployment_target != "") { |
| if (current_cpu == "x64") { |
| common_flags += |
| [ "-mios-simulator-version-min=" + ios_deployment_target ] |
| } else if (current_cpu == "arm64") { |
| common_flags += [ "-mios-version-min=" + ios_deployment_target ] |
| } |
| } |
| } |
| |
| if (mini_chromium_is_win) { |
| cflags = [ |
| "/DNOMINMAX", |
| "/DUNICODE", |
| "/DWIN32_LEAN_AND_MEAN", |
| "/D_CRT_SECURE_NO_WARNINGS", |
| "/D_HAS_EXCEPTIONS=0", |
| "/D_UNICODE", |
| "/FS", |
| "/W4", |
| "/WX", |
| "/Zi", |
| "/bigobj", # Support larger number of sections in obj file. |
| "/wd4100", # Unreferenced formal parameter. |
| "/wd4127", # Conditional expression is constant. |
| "/wd4324", # Structure was padded due to alignment specifier. |
| "/wd4351", # New behavior: elements of array will be default initialized. |
| "/wd4577", # 'noexcept' used with no exception handling mode specified. |
| "/wd4996", # 'X' was declared deprecated. |
| ] |
| |
| ldflags += [ "/DEBUG" ] |
| |
| libs = [ "kernel32.lib" ] |
| } |
| |
| if (mini_chromium_is_linux) { |
| defines = [ "_FILE_OFFSET_BITS=64" ] |
| common_flags += [ "-pthread" ] |
| |
| # This is currently required by the clang toolchain build that DEPS uses |
| # from the Fuchsia team. Only a static libc++ is provided, and it requires |
| # both -ldl and -pthread. (-pthread was already needed by mini_chromium and |
| # Crashpad). Eventually, the clang build should automatically add these |
| # when needed, but it does not do that yet, so manually add libdl here for |
| # now. |
| libs = [ "dl" ] |
| |
| if (link_libstdcpp_statically) { |
| # The sysroot being built against is based on Stretch, which is newer than |
| # the libstdc++ that's on Trusty (14.04) which is the Chromium minspec. |
| # This minspec determines what the available buildbots are. Chromium |
| # doesn't have a problem with libstdc++ despite this, because it links |
| # against a local copy of libc++ instead. As this build file only affects |
| # the standalone Crashpad build, when this flag is set link libstdc++ |
| # statically to avoid the problem on the bots. |
| cflags += [ "-stdlib=libstdc++" ] |
| ldflags += [ |
| "-rtlib=libgcc", |
| "-static-libstdc++", |
| "-stdlib=libstdc++", |
| ] |
| } |
| } |
| |
| if (mini_chromium_is_fuchsia) { |
| if (target_cpu == "arm64") { |
| common_flags += [ "--target=aarch64-fuchsia" ] |
| } else if (target_cpu == "x64") { |
| common_flags += [ "--target=x86_64-fuchsia" ] |
| } else { |
| assert(false, "Unsupported architecture") |
| } |
| |
| # fdio is listed in ldflags instead of libs because it’s important for it to |
| # be loaded in Fuchsia processes that expect POSIX-like file descriptor |
| # semantics, even if they don’t explicitly reference anything in the fdio |
| # library. To avoid inadvertently losing the runtime dependency, it must |
| # come before -Wl,--as-needed below. fdio needs zircon (and zircon needs to |
| # be in every process anyway). |
| ldflags += [ |
| "-lfdio", |
| "-lzircon", |
| ] |
| } |
| |
| if ((mini_chromium_is_posix && !mini_chromium_is_mac && |
| !mini_chromium_is_ios) || mini_chromium_is_fuchsia) { |
| cflags += [ "-fPIC" ] |
| ldflags += [ |
| # This must follow Fuchsia’s fdio library above. |
| "-Wl,--as-needed", |
| |
| "-Wl,-z,noexecstack", |
| ] |
| } |
| |
| cflags += common_flags |
| asmflags += common_flags |
| ldflags += common_flags |
| |
| if (is_debug) { |
| configs = [ ":debug" ] |
| } else { |
| configs = [ ":release" ] |
| } |
| } |
| |
| config("executable") { |
| if (mini_chromium_is_linux) { |
| ldflags = [ "-pie" ] |
| } |
| } |
| |
| config("ios_enable_arc") { |
| if (mini_chromium_is_ios) { |
| common_flags = [ "-fobjc-arc" ] |
| cflags_objc = common_flags |
| cflags_objcc = common_flags |
| } |
| } |
| |
| config("Wexit_time_destructors") { |
| if (mini_chromium_is_clang) { |
| cflags = [ "-Wexit-time-destructors" ] |
| } |
| } |
| |
| config("Wimplicit_fallthrough") { |
| if (mini_chromium_is_clang) { |
| cflags = [ "-Wimplicit-fallthrough" ] |
| } |
| } |
| |
| config("win_console") { |
| if (mini_chromium_is_win) { |
| ldflags = [ "/SUBSYSTEM:CONSOLE" ] |
| } |
| } |
| |
| config("win_windowed") { |
| if (mini_chromium_is_win) { |
| ldflags = [ "/SUBSYSTEM:WINDOWS" ] |
| } |
| } |
| |
| ################################################################################ |
| # TOOLCHAIN DEFINITIONS |
| ################################################################################ |
| |
| toolchain("gcc_like_toolchain") { |
| lib_switch = "-l" |
| lib_dir_switch = "-L" |
| |
| if ((mini_chromium_is_linux || mini_chromium_is_fuchsia) && clang_path != "") { |
| cc = rebase_path(clang_path, root_build_dir) + "/bin/clang" |
| cxx = rebase_path(clang_path, root_build_dir) + "/bin/clang++" |
| asm = cxx |
| ar = rebase_path(clang_path, root_build_dir) + "/bin/llvm-ar" |
| ld = cxx |
| } else { |
| cc = "clang" |
| cxx = "clang++" |
| asm = cxx |
| ld = cxx |
| |
| if (!mini_chromium_is_mac && !mini_chromium_is_ios) { |
| # macOS uses libtool instead of ar. |
| ar = "ar" |
| } |
| } |
| |
| if (defined(extra_cflags) && extra_cflags != "") { |
| extra_cflags = " " + extra_cflags |
| } else { |
| extra_cflags = "" |
| } |
| if (defined(extra_cflags_c) && extra_cflags_c != "") { |
| extra_cflags_c = " " + extra_cflags_c |
| } else { |
| extra_cflags_c = "" |
| } |
| if (defined(extra_cflags_cc) && extra_cflags_cc != "") { |
| extra_cflags_cc = " " + extra_cflags_cc |
| } else { |
| extra_cflags_cc = "" |
| } |
| if (defined(extra_ldflags) && extra_ldflags != "") { |
| extra_ldflags = " " + extra_ldflags |
| } else { |
| extra_ldflags = "" |
| } |
| if (defined(extra_arflags) && extra_arflags != "") { |
| extra_arflags = " " + extra_arflags |
| } else { |
| extra_arflags = "" |
| } |
| |
| tool("cc") { |
| depfile = "{{output}}.d" |
| command = "$cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}${extra_cflags}${extra_cflags_c} -c {{source}} -o {{output}}" |
| depsformat = "gcc" |
| description = "CC {{output}}" |
| outputs = [ |
| "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o", |
| ] |
| } |
| |
| tool("cxx") { |
| depfile = "{{output}}.d" |
| command = "$cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}}${extra_cflags}${extra_cflags_cc} -c {{source}} -o {{output}}" |
| depsformat = "gcc" |
| description = "CXX {{output}}" |
| outputs = [ |
| "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o", |
| ] |
| } |
| |
| if (mini_chromium_is_mac || mini_chromium_is_ios) { |
| if (defined(extra_cflags_objc) && extra_cflags_objc != "") { |
| extra_cflags_objc = " " + extra_cflags_objc |
| } else { |
| extra_cflags_objc = "" |
| } |
| if (defined(extra_cflags_objcc) && extra_cflags_objcc != "") { |
| extra_cflags_objcc = " " + extra_cflags_objcc |
| } else { |
| extra_cflags_objcc = "" |
| } |
| |
| tool("objc") { |
| depfile = "{{output}}.d" |
| command = "$cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_objc}}${extra_cflags}${extra_cflags_objc} -c {{source}} -o {{output}}" |
| depsformat = "gcc" |
| description = "OBJC {{output}}" |
| outputs = [ |
| "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o", |
| ] |
| } |
| |
| tool("objcxx") { |
| depfile = "{{output}}.d" |
| command = "$cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_objcc}}${extra_cflags}${extra_cflags_objcc} -c {{source}} -o {{output}}" |
| depsformat = "gcc" |
| description = "OBJCXX {{output}}" |
| outputs = [ |
| "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o", |
| ] |
| } |
| |
| tool("copy_bundle_data") { |
| _copydir = "mkdir -p {{output}} && cd {{source}} && " + |
| "pax -rwl . \"\$OLDPWD\"/{{output}}" |
| copy_command = "ln -f {{source}} {{output}} 2>/dev/null || (rm -rf {{output}} && cp -af {{source}} {{output}})" |
| command = "rm -rf {{output}} && if [[ -d {{source}} ]]; then " + |
| _copydir + "; else " + copy_command + "; fi" |
| |
| description = "COPY_BUNDLE_DATA {{source}} {{output}}" |
| } |
| |
| tool("compile_xcassets") { |
| command = "/bin/true" |
| } |
| } |
| |
| tool("asm") { |
| depfile = "{{output}}.d" |
| command = "$asm -MMD -MF $depfile {{defines}} {{include_dirs}} {{asmflags}} -c {{source}} -o {{output}}" |
| depsformat = "gcc" |
| description = "ASM {{output}}" |
| outputs = [ |
| "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o", |
| ] |
| } |
| |
| tool("alink") { |
| if (mini_chromium_is_mac || mini_chromium_is_ios) { |
| command = "libtool -static -no_warning_for_no_symbols {{arflags}}${extra_arflags} -o {{output}} {{inputs}}" |
| } else { |
| command = "rm -f {{output}}; $ar rcsD {{arflags}}${extra_arflags} {{output}} {{inputs}}" |
| } |
| description = "AR {{output}}" |
| default_output_dir = "{{target_out_dir}}" |
| default_output_extension = ".a" |
| output_prefix = "lib" |
| outputs = [ |
| "{{output_dir}}/{{target_output_name}}{{output_extension}}", |
| ] |
| } |
| |
| tool("solink_module") { |
| # TODO(scottmg): This will need to do -framework, etc. for macOS. |
| soname = "{{target_output_name}}{{output_extension}}" # e.g. "libfoo.so". |
| sofile = "{{output_dir}}/$soname" |
| |
| soname_flag = "" |
| start_whole_flag = "" |
| end_whole_flag = "" |
| if (mini_chromium_is_mac || mini_chromium_is_ios) { |
| soname_flag = "-Wl,-install_name,\"$soname\"" |
| } else { |
| soname_flag = "-Wl,-soname=\"$soname\"" |
| start_whole_flag = "-Wl,--whole-archive" |
| end_whole_flag = "-Wl,--no-whole-archive " |
| } |
| command = "$ld -shared {{ldflags}}${extra_ldflags} -o \"$sofile\" $soname_flag $start_whole_flag {{inputs}} {{solibs}} $end_whole_flag {{libs}}" |
| description = "SOLINK_MODULE $sofile" |
| |
| default_output_dir = "{{root_out_dir}}" |
| default_output_extension = ".so" |
| |
| outputs = [ |
| sofile, |
| ] |
| } |
| |
| tool("link") { |
| exename = "{{target_output_name}}{{output_extension}}" |
| outfile = "{{output_dir}}/$exename" |
| |
| start_group_flag = "" |
| end_group_flag = "" |
| if (!mini_chromium_is_mac && !mini_chromium_is_ios) { |
| start_group_flag = "-Wl,--start-group" |
| end_group_flag = "-Wl,--end-group" |
| } |
| command = "$ld {{ldflags}}${extra_ldflags} -o \"$outfile\" $start_group_flag {{inputs}} {{solibs}} $end_group_flag {{libs}}" |
| description = "LINK $outfile" |
| |
| default_output_dir = "{{root_out_dir}}" |
| default_output_extension = "" |
| outputs = [ |
| outfile, |
| ] |
| } |
| |
| tool("stamp") { |
| command = "touch {{output}}" |
| description = "STAMP {{output}}" |
| } |
| } |
| |
| if (mini_chromium_is_win) { |
| helper_path = rebase_path("win_helper.py") |
| toolchain_data = exec_script(helper_path, |
| [ |
| "get-visual-studio-data", |
| rebase_path(root_build_dir), |
| rebase_path(win_toolchain_path), |
| ], |
| "scope") |
| |
| # Required arguments: |
| # - environment_file: Path to saved environment file (see win_helper.py). |
| # - current_cpu: The cpu to target with this toolchain. |
| template("msvc_toolchain") { |
| toolchain("msvc_toolchain_$target_name") { |
| # @rsp files are not used for simplicity, and because mini_chromium and |
| # Crashpad shouldn't require them in any configurations. |
| cc = "cl.exe" |
| cxx = "cl.exe" |
| ar = "lib.exe" |
| ld = "link.exe" |
| lib_switch = "" |
| lib_dir_switch = "/LIBPATH:" |
| env = invoker.environment_file |
| |
| if (defined(invoker.extra_cflags) && invoker.extra_cflags != "") { |
| extra_cflags = " " + invoker.extra_cflags |
| } else { |
| extra_cflags = "" |
| } |
| if (defined(invoker.extra_cflags_c) && invoker.extra_cflags_c != "") { |
| extra_cflags_c = " " + invoker.extra_cflags_c |
| } else { |
| extra_cflags_c = "" |
| } |
| if (defined(invoker.extra_cflags_cc) && invoker.extra_cflags_cc != "") { |
| extra_cflags_cc = " " + invoker.extra_cflags_cc |
| } else { |
| extra_cflags_cc = "" |
| } |
| if (defined(invoker.extra_ldflags) && invoker.extra_ldflags != "") { |
| extra_ldflags = " " + invoker.extra_ldflags |
| } else { |
| extra_ldflags = "" |
| } |
| if (defined(invoker.extra_arflags) && invoker.extra_arflags != "") { |
| extra_arflags = " " + invoker.extra_arflags |
| } else { |
| extra_arflags = "" |
| } |
| |
| tool("cc") { |
| depfile = "{{output}}.d" |
| pdbname = "{{target_out_dir}}/{{label_name}}_c.pdb" |
| command = "ninja -t msvc -e $env -- $cc /nologo /showIncludes {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}${extra_cflags}${extra_cflags_c} /c {{source}} /Fo{{output}} /Fd\"$pdbname\"" |
| depsformat = "msvc" |
| description = "CC {{output}}" |
| outputs = [ |
| "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.obj", |
| ] |
| } |
| |
| tool("cxx") { |
| depfile = "{{output}}.d" |
| pdbname = "{{target_out_dir}}/{{label_name}}_cc.pdb" |
| command = "ninja -t msvc -e $env -- $cxx /nologo /showIncludes {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}${extra_cflags}${extra_cflags_cc} /c {{source}} /Fo{{output}} /Fd\"$pdbname\"" |
| depsformat = "msvc" |
| description = "CXX {{output}}" |
| outputs = [ |
| "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.obj", |
| ] |
| } |
| |
| tool("alink") { |
| command = "$python_path $helper_path link-wrapper $env $ar /nologo /out:{{output}} {{arflags}}${extra_arflags} {{inputs}}" |
| description = "AR {{output}}" |
| outputs = [ |
| "{{output_dir}}/{{target_output_name}}{{output_extension}}", |
| ] |
| default_output_dir = "{{target_out_dir}}" |
| default_output_extension = ".lib" |
| output_prefix = "" |
| } |
| |
| tool("solink_module") { |
| outputs = [ |
| "{{output_dir}}/{{target_output_name}}{{output_extension}}", |
| ] |
| command = "$python_path $helper_path link-wrapper $env $ld /nologo /DLL /OUT:{{output}} {{ldflags}}${extra_ldflags} {{inputs}} {{solibs}} {{libs}}" |
| description = "SOLINK_MODULE {{output}}" |
| default_output_dir = "{{root_out_dir}}" |
| default_output_extension = ".dll" |
| } |
| |
| tool("link") { |
| outputs = [ |
| "{{output_dir}}/{{target_output_name}}{{output_extension}}", |
| ] |
| command = "$python_path $helper_path link-wrapper $env $ld /nologo /OUT:{{output}} {{ldflags}}${extra_ldflags} {{inputs}} {{solibs}} {{libs}}" |
| description = "LINK {{output}}" |
| default_output_dir = "{{root_out_dir}}" |
| default_output_extension = ".exe" |
| } |
| |
| tool("asm") { |
| if (invoker.current_cpu == "arm64") { |
| ml = "armasm64.exe" |
| command = "$python_path $helper_path asm-wrapper $env $ml {{include_dirs}} {{asmflags}} -o {{output}} {{source}}" |
| } else { |
| if (invoker.current_cpu == "x86") { |
| ml = "ml.exe" |
| } else { |
| ml = "ml64.exe" |
| } |
| command = "$python_path $helper_path asm-wrapper $env $ml {{defines}} {{include_dirs}} {{asmflags}} /c /Fo{{output}} {{source}}" |
| } |
| description = "ASM {{output}}" |
| outputs = [ |
| "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.obj", |
| ] |
| } |
| |
| tool("stamp") { |
| command = "$python_path $helper_path stamp {{output}}" |
| description = "STAMP {{output}}" |
| } |
| |
| tool("copy") { |
| command = "cmd /c copy /y {{source}} {{output}} >nul" |
| description = "COPY {{source}} {{output}}" |
| } |
| } |
| } |
| |
| msvc_toolchain("x64") { |
| environment_file = toolchain_data.x64_environment_file |
| current_cpu = "x64" |
| } |
| |
| msvc_toolchain("x86") { |
| environment_file = toolchain_data.x86_environment_file |
| current_cpu = "x86" |
| } |
| |
| msvc_toolchain("arm64") { |
| environment_file = toolchain_data.arm64_environment_file |
| current_cpu = "arm64" |
| } |
| } |