Ayke van Laethem
0d8a7e1666
avr: link with the GCC runtime library
...
This allows the use of some compiler-generated builtins that are
hopefully compatible with LLVM. Example: println(uint8(foo))
Code size is unchanged normally but of course compiler builtins will
increase code size when actually used (for example with division).
2018-09-16 14:54:10 +02:00
Ayke van Laethem
a25e598463
compiler: truncate output files before writing
2018-09-16 13:41:56 +02:00
Ayke van Laethem
35fe24981f
runtime/unix: panic: call abort() instead of exit(2)
...
abort() will cause gdb to show a backtrace when running inside the
debugger, and abort() seems more appropriate anyway for critical errors.
2018-09-16 13:01:15 +02:00
Ayke van Laethem
1484bb5c2c
all: basic support for the os package
...
The resulting binary is pretty big due to lacking optimizations
(probably because of interfaces), so that should be fixed.
2018-09-16 13:01:03 +02:00
Ayke van Laethem
c237633d34
all: use a custom sync package
...
The sync package is strongly tied to the runtime, so it's easier to
implement a new one. Besides, it's pretty big so it's better to replace
it.
2018-09-15 18:51:51 +02:00
Ayke van Laethem
94b18e2d79
compiler: support integer convert in interpreter
2018-09-15 18:47:15 +02:00
Ayke van Laethem
1d2e0cd259
compiler: don't show DebugRef with -dumpssa
2018-09-15 18:45:46 +02:00
Ayke van Laethem
2a20c0c7f0
all: rewrite sleep function
...
time.Sleep now compiles on all systems, so lets use that.
Additionally, do a few improvements in time unit handling for the
scheduler. This should lead to somewhat longer sleep durations without
wrapping (on some platforms).
Some examples got smaller, some got bigger. In particular, code using
the scheduler got bigger and the blinky1 example got smaller (especially
on Arduino: 380 -> 314 bytes).
2018-09-15 01:58:54 +02:00
Ayke van Laethem
1ac67cf8de
compiler: adding a few more ignored init calls
...
These calls are generated in the JavaScript target (syscall/js and
syscall with GOOS=js), but they are not used at the moment. So ignore
them until they're needed.
2018-09-15 01:04:19 +02:00
Ayke van Laethem
38efc5653d
compiler: support compile-time hashmap with int keys
2018-09-15 01:03:22 +02:00
Ayke van Laethem
152e12e4b0
all: implement iterating over hashmaps
...
Still no support for hashmaps > 8 entries, but this kind of works.
2018-09-15 00:29:34 +02:00
Ayke van Laethem
5b4b6cfee2
compiler: use -dumpssa flag in interpreter
...
This is useful for debugging.
2018-09-14 23:29:33 +02:00
Ayke van Laethem
866a6edb5f
compiler: fix word size for AVR
...
Using a word size less than 4 led to typechecker errors.
2018-09-14 21:36:51 +02:00
Ayke van Laethem
327076da39
examples/test: add slice-a-slice test
2018-09-14 21:02:29 +02:00
Ayke van Laethem
1387a1024d
examples/test: small cleanup
...
I forgot to remove some commented out code...
2018-09-14 21:00:52 +02:00
Ayke van Laethem
112f6dc01a
all: implement tinygo flash
command
...
This will now just work:
tinygo flash -target=arduino examples/blinky1
2018-09-14 20:59:28 +02:00
Ayke van Laethem
6450daa3c8
runtime/cgo: go fmt
2018-09-14 20:58:00 +02:00
Ayke van Laethem
13633133a5
Makefile: simplify make fmt
...
There is no C source file anymore `go fmt` will complain about.
2018-09-14 20:57:21 +02:00
Ayke van Laethem
09cbd223c3
compiler: remove -runtime flag
...
It is not necessary anymore.
2018-09-14 20:56:48 +02:00
Ayke van Laethem
c763e9f1a6
compiler: produce .hex files directly
2018-09-14 20:27:04 +02:00
Ayke van Laethem
f41a8032e7
machine/dummy: add fake button pins
2018-09-14 17:01:16 +02:00
Ayke van Laethem
752332ff13
machine/nrf: implement reading GPIO pins
2018-09-14 16:59:28 +02:00
Ron Evans
ab6757fe11
avr: implement Get() function on AVR, and leave stubs for NRF and dummy machines
...
Signed-off-by: Ron Evans <ron@hybridgroup.com>
2018-09-13 20:54:01 +02:00
Ayke van Laethem
ec50db729d
compiler: implement slicing slices
2018-09-13 20:49:35 +02:00
Ayke van Laethem
5b3ef2c02f
compiler: fix unreachable type assert
...
The unreachable instruction is actually a block terminator so may only
be inserted at the end of a basic block. This is not always the case for
type asserts, so don't insert this instruction.
LLVM will hopefully optimize it anyway when it realizes anything after
the panic() call is unreachable.
2018-09-13 20:48:23 +02:00
Ayke van Laethem
9cd7c7f0ba
compiler: fix phi nodes for type asserts
...
Type asserts insert more basic block, causing phi node values to be
invalid. Fix this by remembering the outgoing LLVM basic block.
2018-09-13 20:42:04 +02:00
Ayke van Laethem
57661a3c76
compiler: fix typeassert without comma-ok for unused types
2018-09-13 16:58:44 +02:00
Ron Evans
d948abdf82
avr: correct register for Set() operation on pins 0-7
...
Signed-off-by: Ron Evans <ron@hybridgroup.com>
2018-09-13 12:03:04 +02:00
Ayke van Laethem
76e77917d8
targets: move target-specific files to this directory
2018-09-13 00:59:39 +02:00
Ayke van Laethem
e389d38dec
Makefile: improve gen-device* commands
2018-09-13 00:55:49 +02:00
Ayke van Laethem
18b3e8d156
gen-device: move to new tools directory
2018-09-13 00:55:18 +02:00
Ayke van Laethem
a46ed465c5
README: defer has been fully implemented
2018-09-13 00:31:43 +02:00
Ayke van Laethem
422c848163
README: fix nrf example and add arduino example
2018-09-13 00:23:53 +02:00
Ayke van Laethem
7e7502a990
README: update build instructions
2018-09-13 00:23:45 +02:00
Ayke van Laethem
5e9e3bd1a0
Makefile: use the compiler driver directly
2018-09-12 23:55:13 +02:00
Ayke van Laethem
76a513802f
targets/pca10040: support linking from within the compiler
...
This is kind of dirty with that huge list of linker params, but it works
and it produces smaller object files (probably because GCC is better
optimized for size).
2018-09-12 23:40:21 +02:00
Ayke van Laethem
8ce139284a
all: remove last traces of the C runtime
...
This increases code size on the nrf, but it is a fixed increase and can
hopefully be reduced in the future.
The Makefile gets a lot smaller with this which is a huge advantage
(less build time complexity).
2018-09-12 23:26:30 +02:00
Ayke van Laethem
f7f7d4cbbc
runtime/nrf: translate nrf sleep function from C to Go
...
This is the last critical part of the C runtime.
Code size is reduced by 4 bytes for examples/blinky2 (probably due to
inlining) and is unchanged for examples/test.
2018-09-12 22:24:17 +02:00
Ayke van Laethem
67e33ac30e
gen-device-svd: add _Pos and _Msk fields
...
Without these extra fields, it is impossible to read/write some register
bits correctly.
2018-09-12 22:06:42 +02:00
Ayke van Laethem
2788ab0172
all: rename __reg to __volatile
...
It is less magical now: it only marks loads and stores as volatile. So
the name '__reg' is a bit wrong now.
2018-09-12 22:05:41 +02:00
Ayke van Laethem
914cd56ca5
all: support Arduino in the compiler driver
...
This makes sure the compiler itself can build/link an ELF file that
works on an Arduino.
2018-09-12 20:55:50 +02:00
Ayke van Laethem
865520b571
compiler: act as a compiler driver (on unix systems)
...
As a final step, link the object file with the system compiler/linker.
TODO: cross compiling.
2018-09-12 19:59:13 +02:00
Ayke van Laethem
6ab2b30984
compiler: move output file type selection to main.go
2018-09-12 19:11:50 +02:00
Ayke van Laethem
9bec479041
all: make targets configurable with a JSON file
...
This is intentionally similar to the target specifications in Rust:
https://doc.rust-lang.org/nightly/nightly-rustc/rustc_target/spec/struct.TargetOptions.html
2018-09-12 18:28:39 +02:00
Ayke van Laethem
20c2552f8a
compiler: add 'run' command for bytecode interpretation
2018-09-12 17:26:56 +02:00
Ayke van Laethem
8362751590
compiler: use runtime.GOOS/GOARCH instead of hardcoding build tags
2018-09-12 17:25:43 +02:00
Ayke van Laethem
e9b0a7d2ae
compiler: improve command line errors
2018-09-12 17:25:14 +02:00
Ayke van Laethem
0779ee6088
compiler: improve command line argument parsing
...
To get more compatibility with the go command, implement a similar
command line interface (with "tinygo build <package>" etc.).
Other than that, an all-round cleanup of command parsing.
2018-09-12 17:23:36 +02:00
Ayke van Laethem
81b9edbe65
compiler: print() doesn't print spaces between arguments
2018-09-11 20:01:49 +02:00
Ayke van Laethem
8675025fc8
compiler: implement type assert without comma-ok
2018-09-11 19:51:31 +02:00