diff options
author | bbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524> | 2007-01-10 22:36:15 +0000 |
---|---|---|
committer | bbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524> | 2007-01-10 22:36:15 +0000 |
commit | 07253e8e47621d5e128e36a43486b9c7b900c50b (patch) | |
tree | c7cf9f266c031fc26d758338934908c731d403f0 | |
parent | c6359f68250592ebdad770396ab826f2772167f7 (diff) | |
download | edk2-07253e8e47621d5e128e36a43486b9c7b900c50b.zip edk2-07253e8e47621d5e128e36a43486b9c7b900c50b.tar.gz edk2-07253e8e47621d5e128e36a43486b9c7b900c50b.tar.bz2 |
Add multi-architecture support to the GNU makefile generator.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2212 6f19259b-4bc3-4df7-8a09-765794883524
-rwxr-xr-x | Tools/Python/GenMake.py | 78 |
1 files changed, 44 insertions, 34 deletions
diff --git a/Tools/Python/GenMake.py b/Tools/Python/GenMake.py index 56401fb..39f0926 100755 --- a/Tools/Python/GenMake.py +++ b/Tools/Python/GenMake.py @@ -1,23 +1,35 @@ #!/usr/bin/env python -"""Create Makefiles for the MdePkg.""" +"""Create GNU Makefiles for the Libraries of the MdePkg.""" import os, sys, getopt, string, xml.dom.minidom, shutil from XmlRoutines import * from WorkspaceRoutines import * -ARCH = "X64" +copyingSources = 1 -Makefile = """MAKEROOT ?= .. +Makefile = string.Template("""ARCH = $ARCH -LIBNAME = %s +MAKEROOT ?= ../.. -OBJECTS = %s +VPATH = .. -include $(MAKEROOT)/lib.makefile -""" +LIBNAME = $LIBNAME -def openMdeSpd(): +OBJECTS = $OBJECTS + +include $$(MAKEROOT)/lib.makefile +""") + +def mkdir(path): + """Make a directory if it is not there already.""" + + try: + os.makedirs(path) + except: + pass + +def openMdeSpd(arch): """Open the MdePkg.spd and process the msa files.""" @@ -25,7 +37,7 @@ def openMdeSpd(): for msaFile in XmlList(db, "/PackageSurfaceArea/MsaFiles/Filename"): msaFileName = XmlElementData(msaFile) - DoLib(msaFileName) + doLib(msaFileName, arch) return db @@ -33,7 +45,7 @@ def inMde(f): """Make a path relative to the Mde Pkg root dir.""" return inWorkspace(os.path.join("MdePkg", f)) -def DoLib(msafile): +def doLib(msafile, arch): """Create a directory with the sources, AutoGen.h and a makefile.""" @@ -45,45 +57,43 @@ def DoLib(msafile): msabase = os.path.basename(base) suppArch = str(XmlElement(msa, "/ModuleSurfaceArea/ModuleDefinitions/SupportedArchitectures")) - if not ARCH in string.split(suppArch, " "): + if not arch in string.split(suppArch, " "): return - try: - os.path.isdir(libName) or os.mkdir(libName); - except: - print "Error: file %s exists" % libName - sys.exit() - + mkdir(libName); + + buildDir = os.path.join(libName, "build-%s" % arch ) + mkdir(buildDir) - for msaFile in XmlList(msa, "/ModuleSurfaceArea/SourceFiles/Filename"): + for sourceFile in XmlList(msa, "/ModuleSurfaceArea/SourceFiles/Filename"): - msaFileName = str(XmlElementData(msaFile)) - arch = msaFile.getAttribute("SupArchList") - toolchain = msaFile.getAttribute("ToolChainFamily") - base, ext = os.path.splitext(msaFileName) + sourceFileName = str(XmlElementData(sourceFile)) + suppArchs = sourceFile.getAttribute("SupArchList").split(" ") + toolchain = sourceFile.getAttribute("ToolChainFamily") + base, ext = os.path.splitext(sourceFileName) - if arch in ["", ARCH] and (ext in [".c", ".h"] or toolchain in ["GCC"]): + if ( suppArchs == [""] or arch in suppArchs) and (ext in [".c", ".h", ".S"] or toolchain in ["GCC"]): if ext in [".c", ".S"]: sources.append(str(base+".o")) - targetDir = os.path.join(libName, os.path.dirname(msaFileName)) - try: - os.makedirs(targetDir) - except: - pass - shutil.copy(inMde(os.path.join(os.path.dirname(msafile), msaFileName)), - targetDir) + sourceDir = os.path.join(libName, os.path.dirname(sourceFileName)) + mkdir(sourceDir) + mkdir(os.path.join(buildDir, os.path.dirname(sourceFileName))) + if copyingSources : + shutil.copy(inMde(os.path.join(os.path.dirname(msafile), sourceFileName)), + sourceDir) # Write a Makefile for this module - f = open(os.path.join(libName, "Makefile"), "w") - f.write(Makefile % (libName, string.join(sources, " "))) + f = open(os.path.join(buildDir, "Makefile"), "w") + f.write(Makefile.substitute(ARCH=arch, LIBNAME=libName, OBJECTS=string.join(sources, " "))) f.close() # Right now we are getting the AutoGen.h file from a previous build. We # could create it from scratch also. - shutil.copy(inWorkspace("Build/Mde/DEBUG_UNIXGCC/%s/MdePkg/Library/%s/%s/DEBUG/AutoGen.h") % (ARCH, libName, msabase), libName) + shutil.copy(inWorkspace("Build/Mde/DEBUG_UNIXGCC/%s/MdePkg/Library/%s/%s/DEBUG/AutoGen.h") % (arch, libName, msabase), buildDir) # This acts like the main() function for the script, unless it is 'import'ed # into another script. if __name__ == '__main__': - openMdeSpd(); + for arch in ["IA32", "X64"]: + openMdeSpd(arch); |