lutin/lutinTarget.py

202 lines
6.0 KiB
Python
Raw Normal View History

#!/usr/bin/python
import lutinDebug as debug
import datetime
import lutinTools
import lutinModule
class Target:
def __init__(self, name, typeCompilator, debugMode):
self.name=name
debug.info("create board target : "+self.name);
if "clang"==typeCompilator:
self.cc='clang'
self.xx='clang++'
else:
self.cc='gcc'
self.xx='g++'
self.ar='ar'
self.ld='ld'
self.nm='nm'
self.strip='strip'
self.ranlib='ranlib'
self.dlltool='dlltool'
###############################################################################
# Target global variables.
###############################################################################
self.global_include_cc=''
self.global_flags_cc=['-D__TARGET_OS__Linux', "-DBUILD_TIME=\"\\\""+str(datetime.datetime.now())+"\\\"\""]
self.global_flags_xx=''
self.global_flags_mm=''
self.global_flags_m=''
self.global_flags_ar='rcs'
self.global_flags_ld=''
self.global_flags_ld_shared=''
self.global_libs_ld=''
self.global_libs_ld_shared=''
self.suffix_dependence='.d'
self.suffix_obj='.o'
self.suffix_lib_static='.a'
self.suffix_lib_dynamic='.so'
self.suffix_binary=''
self.suffix_package='.deb'
self.folder_arch="/" + self.name
if "debug"==debugMode:
self.buildMode = "debug"
else:
self.buildMode = "release"
self.folder_out="/out" + self.folder_arch + "/" + self.buildMode
self.folder_final="/final"
self.folder_staging="/staging"
self.folder_build="/build"
self.folder_bin="/usr/bin"
self.folder_lib="/usr/lib"
self.folder_data="/usr/share"
self.folder_doc="/usr/share/doc"
self.buildDone=[]
self.buildTreeDone=[]
self.moduleList=[]
"""
return a list of 3 elements :
0 : sources files (can be a list)
1 : destination file
2 : dependence files module (*.d)
"""
def GenerateFile(self,binaryName,moduleName,basePath,file,type):
list=[]
if (type=="bin"):
list.append(file)
list.append(self.GetStagingFolder(binaryName) + self.folder_bin + "/" + moduleName + self.suffix_binary)
list.append(self.GetBuildFolder(moduleName) + moduleName + self.suffix_dependence)
elif (type=="obj"):
list.append(basePath + "/" + file)
list.append(self.GetBuildFolder(moduleName) + file + self.suffix_obj)
list.append(self.GetBuildFolder(moduleName) + file + self.suffix_dependence)
elif (type=="lib-shared"):
list.append(file)
list.append(self.GetStagingFolder(binaryName) + self.folder_lib + "/" + moduleName + self.suffix_lib_dynamic)
list.append(self.GetBuildFolder(moduleName) + moduleName + self.suffix_dependence)
elif (type=="lib-static"):
list.append(file)
list.append(self.GetBuildFolder(moduleName) + moduleName + self.suffix_lib_static)
list.append(self.GetBuildFolder(moduleName) + moduleName + self.suffix_dependence)
else:
debug.error("unknow type : " + type)
return list
def GetStagingFolder(self, binaryName):
return lutinTools.GetRunFolder() + self.folder_out + self.folder_staging + "/" + binaryName + "/"
def GetStagingFolderData(self, binaryName):
return self.GetStagingFolder(binaryName) + self.folder_data + "/"
def GetBuildFolder(self, moduleName):
return lutinTools.GetRunFolder() + self.folder_out + self.folder_build + "/" + moduleName + "/"
def IsModuleBuild(self,module):
for mod in self.buildDone:
if mod == module:
return True
self.buildDone.append(module)
return False
def IsModuleBuildTree(self,module):
for mod in self.buildTreeDone:
if mod == module:
return True
self.buildTreeDone.append(module)
return False
def AddModule(self, newModule):
debug.debug("Import nodule for Taget : " + newModule.name)
self.moduleList.append(newModule)
# return inherit packages ...
"""
def Build(self, name, packagesName):
for module in self.moduleList:
if module.name == name:
return module.Build(self, packagesName)
debug.error("request to build an un-existant module name : '" + name + "'")
"""
def BuildTree(self, name, packagesName):
for module in self.moduleList:
if module.name == name:
module.BuildTree(self, packagesName)
return
debug.error("request to build tree on un-existant module name : '" + name + "'")
def Clean(self, name):
for module in self.moduleList:
if module.name == name:
module.Clean(self)
return
debug.error("request to clean an un-existant module name : '" + name + "'")
def LoadIfNeeded(self, name):
for elem in self.moduleList:
if elem.name == name:
return
lutinModule.LoadModule(self, name)
def LoadAll(self):
listOfAllTheModule = lutinModule.ListAllModule()
for modName in listOfAllTheModule:
self.LoadIfNeeded(modName)
def Build(self, name, packagesName=None):
if name == "dump":
debug.info("dump all")
self.LoadAll()
print 'Dump all module properties'
for mod in self.moduleList:
mod.Display(self)
elif name == "all":
debug.info("Build all")
self.LoadAll()
for mod in self.moduleList:
if mod.type == 'BINARY':
mod.Build(self, None)
elif name == "clean":
debug.info("Clean all")
self.LoadAll()
for mod in self.moduleList:
mod.Clean(self)
else:
myLen = len(name)
if name[myLen-5:] == "-dump":
tmpName = name[:myLen-5]
self.LoadIfNeeded(tmpName)
# clean requested
for mod in self.moduleList:
if mod.name == tmpName:
debug.info("dump module '" + tmpName + "'")
mod.Display(self)
return
debug.error("not know module name : '" + cleanName + "' to clean it")
elif name[myLen-6:] == "-clean":
cleanName = name[:myLen-6]
self.LoadIfNeeded(cleanName)
# clean requested
for mod in self.moduleList:
if mod.name == cleanName:
debug.info("Clean module '" + cleanName + "'")
mod.Clean(self)
return
debug.error("not know module name : '" + cleanName + "' to clean it")
else:
# Build requested
self.LoadIfNeeded(name)
for mod in self.moduleList:
if mod.name == name:
debug.info("Build module '" + name + "'")
return mod.Build(self, None)
debug.error("not know module name : '" + name + "' to build it")