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. ! |
Free forum by Nabble | Edit this page |