You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							118 lines
						
					
					
						
							4.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							118 lines
						
					
					
						
							4.7 KiB
						
					
					
				| import subprocess | |
| import os | |
| import shutil | |
| import time | |
| import math | |
| import sys | |
| 
 | |
| logfileDir = "test_build_configurations_logs" | |
| pathToConfigFile = "" | |
| globalCmakeArguments = "" | |
| globalMakeArguments = "" | |
| 
 | |
| if len(sys.argv) == 1 or len(sys.argv) > 5: | |
| 	print "Usage: " + sys.argv[0] + "/path/to/storm /path/to/configurations.txt \"optional make arguments\" \"optional cmake arguments\"" | |
| 	print "Example: " + sys.argv[0] + " ~/storm test_build_configurations.txt \"-j 48 -k\" \"-DZ3_ROOT=/path/to/z3/\"" | |
| 	sys.exit(0) | |
| 
 | |
| pathToStorm = sys.argv[1] | |
| pathToConfigFile = sys.argv[2] | |
| 
 | |
| if len(sys.argv) > 3: | |
| 	globalMakeArguments = sys.argv[3] | |
| 	print globalMakeArguments | |
| if len(sys.argv) > 4: | |
| 	globalCmakeArguments = sys.argv[4] | |
| 	print globalCmakeArguments | |
| 
 | |
| # create directory for log files | |
| if not os.path.exists(logfileDir): | |
|     os.makedirs(logfileDir) | |
| 
 | |
| unsuccessfulConfigs = "" | |
| globalStartTime = time.time() | |
| 
 | |
| with open(pathToConfigFile) as configfile: | |
|     localStartTime = time.time() | |
|     configId=0 | |
|     for localCmakeArguments in configfile: | |
|          | |
|         cmakeArguments = globalCmakeArguments + " " + localCmakeArguments.strip('\n') | |
|         buildDir = os.path.join(pathToStorm, "build{}".format(configId)) | |
|         logfilename = os.path.join(logfileDir, "build{}".format(configId) + "_" + time.strftime("%Y-%m-%d-%H-%M-%S") + ".log") | |
|          | |
|          | |
|         print "Building configuration {} with cmake options ".format(configId) + cmakeArguments | |
|         print "\tCreating log file " + logfilename + " ..." | |
|         with open(logfilename, "w") as logfile: | |
|             success=True | |
|             logfile.write("Log for test configuration " + cmakeArguments + "\n") | |
|                            | |
|             print "\tCreating build directory" + buildDir + " ..." | |
|             if os.path.exists(buildDir): | |
|                 print "\t\tRemoving existing directory " + buildDir | |
|                 shutil.rmtree(buildDir, ignore_errors=True) | |
|             os.makedirs(buildDir) | |
|             logfile.write("Build directory is " + buildDir + "\n") | |
|             print "\t\tdone" | |
|              | |
|             if success: | |
|                 print "\tInvoking cmake ..." | |
|                 cmakeCommand = "cmake .. {}".format(cmakeArguments) | |
|                 logfile.write ("\n\n CALLING CMAKE \n\n" + cmakeCommand + "\n") | |
|                 try: | |
|                     cmakeOutput = subprocess.check_output("cd " + buildDir + "; " + cmakeCommand , shell=True,stderr=subprocess.STDOUT) | |
|                     print "\t\tdone" | |
|                     logfile.write(cmakeOutput) | |
|                 except subprocess.CalledProcessError as e: | |
|                     success=False | |
|                     print "\t\tfail" | |
|                     print e.output | |
|                     logfile.write(e.output) | |
|                                  | |
|             if success: | |
|                 print "\tInvoking make ..." | |
|                 makeCommand = "make {}".format(globalMakeArguments) | |
|                 logfile.write ("\n\n CALLING MAKE \n\n" + makeCommand + "\n") | |
|                 try: | |
|                     makeOutput = subprocess.check_output("cd " + buildDir + "; " + makeCommand , shell=True,stderr=subprocess.STDOUT) | |
|                     print "\t\tdone" | |
|                     logfile.write(makeOutput) | |
|                 except subprocess.CalledProcessError as e: | |
|                     success=False | |
|                     print "\t\tfail" | |
|                     print e.output | |
|                     logfile.write(e.output) | |
|              | |
|             if success: | |
|                 print "\tInvoking make check..." | |
|                 makeCheckCommand = "make check" | |
|                 logfile.write ("\n\n CALLING MAKE CHECK \n\n" + makeCheckCommand + "\n") | |
|                 try: | |
|                     makeCheckOutput = subprocess.check_output("cd " + buildDir + "; " + makeCheckCommand , shell=True,stderr=subprocess.STDOUT) | |
|                     print "\t\tdone" | |
|                     logfile.write(makeCheckOutput) | |
|                 except subprocess.CalledProcessError as e: | |
|                     success=False | |
|                     print "\t\tfail" | |
|                     print e.output | |
|                     logfile.write(e.output) | |
|                      | |
|             localEndTime = time.time() | |
|             if success: | |
|                 print "\tConfiguration build and tested successfully within {} minutes.".format(int((localEndTime - localStartTime)/60)) | |
|             else: | |
|                 print "\tAn error occurred for this configuration." | |
|                 unsuccessfulConfigs += buildDir + " with arguments " + cmakeArguments + "\n" | |
| 
 | |
|             configId += 1 | |
| globalEndTime = time.time() | |
| print "All tests completed after {} minutes.".format(int((globalEndTime - globalStartTime)/60)) | |
| if unsuccessfulConfigs == "": | |
|     print "All configurations were build and tested successfully." | |
| else: | |
|     print "The following configurations failed: \n" + unsuccessfulConfigs | |
|      | |
|                  | |
| 
 | |
| 
 |