add direct mode to Program builder - close #61

This commit is contained in:
josh committed 2019-04-14 12:35:28 -04:00
1 parent 9bf4b8fa96
commit ea2b1e73d1
17 files changed
+146 -23

No files matched your search

+2 -2
View File
@@ -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")
+2 -2
View File
@@ -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}")
+2 -2
View File
@@ -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}")
+2 -2
View File
@@ -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}")
+19 -3
View File
@@ -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
+13 -3
View File
@@ -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
+17 -7
View File
@@ -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