aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/cpp/wrapper/bin/pydir/msvc_link.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/cpp/wrapper/bin/pydir/msvc_link.py')
-rw-r--r--tools/cpp/wrapper/bin/pydir/msvc_link.py122
1 files changed, 0 insertions, 122 deletions
diff --git a/tools/cpp/wrapper/bin/pydir/msvc_link.py b/tools/cpp/wrapper/bin/pydir/msvc_link.py
deleted file mode 100644
index 28a58f727f..0000000000
--- a/tools/cpp/wrapper/bin/pydir/msvc_link.py
+++ /dev/null
@@ -1,122 +0,0 @@
-# pylint: disable=g-bad-file-header
-# Copyright 2016 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-"""Wrapper script for executing the Microsoft Linker."""
-
-import os
-import re
-import sys
-import msvc_tools
-
-SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
-
-sys.path.append(SCRIPT_DIR)
-
-LINKPATTERNS = [
- ('-m(32|64)', ['$TARGET_ARCH']),
- ('-Xcompilation-mode=(dbg|fastbuild|opt)', ['$COMPILATION_MODE']),
- (('rcs.*', '(.+)'), ['/OUT:"$PATH0"']),
- (('-o', '(.+)'), ['/OUT:"$PATH0"']),
- ('-B(.+)', []),
- ('-lpthread', []),
- ('-L(.+)', ['/LIBPATH:$PATH0']),
- ('-static', []),
- ('-shared', ['/DLL']),
- ('-no-whole-archive', []),
- ('-rdynamic', []),
- (r'-Wl,(.+)\.lib', ['$0.lib']),
- (r'-DEFAULTLIB:(.+)', ['/DEFAULTLIB:$0']),
- ('-Wl,@(.+)', ['$LOAD_PARAMS0']),
- ('@(.+)', ['$LOAD_PARAMS0']),
- ('-Wl,-rpath(.+)', []),
- ('-Wl,-S', []), # Debug symbols are in pdb files.
- ('-Wl,/SUBSYSTEM:(WINDOWS|CONSOLE)', ['/SUBSYSTEM:$0']),
- (r'/WHOLEARCHIVE:(.+)\.lib', ['$0.lib']),
-]
-
-
-class MsvcLinker(msvc_tools.WindowsRunner):
- """Driver for the Microsoft linker."""
-
- def Run(self, argv):
- """Runs the linker using the passed clang/gcc style argument list.
-
- Args:
- argv: List of arguments
-
- Returns:
- The return code of the link.
-
- Raises:
- ValueError: if target architecture or compile mode isn't specified
- """
- # For now assume we are building a library.
- tool = 'lib'
- default_args = []
-
- # Build argument list.
- parser = msvc_tools.ArgParser(self, argv, LINKPATTERNS)
-
- # Preprocessing arguments for linking whole archive libraries
- parser.WholeArchivePreprocess()
-
- # Find the output file name.
- name = ''
- for arg in parser.options:
- if '/OUT:' in arg:
- name = re.sub(r'^"|"$', '', arg[5:])
- if not name:
- raise msvc_tools.Error('No output file name specified!')
- # Check if the library is empty, which is what happens when we create header
- # or intermediate link-only libraries.
- if (len(parser.options) == 2 and parser.options[0].startswith('/OUT') and
- parser.options[1].startswith('/M')):
- # Just "touch" the library to create the file.
- with open(name, 'w'):
- os.utime(name, None)
- else:
- # If the output name ends in .lo, or .a, it is a library, otherwise
- # we need to use link to create an executable.
- if os.path.splitext(name)[1] not in ['.a', '.lo']:
- tool = 'link'
-
- # If there is no .o on the command line, then we need to add the
- # run-time library for the target. Without this the linker gives a
- # LNK4001 error and cannot find an entry point.
- for arg in parser.options:
- if arg.endswith('.o'):
- break
- else:
- if not parser.compilation_mode:
- raise ValueError('Must specify compilation mode '
- '(-Xcompilation-mode={dbg,fastbuild,opt})')
-
- rtlib = 'libcmt%s.lib'
- # attempt to choose the right runtime library if we can
- for opt in reversed(parser.options):
- if opt in ['/MT', '/MTd']:
- rtlib = 'msvcrt%s.lib'
- break
- default_args.insert(0, rtlib %
- ('d' if parser.compilation_mode == 'dbg' else ''))
-
- return self.RunBinary(tool, default_args + parser.options, parser)
-
-
-def main(argv):
- return MsvcLinker().Run(argv[1:])
-
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv[1:])) # need to skip the first argument