comet-build 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +15 -5
- data/lib/comet/dsl/{c → clike}/source.rb +9 -7
- data/lib/comet/dsl/source.rb +10 -4
- data/lib/comet/rules/compile.rb +2 -1
- data/lib/comet/version.rb +1 -1
- data/spec/comet/complex_c_program/Makefile +27 -27
- data/spec/comet/simple_c_program/Makefile +10 -10
- metadata +3 -4
- data/lib/comet/dsl/cpp/source.rb +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c00a89fe790f0f634689c7c6e41f41cd61a85f6
|
4
|
+
data.tar.gz: aed176dc8182228ac62e9397a0fdc29dd0eaad6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6237b71f39a4f7746ebeb2dad06dc2fd8373f6d5baf8560101de9715c88e1ec3eaca0a08de58766e8a94fb8fddae0a673daadfeec377bf5d7b118c27fb9af58f
|
7
|
+
data.tar.gz: 0ac5632fbd6b3310714f1491dab2d268dea17ccc11fc498ca5e14dffa1cfe1efb27dc323dad5fe48cdf522e4732dfe9c06f8732da4e2d86695ec847b4e165020
|
data/README.md
CHANGED
@@ -13,7 +13,7 @@ Comet is a no-nonsense build tool primarily oriented towards embedded or cross-c
|
|
13
13
|
|
14
14
|
Functionally, Comet is a Makefile generator which accepts a domain-specific language from a build file, produces a Makefile, and executes it, placing all intermediate files inside a hidden `.comet` temporary directory. The only thing you need to do as a developer is write your `comet.rb` build file and add `.comet` to your gitignore file.
|
15
15
|
|
16
|
-
**WARNING**: this software is still in the testing phase, use in production at your own risk. Improvement suggestions and pull requests are welcome and appreciated. Currently only
|
16
|
+
**WARNING**: this software is still in the testing phase, use in production at your own risk. Improvement suggestions and pull requests are welcome and appreciated. Currently only C and C++ language support is implemented through Clang and the tool probably only works on Linux as of now, but just a couple parts of the code are OS-dependent.
|
17
17
|
|
18
18
|
Installation
|
19
19
|
------------
|
@@ -43,6 +43,7 @@ Language support for compiling source files is shown below. Adding support for a
|
|
43
43
|
| -------- | ----------- | ------------------ |
|
44
44
|
| *Native* | `:native` | None (link-only) |
|
45
45
|
| C | `:c` | Clang |
|
46
|
+
| C++ | `:cpp` | Clang |
|
46
47
|
|
47
48
|
Native languages are those for which the source code is either already LLVM bitcode, or is already in a lower representation than LLVM IR, such as assembly. These will be passed directly to the linker after compiled LLVM bitcode, therefore:
|
48
49
|
|
@@ -53,7 +54,6 @@ Native languages are those for which the source code is either already LLVM bitc
|
|
53
54
|
Planned features
|
54
55
|
----------------
|
55
56
|
|
56
|
-
- C++ language support
|
57
57
|
- Windows support
|
58
58
|
- Clarification of linker parameters (triple, isa, cpu)
|
59
59
|
- Ability to import other build files recursively
|
@@ -225,14 +225,14 @@ source language: :native do
|
|
225
225
|
end
|
226
226
|
```
|
227
227
|
|
228
|
-
### C Source Directive
|
228
|
+
### C/C++ Source Directive
|
229
229
|
|
230
|
-
C source directives take an array of header include paths as a parameter, and accept source file import directives, option directives (to pass in compiler flags) and define directives (to pass in preprocessor macros).
|
230
|
+
C/C++ source directives take an array of header include paths as a parameter, and accept source file import directives, option directives (to pass in compiler flags) and define directives (to pass in preprocessor macros).
|
231
231
|
|
232
232
|
#### Grammar
|
233
233
|
|
234
234
|
```ruby
|
235
|
-
source language: :c, headers: ['dir1', 'dir2', ...] do
|
235
|
+
source language: :c|:cpp, headers: ['dir1', 'dir2', ...] do
|
236
236
|
# import directives
|
237
237
|
# option directives
|
238
238
|
# define directives
|
@@ -250,6 +250,12 @@ source language: :c, headers: ['include'] do
|
|
250
250
|
end
|
251
251
|
```
|
252
252
|
|
253
|
+
You can unset a previously defined option by using the special symbol `:remove` as a value. For instance:
|
254
|
+
|
255
|
+
```ruby
|
256
|
+
option :Werror => :remove
|
257
|
+
```
|
258
|
+
|
253
259
|
Advanced Usage
|
254
260
|
--------------
|
255
261
|
|
@@ -297,6 +303,10 @@ hardware 'hal', targets: :device2 do
|
|
297
303
|
end
|
298
304
|
```
|
299
305
|
|
306
|
+
### Overriding external programs
|
307
|
+
|
308
|
+
Any external tool called by a Comet-generated Makefile can be overridden through environment variables of the form `COMET_TOOLNAME`. For instance, `cp` is invoked through `COMET_CP`, `clang` is invoked through `COMET_CLANG`, and so on. You can see the list of tools by inspecting the generated Makefile with `comet -s`, they will be at the top.
|
309
|
+
|
300
310
|
### Some helper Ruby methods
|
301
311
|
|
302
312
|
In the spirit of its DSL, Comet defines some convenience methods to make your build file more expressive.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Comet
|
2
2
|
module DSL
|
3
|
-
module
|
3
|
+
module CLike
|
4
4
|
class Source
|
5
5
|
include Comet::DSL::Helpers
|
6
6
|
alias inject instance_exec
|
@@ -17,7 +17,8 @@ module Comet
|
|
17
17
|
@options.add('D', *args, **kwargs)
|
18
18
|
end
|
19
19
|
|
20
|
-
def initialize(headers:, &block)
|
20
|
+
def initialize(language:, headers:, &block)
|
21
|
+
@language = language
|
21
22
|
@headers = headers
|
22
23
|
@imports = []
|
23
24
|
@options = Comet::DSL::Options.new
|
@@ -26,17 +27,18 @@ module Comet
|
|
26
27
|
end
|
27
28
|
|
28
29
|
def to_s
|
29
|
-
|
30
|
+
if language == :c
|
31
|
+
'C source'
|
32
|
+
elsif language == :cpp
|
33
|
+
'C++ source'
|
34
|
+
end
|
30
35
|
end
|
31
36
|
|
37
|
+
attr_reader :language
|
32
38
|
attr_reader :headers
|
33
39
|
attr_reader :imports
|
34
40
|
attr_reader :options
|
35
41
|
|
36
|
-
def language
|
37
|
-
:c
|
38
|
-
end
|
39
|
-
|
40
42
|
def native?
|
41
43
|
false
|
42
44
|
end
|
data/lib/comet/dsl/source.rb
CHANGED
@@ -4,15 +4,21 @@ module Comet
|
|
4
4
|
class << self
|
5
5
|
def create(language:, **kwargs, &block)
|
6
6
|
raise "unknown language #{language}" unless valid? language
|
7
|
-
LANGUAGES[language].
|
7
|
+
LANGUAGES[language].call(**kwargs, &block)
|
8
8
|
end
|
9
9
|
|
10
10
|
private
|
11
11
|
|
12
12
|
LANGUAGES = {
|
13
|
-
c:
|
14
|
-
|
15
|
-
|
13
|
+
c: proc do |**kwargs, &block|
|
14
|
+
CLike::Source.new(language: :c, **kwargs, &block)
|
15
|
+
end,
|
16
|
+
cpp: proc do |**kwargs, &block|
|
17
|
+
CLike::Source.new(language: :cpp, **kwargs, &block)
|
18
|
+
end,
|
19
|
+
native: proc do |**kwargs, &block|
|
20
|
+
Native::Source.new(**kwargs, &block)
|
21
|
+
end
|
16
22
|
}.freeze
|
17
23
|
|
18
24
|
def valid?(language)
|
data/lib/comet/rules/compile.rb
CHANGED
@@ -13,6 +13,7 @@ module Comet
|
|
13
13
|
triple: @linker.triple,
|
14
14
|
isa: @linker.isa,
|
15
15
|
cpu: @linker.cpu,
|
16
|
+
language: @source.language,
|
16
17
|
flags: Set[formatted_flags],
|
17
18
|
headers: formatted_headers,
|
18
19
|
dependencies: Set[dependencies]
|
@@ -52,7 +53,7 @@ module Comet
|
|
52
53
|
[
|
53
54
|
'$(COMET_CC)',
|
54
55
|
'-x',
|
55
|
-
'c',
|
56
|
+
@source.language == :c ? 'c' : 'c++',
|
56
57
|
"--target=#{@linker.triple}",
|
57
58
|
"-march=#{@linker.isa}",
|
58
59
|
"-mcpu=#{@linker.cpu}",
|
data/lib/comet/version.rb
CHANGED
@@ -9,48 +9,48 @@ COMET_RM ?= rm
|
|
9
9
|
.PHONY: all
|
10
10
|
all: test
|
11
11
|
.PHONY: test
|
12
|
-
test: .comet/
|
12
|
+
test: .comet/8030c3912f57888f83ad.phony .comet/70ed28144e43c7deae81.phony
|
13
13
|
.PHONY: test/linux_x64
|
14
|
-
test/linux_x64: .comet/
|
14
|
+
test/linux_x64: .comet/70ed28144e43c7deae81.phony
|
15
15
|
.PHONY: test/linux_x86
|
16
|
-
test/linux_x86: .comet/
|
16
|
+
test/linux_x86: .comet/8030c3912f57888f83ad.phony
|
17
17
|
.PHONY: .comet
|
18
18
|
.comet:
|
19
19
|
if [ ! -d "$@" ] || [ ! -d "`readlink .comet`" ]; then $(COMET_LN) -sf `mktemp -d` $@; fi
|
20
|
-
.PHONY: .comet/
|
21
|
-
.comet/
|
22
|
-
$(COMET_CP) .comet/
|
23
|
-
$(COMET_CP) .comet/
|
24
|
-
$(COMET_CP) .comet/
|
25
|
-
.comet/
|
26
|
-
$(COMET_LD) --target=x86-unknown-linux-gnu -march=skylake -mcpu=skylake -Wl,-Map=.comet/
|
27
|
-
.comet/
|
20
|
+
.PHONY: .comet/8030c3912f57888f83ad.phony
|
21
|
+
.comet/8030c3912f57888f83ad.phony: .comet/e542f5d8ea9b413c1db8.elf .comet/e7b25529bcd9f873ade7.bin
|
22
|
+
$(COMET_CP) .comet/e542f5d8ea9b413c1db8.elf bin/test_linux_x86.elf
|
23
|
+
$(COMET_CP) .comet/e7b25529bcd9f873ade7.bin bin/test_linux_x64.bin
|
24
|
+
$(COMET_CP) .comet/e542f5d8ea9b413c1db8.map bin/test_linux_x86.map
|
25
|
+
.comet/e542f5d8ea9b413c1db8.elf: .comet/ae8d70c4ad166e5f05e6.s | .comet
|
26
|
+
$(COMET_LD) --target=x86-unknown-linux-gnu -march=skylake -mcpu=skylake -Wl,-Map=.comet/e542f5d8ea9b413c1db8.map -o $@ $^
|
27
|
+
.comet/ae8d70c4ad166e5f05e6.s: .comet/1a6fa701e7f59b5130cf.ll | .comet
|
28
28
|
$(COMET_OPT) -S -Ofast --target=x86-unknown-linux-gnu -march=skylake -mcpu=skylake -o $@ $<
|
29
|
-
.comet/
|
29
|
+
.comet/1a6fa701e7f59b5130cf.ll: .comet/848a630ef53895b3e139.ll .comet/44b0462bd14ef6c5f324.ll .comet/3e98d572194d9f0797c2.ll | .comet
|
30
30
|
$(COMET_LINK) -S -o $@ $^
|
31
|
-
.comet/
|
31
|
+
.comet/848a630ef53895b3e139.ll: src/module_a/impl.c src/module_a/impl.h src/common.h include/public_api.h | .comet
|
32
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/
|
33
|
+
.comet/44b0462bd14ef6c5f324.ll: src/module_b/impl.c src/module_b/impl.h src/common.h include/public_api.h | .comet
|
34
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/
|
35
|
+
.comet/3e98d572194d9f0797c2.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
36
|
$(COMET_CC) -x c --target=x86-unknown-linux-gnu -march=skylake -mcpu=skylake -S -flto -Isrc -Iinclude -std=c89 -o $@ -c $<
|
37
|
-
.comet/
|
37
|
+
.comet/e7b25529bcd9f873ade7.bin: .comet/e542f5d8ea9b413c1db8.elf | .comet
|
38
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/
|
40
|
-
.comet/
|
41
|
-
$(COMET_CP) .comet/
|
42
|
-
$(COMET_CP) .comet/
|
43
|
-
.comet/
|
44
|
-
$(COMET_LD) --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -Wl,-Map=.comet/
|
45
|
-
.comet/
|
39
|
+
.PHONY: .comet/70ed28144e43c7deae81.phony
|
40
|
+
.comet/70ed28144e43c7deae81.phony: .comet/9dc94950d9e3e85125d8.elf
|
41
|
+
$(COMET_CP) .comet/9dc94950d9e3e85125d8.elf bin/test_linux_x64.elf
|
42
|
+
$(COMET_CP) .comet/9dc94950d9e3e85125d8.map bin/test_linux_x64.map
|
43
|
+
.comet/9dc94950d9e3e85125d8.elf: .comet/c8008c83512b753cc0f5.s | .comet
|
44
|
+
$(COMET_LD) --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -Wl,-Map=.comet/9dc94950d9e3e85125d8.map -o $@ $^
|
45
|
+
.comet/c8008c83512b753cc0f5.s: .comet/5b532eac405115700e15.ll | .comet
|
46
46
|
$(COMET_OPT) -S -O3 --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -o $@ $<
|
47
|
-
.comet/
|
47
|
+
.comet/5b532eac405115700e15.ll: .comet/4b993a43966c8f84b121.ll .comet/29c2bb990093d697ea4f.ll .comet/1872519e0f2a83f8c783.ll | .comet
|
48
48
|
$(COMET_LINK) -S -o $@ $^
|
49
|
-
.comet/
|
49
|
+
.comet/4b993a43966c8f84b121.ll: src/module_a/impl.c src/module_a/impl.h src/common.h include/public_api.h | .comet
|
50
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/
|
51
|
+
.comet/29c2bb990093d697ea4f.ll: src/module_b/impl.c src/module_b/impl.h src/common.h include/public_api.h | .comet
|
52
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/
|
53
|
+
.comet/1872519e0f2a83f8c783.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
54
|
$(COMET_CC) -x c --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -S -flto -Isrc -Iinclude -std=c89 -o $@ -c $<
|
55
55
|
.PHONY: clean
|
56
56
|
clean:
|
@@ -8,22 +8,22 @@ COMET_RM ?= rm
|
|
8
8
|
.PHONY: all
|
9
9
|
all: main
|
10
10
|
.PHONY: main
|
11
|
-
main: .comet/
|
11
|
+
main: .comet/116dd1901deffe3fa447.phony
|
12
12
|
.PHONY: main/linux_x64
|
13
|
-
main/linux_x64: .comet/
|
13
|
+
main/linux_x64: .comet/116dd1901deffe3fa447.phony
|
14
14
|
.PHONY: .comet
|
15
15
|
.comet:
|
16
16
|
if [ ! -d "$@" ] || [ ! -d "`readlink .comet`" ]; then $(COMET_LN) -sf `mktemp -d` $@; fi
|
17
|
-
.PHONY: .comet/
|
18
|
-
.comet/
|
19
|
-
$(COMET_CP) .comet/
|
20
|
-
.comet/
|
21
|
-
$(COMET_LD) --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -Wl,-Map=.comet/
|
22
|
-
.comet/
|
17
|
+
.PHONY: .comet/116dd1901deffe3fa447.phony
|
18
|
+
.comet/116dd1901deffe3fa447.phony: .comet/457234dc02f9dfb5542f.elf
|
19
|
+
$(COMET_CP) .comet/457234dc02f9dfb5542f.elf main
|
20
|
+
.comet/457234dc02f9dfb5542f.elf: .comet/ccb40296b80a66398214.s | .comet
|
21
|
+
$(COMET_LD) --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -Wl,-Map=.comet/457234dc02f9dfb5542f.map -o $@ $^
|
22
|
+
.comet/ccb40296b80a66398214.s: .comet/93cf4b5489860f6a6154.ll | .comet
|
23
23
|
$(COMET_OPT) -S -O1 --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -o $@ $<
|
24
|
-
.comet/
|
24
|
+
.comet/93cf4b5489860f6a6154.ll: .comet/02c92d481320c450e153.ll | .comet
|
25
25
|
$(COMET_LINK) -S -o $@ $^
|
26
|
-
.comet/
|
26
|
+
.comet/02c92d481320c450e153.ll: main.c ./stuff.h | .comet
|
27
27
|
$(COMET_CC) -x c --target=x86_64-unknown-linux-gnu -march=skylake -mcpu=skylake -S -flto -I. -o $@ -c $<
|
28
28
|
.PHONY: clean
|
29
29
|
clean:
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: comet-build
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Beneteau
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -114,8 +114,7 @@ files:
|
|
114
114
|
- comet-build.gemspec
|
115
115
|
- lib/comet.rb
|
116
116
|
- lib/comet/dsl/bin_output.rb
|
117
|
-
- lib/comet/dsl/
|
118
|
-
- lib/comet/dsl/cpp/source.rb
|
117
|
+
- lib/comet/dsl/clike/source.rb
|
119
118
|
- lib/comet/dsl/elf_output.rb
|
120
119
|
- lib/comet/dsl/firmware.rb
|
121
120
|
- lib/comet/dsl/hardware.rb
|
data/lib/comet/dsl/cpp/source.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
module Comet
|
2
|
-
module DSL
|
3
|
-
module CPP
|
4
|
-
class Source
|
5
|
-
include Comet::DSL::Helpers
|
6
|
-
alias inject instance_exec
|
7
|
-
|
8
|
-
def import(pattern)
|
9
|
-
@imports.push pattern
|
10
|
-
end
|
11
|
-
|
12
|
-
def option(*args, **kwargs)
|
13
|
-
@options.add('', *args, **kwargs)
|
14
|
-
end
|
15
|
-
|
16
|
-
def define(*args, **kwargs)
|
17
|
-
@options.add('D', *args, **kwargs)
|
18
|
-
end
|
19
|
-
|
20
|
-
def initialize(headers:, &block)
|
21
|
-
@headers = headers
|
22
|
-
@imports = []
|
23
|
-
@options = Comet::DSL::Options.new
|
24
|
-
|
25
|
-
instance_exec(&block) if block_given?
|
26
|
-
end
|
27
|
-
|
28
|
-
def to_s
|
29
|
-
'C++ source'
|
30
|
-
end
|
31
|
-
|
32
|
-
attr_reader :headers
|
33
|
-
attr_reader :imports
|
34
|
-
attr_reader :options
|
35
|
-
|
36
|
-
def language
|
37
|
-
:cpp
|
38
|
-
end
|
39
|
-
|
40
|
-
def native?
|
41
|
-
false
|
42
|
-
end
|
43
|
-
|
44
|
-
def files
|
45
|
-
@imports.flat_map do |pattern|
|
46
|
-
Dir.glob pattern
|
47
|
-
end.uniq
|
48
|
-
end
|
49
|
-
|
50
|
-
def validate!
|
51
|
-
raise "#{self} references no source files" if @imports.empty?
|
52
|
-
@options.validate!
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|