[Vm-dev] VM Maker: CMakeVMMakerSqueak-tty.111.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Mar 21 20:14:30 UTC 2015


Timothy M uploaded a new version of CMakeVMMakerSqueak to project VM Maker:
http://source.squeak.org/VMMaker/CMakeVMMakerSqueak-tty.111.mcz

==================== Summary ====================

Name: CMakeVMMakerSqueak-tty.111
Author: tty
Time: 21 March 2015, 2:15:58.159 pm
UUID: 03edecbb-7938-43aa-a0f4-382a96e433bc
Ancestors: CMakeVMMakerSqueak-tty.110

repaired some overlooked redirect methods.

I am now implementing Linux64x86w32BitSqueakCogV3Config buildType assert and documenting the process of adding a new buildType to a Configuration

=============== Diff against CMakeVMMakerSqueak-tty.110 ===============

Item was changed:
  ----- Method: CMakeVMGeneratorForSqueak>>generateByTemplate (in category 'code generation') -----
  generateByTemplate
  	"attempt to move way from string based writing to  template based. Think Seaside renderOn composition"
  	| extPlugins intPlugins |
  	self flag: 'tty'. "refactor so that the cascade reflects CMake terminilogy"
+ self break.
- 
  	output := String new writeStream.
  	config templates: OrderedCollection new. 
  	config 
  		setGlobalOptions: self;    
  		cmakePrefixPath;
  		cmakeIncludePath;
  		cmakeLibraryPath;
  		cmakeIncludeModules;
  		cmakeCFlags;          
  		cmakeAddDefinitions;
  		cmakeWriteDirectoriesDotCmake:  self;
  		cmakeIncludeDirectories:  self;   "<---"
  		preferredIncludes;                      "<---why 3  of em?"
  		standardIncludes;                       "<---"
  		setGlobalOptionsAfterDetermineSystem: self;    
  		extraVMSettings: self;                "<--catch-all method. os/platform specific"
  		setCoreSources: self;
  		setPlatformSources: self;
  		setCrossSources: self;
  		setExtraSources;
  		cmakeSetSourceFilesProperties;
  		cmakeListAppend:'LINKLIBS' elements: (config externalLibs);
  		cmakeAddExecutableNameOptionSource: self;
  	      setExecutableOutputPath;
  		addVMPlugins: self.
  	config templates do: [:each | self puts: each content].
  	config templates: OrderedCollection new. 
  	extPlugins := self generatePluginConfigs: config internalPlugins internal: true.
  	 intPlugins := self generatePluginConfigs: config externalPlugins internal: false.
  	self processThirdpartyLibraries.                       "<--unused in Pharo code? What exactly does this do?"
  	self processPlugins:  intPlugins, extPlugins.
  	self config templates	addLast:((CMakeCommand new) command:'target_link_libraries' params:(self moduleName , ' ${LINKLIBS}')).
  "	self cmd: 'target_link_libraries'
  		params: self moduleName , ' ${LINKLIBS}'."
  	config postBuildActions: self..
  	config templates do: [:each | self puts: each content].
  	self saveFile.
  	self generateBuildScript!

Item was changed:
  ----- Method: CMakeVMMakerSqueakDeveloperHelp class>>pages (in category 'pages') -----
  pages
+ 	^#(CMakeVMMakerSqueakHistoryHelp CMakeVMMakerSqueakOverviewHelp  CMakeVMMakerSqueakConfigurationsHelp CMakeVMMakerSqueakTemplatesHelp CMakeVMMakerSqueakGeneratorsHelp CMakeVMMakerSqueakBuildersHelp CMakeVMMakerSqueakDesignPatternsHelp  configDotCmake looseEnds  plugins pthreads  templates tests  )!
- 	^#(CMakeVMMakerSqueakHistoryHelp CMakeVMMakerSqueakOverviewHelp CMakeVMMakerSqueakDesignPatternsHelp  CMakeVMMakerSqueakConfigurationsHelp CMakeVMMakerSqueakTemplatesHelp CMakeVMMakerSqueakGeneratorsHelp CMakeVMMakerSqueakBuildersHelp configDotCmake looseEnds  plugins pthreads  templates tests  )!

Item was changed:
  ----- Method: CMakeVMMakerSqueakOverviewHelp class>>overview (in category 'pages') -----
  overview
  	^HelpTopic
  		title:'Overview'
  		contents:
