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

commits at source.squeak.org commits at source.squeak.org
Thu Dec 11 22:48:37 UTC 2014


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

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

Name: CMakeVMMakerSqueak-tty.105
Author: tty
Time: 11 December 2014, 5:49:06.563 pm
UUID: c8c46d46-2d56-4348-9892-c309a6e2cb6c
Ancestors: CMakeVMMakerSqueak-tty.104

Writing Step-by-step help on setting up a configuration as I set up a new configuration.

Setting up a new configuration is much easier than writing the help on how to set up a new configuration.

Work in progress, more to do

oy.

=============== Diff against CMakeVMMakerSqueak-tty.104 ===============

Item was changed:
  ----- Method: CMakeVMMakerSqueakHistoryHelp class>>cmakeVMMakerSqueak (in category 'pages') -----
  cmakeVMMakerSqueak
  	^HelpTopic
  		title: 'Summary'
  		contents:
+ 'TODO: EDIT ME.
- 'CMakeVMMakerSqueak ....
  
+ CMakeVMMakerSqueak ....
+ 
  The original version subclassed the various Generators,  Configs and Builders of Igor''s version while providing a small pharo/squeak compatibility layer where required. This philosophy was in place for CMakeVMMakerSqueak-tty.1 to CMakeVMMakerSqueak-tty.26
  
  This approach was abandoned when Eliot Miranda adopted his [Platform][Language][VM][MemoryManager][BuildType]  organization on the basis of simple math.
  
  The build system must support 
  [N Platforms: Windows Linux Mac BSD Plan9...][2 Languages: Newspeak and Squeak.] x [3. Virtual Machines: Cog, Sista and Stack.] x [2 Memory Managers: V3 and Spur.] x [9 build types build  build.assert.itimerheartbeat  build.debug.itimerheartbeat  build.multithreaded  build.multithreaded.debug  build.assert  build.debug  build.itimerheartbeat  build.multithreaded.assert  ] = N x [2 x 3 x 2 x 9]= Nx 108 distinct Configurations.
  
  
  Development started along these lines at CMakeVMMakerSqueak-tty.27.  During this next stretch, I attempted to make CMakeVMMaker and CMakeVMMakerSqueak functionaly equivalent--meaning a pharo user could use the squeak system using pharo idioms. This required some ridiculous contortions exemplified by what I believe is the largest Trait ever attempted. You can see this at  CMakeVMMakerSqueak-tty.32 where I write 
  
  ''Removed old Traits from first port from Pharo and added a new Trait. Installed this trait at the topmost class of the Squeak heirarchy which is inter-twined with the existing pharo hierarchy. Ugly, but not too ugly and supports decision not to fork existing work. This lets me enforce a pseudo-abstract class discipline. 
  
  Probably two more days coding to get this to production."
  
  heh.
  
  The Trait grew, and grew and grew. as I attempted to bolt on Eliot''s requirements onto the side of the Pharo code using a Trait. The result was like that scene in Aliens where the baby Alien attaches itself to the face of the astronaut...
  
  At CMakeVMMakerSqueak-tty.63 I noticed that the Trait would not do. The functionality was OK, but the Package could not be loaded into a Squeak image from the Monticello Repository. This killed that approach.
  
  At CMakeVMMakerSqueak-tty.64 I started over and decided to implement a ''parallel'' system to the pharo code that relied on Igor''s generators to produce the CMake files.
  
  At CMakeVMMakerSqueak-tty.82 Eliot noticed a major problem with the Pharo approach. The config.h file was hard coded. We needed CMake to generate that. At this point I turned to Ian''s code for instruction.  
  
  I studied his code and noted the use of templates and the overall flow of processing. Igor''s processing flow is very close to Ian''s so the processing Architecture of CMakeVMaker was kept in place. I did start the process of  using CMake Templates at this point as I found it much easier.
  
  This process continues until CMakeVMMakerSqueak-tty.99.
  
  At CMakeVMMakerSqueak-tty.99 I ditched the CMakeVMmaker generate methods and went generateByTemplate for all Generators.
  
  
  In Summary, the programmatic flow of the system and most design patterns are Igor''s. The emphasises on CMake generation and the use of Templates are Ian''s.
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  '!

Item was changed:
  ----- Method: CMakeVMMakerSqueakHistoryHelp class>>overview (in category 'pages') -----
  overview
  	^HelpTopic
  		title: 'CMakeVMMakerSqueak'
  		contents:
  'CMakeVMMaker Squeak is a product of Igor Stasenko''s CMakeVMaker for pharo and Ian Piumurta''s custom CMake configuration files he wrote for the Stack Interpreter on Linux.
  
+ Here I present an overview of the design of each historical system and end with a summary of their  influences on this system.
- Here I present an overview of the design of each historical system and end with a summary of their contributions to this system.
  '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakOverviewHelp class>>buildersAndConfigs (in category 'pages') -----
