add direct mode to Program builder - close #61
This commit is contained in:
1 parent
9bf4b8fa96
commit
ea2b1e73d1
17 files changed
+146
-23
No files matched your search
@@ -1,2 +1,2 @@
|
||||
Rscons::Builders::Object.register(command: "${ASCMD}", suffix: "${ASSUFFIX}", short_description: "Assembling")
|
||||
Rscons::Builders::SharedObject.register(command: "${ASCMD}", suffix: "${ASSUFFIX}", short_description: "Assembling")
|
||||
Rscons::Builders::Object.register(command: "${ASCMD}", direct_command: "${ASCMD:direct}", suffix: "${ASSUFFIX}", short_description: "Assembling")
|
||||
Rscons::Builders::SharedObject.register(command: "${ASCMD}", direct_command: "${ASCMD:direct}", suffix: "${ASSUFFIX}", short_description: "Assembling")
|
||||
@@ -1,2 +1,2 @@
|
||||
Rscons::Builders::Object.register(command: "${CCCMD}", suffix: "${CSUFFIX}")
|
||||
Rscons::Builders::SharedObject.register(command: "${SHCCCMD}", suffix: "${CSUFFIX}")
|
||||
Rscons::Builders::Object.register(command: "${CCCMD}", direct_command: "${CCCMD:direct}", suffix: "${CSUFFIX}")
|
||||
Rscons::Builders::SharedObject.register(command: "${SHCCCMD}", direct_command: "${SHCCCMD:direct}", suffix: "${CSUFFIX}")
|
||||
@@ -1,2 +1,2 @@
|
||||
Rscons::Builders::Object.register(command: "${CXXCMD}", suffix: "${CXXSUFFIX}", preferred_ld: "${CXX}")
|
||||
Rscons::Builders::SharedObject.register(command: "${SHCXXCMD}", suffix: "${CXXSUFFIX}", preferred_ld: "${SHCXX}")
|
||||
Rscons::Builders::Object.register(command: "${CXXCMD}", direct_command: "${CXXCMD:direct}", suffix: "${CXXSUFFIX}", preferred_ld: "${CXX}")
|
||||
Rscons::Builders::SharedObject.register(command: "${SHCXXCMD}", direct_command: "${SHCXXCMD:direct}", suffix: "${CXXSUFFIX}", preferred_ld: "${SHCXX}")
|
||||
@@ -1,2 +1,2 @@
|
||||
Rscons::Builders::Object.register(command: "${DCCMD}", suffix: "${DSUFFIX}", preferred_ld: "${DC}")
|
||||
Rscons::Builders::SharedObject.register(command: "${SHDCCMD}", suffix: "${DSUFFIX}", preferred_ld: "${SHDC}")
|
||||
Rscons::Builders::Object.register(command: "${DCCMD}", direct_command: "${DCCMD:direct}", suffix: "${DSUFFIX}", preferred_ld: "${DC}")
|
||||
Rscons::Builders::SharedObject.register(command: "${SHDCCMD}", direct_command: "${SHDCCMD:direct}", suffix: "${DSUFFIX}", preferred_ld: "${SHDC}")
|
||||
@@ -55,7 +55,12 @@ module Rscons
|
||||
unless build_params
|
||||
raise "Unknown input file type: #{@sources.first.inspect}"
|
||||
end
|
||||
@command_template = build_params[:command]
|
||||
@command_template =
|
||||
if @vars[:direct]
|
||||
build_params[:direct_command]
|
||||
else
|
||||
build_params[:command]
|
||||
end
|
||||
@short_description = build_params[:short_description] || "Compiling"
|
||||
@preferred_ld = build_params[:preferred_ld]
|
||||
end
|
||||
@@ -67,10 +72,21 @@ module Rscons
|
||||
else
|
||||
@vars["_TARGET"] = @target
|
||||
@vars["_SOURCES"] = @sources
|
||||
@vars["_DEPFILE"] = Rscons.set_suffix(target, env.expand_varref("${DEPFILESUFFIX}", vars))
|
||||
depfilesuffix = @env.expand_varref("${DEPFILESUFFIX}", vars)
|
||||
@vars["_DEPFILE"] =
|
||||
if @vars[:direct]
|
||||
@env.get_build_fname(target, depfilesuffix, self.class)
|
||||
else
|
||||
Rscons.set_suffix(target, depfilesuffix)
|
||||
end
|
||||
@cache.mkdir_p(File.dirname(@vars["_DEPFILE"]))
|
||||
command = @env.build_command(@command_template, @vars)
|
||||
@env.produces(@target, @vars["_DEPFILE"])
|
||||
message = "#{@short_description} #{Util.short_format_paths(@sources)}"
|
||||
if @vars[:direct]
|
||||
message = "#{@short_description}/Linking #{Util.short_format_paths(@sources)} => #{@target}"
|
||||
else
|
||||
message = "#{@short_description} #{Util.short_format_paths(@sources)}"
|
||||
end
|
||||
standard_command(message, command)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -7,12 +7,22 @@ module Rscons
|
||||
include Mixins::ObjectDeps
|
||||
include Mixins::Program
|
||||
|
||||
class << self
|
||||
def new(options, *more)
|
||||
unless File.basename(options[:target])["."]
|
||||
options[:target] += options[:env].expand_varref("${PROGSUFFIX}", options[:vars])
|
||||
end
|
||||
if options[:vars][:direct]
|
||||
Object.new(options, *more)
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Create an instance of the Builder to build a target.
|
||||
def initialize(options)
|
||||
super(options)
|
||||
unless File.basename(@target)["."]
|
||||
@target += @env.expand_varref("${PROGSUFFIX}", @vars)
|
||||
end
|
||||
@objects = register_object_deps(Object)
|
||||
end
|
||||
|
||||
|
||||
@@ -7,16 +7,26 @@ module Rscons
|
||||
include Mixins::ObjectDeps
|
||||
include Mixins::Program
|
||||
|
||||
class << self
|
||||
def new(options, *more)
|
||||
libprefix = options[:env].expand_varref("${SHLIBPREFIX}", options[:vars])
|
||||
unless File.basename(options[:target]).start_with?(libprefix)
|
||||
options[:target] = options[:target].sub!(%r{^(.*/)?([^/]+)$}, "\\1#{libprefix}\\2")
|
||||
end
|
||||
unless File.basename(options[:target])["."]
|
||||
options[:target] += options[:env].expand_varref("${SHLIBSUFFIX}", options[:vars])
|
||||
end
|
||||
if options[:vars][:direct]
|
||||
SharedObject.new(options, *more)
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Create an instance of the Builder to build a target.
|
||||
def initialize(options)
|
||||
super(options)
|
||||
libprefix = @env.expand_varref("${SHLIBPREFIX}", @vars)
|
||||
unless File.basename(@target).start_with?(libprefix)
|
||||
@target = @target.sub!(%r{^(.*/)?([^/]+)$}, "\\1#{libprefix}\\2")
|
||||
end
|
||||
unless File.basename(@target)["."]
|
||||
@target += @env.expand_varref("${SHLIBSUFFIX}", @vars)
|
||||
end
|
||||
@objects = register_object_deps(SharedObject)
|
||||
end
|
||||
|
||||
|
||||
Reference in new issue
Block a user