+ '"CMake drives development."
- 'Repeat after me: "CMAKE DRIVES THE PROCESS."
  
  Keeping the above statement in mind is the key to this package. 
  
  What we are looking for is a CMake system that correctly builds a virtual machine on a given platform. 
  We then encapsulate that CMake system state in CMakeVMMakerSqueak Configurations. The end user can then reproduce that CMake system on their platform.
  
  Hopefully this package makes the above process predictable and somewhat sane.
  
  Towards that end, this system does the following :
  
  Stores CMake configuration in concrete subclasses of CPlatformConfigForSqueak in a predicatable manner.
  Provides methods for extracting the CMake configuration from those classes.
  Provides a (hopefully) newbie friendly Facade for extracting the CMake configuration via Builders (Concrete subclasses of SqueakCMakeVMMakerAbstractBuilder)
  Provides (for the configuration developer) CMake command wrapper code in subclasses of CMakeTemplate.
  Proves to be scriptable such that generating the CMake output can be automated (or extracted from a Seaside website).
  
  As the SqueakVM community gains experience with CMake, I expect the quality of the generated CMake output to improve considerably. CMake is a BIG system with LOTS of stuff in it. Storing the knowledge we gain in our Squeak classes should make things a lot easier on us.
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
  The heart of the package is CMakeGeneratorForSqueak and its two subclasses CMakeVMGeneratorForSqueak and CMakePluginGeneratorForSqueak.
  
- 
  CMakeVMGeneratorForSqueak collects information from subclasses of CPlatformConfigForSqueak, CMThirdpartyLibrary and InterpreterPlugins and writes it out to CMake files and associated directories. 
  
  From there, the user invokes cmake and make using a generated build.sh script.
  
  The programmer directs the flow of the generator by coding a subclass of CPlatformConf, setting it up correctly and asking it to generate itself. 
  
  The configuration then invokes the CMakeGeneratorForSqueak passing itself as an argument. 
  
  The VMGeneratator extracts the information and utilizes VMPluginGenerator to generate plugin stuff, the CPlatformConf to generate other stuff and CMThirdPartyLibrary''s to generate other stuff. 
  
  The end result is a CMake evironment that is set up to correctly build a VM
  
  Concrete implementations of SqueakCMakeVMMakerAbstractBuilder provide an invokation facade and configuration query capabilities.
- 
- 
  '!

Item was changed:
  ----- Method: CMakeVMMakerSqueakOverviewHelp class>>pages (in category 'pages') -----
  pages
+ 	^#(overview  prerequisites  namingConventions  )!
- 	^#(overview  prerequisites  namingConventions terms       )!

Item was removed:
- ----- Method: CMakeVMMakerSqueakOverviewHelp class>>terms (in category 'pages') -----
- terms
- 	^HelpTopic
- 		title:'Terms'
- 		contents:
- '
- AbstractBaseClass:   
- 	Typically the topmost class in a [OS][VMWordSize][Processor][ETC]  class category. Example: CPlatformConfigForSqueak. Most of the configuration action happens at this level and lower.
- 
- Builder:                      
- 	A concrete subclass of SqueakCMakeVMMakerAbstractBuilder. Builders act as a facade for invoking the configurations.They also provide query tools for the configurations that a builder manages. There is a one-to-one correspondence between a Builder''s configurationsCategory and the configurations it manages. example:    SqueakBSDx86Builder configurationsCategory
- 
- buildType:
- 	One of SqueakCMakeVMMakerAbstractBuilder  allBuildTypes 
-                                  
- 
- CMakeLists.txt:
- 	The instructions that CMake uses to build build systems.  One output of a configuration
- 
- Configuration:            
- 	CPlatformConfigForSqueak  and its subclasses. These maintain the definitions that are rendered into CMakeLists.txt files
- 
- 
- Generator:                 
- 	CMakeGeneratorForSqueak and its subclasses
- 
- 
- Redirect Methods:      
- 	Given a method X, it is a redirect method if a call to it redirects to xBuildType based on the state of the configurations buildType  buildType variable.  See CPlatformConfigForSqueak protocol ''cmake buildType redirects''
- 
- 
- 
- 
- '!

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>cmakeAddDefinitionsBuildAssert (in category 'cmake buildType redirects') -----
  cmakeAddDefinitionsBuildAssert
+ 	 "override default for custom buildType. "
+ 	^self cmakeAddDefinitionsBuild!
- 	 ""
- 	self subclassResponsibility!

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>cmakeAddDefinitionsBuildAssertITimerHeartbeat (in category 'cmake buildType redirects') -----
  cmakeAddDefinitionsBuildAssertITimerHeartbeat
+ 	 "override default for custom buildType. "
+ 	^self cmakeAddDefinitionsBuild!
- 	 ""
- 	self subclassResponsibility!

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>cmakeAddDefinitionsBuildDebug (in category 'cmake buildType redirects') -----
  cmakeAddDefinitionsBuildDebug
