aboutsummaryrefslogtreecommitdiffhomepage
path: root/cgo
AgeCommit message (Collapse)Author
2024-11-26cgo: fix build warnings on Windows ARMAyke van Laethem
Fix the warning, and also remove tinygo_clang_enum_visitor which was unused. See: https://github.com/golang/go/issues/49721
2024-11-20cgo: add support for `#cgo noescape` linesAyke van Laethem
Here is the proposal: https://github.com/golang/go/issues/56378 They are documented here: https://pkg.go.dev/cmd/cgo@master#hdr-Optimizing_calls_of_C_code This would have been very useful to fix https://github.com/tinygo-org/bluetooth/issues/176 in a nice way. That bug is now fixed in a different way using a wrapper function, but once this new noescape pragma gets included in TinyGo we could remove the workaround and use `#cgo noescape` instead.
2024-11-20cgo: support errno value as second return parameterAyke van Laethem
Making this work on all targets was interesting but there's now a test in place to make sure this works on all targets that have the CGo test enabled (which is almost all targets).
2024-11-18cgo: support function-like macrosAyke van Laethem
This is needed for code like this: #define __WASI_ERRNO_INVAL (UINT16_C(28)) #define EINVAL __WASI_ERRNO_INVAL
2024-11-18cgo: define idents referenced only from macrosAyke van Laethem
2024-09-17Cgo add cbytes implementation (rebased version of #3318) (#4470)leongross
cgo: added CBytes implementation
2024-07-13libclang: do not make error locations relativeAyke van Laethem
This is done at a later time anyway, so doesn't need to be done in the cgo package. In fact, _not_ doing it there makes it easier to print correct relative packages.
2024-07-13cgo: support preprocessor macros passed on the command lineAyke van Laethem
Go code might sometimes want to use preprocessor macros that were passed on the command line. This wasn't working before and resulted in the following error: internal error: could not find file where macro is defined This is now supported, though location information isn't available (which makes sense: the command line is not a file). I had to use the `clang_tokenize` API for this and reconstruct the original source location. Apparently this is the only way to do it: https://stackoverflow.com/a/19074846/559350 In the future we could consider replacing our own tokenization with the tokenizer that's built into Clang directly. This should reduce the possibility of bugs a bit.
2024-06-07cgo: implement shift operations in preprocessor macrosAyke van Laethem
2024-05-24LLVM 18 supportAyke van Laethem
2024-04-20chore: fix function names in commenthongkuang
Signed-off-by: hongkuang <[email protected]>
2024-01-20all: switch to LLVM 17 by defaultAyke van Laethem
2024-01-18cgo: add file AST for fake C file locationsAyke van Laethem
This is needed for the type checker, otherwise it doesn't know which Go version it should use for type checking.
2023-10-15all: fix a small incompatibility with NixAyke van Laethem
Hopefully this won't break anybody: while all tests still pass, there could in theory be systems where not supplying those libraries leads to linker errors.
2023-10-14builder: refactor clang include headersAyke van Laethem
Set -resource-dir in a central place instead of passing the header path around everywhere and adding it using the `-I` flag. I believe this is closer to how Clang is intended to be used. This change was inspired by my attempt to add a Nix flake file to TinyGo.
2023-10-06all: add initial LLVM 17 supportAyke van Laethem
This allows us to test and use LLVM 17, now that it is available in Homebrew. Full support for LLVM 17 (including using it by default) will have to wait until Espressif rebases their Xtensa fork of LLVM.
2023-10-01all: remove LLVM 14 supportAyke van Laethem
This is a big change: apart from removing LLVM 14 it also removes typed pointer support (which was only fully supported in LLVM up to version 14). This removes about 200 lines of code, but more importantly removes a ton of special cases for LLVM 14.
2023-09-24cgo: add C._Bool typeAyke van Laethem
This fixes https://github.com/tinygo-org/tinygo/issues/3926. While working on this I've found another bug: if C.bool is referenced from within Go, it isn't available anymore on the C side. This is an existing bug that also applies to float and double, but may be less likely to be triggered there. This bug is something to be fixed at a later time (it has something to do with preprocessor defines).
2023-09-18all: switch to LLVM 16Ayke van Laethem
This commit adds support for LLVM 16 and switches to it by default. That means three LLVM versions are supported at the same time: LLVM 14, 15, and 16. This commit includes work by QuLogic: * Part of this work was based on a PR by QuLogic: https://github.com/tinygo-org/tinygo/pull/3649 But I also had parts of this already implemented in an old branch I already made for LLVM 16. * QuLogic also provided a CGo fix here, which is also incorporated in this commit: https://github.com/tinygo-org/tinygo/pull/3869 The difference with the original PR by QuLogic is that this commit is more complete: * It switches to LLVM 16 by default. * It updates some things to also make it work with a self-built LLVM. * It fixes the CGo bug in a slightly different way, and also fixes another one not included in the original PR. * It does not keep compiler tests passing on older LLVM versions. I have found this to be quite burdensome and therefore don't generally do this - the smoke tests should hopefully catch most regressions.
2023-05-04cgo: allow LDFLAGS: --export=...Edoardo Vacchi
Signed-off-by: Edoardo Vacchi <[email protected]>
2023-01-17builder: add support for Go 1.20Ayke van Laethem
Not all features work yet, but allow it to compile with this Go version.
2023-01-12cgo: add support for bitwise operatorsAyke van Laethem
2022-12-19build: drop deprecated build tagsYurii Soldak
2022-11-02cgo: support anonymous enums included in multiple Go filesAyke van Laethem
Anonymous enums (often used in typedefs) triggered a problem that was already solved for structs but wasn't yet solved for enums. So this patch generalizes the code to work for both structs and enums, and adds testing for both.
2022-10-19ci: add support for LLVM 15Ayke van Laethem
This commit switches to LLVM 15 everywhere by default, while still keeping LLVM 14 support.
2022-10-13cgo: add support for C.float and C.doubleAyke van Laethem
They are not necessary in TinyGo because they always map to float32 and float64, but it's a good idea to add them regardless for compatibility with existing software. (Now I think about it, perhaps it would have been better to require explicit casts here just in case we want to support some really weird C system, but then again we even force 64-bit double on AVR even though avr-gcc defaults to 32-bit double).
2022-09-26cgo: fixes panic when FuncType.Results is nil (#3136)Crypt Keeper
* cgo: fixes panic when FuncType.Results is nil FuncType.Results can be nil. This fixes the comparison and backfills relevant tests. Signed-off-by: Adrian Cole <[email protected]> Co-authored-by: Ayke <[email protected]>
2022-09-16cgo: implement support for static functionsAyke van Laethem
2022-08-30all: drop support for Go 1.16 and Go 1.17Ayke van Laethem
2022-08-07all: update _test.go files for ioutil changesDamian Gryski
2022-08-04all: remove support for LLVM 13Ayke van Laethem
2022-08-04all: format code according to Go 1.19 rulesAyke van Laethem
Go 1.19 started reformatting code in a way that makes it more obvious how it will be rendered on pkg.go.dev. It gets it almost right, but not entirely. Therefore, I had to modify some of the comments so that they are formatted correctly.
2022-07-04cgo: add a check that we don't use different LLVM versionsAyke van Laethem
2022-07-04cgo: fix default LLVM version to LLVM 14Ayke van Laethem
Without extra flags, we would try to use LLVM 13 for cgo and LLVM 14 for other things since 873412b43a6384e74a63f1d7b95de6455fc76992. That isn't great. So fix this by only using LLVM 14 in the cgo package.
2022-05-07all: remove support for LLVM 11 and LLVM 12Ayke van Laethem
This removes a lot of backwards compatibility cruft and makes it possible to start using features that need LLVM 13 or newer. For example: * https://github.com/tinygo-org/tinygo/pull/2637 * https://github.com/tinygo-org/tinygo/pull/2830
2022-05-06cgo: refactorAyke van Laethem
This is a large refactor of the cgo package. It should fix a number of smaller problems and be a bit more strict (like upstream CGo): it for example requires every Go file in a package to include the header files it needs instead of piggybacking on imports in earlier files. The main benefit is that it should be a bit more maintainable and easier to add new features in the future (like static functions). This breaks the tinygo.org/x/bluetooth package, which should be updated before this change lands.
2022-04-23all: update to LLVM 14Ayke van Laethem
Switch over to LLVM 14 for static builds. Keep using LLVM 13 for regular builds for now. This uses a branch of the upstream Espressif branch to fix an issue, see: https://github.com/espressif/llvm-project/pull/59
2022-03-12cgo: slightly improve error messagesAyke van Laethem
Updating them to libclang-13-dev was a good change, but we can go even further: * The suggestion didn't apply to MacOS. * The suggestion would need to be updated with every LLVM release, which is a maintenance burden. * The suggestion is wrong when compiling with `-tags=llvm12` for example to choose a different LLVM version. Therefore, link to the build documentation instead.
2022-03-12Update libclang installation comment to libclang-13-devZauberNerd
Tinygo bumped the default llvm version to v13 in: tinygo-org/tinygo@3a4e0c9
2022-03-11Fix LLVM build constraintsElliott Sales de Andrade
2022-02-12loader: only add Clang header path for CGoAyke van Laethem
It should only be added at the point that it is needed, for example when using libclang or using the built-in Clang. It isn't needed when running an external tool.
2022-01-23Switch default to llvm13Federico G. Schwindt
2022-01-12feat: support build on darwin arm64 (#2439)Pure White
main: support build on darwin arm64
2022-01-09all: switch to LLVM 13Ayke van Laethem
This adds support for building with `-tags=llvm13` and switches to LLVM 13 for tinygo binaries that are statically linked against LLVM. Some notes on this commit: * Added `-mfloat-abi=soft` to all Cortex-M targets because otherwise nrfx would complain that floating point was enabled on Cortex-M0. That's not the case, but with `-mfloat-abi=soft` the `__SOFTFP__` macro is defined which silences this warning. See: https://reviews.llvm.org/D100372 * Changed from `--sysroot=<root>` to `-nostdlib -isystem <root>` for musl because with Clang 13, even with `--sysroot` some system libraries are used which we don't want. * Changed all `-Xclang -internal-isystem -Xclang` to simply `-isystem`, for consistency with the above change. It appears to have the same effect. * Moved WebAssembly function declarations to the top of the file in task_asyncify_wasm.S because (apparently) the assembler has become more strict.
2021-12-28builder: use build ID as cache keyAyke van Laethem
Instead of storing an increasing version number in relevant packages (compiler.Version, interp.Version, cgo.Version, ...), read the build ID from the currently running executable. This has several benefits: * All changes relevant to the compiled packages are caught. * No need to bump the version for each change to these packages. This avoids merge conflicts. * During development, `go install` is enough. No need to run `tinygo clean` all the time. Of course, the drawback is that it might be updated a bit more often than necessary but I think the overall benefit is big. Regular release users shouldn't see any difference. Because the tinygo binary stays the same, the cache works well.
2021-11-30all: add LLVM 12 supportAyke van Laethem
Originally based on a PR by @QuLogic, but extended a lot to get all tests to pass.
2021-11-24cgo: add support for C.CString and related functionsAyke van Laethem
2021-11-24cgo: simplify construction of in-memory ASTAyke van Laethem
Instead of writing the entire AST by hand, write it in Go code and parse it to create the base AST to build upon.
2021-11-24cgo: add //go: pragmas to generated functions and globalsAyke van Laethem
This patch adds //go: pragmas directly to declared functions and globals found during CGo processing. This simplifies the logic in the compiler: it no longer has to consider special "C." prefixed function names. It also makes the cgo pass more flexible in the pragmas it emits for functions and global variables.
2021-11-04cgo: run CGo parser for all CGo fragments in a fileAyke van Laethem
Previously, libclang was run on each fragment (import "C") separately. However, in regular Go it's possible for later fragments to refer to types in earlier fragments so they must have been parsed as one. This commit changes the behavior to run only one C parser invocation for each Go file.