shog-build 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/context.rb +3 -3
- data/lib/generator.rb +12 -11
- data/lib/ninja.rb +8 -8
- data/lib/path.rb +3 -3
- data/lib/pathset.rb +1 -1
- data/lib/rule/cc.rb +11 -11
- data/lib/rule/generate_build.rb +6 -6
- data/lib/rule/kconfig.rb +5 -5
- data/lib/rule/link.rb +8 -8
- data/lib/rule/objcopy.rb +6 -6
- data/lib/rule/yacc.rb +4 -4
- data/lib/runner.rb +7 -6
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a26351c3bae67007049fe193705610225870f2b2
|
4
|
+
data.tar.gz: 5fd6af4692ed58a853d217cb17e865d998640382
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e57714c706dd40877a7779ad0ac0c1820ed4fe0834f0b86dd778998007066e4ea190b7f6d0d477b0765dd8afd0cf17f422f101d73287da1fc38d5444d22c842
|
7
|
+
data.tar.gz: 1e1a0af9442049652ed6a89e78ebf7122ce4b4119c8ee3b7c3b2492f0f92803ba46d8d3871c30dfb22b0a0184010e0f36c96e06fb9477b3fe1523dbb4ecd30d7
|
data/lib/context.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require_relative
|
2
|
-
require_relative
|
1
|
+
require_relative "util"
|
2
|
+
require_relative "pathset"
|
3
3
|
|
4
4
|
module Shog
|
5
5
|
# An instance of this class is visible to our build scripts with name @shog
|
@@ -30,7 +30,7 @@ module Shog
|
|
30
30
|
ctx = new_ctx ? deep_clone() : self
|
31
31
|
|
32
32
|
Path.pwd = File.join(Path.pwd, dir)
|
33
|
-
script = cwd(
|
33
|
+
script = cwd("shog.build")
|
34
34
|
@rule[:generate_build].deps << script
|
35
35
|
script_name = script.path
|
36
36
|
build_script = File.read(script_name)
|
data/lib/generator.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require_relative
|
2
|
-
require_relative
|
3
|
-
require_relative
|
4
|
-
require_relative
|
5
|
-
require_relative
|
6
|
-
require_relative
|
7
|
-
require_relative
|
1
|
+
require_relative "context"
|
2
|
+
require_relative "rule/cc"
|
3
|
+
require_relative "rule/link"
|
4
|
+
require_relative "rule/objcopy"
|
5
|
+
require_relative "rule/kconfig"
|
6
|
+
require_relative "rule/generate_build"
|
7
|
+
require_relative "rule/yacc"
|
8
8
|
|
9
9
|
module Shog
|
10
10
|
class Generator
|
@@ -16,8 +16,9 @@ module Shog
|
|
16
16
|
emitter = @backend.emitter
|
17
17
|
ctx = Context.new(@backend, emitter)
|
18
18
|
|
19
|
-
if File.exists?(
|
20
|
-
system
|
19
|
+
if File.exists?("Kconfig") and not File.exists?(".config")
|
20
|
+
success = system("conf --alldefconfig -s Kconfig")
|
21
|
+
exit 1 unless success
|
21
22
|
end
|
22
23
|
|
23
24
|
# Register all rules
|
@@ -28,8 +29,8 @@ module Shog
|
|
28
29
|
ctx.register_rule(GenerateBuild)
|
29
30
|
ctx.register_rule(Yacc)
|
30
31
|
|
31
|
-
Path.pwd =
|
32
|
-
ctx.visit_dir(
|
32
|
+
Path.pwd = "."
|
33
|
+
ctx.visit_dir(".", false)
|
33
34
|
|
34
35
|
emitter.default(ctx.default_target)
|
35
36
|
|
data/lib/ninja.rb
CHANGED
@@ -3,8 +3,8 @@ module Shog
|
|
3
3
|
attr_reader :backend_file
|
4
4
|
|
5
5
|
def initialize
|
6
|
-
@out_dir =
|
7
|
-
@backend_file = File.join(@out_dir,
|
6
|
+
@out_dir = "out"
|
7
|
+
@backend_file = File.join(@out_dir, "build.ninja")
|
8
8
|
end
|
9
9
|
|
10
10
|
def configured?
|
@@ -21,7 +21,7 @@ module Shog
|
|
21
21
|
|
22
22
|
class Emitter
|
23
23
|
def initialize(file)
|
24
|
-
@out = File.open(file,
|
24
|
+
@out = File.open(file, "w")
|
25
25
|
end
|
26
26
|
|
27
27
|
def finish
|
@@ -30,7 +30,7 @@ module Shog
|
|
30
30
|
|
31
31
|
def default(target)
|
32
32
|
unless target.empty?
|
33
|
-
@out.puts "default #{target.join(
|
33
|
+
@out.puts "default #{target.join(" ")}"
|
34
34
|
@out.puts
|
35
35
|
end
|
36
36
|
end
|
@@ -46,13 +46,13 @@ module Shog
|
|
46
46
|
|
47
47
|
def emit(target)
|
48
48
|
rule = target[:rule]
|
49
|
-
input = target[:input].join(
|
49
|
+
input = target[:input].join(" ")
|
50
50
|
implicit_input = if target[:implicit_input] and not target[:implicit_input].empty?
|
51
|
-
|
51
|
+
" | " + target[:implicit_input].join(" ")
|
52
52
|
else
|
53
|
-
|
53
|
+
""
|
54
54
|
end
|
55
|
-
output = target[:output].join(
|
55
|
+
output = target[:output].join(" ")
|
56
56
|
variables = target[:variables]
|
57
57
|
@out.puts "build #{output}: #{rule} #{input}#{implicit_input}"
|
58
58
|
for k, v in variables
|
data/lib/path.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require "pathname"
|
2
2
|
|
3
3
|
module Shog
|
4
4
|
class Path
|
5
|
-
@pwd =
|
5
|
+
@pwd = "."
|
6
6
|
|
7
7
|
class << self
|
8
8
|
attr_accessor :pwd
|
@@ -65,7 +65,7 @@ module Shog
|
|
65
65
|
if @outoftree or @absolute
|
66
66
|
@path
|
67
67
|
else
|
68
|
-
File.join(
|
68
|
+
File.join("..", @path)
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
data/lib/pathset.rb
CHANGED
data/lib/rule/cc.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "../path"
|
2
2
|
|
3
3
|
module Shog
|
4
4
|
class CC
|
@@ -16,10 +16,10 @@ module Shog
|
|
16
16
|
|
17
17
|
def rule
|
18
18
|
{
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
"command" => "$bin $cflags -MMD -MQ $out -MF $out.d -c $in -o $out",
|
20
|
+
"description" => "Compile $in",
|
21
|
+
"deps" => "gcc",
|
22
|
+
"depfile" => "$out.d",
|
23
23
|
}
|
24
24
|
end
|
25
25
|
|
@@ -31,25 +31,25 @@ module Shog
|
|
31
31
|
if params[:output]
|
32
32
|
output << Path.make(params[:output], :outoftree => true)
|
33
33
|
else
|
34
|
-
output << Path.make(params[:input].single_path, :outoftree => true).with_suffix(
|
34
|
+
output << Path.make(params[:input].single_path, :outoftree => true).with_suffix(".o")
|
35
35
|
end
|
36
36
|
|
37
37
|
cflags = @cflags.dup
|
38
38
|
cflags << params[:cflags] if params[:cflags]
|
39
|
-
cflags += @includes.map { |i|
|
39
|
+
cflags += @includes.map { |i| "-I" + i }
|
40
40
|
includes = params[:includes]
|
41
41
|
if includes
|
42
42
|
includes = PathSet.make(includes)
|
43
|
-
cflags += includes.map { |i|
|
43
|
+
cflags += includes.map { |i| "-I" + i }
|
44
44
|
end
|
45
45
|
|
46
46
|
variables = {
|
47
|
-
|
48
|
-
|
47
|
+
"cflags" => cflags.join(" "),
|
48
|
+
"bin" => params[:bin] || @bin || "gcc",
|
49
49
|
}
|
50
50
|
implicit_input = @implicit_input.dup
|
51
51
|
implicit_input += params[:implicit_input] if params[:implicit_input]
|
52
|
-
{:rule =>
|
52
|
+
{:rule => "cc", :input => input, :implicit_input => implicit_input, :output => output, :variables => variables}
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
data/lib/rule/generate_build.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "../path"
|
2
2
|
|
3
3
|
module Shog
|
4
4
|
class GenerateBuild
|
@@ -14,20 +14,20 @@ module Shog
|
|
14
14
|
|
15
15
|
def rule
|
16
16
|
{
|
17
|
-
|
18
|
-
|
17
|
+
"command" => "cd .. && (shog generate || rm out/build.ninja)",
|
18
|
+
"description" => "Generate Build Script",
|
19
19
|
}
|
20
20
|
end
|
21
21
|
|
22
22
|
def target(params)
|
23
23
|
output = PathSet.new
|
24
|
-
output << Path.make(
|
24
|
+
output << Path.make("build.ninja", :outoftree => true, :root => true)
|
25
25
|
variables = {
|
26
|
-
|
26
|
+
"generator" => "1",
|
27
27
|
}
|
28
28
|
input = PathSet.new(params[:input])
|
29
29
|
input += @deps
|
30
|
-
{:rule =>
|
30
|
+
{:rule => "generate_build", :input => input, :output => output, :variables => variables}
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
data/lib/rule/kconfig.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "../path"
|
2
2
|
|
3
3
|
module Shog
|
4
4
|
class Kconfig
|
@@ -12,21 +12,21 @@ module Shog
|
|
12
12
|
|
13
13
|
def rule
|
14
14
|
{
|
15
|
-
|
16
|
-
|
15
|
+
"command" => "KCONFIG_CONFIG=$out conf --oldconfig -s $in",
|
16
|
+
"description" => "Generate .config file",
|
17
17
|
}
|
18
18
|
end
|
19
19
|
|
20
20
|
def target(params)
|
21
21
|
output = PathSet.new(Path.make(params[:output]))
|
22
22
|
input = PathSet.new(Path.make(params[:input]))
|
23
|
-
{:rule =>
|
23
|
+
{:rule => "kconfig", :input => input, :output => output}
|
24
24
|
end
|
25
25
|
|
26
26
|
def self.parse(file)
|
27
27
|
config = {}
|
28
28
|
for line in IO.readlines(file)
|
29
|
-
next if line.start_with?(
|
29
|
+
next if line.start_with?("#")
|
30
30
|
if line =~ /^CONFIG_(.*?)=(.*)$/
|
31
31
|
key = $1.to_sym
|
32
32
|
val = $2
|
data/lib/rule/link.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "../path"
|
2
2
|
|
3
3
|
module Shog
|
4
4
|
class Link
|
@@ -14,8 +14,8 @@ module Shog
|
|
14
14
|
|
15
15
|
def rule
|
16
16
|
{
|
17
|
-
|
18
|
-
|
17
|
+
"command" => "$bin $ldflags $in -o $out",
|
18
|
+
"description" => "Linking $out",
|
19
19
|
}
|
20
20
|
end
|
21
21
|
|
@@ -24,17 +24,17 @@ module Shog
|
|
24
24
|
input = PathSet.make(params[:input])
|
25
25
|
ldflags = params[:ldflags]
|
26
26
|
if ldflags.nil?
|
27
|
-
ldflags =
|
27
|
+
ldflags = ""
|
28
28
|
elsif ldflags.is_a?(Array)
|
29
|
-
ldflags = ldflags.join(
|
29
|
+
ldflags = ldflags.join(" ")
|
30
30
|
end
|
31
31
|
variables = {
|
32
|
-
|
33
|
-
|
32
|
+
"ldflags" => ldflags,
|
33
|
+
"bin" => params[:bin] || @bin || "gcc",
|
34
34
|
}
|
35
35
|
implicit_input = @implicit_input.dup
|
36
36
|
implicit_input += params[:implicit_input] if params[:implicit_input]
|
37
|
-
{:rule =>
|
37
|
+
{:rule => "ld", :input => input, :implicit_input => implicit_input, :output => output, :variables => variables}
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
data/lib/rule/objcopy.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "../path"
|
2
2
|
|
3
3
|
module Shog
|
4
4
|
class ObjCopy
|
@@ -10,8 +10,8 @@ module Shog
|
|
10
10
|
|
11
11
|
def rule
|
12
12
|
{
|
13
|
-
|
14
|
-
|
13
|
+
"command" => "$bin -O $arch $in $out",
|
14
|
+
"description" => "Objcopy $out",
|
15
15
|
}
|
16
16
|
end
|
17
17
|
|
@@ -26,10 +26,10 @@ module Shog
|
|
26
26
|
end
|
27
27
|
|
28
28
|
variables = {
|
29
|
-
|
29
|
+
"bin" => params[:bin] || @bin || "objcopy",
|
30
30
|
}
|
31
|
-
variables[
|
32
|
-
{:rule =>
|
31
|
+
variables["arch"] = params[:arch] if params[:arch]
|
32
|
+
{:rule => "objcopy", :input => input, :output => output, :variables => variables}
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
data/lib/rule/yacc.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "../path"
|
2
2
|
|
3
3
|
module Shog
|
4
4
|
class Yacc
|
@@ -8,15 +8,15 @@ module Shog
|
|
8
8
|
|
9
9
|
def rule
|
10
10
|
{
|
11
|
-
|
12
|
-
|
11
|
+
"command" => "yacc -o $out $in",
|
12
|
+
"description" => "Yacc $in",
|
13
13
|
}
|
14
14
|
end
|
15
15
|
|
16
16
|
def target(params)
|
17
17
|
input = PathSet.make(params[:input])
|
18
18
|
output = PathSet.make(Path.make(params[:output], :outoftree => true))
|
19
|
-
{:rule =>
|
19
|
+
{:rule => "yacc", :input => input, :output => output, :variables => {}}
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
data/lib/runner.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
require_relative
|
2
|
-
require_relative
|
1
|
+
require_relative "ninja"
|
2
|
+
require_relative "generator"
|
3
3
|
|
4
4
|
module Shog
|
5
5
|
module Runner
|
6
|
-
WORKDIR =
|
6
|
+
WORKDIR = "out"
|
7
7
|
|
8
8
|
def generate(backend)
|
9
9
|
Dir.mkdir(WORKDIR) unless Dir.exists?(WORKDIR)
|
@@ -12,7 +12,7 @@ module Shog
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def run(argv)
|
15
|
-
unless File.exists?(
|
15
|
+
unless File.exists?("shog.build")
|
16
16
|
puts "shog.build file is not found in #{Dir.pwd}"
|
17
17
|
exit 1
|
18
18
|
end
|
@@ -20,13 +20,14 @@ module Shog
|
|
20
20
|
backend = Ninja.new
|
21
21
|
|
22
22
|
cmd = argv[0]
|
23
|
-
if cmd ==
|
23
|
+
if cmd == "generate"
|
24
24
|
generate(backend)
|
25
25
|
return
|
26
26
|
end
|
27
27
|
|
28
28
|
generate(backend) unless backend.configured?
|
29
|
-
backend.run
|
29
|
+
success = backend.run
|
30
|
+
exit 1 unless success
|
30
31
|
end
|
31
32
|
|
32
33
|
module_function :run, :generate
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shog-build
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anatol Pomozov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -84,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
84
|
version: '0'
|
85
85
|
requirements: []
|
86
86
|
rubyforge_project:
|
87
|
-
rubygems_version: 2.
|
87
|
+
rubygems_version: 2.5.2.2
|
88
88
|
signing_key:
|
89
89
|
specification_version: 4
|
90
90
|
summary: Ruby frontend for Ninja build system
|