+ 	 "override default for custom buildType. "
+ 	^self cmakeAddDefinitionsBuild!
- 	 ""
- 	self subclassResponsibility!

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>cmakeAddDefinitionsBuildDebugITimerHeartbeat (in category 'cmake buildType redirects') -----
  cmakeAddDefinitionsBuildDebugITimerHeartbeat
+ 	 "override default for custom buildType. "
+ 	^self cmakeAddDefinitionsBuild!
- 	 ""
- 	self subclassResponsibility!

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>cmakeAddDefinitionsBuildITimerHeartbeat (in category 'cmake buildType redirects') -----
  cmakeAddDefinitionsBuildITimerHeartbeat
+ 	 "override default for custom buildType. "
+ 	^self cmakeAddDefinitionsBuild!
- 	 ""
- 	self subclassResponsibility!

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>cmakeAddDefinitionsBuildMultiThreaded (in category 'cmake buildType redirects') -----
  cmakeAddDefinitionsBuildMultiThreaded
+ 	 "override default for custom buildType. "
+ 	^self cmakeAddDefinitionsBuild!
- 	 ""
- 	self subclassResponsibility!

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>cmakeAddDefinitionsBuildMultiThreadedAssert (in category 'cmake buildType redirects') -----
  cmakeAddDefinitionsBuildMultiThreadedAssert
+ 	 "override default for custom buildType. "
+ 	^self cmakeAddDefinitionsBuild!
- 	 ""
- 	self subclassResponsibility!

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>cmakeAddDefinitionsBuildMultiThreadedDebug (in category 'cmake buildType redirects') -----
  cmakeAddDefinitionsBuildMultiThreadedDebug
+ 	 "override default for custom buildType. "
+ 	^self cmakeAddDefinitionsBuild!
- 	 ""
- 	self subclassResponsibility!

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>generateByTemplate (in category 'source generation') -----
  generateByTemplate
- 
  	self 
  		generatePluginsList;                                        "informative list of plugins for end user"
  		generateLicense;                                             "Squeak license"
  		generateUtilsCmake;                                       "Ian's useful CMake macros. used extensivelly."
  		generatePluginsCmake;                                   "Ian's CMake Plugins Processing"
  		generateVmBuildCmake;                                  "Ian's CMake Build script"
  		generateVmConfigCmake;                               "Ian's config.cmake file used to generate gnu config.h"
  		generateVmConfigIn;                                       "Ian's code, not sure what it does yet"
  		generateTestDoubleWordAlignmentC;             "Ian's platform tests used in configuration"
  		generateTestDoubleWordOrderC;
  		generateTestLanginfoCodesetC.
  	^ CMakeVMGeneratorForSqueak generateByTemplate: self !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>internalPluginsBuildAssert (in category 'cmake buildType redirects') -----
  internalPluginsBuildAssert 
  	"convenience method to customize plugins for this build default to internalPluins
  	^self internalPlugins"
+ 	^self internalPluginsBuild
- 	self subclassResponsibility
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>internalPluginsBuildAssertITimerHeartbeat (in category 'cmake buildType redirects') -----
  internalPluginsBuildAssertITimerHeartbeat 
  	"convenience method to customize plugins for this build default to internalPluins
  	^self internalPlugins"
+ 	^self internalPluginsBuild!
- 	self subclassResponsibility
- !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>internalPluginsBuildDebug (in category 'cmake buildType redirects') -----
  internalPluginsBuildDebug 
  	"convenience method to customize plugins for this build.  default is self  internalPluins
  	^self internalPlugins"
+ 	^self internalPluginsBuild
- 	self subclassResponsibility
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>internalPluginsBuildDebugITimerHeartbeat (in category 'cmake buildType redirects') -----
  internalPluginsBuildDebugITimerHeartbeat 
  	"convenience method to customize plugins for this build.  default is self  internalPluins
  	^self internalPlugins"
+ 	^self internalPluginsBuild!
- 	self subclassResponsibility
- !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>internalPluginsBuildITimerHeartbeat (in category 'cmake buildType redirects') -----
  internalPluginsBuildITimerHeartbeat 
  	"convenience method to customize plugins for this build.  default is self  internalPluins
  	^self internalPlugins"
+ 	^self internalPluginsBuild
- 	self subclassResponsibility
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>internalPluginsBuildMultiThreaded (in category 'cmake buildType redirects') -----
  internalPluginsBuildMultiThreaded 
  	"convenience method to customize plugins for this build.  default is self  internalPluins
  	^self internalPlugins"
