mirror of https://github.com/tinygo-org/tinygo.git
wasmstm32webassemblymicrocontrollerarmavrspiwasiadafruitarduinocircuitplayground-expressgpioi2cllvmmicrobitnrf51nrf52nrf52840samd21tinygo
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.5 KiB
81 lines
2.5 KiB
package builder
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/tinygo-org/tinygo/goenv"
|
|
)
|
|
|
|
var WasmBuiltins = Library{
|
|
name: "wasmbuiltins",
|
|
makeHeaders: func(target, includeDir string) error {
|
|
if err := os.Mkdir(includeDir+"/bits", 0o777); err != nil {
|
|
return err
|
|
}
|
|
f, err := os.Create(includeDir + "/bits/alltypes.h")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if _, err := f.Write([]byte(wasmAllTypes)); err != nil {
|
|
return err
|
|
}
|
|
return f.Close()
|
|
},
|
|
cflags: func(target, headerPath string) []string {
|
|
libcDir := filepath.Join(goenv.Get("TINYGOROOT"), "lib/wasi-libc")
|
|
return []string{
|
|
"-Werror",
|
|
"-Wall",
|
|
"-std=gnu11",
|
|
"-nostdlibinc",
|
|
"-isystem", libcDir + "/libc-top-half/musl/arch/wasm32",
|
|
"-isystem", libcDir + "/libc-top-half/musl/arch/generic",
|
|
"-isystem", libcDir + "/libc-top-half/musl/src/internal",
|
|
"-isystem", libcDir + "/libc-top-half/musl/src/include",
|
|
"-isystem", libcDir + "/libc-top-half/musl/include",
|
|
"-isystem", libcDir + "/libc-bottom-half/headers/public",
|
|
"-I" + headerPath,
|
|
}
|
|
},
|
|
sourceDir: func() string { return filepath.Join(goenv.Get("TINYGOROOT"), "lib/wasi-libc") },
|
|
librarySources: func(target string) ([]string, error) {
|
|
return []string{
|
|
// memory builtins needed for llvm.memcpy.*, llvm.memmove.*, and
|
|
// llvm.memset.* LLVM intrinsics.
|
|
"libc-top-half/musl/src/string/memcpy.c",
|
|
"libc-top-half/musl/src/string/memmove.c",
|
|
"libc-top-half/musl/src/string/memset.c",
|
|
|
|
// exp, exp2, and log are needed for LLVM math builtin functions
|
|
// like llvm.exp.*.
|
|
"libc-top-half/musl/src/math/__math_divzero.c",
|
|
"libc-top-half/musl/src/math/__math_invalid.c",
|
|
"libc-top-half/musl/src/math/__math_oflow.c",
|
|
"libc-top-half/musl/src/math/__math_uflow.c",
|
|
"libc-top-half/musl/src/math/__math_xflow.c",
|
|
"libc-top-half/musl/src/math/exp.c",
|
|
"libc-top-half/musl/src/math/exp_data.c",
|
|
"libc-top-half/musl/src/math/exp2.c",
|
|
"libc-top-half/musl/src/math/log.c",
|
|
"libc-top-half/musl/src/math/log_data.c",
|
|
}, nil
|
|
},
|
|
}
|
|
|
|
// alltypes.h for wasm-libc, using the types as defined inside Clang.
|
|
const wasmAllTypes = `
|
|
typedef __SIZE_TYPE__ size_t;
|
|
typedef __INT8_TYPE__ int8_t;
|
|
typedef __INT16_TYPE__ int16_t;
|
|
typedef __INT32_TYPE__ int32_t;
|
|
typedef __INT64_TYPE__ int64_t;
|
|
typedef __UINT8_TYPE__ uint8_t;
|
|
typedef __UINT16_TYPE__ uint16_t;
|
|
typedef __UINT32_TYPE__ uint32_t;
|
|
typedef __UINT64_TYPE__ uint64_t;
|
|
typedef __UINTPTR_TYPE__ uintptr_t;
|
|
|
|
// This type is used internally in wasi-libc.
|
|
typedef double double_t;
|
|
`
|
|
|