Skip to content
This repository has been archived by the owner on Mar 26, 2023. It is now read-only.

Commit

Permalink
Fix problems with $upgradeDir and $imageDir. The ruby files will not be
Browse files Browse the repository at this point in the history
shipped in a smalltalk build, so we need to read them from $imageRubyDir
and/or $imageDir instead.  Clean up the Rakefile a bit too.
  • Loading branch information
pbm committed Oct 4, 2011
1 parent e8d1806 commit ab13bc7
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 113 deletions.
6 changes: 3 additions & 3 deletions build/filein.ruby.conf.erb
Expand Up @@ -18,8 +18,8 @@ STN_HALT_ON_FATAL_ERR = FALSE;

# The following added when moving to pure ruby build
# In svn, these params were added by fileinruby.pl
DBF_EXTENT_NAMES = <%= options[:filein_dir] %>/extent0.ruby.dbf;
DBF_SCRATCH_DIR = <%= options[:filein_dir] %>/;
STN_TRAN_LOG_DIRECTORIES = <%= options[:filein_dir] %>/, <%= options[:filein_dir] %>/;
DBF_EXTENT_NAMES = <%= FILEIN_DIR %>/extent0.ruby.dbf;
DBF_SCRATCH_DIR = <%= FILEIN_DIR %>/;
STN_TRAN_LOG_DIRECTORIES = <%= FILEIN_DIR %>/, <%= FILEIN_DIR %>/;
SHR_PAGE_CACHE_SIZE_KB = 200000;
KEYFILE = <%= KEYFILE %>;
80 changes: 30 additions & 50 deletions rakelib/build.rake
Expand Up @@ -33,33 +33,26 @@
# + remove .git*
# + keyfile


namespace :build do
require 'erb'
require 'logger'

# Assume MAGLEV_HOME is already set.

# Note: we only do the fast versions of the build for MagLev (no slow vm
# available), so the task names do not include "fast" and "slow".
IMAGE_RUBY_DIR = File.join(MAGLEV_HOME, 'src', 'smalltalk', 'ruby')
BUILD_DIR = File.join(MAGLEV_HOME, 'build')
FILEIN_DIR = File.join(MAGLEV_HOME, "fileintmp") # TODO: add $$ to name

BASE_DIR = File.expand_path("..", File.dirname(__FILE__))
IMAGE_DIR = File.join(BASE_DIR, 'src', 'smalltalk')
IMAGE_RUBY_DIR = File.join(IMAGE_DIR, 'ruby')
BUILD_DIR = File.join(BASE_DIR, 'build')
KEYFILE = File.join(BASE_DIR, 'etc', 'maglev.demo.key')
ST_IMAGE = File.join(GEMSTONE, 'bin', 'extent0.dbf')
KEYFILE = File.join(MAGLEV_HOME, 'etc', 'maglev.demo.key')
VERBOSE = true
FILEIN_DIR = File.join(MAGLEV_HOME, "fileintmp") # TODO: add $$ to name

task :check_files do
[BASE_DIR, IMAGE_DIR, IMAGE_RUBY_DIR, BUILD_DIR, KEYFILE, ST_IMAGE].each do |f|
raise "Can't find #{f}" unless File.exist? f
task :check_dev_env do
[MAGLEV_HOME, GEMSTONE, IMAGE_RUBY_DIR, BUILD_DIR, FILEIN_DIR].each do |var|
raise "#{var} is not a directory" unless File.directory? var
end
raise "GEMSTONE not set" unless defined?(GEMSTONE)
raise "GEMSTONE '#{GEMSTONE}' is not a directory" unless File.directory? GEMSTONE
end

task :temp_dir do
puts "Creating new FILEIN_DIR #{FILEIN_DIR}"
rm_rf FILEIN_DIR
mkdir FILEIN_DIR
end
Expand All @@ -68,17 +61,22 @@ namespace :build do
# upgradeDir is also needed by the filein topaz scripts. When a
# customers does a 'upgrade' it will be set to $GEMSTONE/upgrade. For
# a filein it will be set to the imageDir.
ENV["upgradeDir"] = IMAGE_DIR
ENV["imageDir"] = IMAGE_DIR
ENV["dbfDir"] = options[:filein_dir]
#
# The non-traditional camel case env variable names come from the
# Smalltalk build. We do not change them because we want to remain as
# compatible as possible with the original SVN source.
ENV["upgradeDir"] = File.join(GEMSTONE, 'upgrade')
ENV["imageDir"] = File.join(MAGLEV_HOME, 'src', 'smalltalk')
ENV["dbfDir"] = FILEIN_DIR
ENV["imageRubyDir"] = File.join(MAGLEV_HOME, 'src', 'smalltalk', 'ruby')
ENV["GS_DEBUG_COMPILE_TRACE"] = "1"
ENV['STONENAME'] = options[:stone_name]
ENV['GEMSTONE_SYS_CONF'] = options[:stone_conf]
ENV["GEMSTONE_EXE_CONF"] = options[:gem_conf]
end

