comet-build 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +59 -0
  3. data/.rspec +1 -0
  4. data/.rubocop.yml +14 -0
  5. data/Gemfile +3 -0
  6. data/Gemfile.lock +58 -0
  7. data/LICENSE +9 -0
  8. data/README.md +311 -0
  9. data/Rakefile +1 -0
  10. data/bin/comet +30 -0
  11. data/comet-build.gemspec +26 -0
  12. data/lib/comet/dsl/bin_output.rb +19 -0
  13. data/lib/comet/dsl/c/source.rb +57 -0
  14. data/lib/comet/dsl/cpp/source.rb +57 -0
  15. data/lib/comet/dsl/elf_output.rb +19 -0
  16. data/lib/comet/dsl/firmware.rb +65 -0
  17. data/lib/comet/dsl/hardware.rb +56 -0
  18. data/lib/comet/dsl/helpers.rb +9 -0
  19. data/lib/comet/dsl/hex_output.rb +19 -0
  20. data/lib/comet/dsl/include_walker.rb +42 -0
  21. data/lib/comet/dsl/library.rb +21 -0
  22. data/lib/comet/dsl/linker.rb +45 -0
  23. data/lib/comet/dsl/map_output.rb +19 -0
  24. data/lib/comet/dsl/native/source.rb +44 -0
  25. data/lib/comet/dsl/options.rb +44 -0
  26. data/lib/comet/dsl/software.rb +42 -0
  27. data/lib/comet/dsl/source.rb +24 -0
  28. data/lib/comet/dsl/target.rb +64 -0
  29. data/lib/comet/makefile.rb +129 -0
  30. data/lib/comet/parser.rb +114 -0
  31. data/lib/comet/rules/alias.rb +29 -0
  32. data/lib/comet/rules/build.rb +118 -0
  33. data/lib/comet/rules/clean.rb +29 -0
  34. data/lib/comet/rules/codegen.rb +51 -0
  35. data/lib/comet/rules/compile.rb +72 -0
  36. data/lib/comet/rules/error.rb +33 -0
  37. data/lib/comet/rules/link.rb +74 -0
  38. data/lib/comet/rules/merge.rb +37 -0
  39. data/lib/comet/rules/objcopy.rb +41 -0
  40. data/lib/comet/rules/tmpdir.rb +39 -0
  41. data/lib/comet/version.rb +3 -0
  42. data/lib/comet.rb +76 -0
  43. data/spec/comet/complex_c_program/Makefile +57 -0
  44. data/spec/comet/complex_c_program/comet.rb +43 -0
  45. data/spec/comet/complex_c_program/include/public_api.h +2 -0
  46. data/spec/comet/complex_c_program/src/common.h +3 -0
  47. data/spec/comet/complex_c_program/src/library.h +2 -0
  48. data/spec/comet/complex_c_program/src/main.c +6 -0
  49. data/spec/comet/complex_c_program/src/module_a/impl.c +1 -0
  50. data/spec/comet/complex_c_program/src/module_a/impl.h +1 -0
  51. data/spec/comet/complex_c_program/src/module_b/impl.c +1 -0
  52. data/spec/comet/complex_c_program/src/module_b/impl.h +1 -0
  53. data/spec/comet/empty_build_file/Makefile +10 -0
  54. data/spec/comet/empty_build_file/comet.rb +0 -0
  55. data/spec/comet/empty_build_file/folder/.keep +0 -0
  56. data/spec/comet/generator_spec.rb +67 -0
  57. data/spec/comet/nested_circular_reference/Makefile +5 -0
  58. data/spec/comet/nested_circular_reference/comet.rb +8 -0
  59. data/spec/comet/no_build_file/Makefile +5 -0
  60. data/spec/comet/self_referential/Makefile +5 -0
  61. data/spec/comet/self_referential/comet.rb +5 -0
  62. data/spec/comet/simple_c_program/Makefile +30 -0
  63. data/spec/comet/simple_c_program/comet.rb +15 -0
  64. data/spec/comet/simple_c_program/main.c +5 -0
  65. data/spec/comet/simple_c_program/stuff.h +0 -0
  66. metadata +215 -0
