VM Maker: CMakeVMMakerSqueak-tty.96.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: CMakeVMMakerSqueak-tty.96.mcz

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

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

Name: CMakeVMMakerSqueak-tty.96
Author: tty
Time: 4 December 2014, 11:54:31.236 am
UUID: f627c6b0-637e-4c5d-96ba-2e30003d3bfe
Ancestors: CMakeVMMakerSqueak-tty.95

postBuildActions converted to CMake Templates

Test modified to support it.

Now on to plugins converted to CMake templates

=============== Diff against CMakeVMMakerSqueak-tty.95 ===============

Item was added:
+ CMakeTemplate subclass: #CMakeAppendConfigHIn
+ instanceVariableNames: ''
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'CMakeVMMakerSqueak-CMakeCustomTemplates'!
+
+ !CMakeAppendConfigHIn commentStamp: 'tty 12/4/2014 11:13' prior: 0!
+ A CMakeAppendConfigHIn looks like this:
+
+ FOREACH (var ${config_vars})
+   FILE (APPEND ${CMAKE_BINARY_DIR}/config.h.in "#cmakedefine ${var} @${var}@\n")
+ ENDFOREACH (var)'.!

Item was added:
+ ----- Method: CMakeAppendConfigHIn>>initialize (in category 'initialize-release') -----
+ initialize
+ self content:'
+ FOREACH (var ${config_vars})
+   FILE (APPEND ${CMAKE_BINARY_DIR}/config.h.in "#cmakedefine ${var} @${var}@\n")
+ ENDFOREACH (var)'.
+ !

Item was added:
+ CMakeTemplate subclass: #CMakeAppendConfigStatus
+ instanceVariableNames: ''
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'CMakeVMMakerSqueak-CMakeCustomTemplates'!
+
+ !CMakeAppendConfigStatus commentStamp: 'tty 12/4/2014 11:27' prior: 0!
+ A CMakeAppendConfigStatus looks like this:
+
+ FILE (WRITE ${CMAKE_BINARY_DIR}/config.status "")
+ FOREACH (var ${tmp})
+   FILE (APPEND ${CMAKE_BINARY_DIR}/config.status "${var}=${${var}}\n")
+ ENDFOREACH ()'
+ !

Item was added:
+ ----- Method: CMakeAppendConfigStatus>>initialize (in category 'initialize-release') -----
+ initialize
+ self content:'
+ FOREACH (var ${config_vars})
+   FILE (APPEND ${CMAKE_BINARY_DIR}/config.h.in "#cmakedefine ${var} @${var}@\n")
+ ENDFOREACH (var)'.
+ !

Item was added:
+ CMakeTemplate subclass: #CMakeCommand
+ instanceVariableNames: 'command params'
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'CMakeVMMakerSqueak-CMakeTemplates'!
+
+ !CMakeCommand commentStamp: '<historical>' prior: 0!
+ A CMakeSetTemplate 's contents look like
+
+
+ CONFIG_DEFINE (SQ_VERSION)
+
+
+ CONFIG_DEFINE is a Macro Ian Piumarta wrote that looks like this:
+
+ MACRO (CONFIG_DEFINE var)
+   LIST (APPEND config_vars "${var}")
+ ENDMACRO (CONFIG_DEFINE var)
+
+ You can see it in CPlatformConfigForSqueak class utilsCMake
+
+ !

Item was added:
+ ----- Method: CMakeCommand>>command:params: (in category 'accessing') -----
+ command: cString params: pString
+ command:=cString.
+ params:=pString.
+ self content: command,'(', params ,')'
+
+ !

Item was added:
+ ----- Method: CMakeCommand>>initialize (in category 'initialize-release') -----
+ initialize
+ command:='foo'.
+ params:='bar'.
+ self content: command,'(', params ,')'!

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"
+
  output := String new writeStream.
  config templates: OrderedCollection new.
  config
  setGlobalOptions: self;    
  cmakePrefixPath;
  cmakeIncludePath;
  cmakeLibraryPath;
+ cmakeIncludeModules;
- 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 processThirdpartyLibraries.
  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}'."
- 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: CMakeVMGeneratorForSqueak>>processPlugins: (in category 'as yet unclassified') -----
  processPlugins: pluginGenerators
  | libs libDeps |
  libs := OrderedCollection new.
  libDeps := Dictionary new.
+ self break.
  pluginGenerators do: [:gen |
  gen doNotGenerate ifFalse: [
  self  puts: (gen configDotCMake at: (gen plugin name) ifAbsent:[gen configDotCmakeEmpty]).
  gen isInternal
  ifTrue: [
  libs add: gen plugin moduleName ]
  ifFalse: [
  "make main module to depend on external plugin, just to make sure it is built
  before main module built"
  self
  cmd: 'add_dependencies'
  params: config executableName, ' ' , gen plugin moduleName ].
  gen externalDependencies
  ifNotEmpty: [ :deps |
  libDeps
  at: gen plugin moduleName
  put: (deps fold: [ :a :b | a, ' ', b ]) ].
  self addSubdirectory: gen plugin moduleName ] ].
 
  self cmd: 'target_link_libraries' params:  config executableName , ' ' ,
  (libs inject: '' into: [:res :ea | res, ' ' , ea ]).
 
  libDeps keysAndValuesDo: [ :moduleName :dependencies |
  self
  cmd: 'add_dependencies'
  params: moduleName, ' ', dependencies ].  
 
  self generateExportsH: libs.!

