rename CC builder to Object

begin supporting compiling things other than C
This commit is contained in:
Josh Holtrop 2013-07-17 19:37:14 -04:00
parent b8acc74b5d
commit 2f2de3b709
3 changed files with 59 additions and 41 deletions

View File

@ -8,12 +8,12 @@ require "rscons/monkey/module"
require "rscons/monkey/string"
# default builders
require "rscons/builders/cc"
require "rscons/builders/object"
require "rscons/builders/program"
module Rscons
DEFAULT_BUILDERS = [
CC,
Object,
Program,
]
end

View File

@ -1,39 +0,0 @@
module Rscons
class CC < Builder
def default_variables(env)
{
'CC' => 'gcc',
'CFLAGS' => [],
'CPPFLAGS' => [],
'CPPPATH' => [],
'OBJSUFFIX' => '.o',
'CSUFFIX' => '.c',
'CCDEPGEN' => ['-MMD', '-MF', '$DEPFILE'],
'CCCOM' => ['$CC', '-c', '-o', '$TARGET', '$CCDEPGEN', '-I$[CPPPATH]', '$CPPFLAGS', '$CFLAGS', '$SOURCES']
}
end
def produces?(target, source, env)
target.has_suffix?(env['OBJSUFFIX']) and source.has_suffix?(env['CSUFFIX'])
end
def run(target, sources, cache, env)
vars = {
'TARGET' => target,
'SOURCES' => sources,
'DEPFILE' => target.set_suffix('.mf'),
}
command = env.build_command(env['CCCOM'], vars)
unless cache.up_to_date?(target, command, sources)
return false unless env.execute("CC #{target}", command)
deps = sources
if File.exists?(vars['DEPFILE'])
deps += env.parse_makefile_deps(vars['DEPFILE'], target)
FileUtils.rm_f(vars['DEPFILE'])
end
cache.register_build(target, command, deps.uniq)
end
target
end
end
end

View File

@ -0,0 +1,57 @@
module Rscons
class Object < Builder
def default_variables(env)
{
'OBJSUFFIX' => '.o',
'AS' => 'gcc',
'ASFLAGS' => [],
'ASSUFFIX' => '.S',
'ASPPPATH' => '$CPPPATH',
'ASPPFLAGS' => '$CPPFLAGS',
'ASDEPGEN' => ['-MMD', '-MF', '$DEPFILE'],
'ASCOM' => ['$AS', '-c', '-o', '$TARGET', '$ASDEPGEN', '-I$[ASPPPATH]', '$ASPPFLAGS', '$ASFLAGS', '$SOURCES'],
'CC' => 'gcc',
'CFLAGS' => [],
'CPPFLAGS' => [],
'CPPPATH' => [],
'CSUFFIX' => '.c',
'CCDEPGEN' => ['-MMD', '-MF', '$DEPFILE'],
'CCCOM' => ['$CC', '-c', '-o', '$TARGET', '$CCDEPGEN', '-I$[CPPPATH]', '$CPPFLAGS', '$CFLAGS', '$SOURCES'],
}
end
def produces?(target, source, env)
target.has_suffix?(env['OBJSUFFIX']) and (
source.has_suffix?(env['ASSUFFIX']) or
source.has_suffix?(env['CSUFFIX']))
end
def run(target, sources, cache, env)
vars = {
'TARGET' => target,
'SOURCES' => sources,
'DEPFILE' => target.set_suffix('.mf'),
}
com_prefix = if sources.first.has_suffix?(env['ASSUFFIX'])
'AS'
elsif sources.first.has_suffix?(env['CSUFFIX'])
'CC'
else
raise "Error: unknown input file type: #{sources.first.inspect}"
end
command = env.build_command(env["#{com_prefix}COM"], vars)
unless cache.up_to_date?(target, command, sources)
return false unless env.execute("#{com_prefix} #{target}", command)
deps = sources
if File.exists?(vars['DEPFILE'])
deps += env.parse_makefile_deps(vars['DEPFILE'], target)
FileUtils.rm_f(vars['DEPFILE'])
end
cache.register_build(target, command, deps.uniq)
end
target
end
end
end