[Vm-dev] VM Maker: CMakeVMMakerSqueak-tty.102.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Dec 8 18:52:49 UTC 2014
Timothy M uploaded a new version of CMakeVMMakerSqueak to project VM Maker:
http://source.squeak.org/VMMaker/CMakeVMMakerSqueak-tty.102.mcz
==================== Summary ====================
Name: CMakeVMMakerSqueak-tty.102
Author: tty
Time: 8 December 2014, 1:53:08.458 pm
UUID: 19f526f3-9c73-49d3-a515-73e5f653c217
Ancestors: CMakeVMMakerSqueak-tty.101
'generate' methods are removed from CMakeVMMakerSqueak generator classes in favor of generateByTemplate methods.
EXCEPT FOR SqueakCMThirdpartyLibrary generateFor: aVMGenerator which I will have to figure out when I use a 3'rd party library. I have flagged that method.
This radically diverges from the Pharo approach but I have strong reasons for it. as described in the class comment for
CMakeTemplate
The SqueakCMakeVMMakerAbstractBuilder generateSources call is broken at the pharo level in
CPlaformConfig>>generateSources at 'maker cogitClass: cg
Next up
1. build a pure 32 bit linux config and submit it
2. clean up the Developer Help while doing 1 such that others can build their own configs systematically.
3. QA the image build scripts.
4. investigate pharo issue
5. solve the 3'rd party library issue.
=============== Diff against CMakeVMMakerSqueak-tty.101 ===============
Item was removed:
- ----- Method: CMakePluginGeneratorForSqueak>>generate (in category 'squeak compatibility') -----
- generate
- | name |
-
- output := String new writeStream.
-
- name := plugin moduleName.
- #( vmGen config setGlobalOptions: self.
- self
- printHeader;
- project: name;
- "include directories generated for build"
- include: '../directories.cmake'.
- self set: 'CMAKE_CONFIGURATION_TYPES' to: 'Release'.
- ).
-
- self message: (internal ifTrue: [ 'Adding internal plugin: '] ifFalse: ['Adding external plugin: ']) , name.
- self
- set: #pluginName toString: name;
- set: #pluginSrc toString: '${srcPluginsDir}/', name;
- set: #pluginCross toString: '${crossDir}/plugins/', name;
- set: #pluginPlatform toString: '${targetPlatform}/plugins/', name.
-
- self set: #LINKLIBS to: ''. "clear LINKLIBS variable"
-
- internal ifTrue: [ self puts: 'add_definitions(-DSQUEAK_BUILTIN_PLUGIN)'].
-
- self addSources: { name , '.c' } prefixed: '${pluginSrc}/'.
- self includeDirectories: '${pluginSrc} ${pluginCross} ${targetPlatform}/plugins/${pluginName}'. " default include directories for plugin "
- "self addDefinitions: vmGen config compilerFlags." "Not needed because there are already there (inherited from main configuration)"
- " perform config's configureXYZ: message to apply per-plugin custom rules, if any "
-
- vmGen config configurePlugin: plugin with: self.
- extraRules ifNotNil: [ extraRules value: self ].
- " generate a static lib for internal plugin, or shared for external"
- internal
- ifTrue: [ self cmd: 'add_library' params: name , ' STATIC ${sources}'.]
- ifFalse: [self cmd: 'add_library' params: name , ' SHARED ${sources}'.].
- vmGen config extraPluginSettings: self.
- self isExternal
- ifTrue: [ self cmd: 'target_link_libraries' params: self moduleName , ' ${LINKLIBS}'.].
-
- self cmd: 'set_property' params: 'TARGET ', name, ' PROPERTY LINK_FLAGS "${linkFlags}"'. " see senders of #linkFlags "
- self puts: 'IF (',self moduleName , '_dependencies)'. "set dependencies"
- self cmd: 'add_dependencies' params: name , ' ${', self moduleName , '_dependencies}'.
- self puts: 'ENDIF (',self moduleName , '_dependencies)'.
- self saveFile.
-
-
- !
Item was removed:
- ----- Method: CMakeVMGeneratorForSqueak class>>generate: (in category 'as yet unclassified') -----
- generate: aConfigOrClass
- ^self new
- generate: aConfigOrClass;
- yourself !
Item was removed:
- ----- Method: CMakeVMGeneratorForSqueak>>generate (in category 'code generation') -----
- generate
- | intPlugins extPlugins |
- output := String new writeStream.
- config setGlobalOptions: self.
-
- self
- printHeader;
- project: config executableName.
-
- config setGlobalOptionsAfterDetermineSystem: self.
- "I NEED COMPILER FLAGS, DEFINITIONS, LINKS, INCLUDES HERE"
- config setupDirectories: self.
-
- self message: '${CMAKE_MODULE_PATH}'.
- self set: 'CMAKE_CONFIGURATION_TYPES' to: 'Release'.
-
- config preferredIncludes do: [ :each | self includeDirectories: each ].
- self includeDirectories: self includeDirs.
- config standardIncludes do: [:each | self includeDirectories: each ].
-
- self addDefinitions: config compilerFlags. "<--- this needs to be definitions, not compiler flags"
-
- config extraVMSettings: self.
-
- self puts: 'add_executable(' , config executableName, ' ', config executableType, ' ' , self sources , ')'.
- intPlugins := self generatePluginConfigs: config internalPlugins internal: true.
- extPlugins := self generatePluginConfigs: config externalPlugins internal: false.
-
- self processThirdpartyLibraries.
-
- self processPlugins: intPlugins, extPlugins.
-
- config setExtraTargetProperties: self.
-
- self cmd: 'target_link_libraries'
- params: self moduleName , ' ${LINKLIBS}'.
-
- config postBuildActions: self.
-
- self saveFile.
- self generateBuildScript.!
Item was removed:
- ----- Method: CMakeVMGeneratorForSqueak>>generate: (in category 'as yet unclassified') -----
- generate: aConfigOrClass
-
- config := aConfigOrClass isBehavior ifTrue: [ aConfigOrClass new ] ifFalse: [aConfigOrClass].
- ^ self generate!
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: CMakeVMGeneratorForSqueak>>processThirdpartyLibraries (in category 'as yet unclassified') -----
processThirdpartyLibraries
+ self flag:'tty'. "This generate call must be transformed to generateByTemplateFor:"
-
config thirdpartyLibs do: [:each |
each generateFor: self ]
!
Item was changed:
----- Method: CPlatformConfigForSqueak>>configureByTemplatePlugin:with: (in category 'source generation') -----
configureByTemplatePlugin: aPlugin with: generator
+
- "by-pass the pharo's CPlatformConf>>configurePlugin: with: so that I can use templates"
^ self perform: ( 'configureByTemplate' , aPlugin name , ':' ) asSymbol with: generator.
!
Item was removed:
- ----- Method: CPlatformConfigForSqueak>>generate (in category 'source generation') -----
- generate
- self
- generatePluginsList;
- generateLicense;
- generateUtilsCmake;
- generatePluginsCmake;
- generateVmBuildCmake;
- generateVmConfigCmake;
- generateVmConfigIn;
- generateTestDoubleWordAlignmentC;
- generateTestDoubleWordOrderC;
- generateTestLanginfoCodesetC.
- ^ CMakeVMGeneratorForSqueak generate: self !
Item was changed:
----- Method: SqueakCMThirdpartyLibrary>>generateFor: (in category 'as yet unclassified') -----
generateFor: aVMGenerator
| libDir stream contents |
+ self flag:'tty'. "This l must be transformed to generateByTemplateFor: and the output converted to CMakeTemplates"
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.
!
Item was removed:
- ----- Method: SqueakCMakeVMMakerAbstractBuilder class>>generate (in category 'building') -----
- generate
- default ifNil:[default:= self new].
- ^default generate!
Item was removed:
- ----- Method: SqueakCMakeVMMakerAbstractBuilder>>generate (in category 'building') -----
- generate
- (config isKindOf: CPlatformConfig)
- ifTrue:[config generate]
- !
Item was changed:
----- Method: SqueakCMakeVMMakerAbstractBuilder>>generateSources (in category 'building') -----
generateSources
+ self flag: 'tty'. "This used to work, but it looks like CPlaformConfig>>generateSources breaks at 'maker cogitClass: cg'"
+ self error:'Pharo CPlatformConfig is broken. Will fix later'.
(config isKindOf: CPlatformConfig)
ifTrue:[config generateSources]
!
Item was removed:
- ----- Method: SqueakIOSConfig>>configurePlugin:with: (in category 'plugin extra rules') -----
- configurePlugin: aPlugin with: generator
-
- generator isExternal ifTrue: [
- " set output directory for dynamic library to Resources subdir in .app bundle location "
- generator
- set: 'CMAKE_LIBRARY_OUTPUT_DIRECTORY'
- toString: '${externalModulesDir}'
- ].
- ^ super configurePlugin: aPlugin with: generator
- !
Item was removed:
- ----- Method: SqueakMacOSXPowerPCConfig>>configurePlugin:with: (in category 'plugin extra rules') -----
- configurePlugin: aPlugin with: generator
-
- generator isExternal ifTrue: [
- " set output directory for dynamic library to Resources subdir in .app bundle location "
- generator
- set: 'CMAKE_LIBRARY_OUTPUT_DIRECTORY'
- toString: '${externalModulesDir}'
- ].
- ^ super configurePlugin: aPlugin with: generator
- !
More information about the Vm-dev
mailing list