comet-build 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.
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