- buildersAndConfigs
- 	^HelpTopic
- 		title:'Organization'
- 		contents:
- '
- The CMakeVMMakerSqueak Builders and Configurations are organized to mirror  Eliot''s GNU build system organization.
- 
- The intent is to reduce brain cycles translating from the computer''s directory layout to what you see in CMakeVMMakerSqueak by providing a (nearly) one-to-one correspondence.
- 
- Eliot has named build directories in Cog/ svn (oscogvm directory in this system) by the convention
- build.[OperatingSystem].[VMWordSize].[Processor Architecture]. For  example: build.macosx32x86 
- 
- Under each build.[OperatingSystem].[VMWordSize].[Processor Architecture]  directory are subdirectories for each
- [Language][VM][MemoryManager]. example newspeak.sista.spur.
- 
- The permutations of [Language][VM][MemoryManager] currently are: 
- 
- [newspeak | squeak]. [cog | sista | stack]. [spur | v3] or 2!! x 3!! x 2!!  which is  between 12 and eleventy billion permutations 
- 
- Similarly, in CMakeVMMakerSqueak,  Categories containing Configurations are organized by CMakeVMMakerSqueak-[OperatingSystem][VMWordSize][Processor][etc]
- 
- Configuration classes within a CMakeVMMakerSqueak-[OperatingSystem][VMWordSize][Processor][etc] are Named:
- [[Squeak] | [] ][Language][VM][MemoryManager][etc]Config and correspond with the 12 permutations
- 
- When CMakeVMMakerSqueak generates build or products , it prefaces Eliot''s naming convention with a ''cmake.''
- 
- for example builds take place in:  cmake.build.linux.32.x66/squeak.cog.spur
- and output is placed in cmake.products. for example: oscogvm/cmake.products/squeak.cog.v3.noGL/
- 
- Builders manage Configurations and Builds for a particular [Language][VM][MemoryManager]  category.
- THERE IS A ONE-TO-ONE CORRESPONEDENCE between aConcreteBuilder>configurationsCategory and the Smalltalk Category name. 
- If you change one, you must change the other in order for the Builder to manage that configuration.
- 
- example: SqueakMacOSX32x86Builder configurationsCategory
- 
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakOverviewHelp class>>configDotCmake (in category 'pages') -----
- configDotCmake
- 	^HelpTopic
- 		title:'config.cmake'
- 		contents:
- 'The config.cmake file is included in CMakeLists.txt. 
- 
- It contains CMake code to generate a config.h file on unix systems.
- 
- You can view a Configurations config.cmake with this code:
- 
- Transcript clear.
- Transcript show: ((Linux64x86w32BitSqueakCogV3Config new) configureForBuildType: #build) contentForVmConfigCmake
- 
- or print it in place with:
- 
- ((Linux64x86w32BitSqueakCogV3Config new) configureForBuildType: #build) contentForVmConfigCmake   
- 
- The config.cmake file is generated with the usual Builder expressions.
- 
- SqueakLinux64x86w32CompatBuilder
- 	configureA: #Linux64x86w32BitSqueakCogV3Config forBuildType:#build;
- 	generate.
- 
- 
- A config.cmake is created from CMake Templates (wrappers) in the CmakeVMMakerSqueak-CMakeTemplates  and CmakeVMMakerSqueak-CMakeCustomTemplates categories.
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakOverviewHelp class>>igorStasenkoDesign (in category 'pages') -----
- igorStasenkoDesign
- 	^HelpTopic
- 		title:'Design Patterns'
- 		contents:
- 'CMakeVMMakerSqueak extends Igor Stasenko''s pharo work in CMMakeVMMaker. 
- 
- The system employs the Visitor design pattern in two places.
- 
- 1. When a CPlatformConfigForSqueak subclass invokes CMakeVMGeneratorForSqueak>>generate passing itself as the visitor.
- 2. In SqueakCMakeVMMakerAbstractBuilder when Configuration information is cached in a CMakeVMakerConfigurationInfo.
- 
- The CPlatformConfigForSqueak makes heavy use of a Template pattern. This pattern is used extensively in the protocol ''cmake buildType redirects''.
- This is used to force correct implementation of configurations. It also extends the pharo system to support the build types required for the 
- 
- Fairly extensive Tests are written to ensure correct implementation of Configurations.
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakOverviewHelp class>>looseEnds (in category 'pages') -----
- looseEnds
- 	^HelpTopic
- 		title:'Loose Ends'
- 		contents:
- 'As of 2014.12.09 there are the inevitable loose ends. Some are:
- 
- Importing and compiling 3''rd party libraries has not been ported or tested.
- The Builder facades lacks some query functionality.
- The Builder facades may prove to be useless--we may want to throw them away.
- 
- '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>namingConventions (in category 'pages') -----
+ namingConventions
+ 	^HelpTopic
+ 		title:'Naming Conventions'
+ 		contents:
+ '[PLATFORM][Language][VM][Memory Manager][BuildType][foo]  IS the naming convention for CMakeVMMakerSqueak
+ 
+ The convention is a bottom-up design starting with Eliot Miranda''s Cog layout at 
+ http://www.squeakvm.org/svn/squeak/branches/Cog/ 
+ 
+ In the Cog directory tree are build directories. Taking the build.linux32x86 directory as an example, we have a directory tree that looks like this:
+ 
+ build.linux32x86/
+ |-- newspeak.cog.spur
+ |   |-- build
+ |   |-- build.assert
+ |   |-- build.assert.itimerheartbeat
+ |   |-- build.debug
+ |   |-- build.debug.itimerheartbeat
+ |   `-- build.itimerheartbeat
+ |-- newspeak.cog.v3
+ |   |-- build
+ ......etc... .
+ 
+ The FORM of this layout is  :
+ 
+ build.[PLATFORM]/
+ |-- [Language].[VM].[Memory Manager]/
+ |   |-- [BuildType]
+ 
+ It is this form that drives a parallel naming convention and directory structure in CMakeVMMakerSqueak. 
+ 
+ The parallel directory structure simply prefixes a ''cmake." to the directory name.
+ 
+ cmake.build.[PLATFORM]/
+ |-- [Language].[VM].[Memory Manager]  
+ |   |-- [BuildType]
+ 
+ 
+ Builders have the form: Squeak[Platform]Builder. 
+ Example: SqueakBSD32x86Builder
+ 
+ AbstractBaseClass Configurations have the form: [Optional Prefix][Platform]Config.
+ Example: Linux32x86Config
+ 
+ Concrete Configurations have the form: [Optional ]Prefix][PLATFORM].[Language].[VM].[Memory Manager][Suffix][Optional Foo]
+ Linux32x86SqueakCogV3Config
+ 
+ When the Linux32x86SqueakCogV3Config is  configured for the buildType #build.debug it will map its output to cmake.build.linux32x86/squeak.cog.v3/build.debug/
+ 
+ '!

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

Item was removed:
- ----- Method: CMakeVMMakerSqueakOverviewHelp class>>plugins (in category 'pages') -----
- plugins
- 	^HelpTopic
- 		title:'Plugins'
- 		contents:'
- 
- TODO explain the design and methodology of the ''plugin extra rules'' protocol in
- 
- Explain CMakePluginGeneratorSqueak containing the config.cmake files
- 
- 
- provide example of mapping from plugins.int to defaultInternalPlugins
- 
- |s|
- Transcript clear.
- s:=SortedCollection new.
- InterpreterPlugin allSubclassesDo:[:p|
- 	p moduleName = ''B2DPlugin''
- 		ifTrue:[Transcript show:p name].
- 	s add: (p moduleName)].
- 
- Transcript show: s.
- 
- SqueakUnixConfig browse
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakOverviewHelp class>>pthreads (in category 'pages') -----
- pthreads
- 	^HelpTopic
- 		title:'PThreads'
- 		contents:'
- 
- http://www.mirandabanda.org/files/Cog/VM/VM.r3006/README.3006
- 
- N.B. For Squeak/Pharo/Croquet please use the archives whose names begin with
-      Cog or cog.  The archives whose names begin with nsvm or Newspeak are
-      for Newspeak and are missing plugins required by Squeak/Pharo/Croquet.
-      VMs with "mt" or "MT" in the name are multi-threaded VMs which support
-      non-blocking FFI calls.  The archives containing "Spur" or "spur" are
-      VMs using the new Spur object representation and garbage collector and
-      should be used with Spur-format Squeak/Pharo/Croquet or Newspeak images.
- 
-      There are two variants of the Linux VMs; those ending in "ht" have a
-      heartbeat thread, while those that don''t, use an interval timer for the
-      heartbeat (the Windows and Mac VMs have a threaded heartbeat).  The
-      threaded heartbeat is better (for example, signals from the interval timer
-      interfere with system calls, etc), but to use it one must have a kernel
-      later than 2.6.12 and configure linux to allow the VM to use multiple
-      thread priorities.  To do so, create a file called VM.conf where VM is
-      the name of the vm executable ("squeak" for the Squeak vm, "nsvm" for
-      the Newspeak vm) in /etc/security/limits.d/ with contents:
- *       hard    rtprio  2
- *       soft    rtprio  2
- 
-      e.g.
- sudo cat >/etc/security/limits.d/squeak.conf <<END
- *       hard    rtprio  2
- *       soft    rtprio  2
- END
- sudo cp /etc/security/limits.d/squeak.conf /etc/security/limits.d/nsvm.conf
-      Then log out and log back in for the limits to take effect.
- 
- 
- On Slackware linux 14.0  
- bash$ man limits
- 
- From the man page, the O (oh) option is:   O: max real time priority
- 
- create a file /etc/limits file and add an entry
- 
- tty O100
- 
- where tty is the login name, and the O option is set to 100.
- 
- Logout and re-login.
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakOverviewHelp class>>templates (in category 'pages') -----
- templates
- 	^HelpTopic
- 		title:'CPlatformConfigForSqueak class templates'
- 		contents:
- 'CMakeVMMakerSqueak utilizes wrapper classes on CMake commands to generate CMake output files like CMakeLists.txt.
- 
- Currently the 3 class categories produce output as such:
- 
- 1. CMakeVMMakerSqueak-CMakeCompositeTemplates output large CMake structures. The essentially wrap both custom and standard CMake templates.
- 
- 2. CMakeVMMakerSqueak-CMakeCustomTemplates typically wrap CMake logic constructs like IF(DEFINED foo;
- 
- 3. CMakeVMMakerSqueak-CMakeTemplates are wrappers for specific CMake Commands, properties and variables.
- cmake --help 
- cmake --help-command-list
- cmake --help-property-list
- cmake --help-variable-list
- 
- will give you an idea of what is wrapped. As new templates are introduced, they can be re-used easily, minimizing errors.
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakOverviewHelp class>>tests (in category 'pages') -----
- tests
- 	^HelpTopic
- 		title:'Tests'
- 		contents:
- '
- When all tests pass. This does not mean the classes are configured correctly for source,output and build directories.
- 
- It does mean nothing structural is preventing that from being implemented.
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakOverviewHelp class>>vmplugins (in category 'pages') -----
- vmplugins
- 	^HelpTopic
- 		title:'VMPlugins'
- 		contents:'
- 
- TODO CMakeVMMakerSqueak-VMPlugin purpose, configuration and use'!

Item was changed:
  ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>bookName (in category 'accessing') -----
  bookName 
+ 	^'Example Workflow: New Configuration'!
- 	^'Step By Step: New Configurations'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>createTheConfiguration (in category 'pages') -----
+ createTheConfiguration
+ 	^HelpTopic
+ 		title:'Create the Configuration'
+ 		contents:
+ 'Our new Concrete Configuration must be created as a subclass of our Platform''s Abstract Base Class.
+ 
+ The naming convention for Configurations takes the following form:
+ 
+ [Platform][Language][VM][MemoryManager][Foo]Config.
+ In 2014.12.09 this resolves too..
+ 
+ [Platform][Newspeak | Squeak][Cog | Sista | Stack][V3 | Spur][Foo]Config.
+ 
+ SInce I am creating a Squeak Cog V3 config for the Linux32x86 Platform I choose the name:
+ 
+ Linux32x86SqueakCogV3Config.
+ 
+ To create it, I subclass the Abstract Base Class for my Platform like so:
+ 
+ Linux32x86Config subclass: #Linux32x86SqueakCogV3Config
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: ''CMakeVMMakerSqueak-Linux32x86''
+ 
+ However, being lazy, I am going to copy an existing Configuration that is similar to what I want. 
+ 
+ Today I choose Linux64x86w32BitSqueakCogV3Config from the  CMakeVMMakerSqueak-Linux64X86-32BitCompatibility Platform category
+ 
+ I copy the class and then change its parent and class category to get:
+ 
+ Linux32x86Config subclass: #Linux32x86SqueakCogV3Config
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: ''CMakeVMMakerSqueak-Linux32x86''
+ 
+ 
+ At this point I re-run all my Tests. For me, all tests pass.
+ 
+ I then query by Builder to see if it sees the new Configuration in the platform:
+ 
+ SqueakLinux32x86Builder configurationsCategory
+ -->  ''CMakeVMMakerSqueak-Linux32x86''
+ 
+ SqueakLinux32x86Builder  availableBuildConfigurations   
+ --> a SortedCollection(#Linux32x86SqueakCogV3Config)    "Here we see our new Configuration is visible to the Builder"
+ 
+ SqueakLinux32x86Builder  unAvailableBuildConfigurations
+ --> a SortedCollection(#Linux32x86Config)  "The Abstract Base Class is not available to be built"
+ 
+ SqueakLinux32x86Builder availableBuildTypesFor: #Linux32x86SqueakCogV3Config 
+ --> an OrderedCollection(#build)                    "The Configuration I copied has one Build Type coded/available."
+ 
+ 
+ SqueakLinux32x86Builder  sourceDirectoryFor:#Linux32x86SqueakCogV3Config
+ -->  "src"                                                        "Where the vm source code is located"
+ '
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>creatingNamingConfiguration (in category 'pages') -----
+ creatingNamingConfiguration
+ 	^HelpTopic
+ 		title:'Creating and Naming a New Configuration '
+ 		contents:
+ 'I want to create a new Squeak, Cog, V3 CMake configuration for a pure 32 bit Slackware 14.1 system.
+ All tests pass.
+ My target Platform is Linux 32x86.
+ My class category is CMakeVMMakerSqueak-Linux32x86
+ The super-class of my configuration is Linux32x86Config.
+ 
+ 
+ In class category CMakeVMMakerSqueak-Linux32x86 the Linux32x86Config funtions as an Abstract Base Class for this platform. 
+ 
+ I can identify the Abstract Base Class in several ways
+ 
+ 1. Its at the top. Linux32x86Config is at the top of the Platform''s/Class Category inheritence tree .
+ 2. Linux32x86Config is named for the Platform--Linux 32x86.
+ 3. Examining Linux32x86Config class initialize we see it assigns #true to the isAbstractBaseClass class instance variable.
+ 4. Linux32x86Config  isAbstractBaseClass answers ''true''
+ Linux32x86Config  isAbstractBaseClass 
+ --> true
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>excludingConfigFromBuilds (in category 'pages') -----
+ excludingConfigFromBuilds
+ 	^HelpTopic
+ 		title:'Excluding a Config From Builds'
+ 		contents:
+ 'Configurations can hide themselves from , or make themselves visible to Builders via their ''excludeFromBuild'' method.
+ 
+ excludeFromBuild
+ 	^false   "build this configuration"
+ "	^true     do not build this configuration"   
+ 
+ This functionality is included with an eye towards easing automated builds for all platforms and configurations.
+ 
+ In our case, the Builder shows us that Linux32x86SqueakCogV3Config is capable of being built (I had copied an existing, working Configuration):
+ 
+ SqueakLinux32x86Builder availableBuildConfigurations
+ --> an OrderedCollection(#Linux32x86SqueakCogV3Config)
+ 
+ To exclude it, override (or alter) the Configurations ''excludeFromBuild'' method
+ 
+ Linux32x86SqueakCogV3Config >>excludeFromBuild
+ 	"over-ride to exclude yourself from a build"
+ 	^true
+ 
+ And the Configuration is hidden from the Builder...
+ 
+ SqueakLinux32x86Builder availableBuildConfigurations 
+ --> an OrderedCollection()
+ 
+ 
+ However, since I am developing locally, I need it to be visible to the Builder , so I set it as so:
+ 
+ Linux32x86SqueakCogV3Config >>excludeFromBuild
+ 	"over-ride to exclude yourself from a build"
+ 	^false
+ 
+ And my Builder can see it again...
+ 
+ SqueakLinux32x86Builder availableBuildConfigurations  
+ an OrderedCollection(#Linux32x86SqueakCogV3Config)
+ 
+ 
+ N.B. tty. My opinion is that this is a weak way of doing this, but I have not thought through how to do this elegantly. 
+ 
+ 
+ 
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>firstCMakeGeneration (in category 'pages') -----
+ firstCMakeGeneration
+ 	^HelpTopic
+ 		title:'First CMake Generation'
+ 		contents:
+ 'While not necessary, I am going to do a sanity check and generate CMake code from the configuration for the first time
+ 
+ On my system the Cog svn tree is located under my Squeak install directory in the folder ''oscogvm".
+ 
+ Opening an x-term, navigating there it looks like this:
+ 
+ bash-4.2$ pwd
+ /home/tty/usr/src/smalltalk/CMake.oscog/cogVMMaker/oscogvm
+ 
+ And the contents of the directory look something like this. Note the subdirectory that starts with ""cmake.""
+ 
+ bash-4.2$ ls --width=1
+ CHANGES
+ LICENSE
+ README
+ README.old
+ build
+ build.linux32ARM
+ build.linux32x86
+ build.macos32x86
+ build.macos64x64
+ build.win32x86
+ cmake.build.linux64x86w32BitConfig  <-----created by CMakeVMMakerSqueak for the Linux64x86w32BitSqueakCogV3Config
+ history
+ image
+ .....
+ 
+ That cmake.build.linux32_64x86 directory was generated by a previous cmake generation for the Linux32_64
+ 
+ (For a discussin of naming conventions evaluate:
+ HelpBrowser openOn: CMakeVMMakerSqueakOverviewHelp
+ 
+ )
+ 
+ 
+ 
+ 
+ 
+ SqueakLinux32x86Builder
+ 	configureA: #Linux32x86SqueakCogV3Config forBuildType:#build; 
+ 	enableMessageTracking: true;
+ 	generateByTemplate.
+ 
+ 
+ 
+ '
+ 
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>identifyBuilder (in category 'pages') -----
+ identifyBuilder
+ 	^HelpTopic
+ 		title:'Identify Builder'
+ 		contents:
+ 'My new Configuration will be managed by a Builder.
+ 
+ Builders are located in the CMakeVMMakerSqueak-Builder class category.
+ 
+ Builders are subclasses of SqueakCMakeVMMakerAbstractBuilder.
+ 
+ Builders are named according to the Platform they manage.
+ 
+ Builders manage configurations for one Platform in one  class category.
+ 
+ My platform is Linux 32x86.
+ 
+ I suspect that the  SqueakLinux32x86Builder as the Builder that will manage my new configuration.
+ 
+ I confirm this by sending it the ''configurationsCategory'' message as shown below:
+ 
+ SqueakLinux32x86Builder configurationsCategory 
+ -->''CMakeVMMakerSqueak-Linux32x86''
+ 
+ This is correct Builder for my new Configuration. 
+ 
+ I can query  the Builder for some more information:
+ 
+ SqueakLinux32x86Builder  availableBuildConfigurations
+  a SortedCollection()    <--there are no concrete configurations in place as of this writing.
+ 
+ SqueakLinux32x86Builder  unAvailableBuildConfigurations 
+ a SortedCollection(#Linux32x86Config)   <--this is my Abstract Base Class. Abstract Base Classes cannot be built, hence they are unavailable.
+ 
+ SqueakLinux32x86Builder  buildDirectory 
+ -->''cmake.build.linux32x86''                     <--this matches my platform
+ 
+ We will be using the SqueakLinux32x86Builder in tandem with Tests during Configuration development.'
+ 
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>identifyPlatform (in category 'pages') -----
+ identifyPlatform
+ 	^HelpTopic
+ 		title:'Identify Platform'
+ 		contents:
+ 'My target platform is Linux 32 bit x86. 
+ 
+ I identify my Platform in the list of CMakeVMMakerSqueak-xyz class categories.  
+ 
+ I choose the  CMakeVMMakerSqueak-Linux32x86 as the location for my new Configuration.
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>identifyPlatformAbstractBaseClass (in category 'pages') -----
+ identifyPlatformAbstractBaseClass
+ 	^HelpTopic
+ 		title:'Identify Abstract Base Class '
+ 		contents:
+ 'My new configuration must be a subclass of my Platform''s Abstract Base Class. 
+ 
+ In class category CMakeVMMakerSqueak-Linux32x86 the Abstract Base Class is  Linux32x86Config 
+ 
+ Examples of Abstract Base Classes in other class categories  (category->Abstract Base Class) include:
+ 
+ CMakeVMMakerSqueak-BSD32x86                                -> SqueakBSD32x86Config
+ CMakeVMMakerSqueak-IA32-Bochs                               -> SqueakIA32BochsConfig
+ CMakeVMMakerSqueak-IOS                                           -> SqueakIOSConfig
+ CMakeVMMakerSqueak-IOS                                           -> SqueakIOSConfig
+ CMakeVMMakerSqueak-Linux32ARMv6                          -> Linux32ARMv6Config
+ CMakeVMMakerSqueak-Linux64X86-32BitCompatibility -> Linux64x86w32BitConfig
+ CMakeVMMakerSqueak-LinuxX86-64                             -> Linux64Config
+ CMakeVMMakerSqueak-MacOSPowerPC                        -> SqueakMacOSXPowerPCConfig
+ CMakeVMMakerSqueak-MacOSX32x86                          -> SqueakMacOSX32x86Config
+ CMakeVMMakerSqueak-SunOS32x86                            -> SqueakSunOS32x86Config
+ CMakeVMMakerSqueak-Win32x86                                 -> SqueakWin32x86Config
+ 
+ I can identify the Abstract Base Class in several ways
+ 
+ 1. It is the topmost class in the class category for that platform
+ 2. It is named after its platform
+ 3. It answers #true to the message isAbstractBaseClass
+ Linux32x86Config  isAbstractBaseClass 
+ --> true
+ 4. Its class initialize method sets its isAbstractBaseClass class instance variable to #true
+ 5. It is the only Abstract Base Class in its immediate class heirarchy.
+ 
+ My new configurations will be a subclass of the AbstractBaseClass for my platform. 
+ 
+ In this workflow example the AbstractBaseClass for my Platform is Linux32x86Config
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>overview (in category 'pages') -----
+ overview
+ 	^HelpTopic
+ 		title:'Overview'
+ 		contents:
+ 'I want to create a new Squeak, Cog, V3 CMake configuration for a pure 32 bit Slackware 14.1 system.
+ 
+ This Help Topic is a running commentary on accomplishing this task.
+ 
+ The steps involved should be the same for any platform.'!

Item was changed:
  ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>pages (in category 'accessing') -----
  pages
+ 	^#(overview 
+ tests 
+ identifyPlatform 
+ identifyPlatformAbstractBaseClass
+ identifyBuilder
+ createTheConfiguration
+ excludingConfigFromBuilds
+ setAvailableBuildTypes
+ firstCMakeGeneration
+ "setting paths"
+ settingPlugins
+ 
- 	^#(step1 
- 		step2 
- 		step3 
- 		step4 
- 		step4a 
- 		step4b 
- 		step4c 
- 		step4d 
- 		step4e 
- 		step4f 
- 		step4g 
- 		step4h 
- 		step4i 
- 		step4j 
- 		step4k 
- 		step4l 
- 		step4m
- 		step5 
  )!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>setAvailableBuildTypes (in category 'pages') -----
+ setAvailableBuildTypes
+ 	^HelpTopic
+ 		title:'Setting Available Build Types'
+ 		contents:
+ 'Configurations must inform Builders what BuildTypes they support.*
+ 
+ Here is my Builder asking my new Configuration what build types it supports (remember, this Configuration was copied, so it has been configured already)
+ 
+ SqueakLinux32x86Builder availableBuildTypesFor: #Linux32x86SqueakCogV3Config 
+ -->an OrderedCollection(#build)
+ 
+ In our Abstract Base Class (Which, you recall cannot be buil)for our Platform, we default to all build types.
+ 
+ Linux32x86Config>>availableBuildTypes
+ 	 ^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes
+ 
+ Evaluating  the return gives us:
+ 
+ SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes 
+ -->an OrderedCollection(#build #buildAssert #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert #buildMultiThreadedDebug #buildNone)
+ 
+ 
+ To set the available build types for a Concrete Configurations we override the AbstactBaseClass''s method and SUBTRACT OUT what we do not want. Like so:
+ 
+ Linux32x86SqueakCogV3Config >> availableBuildTypes 
+ 	^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes copyWithoutAll: #( #buildAssert #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert #buildMultiThreadedDebug #buildNone)
+ 
+ 
+ Here I show what happens when I subtract more from the available pool. Here I set my Configuration to only omit 2 build types:
+ 
+ Linux32x86SqueakCogV3Config >> availableBuildTypes 
+ 	^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes copyWithoutAll: #(  #buildMultiThreadedDebug #buildNone)
+ 
+ With the result that my Builder shows the removed items:
+ 
+ SqueakLinux32x86Builder availableBuildTypesFor: #Linux32x86SqueakCogV3Config 
+ --> an OrderedCollection(#build #buildAssert #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert)
+ 
+ 
+ 
+ 
+ 
+ *N.B. tty. In my opinion, this is a weak design on my part. If there is an elegant way to do this , I am for it.
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>settingPlugins (in category 'pages') -----
+ settingPlugins
+ 	^HelpTopic
+ 		title:'Setting Plugins'
+ 		contents:
+ 'Write Me.'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step1 (in category 'pages') -----
- step1
- 	^HelpTopic
- 		title:'Step 1. Choose Your Category'
- 		contents:
- ' CMakeVMMakerSqueak configurations are placed in a Smalltalk category with the naming convention [OS][VMWordSize][Processor]
- 
- You start by choosing the correct Smalltalk Category in which to place your new Configuration.
- 
- Example; If you need a new configuration for Linux for a 32 bit VM on the x86 platform--[Linux][32][x86]--Choose the CMakeVMMakerSqueak-Linux32x86 category.
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step2 (in category 'pages') -----
- step2
- 	^HelpTopic
- 		title:'Step 2. Copy Existing Concrete Configuration'
- 		contents:
- 'Now that you have selected your category to place your new Configuration, you need to create your configuration.
- 
- Like Categories, Configurations adhere to a naming convention. It is [language][VM][MemoryManager][etc]Config
- example: squeak.cog.v3.tty  is a configuration for compiling Squeak with a Cog VM with the old V3 memory manager and this is a special configuration for tty.
- 
- The easiest way to create the config is to subclass an existing configuration. In this case I would subclass squeak.cog.v3.
- 
- IMPORTANT: Do not copy a configuration (usually the top one in a category) that has the "	uses: TCPlatformConfigForSqueak"
- line in its definition. While there are technical reasons for this warning, the important one is that it makes coding a pain-in-the-butt.
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step3 (in category 'pages') -----
- step3
- 	^HelpTopic
- 		title:'Step 4. Customize the "cmake" protocol'
- 		contents:
- 'TODO
- dirInstall
- 	"the directory of the finished product.. the place where ''make install'' puts stuff.
- 	SystemNavigation default browseMethodsWhoseNamesContain: ''dirInstall''
-       "
- 	^self squeakCogV3 , ''.noGL''
- 
- 
- excludeFromBuild
- 	^false   "build this configuration"
- "	^true"
- 
- executableName
- 	^ self vmCogExecutableName
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4 (in category 'pages') -----
- step4
- 	^HelpTopic
- 		title:'Step 4. Customize the "cmake build type config" protocol'
- 		contents:
- 'When we invoke a Builder with a command like:
- 
- SqueakLinux64x86w32CompatBuilder
- 	configureA: #Linux64x86w32BitSqueakCogV3SlackwareNoGLConfig forBuildType: #buildDebugITimerHeartbeat;
- 	generateSources;
- 	generate.  
- 
- We are telling the Builder to select a Configuration and have that Configuration configure itself to produce CMake output for the buildType: #buildDebugITimerHeartbeat;
- 
- On your configuration the entry point for your configuration is one of:
- 
- configureBuild
- configureBuildAssert
- configureBuildAssertITimerHeartbeat
- configureBuildDebug
- configureBuildDebugITimerHeartbeat                        <----this one is selected by buildType: #buildDebugITimerHeartbeat;
- configureBuildITimerHeartbeat
- configureBuildMultiThreaded
- configureBuildMultiThreadedAssert
- configureBuildMultiThreadedDebug
- 
- Within this method, system state is set up and customizable for many methods in CMakeVMaker CPlatformConfig.
- 
- "setGlobalOptions: aMaker"
- "setGlobalOptionsAfterDetermineSystem: aMaker"
- setupDirectories
- preferredIncludes
- standardIncludes
- compilerFlags
- "extraVMSettings: aMaker"
- internalPlugins
- externalPlugins
- thirdpartyLibs
- "setExtraTargetProperties: aMaker"
- "postBuildActions: aMaker"
- configH
- 
- The methods above that take the : aMaker argument are handled on-the-fly later in the process and are only presented here for informational purposes.
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4a (in category 'pages') -----
- step4a
- 	^HelpTopic
- 		title:'Step 4a. setGlobalOptions'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4b (in category 'pages') -----
- step4b
- 	^HelpTopic
- 		title:'Step 4b. setGlobalOptionsAfterDetermineSystem'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4c (in category 'pages') -----
- step4c
- 	^HelpTopic
- 		title:'Step 4c. setupDirectories'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4d (in category 'pages') -----
- step4d
- 	^HelpTopic
- 		title:'Step 4d. preferredIncludes'
- 		contents:
- 'This is handy when ''make'' cannot find a header.
- 
-  For example, when compiling 
- 
- I got error:
- Scanning dependencies of target UnixOSProcessPlugin
- /..../oscogvm/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c:48:26: fatal error: SocketPlugin.h: No such file or directory
- 
- From my topDir (oscogvm) I did  a search and found SocketPlugin.h exits in  ./platforms/Cross/plugins/SocketPlugin/SocketPlugin.h
- 
- in my root config class for my category, I had...
- 
- ''${targetPlatform}/plugins/SocketPlugin''
- 
- I changed it to 
- 
- ''${crossDir}/plugins/SocketPlugin''
- 
- deleted my files in my build directory, re-ran the generate and...
- 
- 
- 
- 	SystemNavigation default browseMethodsWhoseNamesContain: ''preferredIncludes''
-   
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4e (in category 'pages') -----
- step4e
- 	^HelpTopic
- 		title:'Step 4e. standardIncludes'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4f (in category 'pages') -----
- step4f
- 	^HelpTopic
- 		title:'Step 4f. compilerFlags'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4g (in category 'pages') -----
- step4g
- 	^HelpTopic
- 		title:'Step 4g. extraVMSettings'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4h (in category 'pages') -----
- step4h
- 	^HelpTopic
- 		title:'Step4h internalPlugins'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4i (in category 'pages') -----
- step4i
- 	^HelpTopic
- 		title:'Step4i externalPlugins'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4j (in category 'pages') -----
- step4j
- 	^HelpTopic
- 		title:'Step4j thirdpartyLibs'
- 		contents:
- 'TODO: summarize this
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4k (in category 'pages') -----
- step4k
- 	^HelpTopic
- 		title:'Step4k setExtraTargetProperties:aMaker'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4l (in category 'pages') -----
- step4l
- 	^HelpTopic
- 		title:'Step4k postBuildActions: aMaker'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4m (in category 'pages') -----
- step4m
- 	^HelpTopic
- 		title:'Step4m configH'
- 		contents:
- ' This is the contents of a config.h file in the build directory.
- It is used only in Unix builds in CMakeVMMaker.
- 
- 
- It is called from the method ''extraVMSettings'' of  CogUnixConfig in CMakeVMMaker when CogUnixConfig sends the message:		self generateConfigH.
- 
- To provide a custom config.h CMakeVMakerSqueak subclasses that message ''self generateConfigH'' and routes the call
- to ''generateConfigH: aBuildType''
- 
- From there, a block is evaluated appropriate for the build type that invokes a ''configHBuildXYZ'' method which can be overridden by you to 
- return a custom config.h. The default is to return the base configH.
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step5 (in category 'pages') -----
- step5
- 	^HelpTopic
- 		title:'Step5 set up ''cmake directory'' protocol'
- 		contents:
- 'The cmake directories protocol contains directory names for your platform, build directory 
- 
- See the chapter titled: ''An Explanation of Protocols in TCPaltformConfigForSqueak'' in 
- HelpBrowser openOn:CMakeVMMakerSqueakDeveloperHelp  
- 
- The ones that your Configuration must implement are:
- 
- dirBuildPlatform
- dirBuildLanguageVMMM
- 
- 
- Basically, we are building a directory like this:
- oscogvm/cmake.build.linux32.x86/squeak.cog.v3/build.assert 
- 
- which, when expressed as message names reduces to:
- 
- topDir/dirLinux32x86/squeakCogV3/dirBuildAssert
- 
- which are further reduced to 
- 
- topDir/dirBuildPlatform/dirBuildLanguageVMMM/dirBuildAssert
- 
- It is the two in the middle that you must customize. (dirBuildAssert is dynamically set by a Builder in a script, to be covered later)
- To see how, take a look at the implementors of the two. its quite intuitive once you see it as it is based off our standard naming conventions.
- 
- SystemNavigation default browseMethodsWhoseNamesContain: ''dirBuildPlatform''
- SystemNavigation default browseMethodsWhoseNamesContain: ''dirBuildLanguageVMMM''
- 
- For our purposes in this example, we want:
- 
- 
- dirBuildPlatform
- 	^self dirLinux32x86
- and
- 
- dirBuildLanguageVMMM
- 	^self squeakCogV3
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>tests (in category 'pages') -----
+ tests
+ 	^HelpTopic
+ 		title:'Tests'
+ 		contents:
+ 'We start with Tests.
+ 
+ The Tests are in class category CMakeVMMakerSqueak-Tests.
+ 
+ They are:
+ 
+ CMakeVMMakerSqueakBuildersTest
+ CMakeVMMakerSqueakCommonConfigTest
+ CMakeVMMakerSqueakMacintoshConfigTest
+ CMakeVMMakerSqueakRedirectMethodsTest
+ CMakeVMMakerSqueakRedirectMethodsWithArgTest
+ CMakeVMMakerSqueakUnixConfigTest
+ CMakeVMMakerSqueakWindowsConfigTest
+ 
+ As of 2014.12.09 all tests pass. 
+ 
+ As we create the Configuration these tests will be an important check on our work and we will return to them often.'!

Item was changed:
  ----- Method: CMakeVMMakerSqueakStepByStepNewPlatformHelp class>>bookName (in category 'accessing') -----
  bookName 
+ 	^'Example Workflow: New Platform'!
- 	^'Step By Step: New Platform'!

Item was changed:
  ----- Method: CMakeVMMakerSqueakStepByStepNewPlatformHelp class>>overview (in category 'pages') -----
  overview
  	^HelpTopic
  		title:'Overview'
  		contents:
+ ' Write me.
- ' 
  '!

Item was changed:
  ----- Method: CMakeVMMakerSqueakStepByStepNewPlatformHelp class>>step1 (in category 'pages') -----
  step1
  	^HelpTopic
  		title:'Step 1. '
  		contents:
+ ' Write me
- ' 
  '!

Item was removed:
- ----- Method: CPlatformConfigForSqueak>>dirLinux32x8664 (in category 'cmake directory ') -----
- dirLinux32x8664
- 	^'cmake.build.linux32_64x86'!

Item was added:
+ ----- Method: CPlatformConfigForSqueak>>dirLinux64x86w32BitConfig (in category 'cmake directory ') -----
+ dirLinux64x86w32BitConfig
+ 	^'cmake.build.linux64x86w32BitConfig'!

Item was changed:
  ----- Method: Linux32x86Config>>availableBuildTypes (in category 'cmake') -----
  availableBuildTypes
+ 	self flag:'tty'. "Should this be pushed up? I am guessing yes"
  	 ^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes
  "	subclasses should use
  
    ^super availableBuildTypes copyWithoutAll: #( #assertWithHeartbeatTimer #debugWithHeartbeatTimer debugMultiThreadedFFI.....etc))   "
  	
  !

Item was added:
+ Linux64x86w32BitConfig subclass: #Linux32x86SqueakCogV3Config
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'CMakeVMMakerSqueak-Linux32x86'!
+ 
+ !Linux32x86SqueakCogV3Config commentStamp: '<historical>' prior: 0!
+ I am a configuration for 64 bit Linux with 32 Bit compatability libraries.
+ I have been tested with Slackware64 14.1 which uses /usr/lib for 32 bit compatability  libs and /usr/lib64 for normal libs.
+ 
+ If you have a machine which uses /usr/lib for 64 bit libs and /usr/lib32 for 32 bit compat libs then subclass me and modify (at least) the following methods:
+ 
+ compilerFlags
+ externalLibraries
+ linkFlagsBuild
+ linkerFlags
+ 
+ 
+ SqueakLinux64x86w32CompatBuilder 
+ 	configureABuildFor: #Linux64x86w32BitSqueakCogV3Config withBuildType: #build;
+ 	enableMessageTracking: true;
+ 	generateByTemplate.
+ 
+ HelpBrowser openOn: CMakeVMMakerSqueakDeveloperHelp
+ 
+ 
+ Getting the UUIDPlugin to compile (not work, unfortunately, but compile) required modifying oscogvm/platforms/unix/plugins/acinclude.m4.
+ to read: (my Slackware system has <uuid> and uuidgen. then setting the 
+ 
+ # -*- sh -*-
+ 
+ AC_MSG_CHECKING([for UUID support])
+ AC_TRY_COMPILE([#include <sys/uuid.h>],[uuid_generatorxyz;],[
+   AC_MSG_RESULT(yes)
+   AC_CHECK_LIB(uuid, uuid_generator_xyz,LIB_UUID="-luuid" )
+ ],[
+   AC_MSG_RESULT(no)
+   AC_MSG_CHECKING([for UUID support uuid/uuid.h] and uuid_generate)
+   AC_TRY_COMPILE([#include <uuid/uuid.h>],[uuid_generate;],[
+     AC_MSG_RESULT(yes)
+     AC_CHECK_LIB(uuid, uuid_generate, LIB_UUID="-luuid")],[
+     AC_MSG_RESULT(no)
+       AC_MSG_CHECKING([for UUID support uuid and uuidgen] )
+       AC_TRY_COMPILE([#include <uuid.h>],[uuidgen;],[
+       AC_MSG_RESULT(yes)
+        AC_CHECK_LIB(uuid, uuidgen, LIB_UUID="-luuid" )],[
+        AC_MSG_RESULT(no)
+         AC_PLUGIN_DISABLE
+    ])
+  ])
+ ])
+ 
+ 
+ 
+ 
+ #define HAVE_UUID_H 1 
+ #define HAVE_UUIDGEN 1
+ 
+ fl;ags in my configH method
+ 
+ !

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config class>>isAbstractBaseClass (in category 'as yet unclassified') -----
+ isAbstractBaseClass
+ 	^false
+ !

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>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: #( #buildAssert #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert #buildMultiThreadedDebug #buildNone)!

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

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>cmakeCFlagsBuild (in category 'cmake buildType redirects') -----
+ cmakeCFlagsBuild
+ 	|cflags|
+ 	self flag:'tty'. "#build should have -O2"
+ 	cflags:= String streamContents: [:stream | (self compilerFlags) asStringOn: stream delimiter: ' ' ].
+ 	cflags:='"', cflags, '"'.
+ 	(enabledebugmessages)
+ 		ifTrue:[	templates 
+ 		addLast:((CMakeMessage new) message: (self class name) , 'cmakeCFlagsBuild')
+ 	] .
+ 	templates
+ 		addLast:((CMakeSet new) variable:'CMAKE_C_FLAGS' value: '${CMAKE_C_FLAGS} ', cflags );
+ 		addLast:((CMakeSet new) variable:'CMAKE_C_FLAGS_RELEASE' value: '${CMAKE_CXX_FLAGS_RELEASE} ', cflags );
+ 		addLast:((CMakeSet new) variable:'CMAKE_C_FLAGS_DEBUG' value: '${CMAKE_CXX_FLAGS_DEBUG} ',cflags);		
+ 		addLast:((CMakeSet new) variable:'CMAKE_CXX_FLAGS' value: '${CMAKE_CXX_FLAGS} ', cflags );
+ 		addLast:((CMakeSet new) variable:'CMAKE_CXX_FLAGS_RELEASE' value: '${CMAKE_CXX_FLAGS_RELEASE} ', cflags );
+ 		addLast:((CMakeSet new) variable:'CMAKE_CXX_FLAGS_DEBUG' value: '${CMAKE_CXX_FLAGS_DEBUG} ', cflags ).
+ 
+ 	(enabledebugmessages)  "take a peek at em"
+ 		ifTrue:[	templates 
+ 		addLast:((CMakeMessage new) message: 'CMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}');
+ 		addLast:((CMakeMessage new) message: 'CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}');
+ 		addLast:((CMakeMessage new) message: 'CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}');
+ 		addLast:((CMakeMessage new) message: 'CMAKE_C_FLAGS=${CMAKE_C_FLAGS}');
+ 		addLast:((CMakeMessage new) message: 'CMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}');
+ 		addLast:((CMakeMessage new) message: 'CMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}')
+ 	] .
+ 
+ 
+ !

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>cmakeSetSourceFilesPropertiesBuild (in category 'cmake buildType redirects') -----
+ cmakeSetSourceFilesPropertiesBuild
+ 	|cflags|
+ 	cflags:=String streamContents: [:stream | (self compilerFlags) asStringOn: stream 
+ delimiter: ' ' ].
+ 	cflags := '"' , cflags , '"'.
+ 	(enabledebugmessages)
+ 		ifTrue:[	templates 
+ 		addLast:((CMakeMessage new) message: (self class name) , 'cmakeSetSourceFilesPropertiesBuild')
+ 	] .
+ 	templates
+ 		addLast:((CMakeSetSourceFilesProperties new) 
+ 			files: (OrderedCollection with: '${srcVMDir}/cogit.c') 
+ 			propertiesandvalues:{'COMPILE_FLAGS' . cflags});
+ 		addLast:((CMakeSetSourceFilesProperties new) 
+ 			files: (OrderedCollection with: '${targetPlatform}/vm/sqUnixHeartbeat.c') 
+ 			propertiesandvalues:{'COMPILE_FLAGS' . cflags}).!

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>cogitClass (in category 'source generation') -----
+ cogitClass
+ 	^ StackToRegisterMappingCogit 
+ !

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>compilerDefinitions (in category 'compiling') -----
+ compilerDefinitions
+ 	^#(
+ 	 '-DNDEBUG'          
+  	 '-DDEBUGVM=0'
+ 	 ' -DLSB_FIRST=1'
+ 	 '-D_GNU_SOURCE'
+  	 '-D_FILE_OFFSET_BITS=64'
+ "	  '-DUSE_GLOBAL_STRUCT=0'"
+  	 '-DCOGMTVM=0') 
+ !

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>compilerFlags (in category 'compiling') -----
+ compilerFlags
+ 	^#("'-Wall'"
+ 		'-w'
+ 		'-m32'
+ 		'-msse2'
+ "		'-g3'                      extra debugging info"
+ 		'-O1'
+ "	 	'-fno-caller-saves'
+ 		'-fno-tree-pre'") 
+ !

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>defaultExternalPlugins (in category 'plugins') -----
+ defaultExternalPlugins
+ 	""
+ 	^#()!

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>dirBuildLanguageVMMM (in category 'cmake') -----
+ dirBuildLanguageVMMM
+ 	^self squeakCogV3!

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>dirInstall (in category 'cmake') -----
+ dirInstall
+ 	"the directory of the finished product.. the place where 'make install' puts stuff.
+ 	SystemNavigation default browseMethodsWhoseNamesContain: 'outputDir'
+       "
+ 	^self squeakCogV3!

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>excludeFromBuild (in category 'cmake') -----
+ excludeFromBuild
+ 	^false   "build this configuration"
+ "	^true"
+ 
+ !

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>executableName (in category 'cmake') -----
+ executableName
+ 	^ self vmCogExecutableName!

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>externalLibraries (in category 'compiling') -----
+ externalLibraries
+ 	^#(
+ 		     '-L/usr/lib'
+ 		     '-L/usr/lib/X11'
+ 			'uuid'  ""
+ 			 'ssl'  ""
+ 			 'crypto' ""
+ 			 'm'      	"C math library"
+ 			 'dl'      "dynamic linking library"
+ 			 'pthread' "POSIX threads library"
+ 			 'SM'   "session management library for X11"
+ 			 'ICE'   "ICE is the Inter Client Exchange protocol, part of X11"
+ 			 'GL'    "libGL implements the GLX interface as well as the main OpenGL API entrypoints"
+ 			 'X11'
+ 			 'nsl'    "network services library"
+ 		)
+ 				
+ 
+ !

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>externalLibsBuild (in category 'cmake buildType redirects') -----
+ externalLibsBuild
+ 	^self externalLibraries asOrderedCollection.
+ !

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>interpreterClass (in category 'source generation') -----
+ interpreterClass
+ 	^ CoInterpreter!

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>linkFlagsBuild (in category 'cmake buildType redirects') -----
+ linkFlagsBuild
+ 	"Answer array of libraries to link to"
+ 	^ { '-L/usr/lib'
+ 	     . '-L/usr/lib/X11'
+            . '-luuid'
+            . 'lSM' 
+            . '-lICE'
+            . '-ldl' 
+            . '-lGL'
+            . '-lpthread'
+            . '-lm' 
+            . '-lnsl'
+            . '-lX11'
+ 	   } 
+ !

Item was added:
+ ----- Method: Linux32x86SqueakCogV3Config>>linkerFlags (in category 'compiling') -----
+ linkerFlags
+ 	^#(	'-Wl'
+             '-z'
+             'now'
+ 	   ) 
+ !

Item was changed:
  ----- Method: Linux64x86w32BitConfig>>dirBuildPlatform (in category 'cmake') -----
  dirBuildPlatform
  	"the directory for the platform. example: build.linux32x86"
+ 	^self dirLinux64x86w32BitConfig!
- 	^self dirLinux32x8664!

Item was added:
+ SqueakCMakeVMMakerAbstractBuilder subclass: #SqueakBSD32x86Builder
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'CMakeVMMakerSqueak-Builder'!
+ 
+ !SqueakBSD32x86Builder commentStamp: 'tty 12/9/2014 12:42' prior: 0!
+ I am a facade.
+ 
+ I query, and invoke CMakeVMMakerSqueak configurations.
+ 
+ HelpBrowser openOn: CMakeVMMakerSqueakHelp.
+ !

Item was added:
+ ----- Method: SqueakBSD32x86Builder>>configurationsCategory (in category 'queries') -----
+ configurationsCategory
+ 	^ 'CMakeVMMakerSqueak-BSD32x86'!

Item was added:
+ SqueakUnixConfig subclass: #SqueakBSD32x86Config
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'CMakeVMMakerSqueak-BSD32x86'!
+ 
+ !SqueakBSD32x86Config commentStamp: 'tty 12/8/2014 11:26' prior: 0!
+ a SqueakBSDConfig is an Abstract base class that provides common information for my subclasses.
+ I am not meant to be built.
+ 
+ I configure a VM according to my name's form: [Operating System] [WordSize] [Processor Language][VM MemoryManager][BuildType]Conf
+ I am not meant to be built.
+ 
+ SqueakBSDx86Builder 
+ 	configureABuildFor: #MY SUBCLASS NAME HERE withBuildType: #build;
+ 	enableMessageTracking: true;
+ 	generateByTemplate.
+ 
+ 
+ HelpBrowser openOn: CMakeVMMakerSqueakDeveloperHelp
+ !

Item was added:
+ ----- Method: SqueakBSD32x86Config class>>initialize (in category 'as yet unclassified') -----
+ initialize
+ 	isAbstractBaseClass:=true!

Item was added:
+ ----- Method: SqueakBSD32x86Config>>addVMPluginsBuild: (in category 'cmake buildType redirects') -----
+ addVMPluginsBuild: aMaker
+ 	aMaker message: 'addVMDrivers: aMaker'.
+ 	 self 
+ 		addDriver: 'vm-display-null' 
+ 		sources: #( 
+ 			'${targetPlatform}/vm-display-null/sqUnixDisplayNull' )
+ 		generator: aMaker
+ 		externalLibs: #();
+ 		
+ 		addDriver: 'vm-display-X11' 
+ 		sources: #( 
+ 			'${targetPlatform}/vm-display-X11/sqUnixX11'
+ 			'${targetPlatform}/vm-display-X11/sqUnixMozilla' )
+ 		generator: aMaker
+ 		externalLibs: (self externalLibs);
+ 
+ 		addDriver: 'vm-sound-ALSA' 
+ 		sources: #( 
+ 			'${targetPlatform}/vm-sound-ALSA/sqUnixSoundALSA' )
+ 		generator: aMaker
+ 		externalLibs: #();
+ 
+ 		addDriver: 'vm-sound-null' 
+ 		sources: #( 
+ 			'${targetPlatform}/vm-sound-null/sqUnixSoundNull' )
+ 		generator: aMaker
+ 		externalLibs: #().
+ !

Item was added:
+ ----- Method: SqueakBSD32x86Config>>availableBuildTypes (in category 'cmake') -----
+ availableBuildTypes
+ 	 ^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes
+ "	subclasses should use
+ 
+   ^super availableBuildTypes copyWithoutAll: #( #assertWithHeartbeatTimer #debugWithHeartbeatTimer debugMultiThreadedFFI.....etc))   "
+ 	
+ !

Item was added:
+ ----- Method: SqueakBSD32x86Config>>coreSourcesBuild (in category 'cmake buildType redirects') -----
+ coreSourcesBuild
+ 	"files to include from src/vm dir"
+ 	^ #(
+ 		'cogit.c'
+ 		'cointerp.c'
+ 		)!

Item was added:
+ ----- Method: SqueakBSD32x86Config>>coreSourcesBuildMultiThreaded (in category 'cmake buildType redirects') -----
+ coreSourcesBuildMultiThreaded
+ 	"files to include from src/vm dir"
+ 	^ #(
+ 		'cogit.c'
+ 		'cointerpmt.c'
+ 		)!

Item was added:
+ ----- Method: SqueakBSD32x86Config>>customizeVMPlugins (in category 'plugins') -----
+ customizeVMPlugins
+ 	|mysubset iwantonly|
+ 	"trim the vmdrivers ordered collection of CMakeVMDriver subclasses to only those I want. then customize them for use on this OS/platform"
+ "	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
+ 	mysubset := vmplugins select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
+ 	vmplugins := mysubset.
+ 	self 
+ 		customizeCMakeVMDisplayNull;
+ 		customizeCMakeVMDisplayX11;
+ 		customizeCMakeVMSoundALSA;
+ 		customizeCMakeVMSoundNull."!

Item was added:
+ ----- Method: SqueakBSD32x86Config>>defaultExternalPlugins (in category 'plugins') -----
+ defaultExternalPlugins
+ " tty 2014.06.10  cut-n-paste from Cog/build.linux32x86/newspeak.cog.spur/build/plugins.ext"
+ 	^ #(B3DAcceleratorPlugin 
+ 		BochsIA32Plugin 
+ 	      ThreadedFFIPlugin    "moduleName->SqueakFFIPrims "
+ 		"FFIPlugin"                   "moduleName->SqueakFFIPrims "
+ 		SqueakSSLPlugin       "moduleName->SqueakSSL" 
+ 		LocalePlugin 
+ 		UnixOSProcessPlugin 
+ 		UUIDPlugin)
+ 
+ 
+ "N.B. Regarding ThreadedFFIPlugin and FFIPlugin from eem:
+ 
+ Use  ThreadedFFIPlugin.  The FFIPlugin is obsolete (it requires assembler support files, and is non-reentrant).  This should generate in src/plugins/SqueakFFIPrims/{SqueakFFIPrims.c,ARM32FFIPlugin.c,IA32FFIPlugin.c} and you should compile only src/plugins/SqueakFFIPrims/SqueakFFIPrims.c.  src/plugins/SqueakFFIPrims/SqueakFFIPrims.c is a simple wrapper that includes ARM32FFIPlugin.c or IA32FFIPlugin.c as appropriate (and others can be added as they are developed).
+ 
+ 
+ "!

Item was added:
+ ----- Method: SqueakBSD32x86Config>>defaultInternalPlugins (in category 'plugins') -----
+ defaultInternalPlugins
+ " N.B. THESE MAY BE WILDLY INAPPROPRIATE FOR BSD. cut-n-pasted from Linux32x86Config.
+    N.B. moduleName->XYZ means XYZ appears in the GNU-Build's plugins.int/ext. However, Smalltalk requires the class name.
+                                  XYZSmalltalkClass  moduleName->XYZ as it appears in plugins.int/ext
+ "
+ 	^ #(
+ 	    ADPCMCodecPlugin
+     AsynchFilePlugin
+     BalloonEnginePlugin "moduleName -->B2DPlugin"
+     BitBltSimulation        "moduleName->BitBltPlugin"
+     BMPReadWriterPlugin
+     CroquetPlugin
+     DeflatePlugin               "moduleName->ZipPlugin"
+     DropPlugin
+     DSAPlugin                    "moduleName->DSAPrims"
+     FFTPlugin
+     FileCopyPlugin
+     FilePlugin
+     FloatArrayPlugin
+     FloatMathPlugin
+     IA32ABIPlugin             "moduleName->IA32ABI"
+     InflatePlugin               "moduleName->ZipPlugin"
+     JoystickTabletPlugin
+     JPEGReaderPlugin
+     JPEGReadWriter2Plugin
+     KlattSynthesizerPlugin  "moduleName->Klatt"
+     LargeIntegersPlugin      "moduleName->LargeIntegers"
+     Matrix2x3Plugin
+     MIDIPlugin
+     MiscPrimitivePlugin
+     Mpeg3Plugin
+     RePlugin
+     SecurityPlugin
+     SerialPlugin
+     SocketPlugin
+     SoundCodecPlugin        "moduleName->SoundCodecPrims"
+     SoundGenerationPlugin
+     SoundPlugin
+     StarSqueakPlugin
+     SurfacePlugin
+     VMProfileLinuxSupportPlugin)!

Item was added:
+ ----- Method: SqueakBSD32x86Config>>dirBuildPlatform (in category 'cmake') -----
+ dirBuildPlatform
+ 	"the directory for the platform. example: build.linux32x86"
+ 	^self dirBSD32x86!

Item was added:
+ ----- Method: SqueakBSD32x86Config>>excludeFromBuild (in category 'cmake') -----
+ excludeFromBuild
+ 	"over-ride to exclude yourself from a build or not"
+ 	^true!

Item was added:
+ ----- Method: SqueakBSD32x86Config>>executableName (in category 'cmake') -----
+ executableName
+ 	"AbstractBaseClass configurations are not meant to be executable"
+ 	^ self vmIShouldNotBeHereExecutableName!

Item was added:
+ ----- Method: SqueakBSD32x86Config>>externalPluginsBuild (in category 'cmake buildType redirects') -----
+ externalPluginsBuild
+ 	^ externalPlugins ifNil: [ externalPlugins := self defaultExternalPlugins ]!

Item was added:
+ ----- Method: SqueakBSD32x86Config>>extraPluginSettingsBuild: (in category 'cmake buildType redirects') -----
+ extraPluginSettingsBuild: aMaker
+ 	aMaker isExternal 
+ 		ifTrue:[aMaker templates addLast:((CMakeSet new) variable:'LIBRARY_OUTPUT_PATH' value:'${outputDir}')].
+ 
+ !

Item was added:
+ ----- Method: SqueakBSD32x86Config>>internalPluginsBuild (in category 'cmake buildType redirects') -----
+ internalPluginsBuild
+ 	^ internalPlugins ifNil: [ internalPlugins := self defaultInternalPlugins ]!

Item was added:
+ ----- Method: SqueakBSD32x86Config>>postBuildActionsBuild: (in category 'cmake buildType redirects') -----
+ postBuildActionsBuild: gen
+ 	"SystemNavigation default browseMethodsWhoseNamesContain: 'postBuildActionsBuild:'"!

Item was removed:
- SqueakUnixConfig subclass: #SqueakBSDConfig
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'CMakeVMMakerSqueak-BSD32x86'!
- 
- !SqueakBSDConfig commentStamp: 'tty 12/8/2014 11:26' prior: 0!
- a SqueakBSDConfig is an Abstract base class that provides common information for my subclasses.
- I am not meant to be built.
- 
- I configure a VM according to my name's form: [Operating System] [WordSize] [Processor Language][VM MemoryManager][BuildType]Conf
- I am not meant to be built.
- 
- SqueakBSDx86Builder 
- 	configureABuildFor: #MY SUBCLASS NAME HERE withBuildType: #build;
- 	enableMessageTracking: true;
- 	generateByTemplate.
- 
- 
- HelpBrowser openOn: CMakeVMMakerSqueakDeveloperHelp
- !

Item was removed:
- ----- Method: SqueakBSDConfig class>>initialize (in category 'as yet unclassified') -----
- initialize
- 	isAbstractBaseClass:=true!

Item was removed:
- ----- Method: SqueakBSDConfig>>addVMPluginsBuild: (in category 'cmake buildType redirects') -----
- addVMPluginsBuild: aMaker
- 	aMaker message: 'addVMDrivers: aMaker'.
- 	 self 
- 		addDriver: 'vm-display-null' 
- 		sources: #( 
- 			'${targetPlatform}/vm-display-null/sqUnixDisplayNull' )
- 		generator: aMaker
- 		externalLibs: #();
- 		
- 		addDriver: 'vm-display-X11' 
- 		sources: #( 
- 			'${targetPlatform}/vm-display-X11/sqUnixX11'
- 			'${targetPlatform}/vm-display-X11/sqUnixMozilla' )
- 		generator: aMaker
- 		externalLibs: (self externalLibs);
- 
- 		addDriver: 'vm-sound-ALSA' 
- 		sources: #( 
- 			'${targetPlatform}/vm-sound-ALSA/sqUnixSoundALSA' )
- 		generator: aMaker
- 		externalLibs: #();
- 
- 		addDriver: 'vm-sound-null' 
- 		sources: #( 
- 			'${targetPlatform}/vm-sound-null/sqUnixSoundNull' )
- 		generator: aMaker
- 		externalLibs: #().
- !

Item was removed:
- ----- Method: SqueakBSDConfig>>availableBuildTypes (in category 'cmake') -----
- availableBuildTypes
- 	 ^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes
- "	subclasses should use
- 
-   ^super availableBuildTypes copyWithoutAll: #( #assertWithHeartbeatTimer #debugWithHeartbeatTimer debugMultiThreadedFFI.....etc))   "
- 	
- !

Item was removed:
- ----- Method: SqueakBSDConfig>>coreSourcesBuild (in category 'cmake buildType redirects') -----
- coreSourcesBuild
- 	"files to include from src/vm dir"
- 	^ #(
- 		'cogit.c'
- 		'cointerp.c'
- 		)!

Item was removed:
- ----- Method: SqueakBSDConfig>>coreSourcesBuildMultiThreaded (in category 'cmake buildType redirects') -----
- coreSourcesBuildMultiThreaded
- 	"files to include from src/vm dir"
- 	^ #(
- 		'cogit.c'
- 		'cointerpmt.c'
- 		)!

Item was removed:
- ----- Method: SqueakBSDConfig>>customizeVMPlugins (in category 'plugins') -----
- customizeVMPlugins
- 	|mysubset iwantonly|
- 	"trim the vmdrivers ordered collection of CMakeVMDriver subclasses to only those I want. then customize them for use on this OS/platform"
- "	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
- 	mysubset := vmplugins select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
- 	vmplugins := mysubset.
- 	self 
- 		customizeCMakeVMDisplayNull;
- 		customizeCMakeVMDisplayX11;
- 		customizeCMakeVMSoundALSA;
- 		customizeCMakeVMSoundNull."!

Item was removed:
- ----- Method: SqueakBSDConfig>>defaultExternalPlugins (in category 'plugins') -----
- defaultExternalPlugins
- " tty 2014.06.10  cut-n-paste from Cog/build.linux32x86/newspeak.cog.spur/build/plugins.ext"
- 	^ #(B3DAcceleratorPlugin 
- 		BochsIA32Plugin 
- 	      ThreadedFFIPlugin    "moduleName->SqueakFFIPrims "
- 		"FFIPlugin"                   "moduleName->SqueakFFIPrims "
- 		SqueakSSLPlugin       "moduleName->SqueakSSL" 
- 		LocalePlugin 
- 		UnixOSProcessPlugin 
- 		UUIDPlugin)
- 
- 
- "N.B. Regarding ThreadedFFIPlugin and FFIPlugin from eem:
- 
- Use  ThreadedFFIPlugin.  The FFIPlugin is obsolete (it requires assembler support files, and is non-reentrant).  This should generate in src/plugins/SqueakFFIPrims/{SqueakFFIPrims.c,ARM32FFIPlugin.c,IA32FFIPlugin.c} and you should compile only src/plugins/SqueakFFIPrims/SqueakFFIPrims.c.  src/plugins/SqueakFFIPrims/SqueakFFIPrims.c is a simple wrapper that includes ARM32FFIPlugin.c or IA32FFIPlugin.c as appropriate (and others can be added as they are developed).
- 
- 
- "!

Item was removed:
- ----- Method: SqueakBSDConfig>>defaultInternalPlugins (in category 'plugins') -----
- defaultInternalPlugins
- " N.B. THESE MAY BE WILDLY INAPPROPRIATE FOR BSD. cut-n-pasted from Linux32x86Config.
-    N.B. moduleName->XYZ means XYZ appears in the GNU-Build's plugins.int/ext. However, Smalltalk requires the class name.
-                                  XYZSmalltalkClass  moduleName->XYZ as it appears in plugins.int/ext
- "
- 	^ #(
- 	    ADPCMCodecPlugin
-     AsynchFilePlugin
-     BalloonEnginePlugin "moduleName -->B2DPlugin"
-     BitBltSimulation        "moduleName->BitBltPlugin"
-     BMPReadWriterPlugin
-     CroquetPlugin
-     DeflatePlugin               "moduleName->ZipPlugin"
-     DropPlugin
-     DSAPlugin                    "moduleName->DSAPrims"
-     FFTPlugin
-     FileCopyPlugin
-     FilePlugin
-     FloatArrayPlugin
-     FloatMathPlugin
-     IA32ABIPlugin             "moduleName->IA32ABI"
-     InflatePlugin               "moduleName->ZipPlugin"
-     JoystickTabletPlugin
-     JPEGReaderPlugin
-     JPEGReadWriter2Plugin
-     KlattSynthesizerPlugin  "moduleName->Klatt"
-     LargeIntegersPlugin      "moduleName->LargeIntegers"
-     Matrix2x3Plugin
-     MIDIPlugin
-     MiscPrimitivePlugin
-     Mpeg3Plugin
-     RePlugin
-     SecurityPlugin
-     SerialPlugin
-     SocketPlugin
-     SoundCodecPlugin        "moduleName->SoundCodecPrims"
-     SoundGenerationPlugin
-     SoundPlugin
-     StarSqueakPlugin
-     SurfacePlugin
-     VMProfileLinuxSupportPlugin)!

Item was removed:
- ----- Method: SqueakBSDConfig>>dirBuildPlatform (in category 'cmake') -----
- dirBuildPlatform
- 	"the directory for the platform. example: build.linux32x86"
- 	^self dirBSD32x86!

Item was removed:
- ----- Method: SqueakBSDConfig>>excludeFromBuild (in category 'cmake') -----
- excludeFromBuild
- 	"over-ride to exclude yourself from a build or not"
- 	^true!

Item was removed:
- ----- Method: SqueakBSDConfig>>executableName (in category 'cmake') -----
- executableName
- 	"AbstractBaseClass configurations are not meant to be executable"
- 	^ self vmIShouldNotBeHereExecutableName!

Item was removed:
- ----- Method: SqueakBSDConfig>>externalPluginsBuild (in category 'cmake buildType redirects') -----
- externalPluginsBuild
- 	^ externalPlugins ifNil: [ externalPlugins := self defaultExternalPlugins ]!

Item was removed:
- ----- Method: SqueakBSDConfig>>extraPluginSettingsBuild: (in category 'cmake buildType redirects') -----
- extraPluginSettingsBuild: aMaker
- 	aMaker isExternal 
- 		ifTrue:[aMaker templates addLast:((CMakeSet new) variable:'LIBRARY_OUTPUT_PATH' value:'${outputDir}')].
- 
- !

Item was removed:
- ----- Method: SqueakBSDConfig>>internalPluginsBuild (in category 'cmake buildType redirects') -----
- internalPluginsBuild
- 	^ internalPlugins ifNil: [ internalPlugins := self defaultInternalPlugins ]!

Item was removed:
- ----- Method: SqueakBSDConfig>>postBuildActionsBuild: (in category 'cmake buildType redirects') -----
- postBuildActionsBuild: gen
- 	"SystemNavigation default browseMethodsWhoseNamesContain: 'postBuildActionsBuild:'"!

Item was removed:
- SqueakCMakeVMMakerAbstractBuilder subclass: #SqueakBSDx86Builder
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'CMakeVMMakerSqueak-Builder'!
- 
- !SqueakBSDx86Builder commentStamp: 'tty 12/9/2014 12:42' prior: 0!
- I am a facade.
- 
- I query, and invoke CMakeVMMakerSqueak configurations.
- 
- HelpBrowser openOn: CMakeVMMakerSqueakHelp.
- !

Item was removed:
- ----- Method: SqueakBSDx86Builder>>configurationsCategory (in category 'queries') -----
- configurationsCategory
- 	^ 'CMakeVMMakerSqueak-BSD32x86'!

Item was changed:
  ----- Method: SqueakCMakeVMMakerAbstractBuilder>>availableBuildTypes (in category 'queries') -----
  availableBuildTypes
  	"abstract class pass through for concrete instance"
  	^self availableBuildTypes: (self configurationsCategory)!

Item was changed:
  ----- Method: SqueakCMakeVMMakerAbstractBuilder>>availableBuildTypes: (in category 'queries') -----
  availableBuildTypes: aCategoryName
  	"answer the CMakeVMakerSqueak configurations in a Smalltalk category"
+ 	^((self configurationDictionary:aCategoryName) keys asSortedCollection) sort!
- 	^((self configurationDictionary:aCategoryName) keys asSortedCollection) sort
- 
- !



More information about the Vm-dev mailing list