This commit is contained in:
kp2pml30 2024-09-18 15:54:44 +04:00
parent d14a86efee
commit 3dcb83edc5

View file

@ -89,7 +89,7 @@ class Target
end end
def add_deps(*deps) def add_deps(*deps)
@dependencies.concat(deps) @dependencies.concat(deps.flatten)
end end
def inspect def inspect
@ -235,7 +235,16 @@ class CopyTarget < Target
end end
class Configurator class Configurator
attr_reader :root_src, :root_build, :config, :all attr_reader :root_src, :root_build, :config
private def get_tag_target(tag)
ret = @tags[tag]
return ret if not ret.nil?
ret = AliasTarget.new("tags/#{tag}", [])
@tags[tag] = ret
register_target(ret)
ret
end
def initialize(src, build, preload) def initialize(src, build, preload)
@rules = [] @rules = []
@ -247,13 +256,15 @@ class Configurator
@trivial_targets = String.new @trivial_targets = String.new
@all = AliasTarget.new('all', []) @tags = {}
@config_target = ConfigureGeneratedTarget.new(self, 'build.ninja') @config_target = ConfigureGeneratedTarget.new(self, 'build.ninja')
@targets = [@all, @config_target] @targets = [@config_target]
@stack = [] @stack = []
get_tag_target('all')
@logger = Logger.new(STDOUT, level: Logger::INFO) @logger = Logger.new(STDOUT, level: Logger::INFO)
@logger.formatter = proc do |severity, datetime, progname, msg| @logger.formatter = proc do |severity, datetime, progname, msg|
#date_format = datetime.strftime("%H:%M:%S") #date_format = datetime.strftime("%H:%M:%S")
@ -401,7 +412,7 @@ EOF
@targets.each { |t| @targets.each { |t|
t.dump_rules(build_str) t.dump_rules(build_str)
} }
build_str << "default all\n" build_str << "default tags/all\n"
File.write(root_build.join('build.ninja'), build_str) File.write(root_build.join('build.ninja'), build_str)
end end
@ -417,8 +428,11 @@ EOF
@targets.push(trg) @targets.push(trg)
end end
private def return_target(trg, &block) private def return_target(trg, tags: [], &block)
register_target(trg) register_target(trg)
tags.map { |t| get_tag_target(t) }.each { |t|
t.add_deps trg
}
if not block.nil? if not block.nil?
trg.instance_eval(&block) trg.instance_eval(&block)
end end
@ -455,6 +469,7 @@ EOF
command: nil, command: nil,
commands: nil, commands: nil,
depfile: nil, depfile: nil,
**kwargs,
&blk &blk
) )
if commands.nil? == command.nil? if commands.nil? == command.nil?
@ -469,15 +484,15 @@ EOF
end end
trg = CommandTarget.new(output_file, dependencies, cwd, commands, depfile) trg = CommandTarget.new(output_file, dependencies, cwd, commands, depfile)
return_target(trg, &blk) return_target(trg, **kwargs, &blk)
end end
def target_copy(dest:, src:, &blk) def target_copy(dest:, src:, **kwargs, &blk)
trg = CopyTarget.new(dest, src) trg = CopyTarget.new(dest, src)
return_target(trg, &blk) return_target(trg, **kwargs, &blk)
end end
def target_c(output_file:, mode:, root_dir: nil, file: nil, objs: nil, flags: nil, cc: nil, &blk) def target_c(output_file:, mode:, root_dir: nil, file: nil, objs: nil, flags: nil, cc: nil, **kwargs, &blk)
if (mode == "compile") == file.nil? if (mode == "compile") == file.nil?
raise "file must be provided only for compile" raise "file must be provided only for compile"
end end
@ -491,17 +506,17 @@ EOF
root_dir.join(file) root_dir.join(file)
] else objs end ] else objs end
trg = CTarget.new(output_file, mode, deps, flags, cc, root_dir) trg = CTarget.new(output_file, mode, deps, flags, cc, root_dir)
return_target(trg, &blk) return_target(trg, **kwargs, &blk)
end end
def target_alias(name, *dependencies, &blk) def target_alias(name, *dependencies, **kwargs, &blk)
name_full = @stack[-1].project name_full = @stack[-1].project
if name_full != "" if name_full != ""
name_full += "/" name_full += "/"
end end
name_full += name name_full += name
trg = AliasTarget.new(name_full, dependencies) trg = AliasTarget.new(name_full, dependencies)
return_target(trg, &blk) return_target(trg, **kwargs, &blk)
end end
def mark_as_config_generated(file) def mark_as_config_generated(file)