Browse Source

Adding a python script to enable RVCT 3.1 (ARM ARM compiler) to run in cygwin. The build system passes cygpaths and the Windows tool can not deal with that. The python converts paths to C:\ to make RVCT 3.1 happy. This has been fixed in RVCT 4.0. The ARM processor does not support instructions like divide, so compiler specific intrinsics are required. The .libs are checked in here and referenced from the tools_def.template file, so they are automatically included when the compiler is invoked. The souce to these .lib files will be checkin soon in a new ArmPkg.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9201 6f19259b-4bc3-4df7-8a09-765794883524
AJFISH 15 years ago
parent
commit
c719e02c14

BIN
BaseTools/Bin/CYGWIN_NT-5.1-i686/Arm/DEBUG_RVCT31CYGWIN/CompilerIntrinsicsLib.lib


BIN
BaseTools/Bin/CYGWIN_NT-5.1-i686/Arm/RELEASE_RVCT31CYGWIN/CompilerIntrinsicsLib.lib


+ 88 - 0
BaseTools/Bin/CYGWIN_NT-5.1-i686/armcc_wrapper.py

@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
+#
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution.  The full text of the license may be found at
+#
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+
+#
+# ARMCC tools do not support cygwin paths. Ths script converts cygwin paths to DOS paths
+# in any arguments. 
+#
+# armcc_wrapper.py ToolToExec [command line to convert]
+#
+# anthing with the / will be converted via cygpath cygwin call or manually. 
+# -I/cygpath/c/example is a special case as you can not pass -I to cygpath
+#
+# ExceptionList if a tool takes an argument with a / add it to the exception list
+#
+import sys
+import os
+import subprocess 
+
+#
+# Convert using cygpath command line tool
+# Currently not used, but just in case we need it in the future
+#
+def ConvertCygPathToDosViacygpath(CygPath):
+  p = subprocess.Popen("cygpath -m " + CygPath, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
+  return p.stdout.read().strip()
+
+#
+#
+#
+def ConvertCygPathToDos(CygPath):
+  if CygPath.find("/cygdrive/") == 0:
+    # convert /cygdrive/c/Xyz to c:/Xyz
+    DosPath = CygPath[10] + ':' + CygPath[11:]
+  else:
+    DosPath = CygPath
+  
+  # need the extra \\ as we are making a string to pass to a command
+  return DosPath.replace('/','\\\\')
+
+
+def main(argv):
+
+  # use 1st argument as name of tool to call
+  Command = sys.argv[1]
+  
+  ExceptionList = ["/interwork"]
+  
+  for arg in argv:
+    if arg.find('/') == -1:
+      # if we don't need to convert just add to the command line
+      Command = Command + ' ' + arg 
+    elif arg in ExceptionList:
+      # if it is in the list, then don't do a cygpath
+      # assembler stuff after --apcs has the /.
+      Command = Command + ' ' + arg 
+    else:
+      if ((arg[0] == '-') and (arg[1] == 'I' or arg[1] == 'i')):
+        CygPath = arg[0] + arg[1] + ConvertCygPathToDos(arg[2:])
+      else:
+        CygPath = ConvertCygPathToDos(arg)
+      
+      Command = Command + ' ' + CygPath
+    
+  # call the real tool with the converted paths
+  return subprocess.call(Command, shell=True)
+
+ 
+if __name__ == "__main__":
+  try:
+     ret = main(sys.argv[2:])
+
+  except:
+    print "exiting: exception from " + sys.argv[0]
+    ret = 2
+
+  sys.exit(ret)
+

BIN
BaseTools/Bin/Darwin-i386/Arm/DEBUG_XCODE31/CompilerIntrinsicsLib.lib


BIN
BaseTools/Bin/Darwin-i386/Arm/DEBUG_XCODE32/CompilerIntrinsicsLib.lib


BIN
BaseTools/Bin/Darwin-i386/Arm/RELEASE_XCODE31/CompilerIntrinsicsLib.lib


BIN
BaseTools/Bin/Darwin-i386/Arm/RELEASE_XCODE32/CompilerIntrinsicsLib.lib


BIN
BaseTools/Bin/Win32/Arm/DEBUG_RVCT31/CompilerIntrinsicsLib.lib


BIN
BaseTools/Bin/Win32/Arm/RELEASE_RVCT31/CompilerIntrinsicsLib.lib