Item was changed:
  ----- Method: CMakeVMMakerSqueakRedirectMethodsWithArgTest>>testSetPostBuildActions (in category 'as yet unclassified') -----
  testSetPostBuildActions
+ self flag:'tty'. "This test will probably fail if the oscogvm/cmake.build.xzy/language.vm.memorymanager/buildtype/ directory is not in place"
- self flag:'tty'. "Is the self shouldnt sufficient?"
  #(#SqueakMacintoshConfig #SqueakUnixConfig #SqueakWindowsConfig )
  do:[:each |
  (Smalltalk at:each)
  allSubclassesDo:[:configuration | | o buildTypes vmGenerator|
  o:= configuration basicNew.
  (o excludeFromBuild not) & (configuration isAbstractBaseClass not)
  ifTrue:[
  buildTypes:=o availableBuildTypes copyWithoutAll:#(#buildNone).
  buildTypes do:[:buildType |
  o configureForBuildType: buildType.
+ o enabledebugmessages: true.
+ o templates: OrderedCollection new.
  vmGenerator:=CMakeVMGeneratorForSqueak new.
  vmGenerator config: o.
  vmGenerator output:(String new writeStream).
  self shouldnt: [o postBuildActions: vmGenerator] raise: Error]]]].
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>postBuildActionsBuildAssert: (in category 'cmake buildType redirects') -----
  postBuildActionsBuildAssert: aMaker
  "
  SystemNavigation default browseMethodsWhoseNamesContain: 'postBuildActions'"
 
+ self postBuildActionsBuild: aMaker
- ^self postBuildActionsBuild: aMaker
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>postBuildActionsBuildAssertITimerHeartbeat: (in category 'cmake buildType redirects') -----
  postBuildActionsBuildAssertITimerHeartbeat: aMaker
  "
  SystemNavigation default browseMethodsWhoseNamesContain: 'postBuildActions'"
 
+ self postBuildActionsBuild: aMaker
- ^self postBuildActionsBuild: aMaker
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>postBuildActionsBuildDebug: (in category 'cmake buildType redirects') -----
  postBuildActionsBuildDebug: aMaker
  "
  SystemNavigation default browseMethodsWhoseNamesContain: 'postBuildActions'"
 
+ self postBuildActionsBuild: aMaker
- ^self postBuildActionsBuild: aMaker
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>postBuildActionsBuildDebugITimerHeartbeat: (in category 'cmake buildType redirects') -----
  postBuildActionsBuildDebugITimerHeartbeat: aMaker
  "
  SystemNavigation default browseMethodsWhoseNamesContain: 'postBuildActions'"
 
+ self postBuildActionsBuild: aMaker
- ^self postBuildActionsBuild: aMaker
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>postBuildActionsBuildITimerHeartbeat: (in category 'cmake buildType redirects') -----
  postBuildActionsBuildITimerHeartbeat: aMaker
  "
  SystemNavigation default browseMethodsWhoseNamesContain: 'postBuildActions'"
 
+ self postBuildActionsBuild: aMaker
- ^self postBuildActionsBuild: aMaker
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>postBuildActionsBuildMultiThreaded: (in category 'cmake buildType redirects') -----
  postBuildActionsBuildMultiThreaded: aMaker
  "
  SystemNavigation default browseMethodsWhoseNamesContain: 'postBuildActions'"
 
+ self postBuildActionsBuild: aMaker
- ^self postBuildActionsBuild: aMaker
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>postBuildActionsBuildMultiThreadedAssert: (in category 'cmake buildType redirects') -----
  postBuildActionsBuildMultiThreadedAssert: aMaker
  "
  SystemNavigation default browseMethodsWhoseNamesContain: 'postBuildActions'"
 
+ self postBuildActionsBuild: aMaker
- ^self postBuildActionsBuild: aMaker
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>postBuildActionsBuildMultiThreadedDebug: (in category 'cmake buildType redirects') -----
  postBuildActionsBuildMultiThreadedDebug: aMaker
  "
  SystemNavigation default browseMethodsWhoseNamesContain: 'postBuildActions'"
 
+ self postBuildActionsBuild: aMaker
- ^self postBuildActionsBuild: aMaker
  !

Item was changed:
  ----- Method: Linux64x86w32BitConfig>>defaultExternalPlugins (in category 'plugins') -----
  defaultExternalPlugins
+ "developing template model for plugins one at a time"
+ ^ #()
+ !
- ^ #(
- B3DAcceleratorPlugin
- ThreadedIA32FFIPlugin "SqueakFFIPrims"
- "UUIDPlugin"
- "UnixOSProcessPlugin ?? "
- JPEGReaderPlugin
- JPEGReadWriter2Plugin
- RePlugin
- InternetConfigPlugin
- )
-
- "debug"!

