1d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# Copyright (c) 2013 The Chromium Authors. All rights reserved. 2d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# Use of this source code is governed by a BSD-style license that can be 3d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# found in the LICENSE file. 4d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 5d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# Should only be running on Windows. 6d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochassert(is_win) 7d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# Setup the Visual Studio state. 9d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# 10d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# Its argument is the location to write the environment files. 11d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# It will write "environment.x86" and "environment.x64" to this directory, 12d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# and return a list to us. 13d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# 14d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# The list contains the include path as its only element. (I'm expecting to 15d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# add more so it's currently a list inside a list.) 16d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochmsvc_config = [["foo"]] 17d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#exec_script("get_msvc_config.py", 18d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # [relative_root_output_dir], 19d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # "value") 20d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 21d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# 32-bit toolchain ------------------------------------------------------------- 22d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 23d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochtoolchain("32") { 24d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch tool("cc") { 25d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch command = "ninja -t msvc -e \$arch -- cl.exe /nologo /showIncludes /FC @\$out.rsp /c \$in /Fo\$out /Fd\$pdbname" 26d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch description = "CC \$out" 27d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch rspfile = "\$out.rsp" 28d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch rspfile_content = "\$defines \$includes \$cflags \$cflags_c" 29d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch deps = "msvc" 30d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 31d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch tool("cxx") { 32d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch command = "ninja -t msvc -e \$arch -- cl.exe /nologo /showIncludes /FC @\$out.rsp /c \$in /Fo\$out /Fd\$pdbname" 33d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch description = "CXX \$out" 34d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch rspfile = "\$out.rsp" 35d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch rspfile_content = "\$defines \$includes \$cflags \$cflags_cc" 36d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch deps = "msvc" 37d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 38d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #tool("idl") { 39d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # command = $python_path gyp-win-tool midl-wrapper \$arch \$outdir \$tlb \$h \$dlldata \$iid \$ 40d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # \$proxy \$in \$idlflags 41d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # description = IDL \$in 42d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #} 43d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #tool("rc") { 44d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # command = $python_path gyp-win-tool rc-wrapper \$arch rc.exe \$defines \$includes \$rcflags \$ 45d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # /fo\$out \$in 46d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # description = RC \$in 47d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #} 48d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #tool("asm") { 49d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # command = $python_path gyp-win-tool asm-wrapper \$arch ml.exe \$defines \$includes /c /Fo \$ 50d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # \$out \$in 51d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # description = ASM \$in 52d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #} 53d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch tool("alink") { 54d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch command = "$python_path gyp-win-tool link-wrapper \$arch lib.exe /nologo /ignore:4221 /OUT:\$out @\$out.rsp" 55d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch description = "LIB \$out" 56d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch rspfile = "\$out.rsp" 57d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch rspfile_content = "\$in_newline \$libflags" 58d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 59d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #tool("solink_embed_inc") { 60d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # command = cmd /c $python_path gyp-win-tool link-wrapper \$arch link.exe /nologo \$implibflag \$ 61d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # /DLL /OUT:\$dll /PDB:\$dll.pdb @\$dll.rsp && $python_path gyp-win-tool \$ 62d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # manifest-wrapper \$arch cmd /c if exist \$dll.manifest del \$dll.manifest && \$ 63d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # $python_path gyp-win-tool manifest-wrapper \$arch mt.exe -nologo -manifest \$manifests \$ 64d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # -out:\$dll.manifest && $python_path gyp-win-tool manifest-to-rc \$arch \$dll.manifest \$ 65d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # \$dll.manifest.rc 2 && $python_path gyp-win-tool rc-wrapper \$arch rc.exe \$ 66d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # \$dll.manifest.rc && $python_path gyp-win-tool link-wrapper \$arch link.exe /nologo \$ 67d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # \$implibflag /DLL /OUT:\$dll /PDB:\$dll.pdb @\$dll.rsp \$dll.manifest.res 68d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # description = LINK_EMBED_INC(DLL) \$dll 69d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # restat = 1 70d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # rspfile = \$dll.rsp 71d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # rspfile_content = \$libs \$in_newline \$ldflags 72d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #} 73d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #tool("solink_module_embed_inc") { 74d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # command = cmd /c $python_path gyp-win-tool link-wrapper \$arch link.exe /nologo \$implibflag \$ 75d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # /DLL /OUT:\$dll /PDB:\$dll.pdb @\$dll.rsp && $python_path gyp-win-tool \$ 76d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # manifest-wrapper \$arch cmd /c if exist \$dll.manifest del \$dll.manifest && \$ 77d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # $python_path gyp-win-tool manifest-wrapper \$arch mt.exe -nologo -manifest \$manifests \$ 78d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # -out:\$dll.manifest && $python_path gyp-win-tool manifest-to-rc \$arch \$dll.manifest \$ 79d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # \$dll.manifest.rc 2 && $python_path gyp-win-tool rc-wrapper \$arch rc.exe \$ 80d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # \$dll.manifest.rc && $python_path gyp-win-tool link-wrapper \$arch link.exe /nologo \$ 81d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # \$implibflag /DLL /OUT:\$dll /PDB:\$dll.pdb @\$dll.rsp \$dll.manifest.res 82d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # description = LINK_EMBED_INC(DLL) \$dll 83d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # restat = 1 84d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # rspfile = \$dll.rsp 85d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # rspfile_content = \$libs \$in_newline \$ldflags 86d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #} 87d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #rule link_embed_inc 88d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # command = cmd /c $python_path gyp-win-tool link-wrapper \$arch link.exe /nologo /OUT:\$out \$ 89d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # /PDB:\$out.pdb @\$out.rsp && $python_path gyp-win-tool manifest-wrapper \$arch cmd /c \$ 90d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # if exist \$out.manifest del \$out.manifest && $python_path gyp-win-tool \$ 91d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # manifest-wrapper \$arch mt.exe -nologo -manifest \$manifests -out:\$out.manifest && \$ 92d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # $python_path gyp-win-tool manifest-to-rc \$arch \$out.manifest \$out.manifest.rc 1 && \$ 93d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # $python_path gyp-win-tool rc-wrapper \$arch rc.exe \$out.manifest.rc && \$ 94d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # $python_path gyp-win-tool link-wrapper \$arch link.exe /nologo /OUT:\$out /PDB:\$out.pdb \$ 95d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # @\$out.rsp \$out.manifest.res 96d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # description = LINK_EMBED_INC \$out 97d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # rspfile = \$out.rsp 98d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # rspfile_content = \$in_newline \$libs \$ldflags 99d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #rule solink_embed 100d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # command = cmd /c $python_path gyp-win-tool link-wrapper \$arch link.exe /nologo \$implibflag \$ 101d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # /DLL /OUT:\$dll /PDB:\$dll.pdb @\$dll.rsp && $python_path gyp-win-tool \$ 102d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # manifest-wrapper \$arch cmd /c if exist \$dll.manifest del \$dll.manifest && \$ 103d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # $python_path gyp-win-tool manifest-wrapper \$arch mt.exe -nologo -manifest \$manifests \$ 104d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # -outputresource:\$dll;2 105d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # description = LINK_EMBED(DLL) \$dll 106d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # restat = 1 107d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # rspfile = \$dll.rsp 108d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # rspfile_content = \$libs \$in_newline \$ldflags 109d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #rule solink_module_embed 110d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # command = cmd /c $python_path gyp-win-tool link-wrapper \$arch link.exe /nologo \$implibflag \$ 111d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # /DLL /OUT:\$dll /PDB:\$dll.pdb @\$dll.rsp && $python_path gyp-win-tool \$ 112d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # manifest-wrapper \$arch cmd /c if exist \$dll.manifest del \$dll.manifest && \$ 113d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # $python_path gyp-win-tool manifest-wrapper \$arch mt.exe -nologo -manifest \$manifests \$ 114d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # -outputresource:\$dll;2 115d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # description = LINK_EMBED(DLL) \$dll 116d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # restat = 1 117d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # rspfile = \$dll.rsp 118d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # rspfile_content = \$libs \$in_newline \$ldflags 119d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch #rule link_embed 120d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # command = cmd /c $python_path gyp-win-tool link-wrapper \$arch link.exe /nologo /OUT:\$out \$ 121d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # /PDB:\$out.pdb @\$out.rsp && $python_path gyp-win-tool manifest-wrapper \$arch cmd /c \$ 122d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # if exist \$out.manifest del \$out.manifest && $python_path gyp-win-tool \$ 123d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # manifest-wrapper \$arch mt.exe -nologo -manifest \$manifests -outputresource:\$out;1 124d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # description = LINK_EMBED \$out 125d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # rspfile = \$out.rsp 126d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # rspfile_content = \$in_newline \$libs \$ldflags 127d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch tool("solink") { 128d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch command = "cmd /c $python_path gyp-win-tool link-wrapper \$arch link.exe /nologo \$implibflag /DLL /OUT:\$dll /PDB:\$dll.pdb @\$dll.rsp && $python_path gyp-win-tool manifest-wrapper \$arch cmd /c if exist \$dll.manifest del \$dll.manifest && $python_path gyp-win-tool manifest-wrapper \$arch mt.exe -nologo -manifest \$manifests -out:\$dll.manifest" 129d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch description = "LINK(DLL) \$dll" 130d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch restat = "1" 131d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch rspfile = "\$dll.rsp" 132d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch rspfile_content = "\$libs \$in_newline \$ldflags" 133d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 134d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch tool("solink_module") { 135d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch command = "cmd /c $python_path gyp-win-tool link-wrapper \$arch link.exe /nologo \$implibflag /DLL /OUT:\$dll /PDB:\$dll.pdb @\$dll.rsp && $python_path gyp-win-tool manifest-wrapper \$arch cmd /c if exist \$dll.manifest del \$dll.manifest && $python_path gyp-win-tool manifest-wrapper \$arch mt.exe -nologo -manifest \$manifests -out:\$dll.manifet" 136d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch description = "LINK(DLL) \$dll" 137d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch restat = "1" 138d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch rspfile = "\$dll.rsp" 139d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch rspfile_content = "\$libs \$in_newline \$ldflags" 140d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 141d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch tool("link") { 142d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch command = "cmd /c $python_path gyp-win-tool link-wrapper \$arch link.exe /nologo /OUT:\$out /PDB:\$out.pdb @\$out.rsp && $python_path gyp-win-tool manifest-wrapper \$arch cmd /c if exist \$out.manifest del \$out.manifest && $python_path gyp-win-tool manifest-wrapper \$arch mt.exe -nologo -manifest \$manifests -out:\$out.manifest" 143d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch description = "LINK \$out" 144d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch rspfile = "\$out.rsp" 145d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch rspfile_content = "\$in_newline \$libs \$ldflags" 146d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 147d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch tool("stamp") { 148d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch command = "$python_path gyp-win-tool stamp \$out" 149d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch description = "STAMP \$out" 150d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 151d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch tool("copy") { 152d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch command = "$python_path gyp-win-tool recursive-mirror \$in \$out" 153d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch description = "COPY \$in \$out" 154d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 155d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 156d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 157d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# 64-bit toolchain ------------------------------------------------------------- 158d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 159d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochtoolchain("64") { 160d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 161d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 162d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# SDK setup -------------------------------------------------------------------- 163d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 164d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochconfig("sdk") { 165d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # The include path is the stuff returned by the script plus out own WTL 166d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # checkout. 167d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # TODO(brettw) should adding WTL be at this level or should it be more on 168d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch # a per-project basis? 169d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch includes = msvc_config[0] + "../../third_party/wtl/include" 170d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 171d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch defines = [ 172d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch "_ATL_NO_OPENGL", 173d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch "_SECURE_ATL", 174d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch "_WIN32_WINNT=0x0602", 175d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch "_WINDOWS", 176d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch "CERT_CHAIN_PARA_HAS_EXTRA_FIELDS", 177d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch "NOMINMAX", 178d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch "NTDDI_VERSION=0x06020000", 179d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch "PSAPI_VERSION=1", 180d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch "WIN32", 181d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch "WIN32_LEAN_AND_MEAN", 182d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch "WINVER=0x0602", 183d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ] 184d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 185