+ 	^self internalPluginsBuild
- 	self subclassResponsibility
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>internalPluginsBuildMultiThreadedAssert (in category 'cmake buildType redirects') -----
  internalPluginsBuildMultiThreadedAssert
  	"convenience method to customize plugins for this build.  default is self  internalPluins
  	^self internalPlugins"
+ 	^self internalPluginsBuild
- 	self subclassResponsibility
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>internalPluginsBuildMultiThreadedDebug (in category 'cmake buildType redirects') -----
  internalPluginsBuildMultiThreadedDebug 
  	"convenience method to customize plugins for this build.  default is self  internalPluins
  	^self internalPlugins"
+ 	^self internalPluginsBuild
- 	self subclassResponsibility
  !

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>cmakeAddDefinitionsBuildAssert (in category 'cmake buildType redirects') -----
+ cmakeAddDefinitionsBuildAssert
+ 	|c d  o|
+ 	(enabledebugmessages)
+ 		ifTrue:[	templates 
+ 		addLast:((CMakeMessage new) message: (self class name) , 'cmakeAddDefinitionsBuildAssert')
+ 	] .
+ 	c := self compilerFlagsAssert asOrderedCollection.
+ 	d := self compilerDefinitionsAssert asOrderedCollection.
+ 	o:= OrderedCollection new.
+ 	o addAllLast: c; addAllLast: d.
+ 	templates
+ 		addLast:((CMakeAddDefinitions new) definitions: (self compilerDefinitionsAssert asOrderedCollection)). "see my self flag below"
+ !

Item was changed:
  ----- Method: Linux64x86w32BitSqueakCogV3Config>>availableBuildTypes (in category 'as yet unclassified') -----
  availableBuildTypes 
  "2.14.12.09 only buildType implemented is #build so I remove #build from the below OrderedCollection."
+ 	^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes copyWithoutAll: #( #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert #buildMultiThreadedDebug #buildNone)!
- 	^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes copyWithoutAll: #( #buildAssert #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert #buildMultiThreadedDebug #buildNone)!

Item was changed:
  ----- Method: SqueakCMakeVMMakerAbstractBuilder>>availableBuildTypesFor: (in category 'queries') -----
  availableBuildTypesFor: aSymbol
  	"answer a build type. somthing like #assert, #debug, #release. Each configuration is in charge of letting us know what it does"
  	[
  	((Smalltalk at: aSymbol)  category) =  (self configurationsCategory)  "verify the class is handled by this concrete builder"
  		ifTrue:[	^self availableBuildTypesFor: aSymbol inCategory: ((Smalltalk at: aSymbol)  category).]  "if so, go get its info"
  		ifFalse:[^self userErrorInvalidTarget: aSymbol]
  	] ifError:[^'BuildTypeForTarget: ''', aSymbol , ''' not found' ].
  	^nil.!

Item was changed:
  ----- Method: SqueakCMakeVMMakerAbstractBuilder>>configureA:forBuildType: (in category 'building') -----
  configureA: configSymbol forBuildType: typeSymbol
  	| i |
  	self flag:'tty'. "excludeFromBuild returning True does not exit gracefully"
  	"Do some sanity checks, then set the internal state of a Configuration for a particular build type. "
  	[
  	((Smalltalk at: configSymbol)  category) =  (self configurationsCategory)  "verify the class is handled by this concrete builder"
  		ifTrue:[	
  				config := (Smalltalk at: configSymbol) new.                              "verify this config can handle this build type."
  				config excludeFromBuild                                                         "has a developer excluded this build manually?"
  					ifTrue:[^self userErrorConfigMarkedAsExcludeFromBuild: configSymbol].   
+ 				i:=config availableBuildTypes indexOf:typeSymbol          
- 				i:=config availableBuildTypes indexOf:typeSymbol                                    
  						ifAbsent:[^self userErrorInvalidBuildType: typeSymbol "this config does not support this build type"
  										forConfiguration: configSymbol 
  										hasTypes: config availableBuildTypes].
  				(config configureForBuildType: typeSymbol) value.                             "config configure yourself"
  				^self]
  		ifFalse:[^self userErrorInvalidTarget: configSymbol]
  	] ifError:[^'error configureABuildFor: ''', configSymbol].
  
  	^nil.
  	
  
  	!

Item was changed:
  ----- Method: SqueakUnixConfig>>configureForBuildType: (in category 'cmake configuration') -----
  configureForBuildType: aSymbol
  	"Set my internal state appropriate for my build type".
  	self configureNoBuildType.                "reset all internal flags"
  	buildType:= aSymbol.                       "error checking was handled previously"
  !



More information about the Vm-dev mailing list