desc "Create a fresh ruby image"
task :image => [:check_files, :temp_dir] do
task :image => [:check_dev_env, :temp_dir] do
build_log_name = File.join(FILEIN_DIR, 'build_image.log')
$logger = Logger.new(build_log_name)
$logger.level = Logger::DEBUG
Expand All @@ -87,7 +85,6 @@ namespace :build do
log("build:image", "Begin task")

options = {
:filein_dir => FILEIN_DIR,
:stone_name => "fileinruby#{$$}stone",
:stone_conf => File.join(FILEIN_DIR, 'filein.ruby.conf'),
:stone_log => File.join(FILEIN_DIR, 'stone.log'),
Expand All @@ -104,7 +101,7 @@ namespace :build do

# Pass one includes a shrink stone, so we only run it
# and logout to ensure image written ok
Dir.chdir options[:filein_dir] do
Dir.chdir FILEIN_DIR do
begin
# Pass one runs the filein of ruby base code,
# then shrinks the image. We stop at that
Expand All @@ -128,30 +125,6 @@ namespace :build do
# TODO: Report Success/Failure
end

task :pbm => [:check_files, :temp_dir] do
build_log_name = File.join(FILEIN_DIR, 'build_image.log')
$logger = Logger.new(build_log_name)
$logger.level = Logger::DEBUG

puts "Logging to: #{build_log_name}"
log("build:image", "Begin task")

options = {
:filein_dir => FILEIN_DIR,
:stone_name => "fileinruby#{$$}stone",
:stone_conf => File.join(FILEIN_DIR, 'filein.ruby.conf'),
:stone_log => File.join(FILEIN_DIR, 'stone.log'),
:gem_conf => File.join(FILEIN_DIR, 'fileingem.ruby.conf'),
:gem_bin => File.join(GEMSTONE, 'bin'),
:mcz_version => 'TimFelgentreff.1307', # TODO: Parameterize this: read out of file/ENV?
:mcz_dir => IMAGE_RUBY_DIR,
}
options.each_pair { |k,v| log("build:image", "options[#{k.inspect}] = #{v}") }

setup_env options
create_filein_stone_files options
end

# equivalent to fileinruby.pl, but only supports fast
#
# fileinruby creates a MagLev ruby image from a virgin Smalltalk image.
Expand All @@ -173,12 +146,12 @@ namespace :build do
# which we build the ruby image.
#
def fileinruby(options)
outfile = "#{options[:filein_dir]}/fileinruby.out"
outfile = "#{FILEIN_DIR}/fileinruby.out"
safe_run("fileinruby", outfile) do
run_topaz(<<-EOS, options)
output push #{outfile} only
set gemstone #{options[:stone_name]}
input #{IMAGE_DIR}/fileinruby.topaz
input $imageDir/fileinruby.topaz
output pop
exit
EOS
Expand Down Expand Up @@ -265,11 +238,18 @@ exit

def create_filein_stone_files(options)
log("create_filein_stone_files", "Begin")
Dir.chdir(options[:filein_dir]) do
cp ST_IMAGE, 'extent0.ruby.dbf'
Dir.chdir(FILEIN_DIR) do

cp File.join(GEMSTONE, 'bin', 'extent0.dbf'), 'extent0.ruby.dbf'
chmod 0770,'extent0.ruby.dbf'
cp_template("#{BUILD_DIR}/filein.ruby.conf.erb", options[:stone_conf], options)
cp "#{BUILD_DIR}/fileingem.ruby.conf", options[:gem_conf]

# Workaround for bug in Smalltalk build. patchMaster30.gs should be shipped
# with the VM, but currently isn't. Until bug is fixed, we'll copy the file
# into place here:
log("create_filein_stone_files", "copy patchMaster30.gs to $upgradeDir", Logger::WARN)
cp File.join(MAGLEV_HOME, 'src', 'smalltalk', 'patchMaster30.gs'), File.join(GEMSTONE, 'upgrade')
end
log("create_filein_stone_files", "End")
end
Expand Down
112 changes: 56 additions & 56 deletions src/smalltalk/baseruby.gs
Expand Up @@ -25,69 +25,69 @@ Stream installLegacyStreamImplementation.
true
%

input $upgradeDir/ruby/GsCompilerClasses.gs
input $imageRubyDir/GsCompilerClasses.gs

input $upgradeDir/ruby/Behavior_ruby.gs
input $imageRubyDir/Behavior_ruby.gs

! class definitions
input $upgradeDir/ruby/Classes_ruby.gs
input $imageRubyDir/Classes_ruby.gs

input $upgradeDir/ruby/Class_ruby.gs
input $upgradeDir/ruby/Metaclass3_ruby.gs
input $upgradeDir/ruby/Capi_ruby.gs
input $upgradeDir/ruby/ObsoleteMetaclass_ruby.gs
input $upgradeDir/ruby/UnorderedCollection_ruby.gs
input $imageRubyDir/Class_ruby.gs
input $imageRubyDir/Metaclass3_ruby.gs
input $imageRubyDir/Capi_ruby.gs
input $imageRubyDir/ObsoleteMetaclass_ruby.gs
input $imageRubyDir/UnorderedCollection_ruby.gs

! methods for GsCompilerIRNode classes
input $upgradeDir/ruby/GsCompilerIRNode.gs
input $upgradeDir/ruby/GsNMethod_ruby.gs
input $imageRubyDir/GsCompilerIRNode.gs
input $imageRubyDir/GsNMethod_ruby.gs

! Smalltalk env 0 and env1 methods for other base classes
input $upgradeDir/ruby/Association_ruby.gs
input $upgradeDir/ruby/Array_ruby.gs
input $upgradeDir/ruby/CharacterCollection_ruby.gs
input $upgradeDir/ruby/ExecBlock_ruby.gs
input $upgradeDir/ruby/Exception_ruby.gs
input $upgradeDir/ruby/IO_ruby.gs
input $upgradeDir/ruby/GsFile_ruby.gs
input $upgradeDir/ruby/GsProcess_ruby.gs
input $upgradeDir/ruby/GsSocket_ruby.gs
input $upgradeDir/ruby/Numeric.gs
input $upgradeDir/ruby/MatchData.gs
input $upgradeDir/ruby/NilTF.gs
input $upgradeDir/ruby/Object_ruby.gs
input $upgradeDir/ruby/ProcessorScheduler_ruby.gs
input $upgradeDir/ruby/Repository_ruby.gs
input $upgradeDir/ruby/Symbol_ruby.gs
input $upgradeDir/ruby/SymbolAssociation_ruby.gs
input $upgradeDir/ruby/String_ruby.gs
input $upgradeDir/ruby/System_ruby.gs
input $upgradeDir/ruby/Range_ruby.gs
input $upgradeDir/ruby/Regexp.gs
input $upgradeDir/ruby/RubyConstantRef.gs
input $upgradeDir/ruby/RubyDirectory.gs
input $upgradeDir/ruby/RubyEnv.gs
input $upgradeDir/ruby/RubyProc.gs
input $upgradeDir/ruby/RubyThreadGroup.gs
input $upgradeDir/ruby/RubySocket.gs
input $upgradeDir/ruby/IPSocket.gs
input $upgradeDir/ruby/TCPSocket.gs
input $upgradeDir/ruby/TCPServer.gs
input $upgradeDir/ruby/UDPSocket.gs
input $upgradeDir/ruby/UNIXSocket.gs
input $upgradeDir/ruby/UNIXServer.gs
input $upgradeDir/ruby/TransientShortArray_ruby.gs
input $upgradeDir/ruby/RubyHash.gs
input $upgradeDir/ruby/RubyIdentityHash.gs
input $imageRubyDir/Association_ruby.gs
input $imageRubyDir/Array_ruby.gs
input $imageRubyDir/CharacterCollection_ruby.gs
input $imageRubyDir/ExecBlock_ruby.gs
input $imageRubyDir/Exception_ruby.gs
input $imageRubyDir/IO_ruby.gs
input $imageRubyDir/GsFile_ruby.gs
input $imageRubyDir/GsProcess_ruby.gs
input $imageRubyDir/GsSocket_ruby.gs
input $imageRubyDir/Numeric.gs
input $imageRubyDir/MatchData.gs
input $imageRubyDir/NilTF.gs
input $imageRubyDir/Object_ruby.gs
input $imageRubyDir/ProcessorScheduler_ruby.gs
input $imageRubyDir/Repository_ruby.gs
input $imageRubyDir/Symbol_ruby.gs
input $imageRubyDir/SymbolAssociation_ruby.gs
input $imageRubyDir/String_ruby.gs
input $imageRubyDir/System_ruby.gs
input $imageRubyDir/Range_ruby.gs
input $imageRubyDir/Regexp.gs
input $imageRubyDir/RubyConstantRef.gs
input $imageRubyDir/RubyDirectory.gs
input $imageRubyDir/RubyEnv.gs
input $imageRubyDir/RubyProc.gs
input $imageRubyDir/RubyThreadGroup.gs
input $imageRubyDir/RubySocket.gs
input $imageRubyDir/IPSocket.gs
input $imageRubyDir/TCPSocket.gs
input $imageRubyDir/TCPServer.gs
input $imageRubyDir/UDPSocket.gs
input $imageRubyDir/UNIXSocket.gs
input $imageRubyDir/UNIXServer.gs
input $imageRubyDir/TransientShortArray_ruby.gs
input $imageRubyDir/RubyHash.gs
input $imageRubyDir/RubyIdentityHash.gs
! DateTime_ruby.gs no longer used
input $upgradeDir/ruby/VariableContext_ruby.gs
input $upgradeDir/ruby/Module_ruby.gs
input $upgradeDir/ruby/Kernel.gs
input $upgradeDir/ruby/RubySignal.gs
input $upgradeDir/ruby/RubyTime.gs
input $upgradeDir/ruby/ProfMonitorTree_ruby.gs
input $upgradeDir/ruby/ProfMonitorEntry_ruby.gs
input $upgradeDir/ruby/GsObjectSecurityPolicies.gs
input $imageRubyDir/VariableContext_ruby.gs
input $imageRubyDir/Module_ruby.gs
input $imageRubyDir/Kernel.gs
input $imageRubyDir/RubySignal.gs
input $imageRubyDir/RubyTime.gs
input $imageRubyDir/ProfMonitorTree_ruby.gs
input $imageRubyDir/ProfMonitorEntry_ruby.gs
input $imageRubyDir/GsObjectSecurityPolicies.gs

expectvalue true
run
Expand All @@ -108,7 +108,7 @@ logout
set user DataCurator pass swordfish
login

input $upgradeDir/ruby/GsCompilerClasses.gs
input $imageRubyDir/GsCompilerClasses.gs

! Arrange to load Metacello/Monticello/OmniBrowser/Release support
run
Expand All @@ -130,7 +130,7 @@ logout

set user SystemUser pass swordfish
login
input $upgradeDir/ruby/pre_prim_methods.gs
input $imageRubyDir/pre_prim_methods.gs
run
{ Object .
Behavior .
Expand Down
4 changes: 2 additions & 2 deletions src/smalltalk/fileinruby.topaz
Expand Up @@ -18,15 +18,15 @@ errorcount

! baseruby.gs does login/logout/commits
iferr 1 exit 2
input $upgradeDir/baseruby.gs
input $imageDir/baseruby.gs
errorcount

! now cluster and audit, and shrink
set user SystemUser pass swordfish
login
! input $upgradeDir/clusterimage.gs ! skip for now, do not checkin

input $upgradeDir/auditrubyimage.gs
input $imageDir/auditrubyimage.gs
errorcount

iferr 1 where
Expand Down
2 changes: 1 addition & 1 deletion src/smalltalk/ruby/RubyConstantRef.gs
Expand Up @@ -46,7 +46,7 @@ self _primitiveFailed: #setGlobalAssoc_noMarkDirty: args: { anAssoc }
%

! resolveInContext: in separate file
input $upgradeDir/ruby/RubyConstantRef_resolv.gs
input $imageRubyDir/RubyConstantRef_resolv.gs

method:
resolveGlobalVarAssoc
Expand Down
2 changes: 1 addition & 1 deletion src/smalltalk/ruby/loadParser.topaz
Expand Up @@ -6,7 +6,7 @@ run
| repo aName ver |
repo := MCDirectoryRepository new directory:
(FileDirectory on:
(System gemEnvironmentVariable: 'upgradeDir') , '/ruby' ) .
(System gemEnvironmentVariable: 'imageDir') , '/ruby' ) .
aName := 'btb-Java-avi.191.mcz' .
ver := repo loadVersionFromFileNamed: aName .
ver class == MCVersion ifFalse:[ aName error:'not found in repos' ].
Expand Down

0 comments on commit ab13bc7

Please sign in to comment.