# TeRaSu (TRS)
よの光遍く空へ照しつつ
土棲むものは孰れか見ゆや

## Usage
```go
tls.Client(terasu.NewConn(conn), &tls.Config{
ServerName: host,
}).Handshake()
```
## Custom Plugin
Custom plugin code is located in the `ext/custom` directory. You can write and build your own plugin.
1. Write your plugin code in the `ext/custom` directory
2. Build the plugin:
```bash
go build -o terasu.plugin.so -buildmode=plugin -ldflags="-s -w" -trimpath ./ext/custom
```
### Example 1. Build for OpenWrt arm64
```bash
sudo apt-get update
sudo apt-get install -y build-essential module-assistant gcc-9-multilib-i686-linux-gnu g++-9-multilib-i686-linux-gnu
wget -nv https://downloads.openwrt.org/releases/23.05.3/targets/ipq807x/generic/openwrt-sdk-23.05.3-ipq807x-generic_gcc-12.3.0_musl.Linux-x86_64.tar.xz
tar -xJf openwrt-sdk-23.05.3-ipq807x-generic_gcc-12.3.0_musl.Linux-x86_64.tar.xz
mv openwrt-sdk-23.05.3-ipq807x-generic_gcc-12.3.0_musl.Linux-x86_64 op23053-ipq807x
rm openwrt-sdk-23.05.3-ipq807x-generic_gcc-12.3.0_musl.Linux-x86_64.tar.xz
PATH=$PATH:`pwd`/op23053-ipq807x/staging_dir/toolchain-aarch64_cortex-a53_gcc-12.3.0_musl/bin/
export PATH
export STAGING_DIR=`pwd`/op23053-ipq807x/staging_dir/toolchain-aarch64_cortex-a53_gcc-12.3.0_musl/
export CGO_CFLAGS=$CGO_CFLAGS" -fuse-ld=bfd"
echo $CGO_CFLAGS
export CGO_LDFLAGS=$CGO_LDFLAGS" -fuse-ld=bfd"
echo $CGO_LDFLAGS
export GOGCCFLAGS=$GOGCCFLAGS" -fuse-ld=bfd"
echo $GOGCCFLAGS
CGO_ENABLED=1 GOOS=linux GOARCH=arm64 GOARM=8 CC=aarch64-openwrt-linux-gcc CXX=aarch64-openwrt-linux-g++ AR=aarch64-openwrt-linux-ar go build -o terasu.plugin.so -buildmode=plugin -ldflags="-s -w" -trimpath ./ext/custom
```
### Example 2. Build for OpenWrt amd64
```bash
sudo apt-get update
sudo apt-get install -y build-essential module-assistant gcc-9-multilib-i686-linux-gnu g++-9-multilib-i686-linux-gnu
wget -nv https://archive.openwrt.org/releases/23.05.3/targets/x86/64/openwrt-sdk-23.05.3-x86-64_gcc-12.3.0_musl.Linux-x86_64.tar.xz
tar -xJf openwrt-sdk-23.05.3-x86-64_gcc-12.3.0_musl.Linux-x86_64.tar.xz
mv openwrt-sdk-23.05.3-x86-64_gcc-12.3.0_musl.Linux-x86_64 op23053-x64
rm openwrt-sdk-23.05.3-x86-64_gcc-12.3.0_musl.Linux-x86_64.tar.xz
PATH=$PATH:`pwd`/op23053-x64/staging_dir/toolchain-x86_64_gcc-12.3.0_musl/bin/
export PATH
export STAGING_DIR=`pwd`/op23053-x64/staging_dir/toolchain-x86_64_gcc-12.3.0_musl/
export CGO_CFLAGS=$CGO_CFLAGS" -fuse-ld=bfd"
echo $CGO_CFLAGS
export CGO_LDFLAGS=$CGO_LDFLAGS" -fuse-ld=bfd"
echo $CGO_LDFLAGS
export GOGCCFLAGS=$GOGCCFLAGS" -fuse-ld=bfd"
echo $GOGCCFLAGS
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 CC=x86_64-openwrt-linux-gcc CXX=x86_64-openwrt-linux-g++ AR=x86_64-openwrt-linux-ar go build -o terasu.plugin.so -buildmode=plugin -ldflags="-s -w" -trimpath ./ext/custom
```