xref: /aosp_15_r20/external/angle/build/toolchain/win/BUILD.gn (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker# Copyright 2013 The Chromium Authors
2*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file.
4*8975f5c5SAndroid Build Coastguard Worker
5*8975f5c5SAndroid Build Coastguard Workerimport("//build/config/win/visual_studio_version.gni")
6*8975f5c5SAndroid Build Coastguard Workerimport("//build/toolchain/win/toolchain.gni")
7*8975f5c5SAndroid Build Coastguard Worker
8*8975f5c5SAndroid Build Coastguard Workerassert(is_win, "Should only be running on Windows")
9*8975f5c5SAndroid Build Coastguard Worker
10*8975f5c5SAndroid Build Coastguard Worker# Setup the Visual Studio state.
11*8975f5c5SAndroid Build Coastguard Worker#
12*8975f5c5SAndroid Build Coastguard Worker# Its arguments are the VS path and the compiler wrapper tool. It will write
13*8975f5c5SAndroid Build Coastguard Worker# "environment.x86" and "environment.x64" to the build directory and return a
14*8975f5c5SAndroid Build Coastguard Worker# list to us.
15*8975f5c5SAndroid Build Coastguard Worker
16*8975f5c5SAndroid Build Coastguard Worker# Copy the VS runtime DLL for the default toolchain to the root build directory
17*8975f5c5SAndroid Build Coastguard Worker# so things will run.
18*8975f5c5SAndroid Build Coastguard Workerif (current_toolchain == default_toolchain) {
19*8975f5c5SAndroid Build Coastguard Worker  if (is_debug) {
20*8975f5c5SAndroid Build Coastguard Worker    configuration_name = "Debug"
21*8975f5c5SAndroid Build Coastguard Worker  } else {
22*8975f5c5SAndroid Build Coastguard Worker    configuration_name = "Release"
23*8975f5c5SAndroid Build Coastguard Worker  }
24*8975f5c5SAndroid Build Coastguard Worker  exec_script("../../vs_toolchain.py",
25*8975f5c5SAndroid Build Coastguard Worker              [
26*8975f5c5SAndroid Build Coastguard Worker                "copy_dlls",
27*8975f5c5SAndroid Build Coastguard Worker                rebase_path(root_build_dir),
28*8975f5c5SAndroid Build Coastguard Worker                configuration_name,
29*8975f5c5SAndroid Build Coastguard Worker                target_cpu,
30*8975f5c5SAndroid Build Coastguard Worker              ])
31*8975f5c5SAndroid Build Coastguard Worker}
32*8975f5c5SAndroid Build Coastguard Worker
33*8975f5c5SAndroid Build Coastguard Workerif (target_cpu == "x86" || target_cpu == "x64") {
34*8975f5c5SAndroid Build Coastguard Worker  win_toolchains("x86") {
35*8975f5c5SAndroid Build Coastguard Worker    toolchain_arch = "x86"
36*8975f5c5SAndroid Build Coastguard Worker  }
37*8975f5c5SAndroid Build Coastguard Worker  win_toolchains("x64") {
38*8975f5c5SAndroid Build Coastguard Worker    toolchain_arch = "x64"
39*8975f5c5SAndroid Build Coastguard Worker  }
40*8975f5c5SAndroid Build Coastguard Worker}
41*8975f5c5SAndroid Build Coastguard Worker
42*8975f5c5SAndroid Build Coastguard Workerif (target_cpu == "arm64") {
43*8975f5c5SAndroid Build Coastguard Worker  win_toolchains("arm64") {
44*8975f5c5SAndroid Build Coastguard Worker    toolchain_arch = "arm64"
45*8975f5c5SAndroid Build Coastguard Worker  }
46*8975f5c5SAndroid Build Coastguard Worker  win_toolchains("x64") {
47*8975f5c5SAndroid Build Coastguard Worker    toolchain_arch = "x64"
48*8975f5c5SAndroid Build Coastguard Worker  }
49*8975f5c5SAndroid Build Coastguard Worker}
50*8975f5c5SAndroid Build Coastguard Worker
51*8975f5c5SAndroid Build Coastguard Worker# The nacl_win64 toolchain is nearly identical to the plain x64 toolchain.
52*8975f5c5SAndroid Build Coastguard Worker# It's used solely for building nacl64.exe (//components/nacl/broker:nacl64).
53*8975f5c5SAndroid Build Coastguard Worker# The only reason it's a separate toolchain is so that it can force
54*8975f5c5SAndroid Build Coastguard Worker# is_component_build to false in the toolchain_args() block, because
55*8975f5c5SAndroid Build Coastguard Worker# building nacl64.exe in component style does not work.
56*8975f5c5SAndroid Build Coastguard Workerwin_toolchains("nacl_win64") {
57*8975f5c5SAndroid Build Coastguard Worker  toolchain_arch = "x64"
58*8975f5c5SAndroid Build Coastguard Worker  toolchain_args = {
59*8975f5c5SAndroid Build Coastguard Worker    is_component_build = false
60*8975f5c5SAndroid Build Coastguard Worker  }
61*8975f5c5SAndroid Build Coastguard Worker}
62*8975f5c5SAndroid Build Coastguard Worker
63*8975f5c5SAndroid Build Coastguard Worker# WinUWP toolchains. Only define these when targeting them.
64*8975f5c5SAndroid Build Coastguard Worker
65*8975f5c5SAndroid Build Coastguard Workerif (target_os == "winuwp") {
66*8975f5c5SAndroid Build Coastguard Worker  assert(target_cpu == "x64" || target_cpu == "x86" || target_cpu == "arm" ||
67*8975f5c5SAndroid Build Coastguard Worker         target_cpu == "arm64")
68*8975f5c5SAndroid Build Coastguard Worker
69*8975f5c5SAndroid Build Coastguard Worker  # Note that //build/toolchain/win/win_toolchain_data.gni collects the output
70*8975f5c5SAndroid Build Coastguard Worker  # of setup_toolchain.py, however it's not compatible with the UWP toolchain,
71*8975f5c5SAndroid Build Coastguard Worker  # as the UWP toolchain requires the `environment.store_$CPU` variable, instead
72*8975f5c5SAndroid Build Coastguard Worker  # of the usual `environment.$CPU`.
73*8975f5c5SAndroid Build Coastguard Worker  store_cpu_toolchain_data =
74*8975f5c5SAndroid Build Coastguard Worker      exec_script("//build/toolchain/win/setup_toolchain.py",
75*8975f5c5SAndroid Build Coastguard Worker                  [
76*8975f5c5SAndroid Build Coastguard Worker                    visual_studio_path,
77*8975f5c5SAndroid Build Coastguard Worker                    windows_sdk_path,
78*8975f5c5SAndroid Build Coastguard Worker                    visual_studio_runtime_dirs,
79*8975f5c5SAndroid Build Coastguard Worker                    target_os,
80*8975f5c5SAndroid Build Coastguard Worker                    target_cpu,
81*8975f5c5SAndroid Build Coastguard Worker                    "environment.store_" + target_cpu,
82*8975f5c5SAndroid Build Coastguard Worker                  ],
83*8975f5c5SAndroid Build Coastguard Worker                  "scope")
84*8975f5c5SAndroid Build Coastguard Worker
85*8975f5c5SAndroid Build Coastguard Worker  msvc_toolchain("uwp_" + target_cpu) {
86*8975f5c5SAndroid Build Coastguard Worker    environment = "environment.store_" + target_cpu
87*8975f5c5SAndroid Build Coastguard Worker    cl = "\"${store_cpu_toolchain_data.vc_bin_dir}/cl.exe\""
88*8975f5c5SAndroid Build Coastguard Worker    toolchain_args = {
89*8975f5c5SAndroid Build Coastguard Worker      current_os = "winuwp"
90*8975f5c5SAndroid Build Coastguard Worker      current_cpu = target_cpu
91*8975f5c5SAndroid Build Coastguard Worker      is_clang = false
92*8975f5c5SAndroid Build Coastguard Worker    }
93*8975f5c5SAndroid Build Coastguard Worker  }
94*8975f5c5SAndroid Build Coastguard Worker}
95