data/lib/comet.rb ADDED
@@ -0,0 +1,76 @@
1
+ require 'require_all'
2
+
3
+ require_rel '.'
4
+
5
+ module Comet
6
+ TMPDIR = '.comet'.freeze
7
+
8
+ class Generator
9
+ def initialize(filename)
10
+ @filename = filename
11
+ end
12
+
13
+ attr_reader :filename
14
+
15
+ def build_file
16
+ @build_file ||= find_build_file File.expand_path('.')
17
+ end
18
+
19
+ def makefile
20
+ @makefile ||= create_makefile
21
+ end
22
+
23
+ private
24
+
25
+ def parser
26
+ @parser ||= Parser.new build_file
27
+ end
28
+
29
+ def create_makefile
30
+ makefile = Makefile.new
31
+ raise "no build file '#{filename}' found" if build_file.nil?
32
+ Dir.chdir File.dirname(build_file)
33
+ makefile.alias 'all', make_rules(makefile)
34
+ makefile.clean
35
+ makefile
36
+ rescue => ex
37
+ makefile.error ex.message
38
+ makefile
39
+ end
40
+
41
+ # TODO: implement this for Windows
42
+
43
+ def filesystem_of(path)
44
+ `stat -f -c '%i' "#{path}"`
45
+ end
46
+
47
+ def same_filesystem?(path1, path2)
48
+ filesystem_of(path1) == filesystem_of(path2)
49
+ end
50
+
51
+ def find_build_file(path)
52
+ return File.join(path, filename) if File.exist? File.join(path, filename)
53
+
54
+ parent = File.expand_path '..', path
55
+ return nil unless same_filesystem? path, parent
56
+ return nil if parent == '/'
57
+
58
+ find_build_file parent
59
+ end
60
+
61
+ def make_rules(makefile)
62
+ firmwares = Hash.new { |h, k| h[k] = [] }
63
+
64
+ parser.targets.map do |firmware, device|
65
+ firmwares[firmware].push makefile.build(firmware, device)
66
+ makefile.alias "#{firmware.name}/#{device}", [
67
+ firmwares[firmware].last
68
+ ]
69
+ end
70
+
71
+ firmwares.map do |firmware, devices|
72
+ makefile.alias firmware.name, devices
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,57 @@
1
+ COMET_LN ?= ln
2
+ COMET_CP ?= cp
3
+ COMET_LD ?= clang
4
+ COMET_OPT ?= clang
5
+ COMET_LINK ?= llvm-link
6
+ COMET_CC ?= clang
7
+ COMET_OBJCOPY ?= objcopy
8
+ COMET_RM ?= rm
9
+ .PHONY: all
10
+ all: test
11
+ .PHONY: test
12
+ test: .comet/8ef077f0cd5aaff49b65.phony .comet/b318cee1620386b56865.phony
13
+ .PHONY: test/linux_x64
14
+ test/linux_x64: .comet/b318cee1620386b56865.phony
15
+ .PHONY: test/linux_x86
16
+ test/linux_x86: .comet/8ef077f0cd5aaff49b65.phony
17
+ .PHONY: .comet
18
+ .comet:
19
+ if [ ! -d "$@" ] || [ ! -d "`readlink .comet`" ]; then $(COMET_LN) -sf `mktemp -d` $@; fi
20
+ .PHONY: .comet/8ef077f0cd5aaff49b65.phony
21
+ .comet/8ef077f0cd5aaff49b65.phony: .comet/6e9e95f81d33c9c56999.elf .comet/6801b5b5df17e4f2ddd2.bin
22
+ $(COMET_CP) .comet/6e9e95f81d33c9c56999.elf bin/test_linux_x86.elf
23
+ $(COMET_CP) .comet/6801b5b5df17e4f2ddd2.bin bin/test_linux_x64.bin
24
+ $(COMET_CP) .comet/6e9e95f81d33c9c56999.map bin/test_linux_x86.map
25
+ .comet/6e9e95f81d33c9c56999.elf: .comet/72011646c080021a2ca1.s | .comet
26
+ $(COMET_LD) --target=x86-unknown-linux-gnu -march=skylake -mcpu=skylake -Wl,-Map=.comet/6e9e95f81d33c9c56999.map -o $@ $^
27
+ .comet/72011646c080021a2ca1.s: .comet/39a50271e7c848a47a93.ll | .comet
28
+ $(COMET_OPT) -S -Ofast --target=x86-unknown-linux-gnu -march=skylake -mcpu=skylake -o $@ $<
29
+ .comet/39a50271e7c848a47a93.ll: .comet/4d2501c8d4d8a11d7131.ll .comet/4ea3c3da23201dcbd4a2.ll .comet/00757f6e0a0b4ff24514.ll | .comet
30
+ $(COMET_LINK) -S -o $@ $^
31
+ .comet/4d2501c8d4d8a11d7131.ll: src/module_a/impl.c src/module_a/impl.h src/common.h include/public_api.h | .comet
32
+ $(COMET_CC) -x c --target=x86-unknown-linux-gnu -march=skylake -mcpu=skylake -S -flto -Isrc-Iinclude -DFOO=BAR -std=c89 -o $@ -c $<
33
+ .comet/4ea3c3da23201dcbd4a2.ll: src/module_b/impl.c src/module_b/impl.h src/common.h include/public_api.h | .comet
34
+ $(COMET_CC) -x c --target=x86-unknown-linux-gnu -march=skylake -mcpu=skylake -S -flto -Isrc-Iinclude -DFOO=BAZ -std=c89 -o $@ -c $<
35
+ .comet/00757f6e0a0b4ff24514.ll: src/main.c src/common.h src/library.h src/module_a/impl.h src/module_b/impl.h include/public_api.h | .comet
36
+ $(COMET_CC) -x c --target=x86-unknown-linux-gnu -march=skylake -mcpu=skylake -S -flto -Isrc-Iinclude -std=c89 -o $@ -c $<
37
+ .comet/6801b5b5df17e4f2ddd2.bin: .comet/6e9e95f81d33c9c56999.elf | .comet
38
+ (command -v x86-unknown-linux-gnu-$(COMET_OBJCOPY) > /dev/null) && x86-unknown-linux-gnu-$(COMET_OBJCOPY) -O binary $< $@ || $(COMET_OBJCOPY) -O binary $< $@
39
+ .PHONY: .comet/b318cee1620386b56865.phony
40
+ .comet/b318cee1620386b56865.phony: .comet/719f853cbed7abc8fd85.elf
41
+ $(COMET_CP) .comet/719f853cbed7abc8fd85.elf bin/test_linux_x64.elf
42
+ $(COMET_CP) .comet/719f853cbed7abc8fd85.map bin/test_linux_x64.map
43
+ .comet/719f853cbed7abc8fd85.elf: .comet/3b044e603b145f4fbc04.s | .comet
44
+ $(COMET_LD) --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -Wl,-Map=.comet/719f853cbed7abc8fd85.map -o $@ $^
45
+ .comet/3b044e603b145f4fbc04.s: .comet/e10c49538753263f5465.ll | .comet
46
+ $(COMET_OPT) -S -O3 --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -o $@ $<
47
+ .comet/e10c49538753263f5465.ll: .comet/8a80b3d251d0ac59da27.ll .comet/416611e4ce7c48c0779d.ll .comet/7f0db3e959b1e7eb61e9.ll | .comet
48
+ $(COMET_LINK) -S -o $@ $^
49
+ .comet/8a80b3d251d0ac59da27.ll: src/module_a/impl.c src/module_a/impl.h src/common.h include/public_api.h | .comet
50
+ $(COMET_CC) -x c --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -S -flto -Isrc-Iinclude -DFOO=BAR -std=c89 -o $@ -c $<
51
+ .comet/416611e4ce7c48c0779d.ll: src/module_b/impl.c src/module_b/impl.h src/common.h include/public_api.h | .comet
52
+ $(COMET_CC) -x c --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -S -flto -Isrc-Iinclude -DFOO=BAZ -std=c89 -o $@ -c $<
53
+ .comet/7f0db3e959b1e7eb61e9.ll: src/main.c src/common.h src/library.h src/module_a/impl.h src/module_b/impl.h include/public_api.h | .comet
54
+ $(COMET_CC) -x c --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -S -flto -Isrc-Iinclude -std=c89 -o $@ -c $<
55
+ .PHONY: clean
56
+ clean:
57
+ $(COMET_RM) -rf .comet
@@ -0,0 +1,43 @@
1
+ software 'module_a', depends: ['default'] do
2
+ source language: :c, headers: ['src', 'include'] do
3
+ import 'src/module_a/**/*.c'
4
+ define :FOO => 'BAR'
5
+ option :std => 'c89'
6
+ end
7
+ end
8
+
9
+ software 'module_b', depends: ['default'] do
10
+ source language: :c, headers: ['src', 'include'] do
11
+ import 'src/module_b/**/*.c'
12
+ define :FOO => 'BAZ'
13
+ option :std => 'c89'
14
+ end
15
+ end
16
+
17
+ software 'main', depends: ['module_a', 'module_b'] do
18
+ source language: :c, headers: ['src', 'include'] do
19
+ import 'src/main.c'
20
+ option :std => 'c89'
21
+ end
22
+ end
23
+
24
+ hardware 'default', targets: :linux_x86 do
25
+ linker 'x86-unknown-linux-gnu', isa: 'skylake', cpu: 'skylake', opt: :fast
26
+ end
27
+
28
+ hardware 'default', targets: :linux_x64 do
29
+ linker 'x86_64-unknown-linux-gnu', isa: 'skylake', cpu: 'skylake', opt: 3
30
+ end
31
+
32
+ firmware 'test', imports: ['main'] do
33
+ target :linux_x86 do
34
+ elf 'bin/test_linux_x86.elf'
35
+ bin 'bin/test_linux_x64.bin'
36
+ map 'bin/test_linux_x86.map'
37
+ end
38
+
39
+ target :linux_x64 do
40
+ elf 'bin/test_linux_x64.elf'
41
+ map 'bin/test_linux_x64.map'
42
+ end
43
+ end
@@ -0,0 +1,2 @@
1
+ #include <stddef.h>
2
+ #include <stdint.h>
@@ -0,0 +1,3 @@
1
+ #include "public_api.h"
2
+
3
+ #include <stdlib.h>
@@ -0,0 +1,2 @@
1
+ #include "module_a/impl.h"
2
+ #include "module_b/impl.h"
@@ -0,0 +1,6 @@
1
+ #include "common.h"
2
+
3
+ #include "library.h"
4
+
5
+ #include "module_a/impl.h"
6
+ #include "module_b/impl.h"
@@ -0,0 +1 @@
1
+ #include "module_a/impl.h"
@@ -0,0 +1 @@
1
+ #include "common.h"
@@ -0,0 +1 @@
1
+ #include "module_b/impl.h"
@@ -0,0 +1 @@
1
+ #include "common.h"
@@ -0,0 +1,10 @@
1
+ COMET_LN ?= ln
2
+ COMET_RM ?= rm
3
+ .PHONY: all
4
+ all:
5
+ .PHONY: .comet
6
+ .comet:
7
+ if [ ! -d "$@" ] || [ ! -d "`readlink .comet`" ]; then $(COMET_LN) -sf `mktemp -d` $@; fi
8
+ .PHONY: clean
9
+ clean:
10
+ $(COMET_RM) -rf .comet
File without changes
File without changes
@@ -0,0 +1,67 @@
1
+ require 'pathname'
2
+ require 'comet'
3
+
4
+ class TestCase
5
+ def initialize(rootpath,
6
+ makefile: 'Makefile',
7
+ workpath: '.',
8
+ location: 'comet.rb',
9
+ filename: 'comet.rb')
10
+ @rootpath = File.join __dir__, rootpath
11
+ @makefile = File.join @rootpath, makefile
12
+ @workpath = File.join @rootpath, workpath
13
+ @location = File.join @rootpath, location
14
+ @filename = filename
15
+ end
16
+
17
+ attr_reader :makefile
18
+ attr_reader :workpath
19
+ attr_reader :location
20
+ attr_reader :filename
21
+
22
+ def summary
23
+ rootpath = Pathname.new(@rootpath)
24
+ testname = rootpath.relative_path_from(Pathname.new(__dir__))
25
+ makefile = Pathname.new(@makefile).relative_path_from rootpath
26
+ location = Pathname.new(@location).relative_path_from rootpath
27
+ workpath = Pathname.new(@workpath).relative_path_from rootpath
28
+ "#{testname}/#{workpath} :: #{location} => #{makefile}"
29
+ end
30
+ end
31
+
32
+ TESTS = [
33
+ TestCase.new('empty_build_file'),
34
+ TestCase.new('simple_c_program'),
35
+ TestCase.new('no_build_file'),
36
+ TestCase.new('self_referential'),
37
+ TestCase.new('nested_circular_reference'),
38
+ TestCase.new('empty_build_file', workpath: 'folder'),
39
+ TestCase.new('complex_c_program'),
40
+ TestCase.new('complex_c_program', workpath: 'src'),
41
+ TestCase.new('complex_c_program', workpath: 'src/module_a')
42
+ ].freeze
43
+
44
+ describe Comet::Generator do
45
+ TESTS.each do |test|
46
+ context test.summary do
47
+ subject(:generator) { described_class.new test.filename }
48
+
49
+ before { Dir.chdir test.workpath }
50
+
51
+ it 'generates the expected makefile' do
52
+ contents = File.read test.makefile # just compare
53
+ expect(generator.makefile.contents).to eq(contents)
54
+ end
55
+
56
+ if File.exist? test.location
57
+ it 'locates the expected build file' do
58
+ expect(generator.build_file).to eq(test.location)
59
+ end
60
+ else
61
+ it 'detects no build file exists' do
62
+ expect(generator.build_file).to be_nil
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,5 @@
1
+ COMET_LN ?= ln
2
+ $(error Circular dependency involving `foo' detected)
3
+ .PHONY: .comet
4
+ .comet:
5
+ if [ ! -d "$@" ] || [ ! -d "`readlink .comet`" ]; then $(COMET_LN) -sf `mktemp -d` $@; fi
@@ -0,0 +1,8 @@
1
+ software 'foo', depends: ['bar'] do
2
+ end
3
+
4
+ software 'bar', depends: ['foo'] do
5
+ end
6
+
7
+ firmware 'test', imports: ['foo'] do
8
+ end
@@ -0,0 +1,5 @@
1
+ COMET_LN ?= ln
2
+ $(error No build file 'comet.rb' found)
3
+ .PHONY: .comet
4
+ .comet:
5
+ if [ ! -d "$@" ] || [ ! -d "`readlink .comet`" ]; then $(COMET_LN) -sf `mktemp -d` $@; fi
@@ -0,0 +1,5 @@
1
+ COMET_LN ?= ln
2
+ $(error Circular dependency involving `foo' detected)
3
+ .PHONY: .comet
4
+ .comet:
5
+ if [ ! -d "$@" ] || [ ! -d "`readlink .comet`" ]; then $(COMET_LN) -sf `mktemp -d` $@; fi
@@ -0,0 +1,5 @@
1
+ software 'foo', depends: ['foo'] do
2
+ end
3
+
4
+ firmware 'test', imports: ['foo'] do
5
+ end
@@ -0,0 +1,30 @@
1
+ COMET_LN ?= ln
2
+ COMET_CP ?= cp
3
+ COMET_LD ?= clang
4
+ COMET_OPT ?= clang
5
+ COMET_LINK ?= llvm-link
6
+ COMET_CC ?= clang
7
+ COMET_RM ?= rm
8
+ .PHONY: all
9
+ all: main
10
+ .PHONY: main
11
+ main: .comet/fb5bd0bc5bbbcfb8d75d.phony
12
+ .PHONY: main/linux_x64
13
+ main/linux_x64: .comet/fb5bd0bc5bbbcfb8d75d.phony
14
+ .PHONY: .comet
15
+ .comet:
16
+ if [ ! -d "$@" ] || [ ! -d "`readlink .comet`" ]; then $(COMET_LN) -sf `mktemp -d` $@; fi
17
+ .PHONY: .comet/fb5bd0bc5bbbcfb8d75d.phony
18
+ .comet/fb5bd0bc5bbbcfb8d75d.phony: .comet/6a16a16dcf71bbd81420.elf
19
+ $(COMET_CP) .comet/6a16a16dcf71bbd81420.elf main
20
+ .comet/6a16a16dcf71bbd81420.elf: .comet/6da374969db200830aba.s | .comet
21
+ $(COMET_LD) --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -Wl,-Map=.comet/6a16a16dcf71bbd81420.map -o $@ $^
22
+ .comet/6da374969db200830aba.s: .comet/d00df735d73ec90af321.ll | .comet
23
+ $(COMET_OPT) -S -O1 --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -o $@ $<
24
+ .comet/d00df735d73ec90af321.ll: .comet/15a47430b29cc4417a92.ll | .comet
25
+ $(COMET_LINK) -S -o $@ $^
26
+ .comet/15a47430b29cc4417a92.ll: main.c ./stuff.h | .comet
27
+ $(COMET_CC) -x c --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -S -flto -I. -o $@ -c $<
28
+ .PHONY: clean
29
+ clean:
30
+ $(COMET_RM) -rf .comet
@@ -0,0 +1,15 @@
1
+ software 'main', depends: ['linux-x64'] do
2
+ source language: :c, headers: ['.'] do
3
+ import 'main.c'
4
+ end
5
+ end
6
+
7
+ hardware 'linux-x64', targets: :linux_x64 do
8
+ linker 'x86_64-unknown-linux-gnu', isa: 'skylake', cpu: 'skylake', opt: 1
9
+ end
10
+
11
+ firmware 'main', imports: ['main'] do
12
+ target :linux_x64 do
13
+ elf 'main'
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ #include "stuff.h"
2
+
3
+ int main(int argc, char *argv[]) {
4
+ return 0;
5
+ }
File without changes
metadata ADDED
@@ -0,0 +1,215 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: comet-build
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Thomas Beneteau
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-08-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop-rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: require_all
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: slop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: The no-nonsense build tool for embedded software
98
+ email:
99
+ - thomas@bitwise.me
100
+ executables:
101
+ - comet
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - ".rspec"
107
+ - ".rubocop.yml"
108
+ - Gemfile
109
+ - Gemfile.lock
110
+ - LICENSE
111
+ - README.md
112
+ - Rakefile
113
+ - bin/comet
114
+ - comet-build.gemspec
115
+ - lib/comet.rb
116
+ - lib/comet/dsl/bin_output.rb
117
+ - lib/comet/dsl/c/source.rb
118
+ - lib/comet/dsl/cpp/source.rb
119
+ - lib/comet/dsl/elf_output.rb
120
+ - lib/comet/dsl/firmware.rb
121
+ - lib/comet/dsl/hardware.rb
122
+ - lib/comet/dsl/helpers.rb
123
+ - lib/comet/dsl/hex_output.rb
124
+ - lib/comet/dsl/include_walker.rb
125
+ - lib/comet/dsl/library.rb
126
+ - lib/comet/dsl/linker.rb
127
+ - lib/comet/dsl/map_output.rb
128
+ - lib/comet/dsl/native/source.rb
129
+ - lib/comet/dsl/options.rb
130
+ - lib/comet/dsl/software.rb
131
+ - lib/comet/dsl/source.rb
132
+ - lib/comet/dsl/target.rb
133
+ - lib/comet/makefile.rb
134
+ - lib/comet/parser.rb
135
+ - lib/comet/rules/alias.rb
136
+ - lib/comet/rules/build.rb
137
+ - lib/comet/rules/clean.rb
138
+ - lib/comet/rules/codegen.rb
139
+ - lib/comet/rules/compile.rb
140
+ - lib/comet/rules/error.rb
141
+ - lib/comet/rules/link.rb
142
+ - lib/comet/rules/merge.rb
143
+ - lib/comet/rules/objcopy.rb
144
+ - lib/comet/rules/tmpdir.rb
145
+ - lib/comet/version.rb
146
+ - spec/comet/complex_c_program/Makefile
147
+ - spec/comet/complex_c_program/comet.rb
148
+ - spec/comet/complex_c_program/include/public_api.h
149
+ - spec/comet/complex_c_program/src/common.h
150
+ - spec/comet/complex_c_program/src/library.h
151
+ - spec/comet/complex_c_program/src/main.c
152
+ - spec/comet/complex_c_program/src/module_a/impl.c
153
+ - spec/comet/complex_c_program/src/module_a/impl.h
154
+ - spec/comet/complex_c_program/src/module_b/impl.c
155
+ - spec/comet/complex_c_program/src/module_b/impl.h
156
+ - spec/comet/empty_build_file/Makefile
157
+ - spec/comet/empty_build_file/comet.rb
158
+ - spec/comet/empty_build_file/folder/.keep
159
+ - spec/comet/generator_spec.rb
160
+ - spec/comet/nested_circular_reference/Makefile
161
+ - spec/comet/nested_circular_reference/comet.rb
162
+ - spec/comet/no_build_file/Makefile
163
+ - spec/comet/self_referential/Makefile
164
+ - spec/comet/self_referential/comet.rb
165
+ - spec/comet/simple_c_program/Makefile
166
+ - spec/comet/simple_c_program/comet.rb
167
+ - spec/comet/simple_c_program/main.c
168
+ - spec/comet/simple_c_program/stuff.h
169
+ homepage: https://github.com/TomCrypto/Comet
170
+ licenses: []
171
+ metadata: {}
172
+ post_install_message:
173
+ rdoc_options: []
174
+ require_paths:
175
+ - lib
176
+ required_ruby_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ required_rubygems_version: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ requirements: []
187
+ rubyforge_project:
188
+ rubygems_version: 2.6.11
189
+ signing_key:
190
+ specification_version: 4
191
+ summary: Comet is a fast and simple LLVM-oriented build tool
192
+ test_files:
193
+ - spec/comet/complex_c_program/Makefile
194
+ - spec/comet/complex_c_program/comet.rb
195
+ - spec/comet/complex_c_program/include/public_api.h
196
+ - spec/comet/complex_c_program/src/common.h
197
+ - spec/comet/complex_c_program/src/library.h
198
+ - spec/comet/complex_c_program/src/main.c
199
+ - spec/comet/complex_c_program/src/module_a/impl.c
200
+ - spec/comet/complex_c_program/src/module_a/impl.h
201
+ - spec/comet/complex_c_program/src/module_b/impl.c
202
+ - spec/comet/complex_c_program/src/module_b/impl.h
203
+ - spec/comet/empty_build_file/Makefile
204
+ - spec/comet/empty_build_file/comet.rb
205
+ - spec/comet/empty_build_file/folder/.keep
206
+ - spec/comet/generator_spec.rb
207
+ - spec/comet/nested_circular_reference/Makefile
208
+ - spec/comet/nested_circular_reference/comet.rb
209
+ - spec/comet/no_build_file/Makefile
210
+ - spec/comet/self_referential/Makefile
211
+ - spec/comet/self_referential/comet.rb
212
+ - spec/comet/simple_c_program/Makefile
213
+ - spec/comet/simple_c_program/comet.rb
214
+ - spec/comet/simple_c_program/main.c
215
+ - spec/comet/simple_c_program/stuff.h