Item was changed:
  ----- Method: Linux64x86w32BitConfig>>postBuildActionsBuild: (in category 'cmake buildType redirects') -----
  postBuildActionsBuild: aMaker
  "SystemNavigation default browseMethodsWhoseNamesContain: 'postBuildActionsBuild:'"
+ (aMaker config enabledebugmessages)
+ ifTrue:[
+ aMaker config templates
+ addLast: ((CMakeMessage new) message: (self class name), ' postBuildActionsBuild' )
+ ].
+ aMaker config templates
+ addLast: ((CMakeMessage new) message: 'postBuildActionsBuild: aMaker' );
+ addLast:((CMakeCommand new) command:'include' params:'config.cmake');                                                 "cmake --help-command include "
+ addLast:((CMakeCommand new) command:'LIST' params:'REMOVE_DUPLICATES config_vars');                      "cmake --help-command LIST"
+ addLast:((CMakeCommand new) command:'FILE' params:'WRITE ${CMAKE_BINARY_DIR}/config.h.in ""');          "cmake --help-command FILE"
+ addLast:(CMakeAppendConfigHIn new);
+ addLast:((CMakeCommand new) command:'CONFIGURE_FILE' params:'${CMAKE_BINARY_DIR}/config.h.in ${CMAKE_BINARY_DIR}/config.h');
+ addLast:((CMakeCommand new) command:'GET_CMAKE_PROPERTY' params:'tmp VARIABLES');
+ addLast:((CMakeCommand new) command:'LIST' params:'REMOVE_ITEM tmp tmp');
+ addLast:((CMakeCommand new) command:'LIST' params:'SORT tmp');
+ addLast:((CMakeCommand new) command:'FILE' params:'WRITE ${CMAKE_BINARY_DIR}/config.h.status ""');
+ addLast:(CMakeAppendConfigStatus new).
- aMaker message: 'postBuildActionsBuild: aMaker'.
- aMaker  include: 'config.cmake'.
- "# CONFIGURE_PLUGINS"
- aMaker cmd: 'LIST' params:'REMOVE_DUPLICATES config_vars'.
- aMaker cmd: 'FILE' params: 'WRITE ${CMAKE_BINARY_DIR}/config.h.in ""'.
- aMaker puts:'
- FOREACH (var ${config_vars})
-   FILE (APPEND ${CMAKE_BINARY_DIR}/config.h.in "#cmakedefine ${var} @${var}@\n")
- ENDFOREACH (var)'.
- aMaker cmd: 'CONFIGURE_FILE' params:'${CMAKE_BINARY_DIR}/config.h.in ${CMAKE_BINARY_DIR}/config.h'.
- "# INCLUDE(build.cmake) <--this tells me the config needs to be up higher
- # BUILD PLUGINS
- #ADD_SUBDIRECTORY (${unix}/npsqueak)
- #SET (cmake ${unix}/../../cmake)
- #IF (EXISTS ${cmake}/Packages.cmake)
- #  INCLUDE (${cmake}/Packages.cmake)
- #ENDIF ()
- "
- aMaker cmd: 'GET_CMAKE_PROPERTY' params: 'tmp VARIABLES'.
- aMaker cmd: 'LIST' params: 'REMOVE_ITEM tmp tmp'.
- aMaker cmd: 'LIST' params: 'SORT tmp'.
- aMaker cmd: 'FILE' params: 'WRITE ${CMAKE_BINARY_DIR}/config.h.status ""'.
- aMaker puts:'
- FILE (WRITE ${CMAKE_BINARY_DIR}/config.status "")
- FOREACH (var ${tmp})
-   FILE (APPEND ${CMAKE_BINARY_DIR}/config.status "${var}=${${var}}\n")
- ENDFOREACH ()'
 
  !

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

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

Item was changed:
  ----- Method: SqueakCMThirdpartyLibrary>>generateFor: (in category 'as yet unclassified') -----
  generateFor: aVMGenerator
 
  | libDir stream contents |
+ self break.
-
  vmGen := aVMGenerator.
 
  gen := CMakeGenerator new
  output: (String new writeStream).
 
  libDir := (aVMGenerator thirdpartyDir / self canonicalName) assureExistence.
 
  stream := String new writeStream.
 
  self generate.
 
  stream nextPutAll: (vmGen config fixLineEndsOf: gen output contents).
 
  contents := stream contents.
 
  (self isFile: (libDir  / gen outputFileName) fullName hasContents: contents) ifFalse: [
  "contents changed, update the file. Because fucking cmake will force rebuild everything if we change its modification date
  without changing its contents"
  (FileStream forceNewFileNamed: (libDir  / gen outputFileName) pathName) nextPutAll: contents; close.
  ].
 
 
  vmGen addSubdirectory:  vmGen thirdpartyDirName , '/' , self canonicalName.
  self defineGlobalTargets.
  !