[macruby-changes] [2806] MacRuby/trunk/bin/rubyc

source_changes at macosforge.org source_changes at macosforge.org
Wed Oct 14 18:16:34 PDT 2009


Revision: 2806
          http://trac.macosforge.org/projects/ruby/changeset/2806
Author:   lsansonetti at apple.com
Date:     2009-10-14 18:16:31 -0700 (Wed, 14 Oct 2009)
Log Message:
-----------
introduced --static that can be used to build a static/standalone executable, now by default we don't link against libmacruby-static anymore

Modified Paths:
--------------
    MacRuby/trunk/bin/rubyc

Modified: MacRuby/trunk/bin/rubyc
===================================================================
--- MacRuby/trunk/bin/rubyc	2009-10-15 00:58:49 UTC (rev 2805)
+++ MacRuby/trunk/bin/rubyc	2009-10-15 01:16:31 UTC (rev 2806)
@@ -22,8 +22,9 @@
       opts.banner = "Usage: #{NAME} [options] file..."
       opts.on('-c', 'Compile and assemble, but do not link') { @dont_link = true }
       opts.on('-o <file>', 'Place the output into <file>') { |output| @output = output }
-      opts.on('--mode [MODE]', "Select compilation mode (normal or full)") { |mode| @mode = mode.intern }
+      #opts.on('--mode [MODE]', "Select compilation mode (normal or full)") { |mode| @mode = mode.intern }
       #opts.on('--framework <framework>', 'Link against <framework>') { |path| @frameworks << path }
+      opts.on('--static', "Create a standalone static executable") { @static = true } 
       opts.on('-C', 'Compile, assemble and link a loadable object file') { @bundle = true }
       opts.on('-a', '--arch <ARCH>', 'Compile for specified CPU architecture') { |arch| @archs << arch }
       opts.on('-v', '--version', 'Display the version') { puts RUBY_DESCRIPTION; exit 1 }
@@ -61,6 +62,7 @@
       die "full compilation mode is not implemented yet!"
     end
     if @dont_link or @bundle
+      die "cannot specify --static when not building an executable" if @static
       die "cannot specify -c and -C at the same time" if @bundle and @dont_link
       if @files.size > 1 and @output
         die "cannot specify -o with -c or -C and multiple input files"
@@ -195,17 +197,22 @@
 EOS
 
     # Compile main file.
-    main = gen_tmpfile('main', 'cpp')
+    main = gen_tmpfile('main', 'mm')
     File.open(main, 'w') { |io| io.write(main_txt) }
     main_o = gen_tmpfile('main', 'o')
     archf = @archs.map { |x| "-arch #{x}" }.join(' ')
-    execute("#{@gcxx} #{main} -c #{archf} -o #{main_o}")
+    execute("#{@gcxx} #{main} -c #{archf} -o #{main_o} -fobjc-gc")
     objs.unshift(main_o)
 
     # Link all objects into executable.
-    line = "#{@gcxx} -o #{output} -L#{RbConfig::CONFIG['libdir']} -lmacruby-static #{archf} -framework Foundation -lobjc -lauto -I/usr/include/libxml2 -lxml2 "
+    linkf = @static ? 
+      "-L#{RbConfig::CONFIG['libdir']} -lmacruby-static -framework Foundation -lobjc -lauto -lxml2" :
+      "-framework MacRuby -lobjc"
+    line = "#{@gcxx} -o #{output} #{archf} #{linkf} "
     @frameworks.each { |f| line << "-framework #{f} " }
-    line << execute("llvm-config --ldflags --libs core jit nativecodegen interpreter bitwriter").gsub(/\n/, '')
+    if @static
+      line << execute("llvm-config --ldflags --libs core jit nativecodegen interpreter bitwriter").gsub(/\n/, '')
+    end
     objs.each { |o| line << " #{o}" }
     execute(line)
   end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20091014/52884025/attachment.html>


More information about the macruby-changes mailing list