Add Preprocess and Disassemble builders

This commit is contained in:
josh committed 2014-04-15 15:21:55 -04:00
1 parent ee5aca275d
commit d424facf7f
6 files changed
+86 -2

No files matched your search

+4
View File
@@ -6,16 +6,20 @@ require_relative "rscons/version"
# default builders
require_relative "rscons/builders/cfile"
require_relative "rscons/builders/disassemble"
require_relative "rscons/builders/library"
require_relative "rscons/builders/object"
require_relative "rscons/builders/preprocess"
require_relative "rscons/builders/program"
# Namespace module for rscons classes
module Rscons
DEFAULT_BUILDERS = [
:CFile,
:Disassemble,
:Library,
:Object,
:Preprocess,
:Program,
]
+25
View File
@@ -0,0 +1,25 @@
module Rscons
module Builders
# The Disassemble builder produces a disassembly listing of a source file.
class Disassemble < Builder
def default_variables(env)
{
"OBJDUMP" => "objdump",
"DISASM_CMD" => ["${OBJDUMP}", "${DISASM_FLAGS}", "${_SOURCES}"],
"DISASM_FLAGS" => ["--disassemble", "--source"],
}
end
def run(target, sources, cache, env, vars)
vars = vars.merge("_SOURCES" => sources)
command = env.build_command(env["DISASM_CMD"], vars)
unless cache.up_to_date?(target, command, sources, env)
cache.mkdir_p(File.dirname(target))
return false unless env.execute("Disassemble #{target}", command, options: {out: target})
cache.register_build(target, command, sources, env)
end
target
end
end
end
end
+1 -1
View File
@@ -1,7 +1,7 @@
module Rscons
module Builders
# A default Rscons builder that produces a static library archive.
class Rscons::Builders::Library < Rscons::Builder
class Library < Builder
def default_variables(env)
{
'AR' => 'ar',
+25
View File
@@ -0,0 +1,25 @@
module Rscons
module Builders
# The Preprocess builder invokes the C preprocessor
class Preprocess < Builder
def default_variables(env)
{
"CPP_CMD" => ["${_PREPROCESS_CC}", "-E", "-o", "${_TARGET}", "-I${CPPPATH}", "${CPPFLAGS}", "${CFLAGS}", "${_SOURCES}"],
}
end
def run(target, sources, cache, env, vars)
pp_cc = if sources.find {|s| s.end_with?(*env["CXXSUFFIX"])}
env["CXX"]
else
env["CC"]
end
vars = vars.merge("_PREPROCESS_CC" => pp_cc,
"_TARGET" => target,
"_SOURCES" => sources)
command = env.build_command(env["CPP_CMD"], vars)
standard_build("Preprocess #{target}", target, command, sources, env, cache)
end
end
end
end
+1 -1
View File
@@ -2,7 +2,7 @@ module Rscons
module Builders
# A default Rscons builder that knows how to link object files into an
# executable program.
class Rscons::Builders::Program < Rscons::Builder
class Program < Builder
def default_variables(env)
{
'LD' => nil,