summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro Matz Matsumoto <[email protected]>2013-01-24 16:48:38 +0900
committerYukihiro Matz Matsumoto <[email protected]>2013-01-24 16:48:38 +0900
commit5ef8aa765faf1981d35a47dfb27110d0ad1397e6 (patch)
treea5714e57b10dec9c3e9e2c4f2ced40f86904e77d
parentcc967ebfb6977c7ff39d5172719da5cebe2b9667 (diff)
parentdd680b6e67ab3da85e32bb7cf42b5a20822b27bc (diff)
downloadmruby-5ef8aa765faf1981d35a47dfb27110d0ad1397e6.tar.gz
mruby-5ef8aa765faf1981d35a47dfb27110d0ad1397e6.zip
resolve conflict
-rw-r--r--build_config.rb2
-rw-r--r--doc/compile/README.md2
-rw-r--r--tasks/libmruby.rake3
-rw-r--r--tasks/mrbgem_spec.rake4
-rw-r--r--tasks/mruby_build_commands.rake26
-rw-r--r--tasks/toolchains/gcc.rake2
-rw-r--r--tasks/toolchains/vs2012.rake2
-rw-r--r--test/mrbtest.rake6
-rw-r--r--tools/mirb/mirb.rake4
-rw-r--r--tools/mruby/mruby.rake4
10 files changed, 38 insertions, 17 deletions
diff --git a/build_config.rb b/build_config.rb
index 1c177fdac..16826e478 100644
--- a/build_config.rb
+++ b/build_config.rb
@@ -29,7 +29,9 @@ MRuby::Build.new do |conf|
# conf.linker do |linker|
# linker.command = ENV['LD'] || 'gcc'
# linker.flags = [ENV['LDFLAGS'] || []]
+ # linker.flags_before_libraries = []
# linker.libraries = %w()
+ # linker.flags_after_libraries = []
# linker.library_paths = []
# linker.option_library = '-l%s'
# linker.option_library_path = '-L%s'
diff --git a/doc/compile/README.md b/doc/compile/README.md
index a1c915a0e..ec995bd74 100644
--- a/doc/compile/README.md
+++ b/doc/compile/README.md
@@ -118,7 +118,9 @@ Configuration of the Linker binary, flags and library paths.
conf.linker do |linker|
linker.command = ...
linker.flags = ...
+ linker.flags_before_libraries = ...
linker.libraries = ...
+ linker.flags_after_libraries = ...
linker.library_paths = ....
linker.option_library = ...
linker.option_library_path = ...
diff --git a/tasks/libmruby.rake b/tasks/libmruby.rake
index 6f84937fd..4cfebacaf 100644
--- a/tasks/libmruby.rake
+++ b/tasks/libmruby.rake
@@ -8,6 +8,9 @@ MRuby.each_target do
gem_library_paths = gems.map { |g| g.linker.library_paths }
f.puts 'MRUBY_LDFLAGS = "%s"' % linker.all_flags(gem_library_paths, gem_flags).gsub('"', '\\"')
+ gem_flags_before_libraries = gems.map { |g| g.linker.flags_before_libraries }
+ f.puts 'MRUBY_LDFLAGS_BEFORE_LIBS = "%s"' % [linker.flags_before_libraries, gem_flags_before_libraries].flatten.join(' ').gsub('"', '\\"')
+
gem_libraries = gems.map { |g| g.linker.libraries }
f.puts 'MRUBY_LIBS = "%s"' % linker.library_flags(gem_libraries).gsub('"', '\\"')
end
diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake
index 5af721b0d..0e228629b 100644
--- a/tasks/mrbgem_spec.rake
+++ b/tasks/mrbgem_spec.rake
@@ -6,7 +6,7 @@ module MRuby
class << self
attr_accessor :current
end
- LinkerConfig = Struct.new(:libraries, :library_paths, :flags)
+ LinkerConfig = Struct.new(:libraries, :library_paths, :flags, :flags_before_libraries, :flags_after_libraries)
class Specification
include Rake::DSL
@@ -43,7 +43,7 @@ module MRuby
MRuby::Build::COMMANDS.each do |command|
instance_variable_set("@#{command}", @build.send(command).clone)
end
- @linker = LinkerConfig.new([], [], [])
+ @linker = LinkerConfig.new([], [], [], [])
@rbfiles = Dir.glob("#{dir}/mrblib/*.rb")
@objs = Dir.glob("#{dir}/src/*.{c,cpp,m,asm,S}").map do |f|
diff --git a/tasks/mruby_build_commands.rake b/tasks/mruby_build_commands.rake
index 0bf06cb04..20203ad7e 100644
--- a/tasks/mruby_build_commands.rake
+++ b/tasks/mruby_build_commands.rake
@@ -48,7 +48,9 @@ module MRuby
def all_flags(_defineds=[], _include_paths=[], _flags=[])
define_flags = [defines, _defineds].flatten.map{ |d| option_define % d }
- include_path_flags = [include_paths, _include_paths].flatten.map{ |f| option_include_path % filename(f) }
+ include_path_flags = [include_paths, _include_paths].flatten.map do |f|
+ option_include_path % filename(f)
+ end
[flags, define_flags, include_path_flags, _flags].flatten.join(' ')
end
@@ -59,7 +61,7 @@ module MRuby
option_include_path % filename(f)
end
_pp "CC", infile, outfile
- _run compile_options, { :flags => (flags + define_flags + include_path_flags + _flags).join(' '),
+ _run compile_options, { :flags => all_flags(_defineds, _include_paths, _flags),
:infile => filename(infile), :outfile => filename(outfile) }
end
@@ -104,22 +106,25 @@ module MRuby
end
class Command::Linker < Command
- attr_accessor :flags, :libraries, :library_paths
+ attr_accessor :flags, :library_paths, :flags_before_libraries, :libraries, :flags_after_libraries
attr_accessor :link_options, :option_library, :option_library_path
def initialize(build)
super
@command = ENV['LD'] || 'gcc'
@flags = (ENV['LDFLAGS'] || [])
+ @flags_before_libraries, @flags_after_libraries = [], []
@libraries = []
@library_paths = []
@option_library = '-l%s'
@option_library_path = '-L%s'
- @link_options = "%{flags} -o %{outfile} %{objs} %{libs}"
+ @link_options = "%{flags} -o %{outfile} %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}"
end
def all_flags(_library_paths=[], _flags=[])
- library_path_flags = [library_paths, _library_paths].flatten.map{ |f| option_library_path % filename(f) }
+ library_path_flags = [library_paths, _library_paths].flatten.map do |f|
+ option_library_path % filename(f)
+ end
[flags, library_path_flags, _flags].flatten.join(' ')
end
@@ -127,13 +132,16 @@ module MRuby
[libraries, _libraries].flatten.map{ |d| option_library % d }.join(' ')
end
- def run(outfile, objfiles, _libraries=[], _library_paths=[], _flags=[])
+ def run(outfile, objfiles, _libraries=[], _library_paths=[], _flags=[], _flags_before_libraries=[], _flags_after_libraries=[])
FileUtils.mkdir_p File.dirname(outfile)
- library_flags = [libraries, _libraries].flatten.map{ |d| option_library % d }
- library_path_flags = [library_paths, _library_paths].flatten.map{ |f| option_library_path % filename(f) }
+ library_flags = [libraries, _libraries].flatten.map { |d| option_library % d }
+ library_path_flags = [library_paths, _library_paths].flatten.map { |f| option_library_path % filename(f) }
+
_pp "LD", outfile
- _run link_options, { :flags => (flags + library_path_flags + _flags).join(' '),
+ _run link_options, { :flags => all_flags(_library_paths, _flags),
:outfile => filename(outfile) , :objs => filename(objfiles).join(' '),
+ :flags_before_libraries => [flags_before_libraries, _flags_before_libraries].flatten.join(' '),
+ :flags_after_libraries => [flags_after_libraries, _flags_after_libraries].flatten.join(' '),
:libs => library_flags.join(' ') }
end
end
diff --git a/tasks/toolchains/gcc.rake b/tasks/toolchains/gcc.rake
index 54fd3ecd8..2c160683d 100644
--- a/tasks/toolchains/gcc.rake
+++ b/tasks/toolchains/gcc.rake
@@ -16,6 +16,6 @@ MRuby::Toolchain.new(:gcc) do |conf|
linker.library_paths = []
linker.option_library = '-l%s'
linker.option_library_path = '-L%s'
- linker.link_options = '%{flags} -o %{outfile} %{objs} %{libs}'
+ linker.link_options = '%{flags} -o %{outfile} %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}'
end
end
diff --git a/tasks/toolchains/vs2012.rake b/tasks/toolchains/vs2012.rake
index b5d2298c2..e3b80b98b 100644
--- a/tasks/toolchains/vs2012.rake
+++ b/tasks/toolchains/vs2012.rake
@@ -16,7 +16,7 @@ MRuby::Toolchain.new(:vs2012) do |conf|
linker.library_paths = %w()
linker.option_library = '%s'
linker.option_library_path = '/LIBPATH:%s'
- linker.link_options = "%{flags} /OUT:%{outfile} %{objs} %{libs}"
+ linker.link_options = "%{flags} /OUT:%{outfile} %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}"
end
conf.archiver do |archiver|
diff --git a/test/mrbtest.rake b/test/mrbtest.rake
index 10d8eccb6..4d4a7e57c 100644
--- a/test/mrbtest.rake
+++ b/test/mrbtest.rake
@@ -10,11 +10,13 @@ MRuby.each_target do
objs = [objfile("#{build_dir}/#{dir}/driver"), mlib].flatten
- file exec => objs + gems.map(&:testlib) + [libfile("#{build_dir}/lib/libmruby")] do |t|
+ file exec => objs + gems.map(&:testlib).flatten + [libfile("#{build_dir}/lib/libmruby")] do |t|
gem_flags = gems.map { |g| g.linker.flags }
+ gem_flags_before_libraries = gems.map { |g| g.linker.flags_before_libraries }
+ gem_flags_after_libraries = gems.map { |g| g.linker.flags_after_libraries }
gem_libraries = gems.map { |g| g.linker.libraries }
gem_library_paths = gems.map { |g| g.linker.library_paths }
- linker.run t.name, t.prerequisites, gem_libraries, gem_library_paths, gem_flags
+ linker.run t.name, t.prerequisites, gem_libraries, gem_library_paths, gem_flags, gem_flags_before_libraries
end
file mlib => [clib]
diff --git a/tools/mirb/mirb.rake b/tools/mirb/mirb.rake
index 0c340a2f5..46e69136e 100644
--- a/tools/mirb/mirb.rake
+++ b/tools/mirb/mirb.rake
@@ -7,9 +7,11 @@ MRuby.each_target do
file exec => objs + [libfile("#{build_dir}/lib/libmruby")] do |t|
gem_flags = gems.map { |g| g.linker.flags }
+ gem_flags_before_libraries = gems.map { |g| g.linker.flags_before_libraries }
+ gem_flags_after_libraries = gems.map { |g| g.linker.flags_after_libraries }
gem_libraries = gems.map { |g| g.linker.libraries }
gem_library_paths = gems.map { |g| g.linker.library_paths }
- linker.run t.name, t.prerequisites, gem_libraries, gem_library_paths, gem_flags
+ linker.run t.name, t.prerequisites, gem_libraries, gem_library_paths, gem_flags, gem_flags_before_libraries
end
end
end
diff --git a/tools/mruby/mruby.rake b/tools/mruby/mruby.rake
index df31b0343..fccebff63 100644
--- a/tools/mruby/mruby.rake
+++ b/tools/mruby/mruby.rake
@@ -7,9 +7,11 @@ MRuby.each_target do
file exec => objs + [libfile("#{build_dir}/lib/libmruby")] do |t|
gem_flags = gems.map { |g| g.linker.flags }
+ gem_flags_before_libraries = gems.map { |g| g.linker.flags_before_libraries }
+ gem_flags_after_libraries = gems.map { |g| g.linker.flags_after_libraries }
gem_libraries = gems.map { |g| g.linker.libraries }
gem_library_paths = gems.map { |g| g.linker.library_paths }
- linker.run t.name, t.prerequisites, gem_libraries, gem_library_paths, gem_flags
+ linker.run t.name, t.prerequisites, gem_libraries, gem_library_paths, gem_flags, gem_flags_before_libraries
end
end
end