mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Add flags_after_libraries
This commit is contained in:
@@ -31,6 +31,7 @@ MRuby::Build.new do |conf|
|
||||
# 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'
|
||||
|
||||
@@ -120,6 +120,7 @@ conf.linker do |linker|
|
||||
linker.flags = ...
|
||||
linker.flags_before_libraries = ...
|
||||
linker.libraries = ...
|
||||
linker.flags_after_libraries = ...
|
||||
linker.library_paths = ....
|
||||
linker.option_library = ...
|
||||
linker.option_library_path = ...
|
||||
|
||||
@@ -6,7 +6,7 @@ module MRuby
|
||||
class << self
|
||||
attr_accessor :current
|
||||
end
|
||||
LinkerConfig = Struct.new(:libraries, :library_paths, :flags, :flags_before_libraries)
|
||||
LinkerConfig = Struct.new(:libraries, :library_paths, :flags, :flags_before_libraries, :flags_after_libraries)
|
||||
|
||||
class Specification
|
||||
include Rake::DSL
|
||||
|
||||
@@ -106,19 +106,19 @@ module MRuby
|
||||
end
|
||||
|
||||
class Command::Linker < Command
|
||||
attr_accessor :flags, :flags_before_libraries, :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_before_libraries, @flags_after_libraries = [], []
|
||||
@libraries = []
|
||||
@library_paths = []
|
||||
@option_library = '-l%s'
|
||||
@option_library_path = '-L%s'
|
||||
@link_options = "%{flags} -o %{outfile} %{objs} %{flags_before_libraries} %{libs}"
|
||||
@link_options = "%{flags} -o %{outfile} %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}"
|
||||
end
|
||||
|
||||
def all_flags(_library_paths=[], _flags=[])
|
||||
@@ -132,14 +132,15 @@ module MRuby
|
||||
[libraries, _libraries].flatten.map{ |d| option_library % d }.join(' ')
|
||||
end
|
||||
|
||||
def run(outfile, objfiles, _libraries=[], _library_paths=[], _flags=[], _flags_before_libraries=[])
|
||||
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) }
|
||||
_pp "LD #{filename(outfile)}"
|
||||
_pp "LD", "#{filename(outfile)}"
|
||||
_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
|
||||
|
||||
@@ -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} %{flags_before_libraries} %{libs}'
|
||||
linker.link_options = '%{flags} -o %{outfile} %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -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} %{flags_before_libraries} %{libs}"
|
||||
linker.link_options = "%{flags} /OUT:%{outfile} %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}"
|
||||
end
|
||||
|
||||
conf.archiver do |archiver|
|
||||
|
||||
@@ -13,6 +13,7 @@ MRuby.each_target do
|
||||
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, gem_flags_before_libraries
|
||||
|
||||
@@ -8,6 +8,7 @@ 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, gem_flags_before_libraries
|
||||
|
||||
@@ -8,6 +8,7 @@ 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, gem_flags_before_libraries
|
||||
|
||||
Reference in New Issue
Block a user