rename CC builder to Object
begin supporting compiling things other than C
This commit is contained in:
parent
b8acc74b5d
commit
2f2de3b709
@ -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
|
||||
|
@ -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
|
57
lib/rscons/builders/object.rb
Normal file
57
lib/rscons/builders/object.rb
Normal 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
|
Loading…
x
Reference in New Issue
Block a user