Go: TinyGo

встраиваемые модели

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: TinyGo

Непрочитанное сообщение Olej » 11 фев 2024, 16:29

Olej писал(а):
11 фев 2024, 16:18
Что тоже совсем не лишнее...
Это пока не помогает... :cry:

Код: Выделить всё

olej@esprimop420:/usr/local/lib/tinygo/src/examples/button$ pwd
/usr/local/lib/tinygo/src/examples/button

Код: Выделить всё

olej@esprimop420:/usr/local/lib/tinygo/src/examples/button$ ls -l
итого 4
-rw-r--r-- 1 root root 355 сен 21 10:35 button.go

Код: Выделить всё

olej@esprimop420:/usr/local/lib/tinygo/src/examples/button$ tinygo build button.go
# command-line-arguments
/usr/local/lib/tinygo/src/examples/button/button.go:9:19: undefined: machine.LED
/usr/local/lib/tinygo/src/examples/button/button.go:10:19: undefined: machine.BUTTON
Но возможно поможет вот это:

Код: Выделить всё

olej@esprimop420:~/2024/TinyGo$ tinygo env
GOOS="linux"
GOARCH="amd64"
GOROOT="/home/olej/goroot"
GOPATH="/home/olej/go"
GOCACHE="/home/olej/.cache/tinygo"
CGO_ENABLED="1"
TINYGOROOT="/usr/local/lib/tinygo"

Код: Выделить всё

olej@esprimop420:~/2024/TinyGo$ ls -l /usr/local/lib/tinygo/targets/*.json | head
-rw-r--r-- 1 root root  240 сен 21 10:35 /usr/local/lib/tinygo/targets/ae-rp2040.json
-rw-r--r-- 1 root root  347 сен 21 10:35 /usr/local/lib/tinygo/targets/arduino.json
-rw-r--r-- 1 root root  294 сен 21 10:35 /usr/local/lib/tinygo/targets/arduino-leonardo.json
-rw-r--r-- 1 root root  240 сен 21 10:35 /usr/local/lib/tinygo/targets/arduino-mega1280.json
-rw-r--r-- 1 root root  240 сен 21 10:35 /usr/local/lib/tinygo/targets/arduino-mega2560.json
-rw-r--r-- 1 root root  215 сен 21 10:35 /usr/local/lib/tinygo/targets/arduino-mkr1000.json
-rw-r--r-- 1 root root  269 сен 21 10:35 /usr/local/lib/tinygo/targets/arduino-mkrwifi1010.json
-rw-r--r-- 1 root root  243 сен 21 10:35 /usr/local/lib/tinygo/targets/arduino-nano33.json
-rw-r--r-- 1 root root  291 сен 21 10:35 /usr/local/lib/tinygo/targets/arduino-nano.json
-rw-r--r-- 1 root root  127 сен 21 10:35 /usr/local/lib/tinygo/targets/arduino-nano-new.json

Код: Выделить всё

olej@esprimop420:~/2024/TinyGo$ ls -l /usr/local/lib/tinygo/targets/*.json | wc -l
173

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: TinyGo

Непрочитанное сообщение Olej » 11 фев 2024, 16:40

Olej писал(а):
11 фев 2024, 16:29
Но возможно поможет вот это:
И вот оно :!: :-D :

Код: Выделить всё

olej@esprimop420:~/2024/TinyGo$ cat `tinygo env TINYGOROOT`/src/examples/blinky1/blinky1.go
package main

// This is the most minimal blinky example and should run almost everywhere.

import (
	"machine"
	"time"
)

func main() {
	led := machine.LED
	led.Configure(machine.PinConfig{Mode: machine.PinOutput})
	for {
		led.Low()
		time.Sleep(time.Millisecond * 500)

		led.High()
		time.Sleep(time.Millisecond * 500)
	}
}
И прямо из своего рабочего (домашнего) каталога выполняю:

Код: Выделить всё

olej@esprimop420:~/2024/TinyGo$ tinygo build -target arduino `tinygo env TINYGOROOT`/src/examples/blinky1/blinky1.go
... хотя можно (и разумно :?: ) предварительно к себе просто скопировать нужный пример кода :oops:

Код: Выделить всё

olej@esprimop420:~/2024/TinyGo$ ls -l blinky1 
-rwxr-xr-x 1 olej olej 87872 фев 11 15:37 blinky1

Код: Выделить всё

olej@esprimop420:~/2024/TinyGo$ file blinky1 
blinky1: ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, with debug_info, not stripped
И это тоже понятно - тут нужен инструментарий для AVR:

Код: Выделить всё

olej@esprimop420:~/2024/TinyGo$ strip blinky1 
strip: Невозможно определить формат входного файла «blinky1»

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: TinyGo

Непрочитанное сообщение Olej » 11 фев 2024, 16:48

Olej писал(а):
11 фев 2024, 16:40
И вот оно
Но :!: :!: :!: :-x

Код: Выделить всё

olej@esprimop420:~/2024/TinyGo$ cat `tinygo env TINYGOROOT`/src/examples/button/button.go
package main

import (
	"machine"
	"time"
)

const (
	led    = 
)

func main() {
	led.Configure(machine.PinConfig{Mode: machine.PinOutput})
	button.Configure(machine.PinConfig{Mode: machine.PinInputPullup})

	for {
		if button.Get() {
			led.Low()
		} else {
			led.High()
		}

		time.Sleep(time.Millisecond * 10)
	}
}

Код: Выделить всё

olej@esprimop420:~/2024/TinyGo$ tinygo build -target arduino `tinygo env TINYGOROOT`/src/examples/button/button.go
# command-line-arguments
/usr/local/lib/tinygo/src/examples/button/button.go:10:19: undefined: machine.BUTTON
А потому как далеко не каждый example подходит для каждой target :!: :lol:
Вот machine.LED для этой платформы есть, а machine.BUTTON - нет :!:
Ну нет, нет на Arduino никаких кнопок :!: :lol:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: TinyGo

Непрочитанное сообщение Olej » 11 фев 2024, 18:34

Olej писал(а):
11 фев 2024, 15:34
Не померещилось...
И раз уж пошла такая пьянка... :-P
Olej писал(а):
05 фев 2024, 18:36
Или так:
Сборка из исходников...
Следуем по их инструкции: Building TinyGo.
Заодно попытаюсь проверить сборка пойдёт в GoLang 1.22 ... или тоже закочевряжится?

P.S. Почему в GoLang?
Потому что я краем глаза заглянул в исходники, и там оно всё написано на Go.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: TinyGo

Непрочитанное сообщение Olej » 11 фев 2024, 18:50

Olej писал(а):
11 фев 2024, 18:34
Следуем по их инструкции:
1.
The first step is to download the TinyGo sources (use `--recursive` if you clone
the git repository). Then, inside the directory, download the LLVM source:
make llvm-source

Код: Выделить всё

olej@R420:~/2024/Go/tinygo$ pwd
/home/olej/2024/Go/tinygo

Код: Выделить всё

olej@R420:~/2024/Go/tinygo$ make llvm-source
git clone -b xtensa_release_16.x --depth=1 https://github.com/espressif/llvm-project llvm-project
Клонирование в «llvm-project»...
remote: Enumerating objects: 133047, done.
remote: Counting objects: 100% (133047/133047), done.
remote: Compressing objects: 100% (104908/104908), done.
remote: Total 133047 (delta 28575), reused 79695 (delta 24028), pack-reused 0
Получение объектов: 100% (133047/133047), 187.71 МиБ | 1.18 МиБ/с, готово.
Определение изменений: 100% (28575/28575), готово.
Updating files: 100% (126477/126477), готово.

Код: Выделить всё

olej@R420:~/2024/Go/tinygo$ ls -o llvm-project/
итого 124
drwxrwxr-x 10 olej  4096 фев 11 17:41 bolt
drwxrwxr-x 14 olej  4096 фев 11 17:41 clang
drwxrwxr-x 19 olej  4096 фев 11 17:41 clang-tools-extra
drwxrwxr-x  3 olej  4096 фев 11 17:41 cmake
drwxrwxr-x 11 olej  4096 фев 11 17:41 compiler-rt
-rw-rw-r--  1 olej   431 фев 11 17:41 CONTRIBUTING.md
drwxrwxr-x  4 olej  4096 фев 11 17:41 cross-project-tests
drwxrwxr-x 12 olej  4096 фев 11 17:41 flang
drwxrwxr-x 16 olej  4096 фев 11 17:41 libc
drwxrwxr-x 16 olej  4096 фев 11 17:41 libclc
drwxrwxr-x 10 olej  4096 фев 11 17:41 libcxx
drwxrwxr-x  9 olej  4096 фев 11 17:41 libcxxabi
drwxrwxr-x  7 olej  4096 фев 11 17:41 libunwind
-rw-rw-r--  1 olej 15141 фев 11 17:41 LICENSE.TXT
drwxrwxr-x 14 olej  4096 фев 11 17:41 lld
drwxrwxr-x 16 olej  4096 фев 11 17:41 lldb
drwxrwxr-x 16 olej  4096 фев 11 17:41 llvm
drwxrwxr-x  4 olej  4096 фев 11 17:41 llvm-libgcc
drwxrwxr-x 13 olej  4096 фев 11 17:41 mlir
drwxrwxr-x  8 olej  4096 фев 11 17:41 openmp
drwxrwxr-x 11 olej  4096 фев 11 17:41 polly
drwxrwxr-x  6 olej  4096 фев 11 17:41 pstl
-rw-rw-r--  1 olej  5678 фев 11 17:41 README.md
drwxrwxr-x  2 olej  4096 фев 11 17:41 runtimes
-rw-rw-r--  1 olej   205 фев 11 17:41 SECURITY.md
drwxrwxr-x  4 olej  4096 фев 11 17:41 third-party
drwxrwxr-x  4 olej  4096 фев 11 17:41 utils

Код: Выделить всё

olej@R420:~/2024/Go/tinygo$ du -hs llvm-project/
1,8G	llvm-project/
Ого :-o Проект то "тини", но он "тянет" :lol:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: TinyGo

Непрочитанное сообщение Olej » 11 фев 2024, 19:21

Olej писал(а):
11 фев 2024, 18:34
Следуем по их инструкции:
export CC=clang
export CXX=clang++

The Makefile includes a default configuration that is good for most users. It builds a release version of LLVM (optimized, no asserts) and includes all targets supported by TinyGo:

make llvm-build

This can take over an hour depending on the speed of your system.
"Это может занять более часа в зависимости от скорости вашей системы." - круто... :-o :-(

Код: Выделить всё

olej@R420:~$ export CC=clang;

Код: Выделить всё

olej@R420:~$ export CXX=clang++;

Код: Выделить всё

olej@R420:~$ set | grep ^C
CC=clang
COLORTERM=truecolor
COLUMNS=182
CXX=clang++

Код: Выделить всё

olej@R420:~$ which clang
/usr/bin/clang

Код: Выделить всё

olej@R420:~$ which clang++
/usr/bin/clang++
... но у меня это не заняло "более часа" - потому что тут нас ожидает 1-й крупный облом :cry:

Код: Выделить всё

olej@R420:~$ cd /home/olej/2024/Go/tinygo

Код: Выделить всё

olej@R420:~/2024/Go/tinygo$ time make llvm-build
mkdir -p llvm-build && cd llvm-build && cmake -G Ninja /home/olej/2024/Go/tinygo/llvm-project/llvm "-DLLVM_TARGETS_TO_BUILD=X86;ARM;AArch64;RISCV;WebAssembly" "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=AVR;Xtensa" -DCMAKE_BUILD_TYPE=Release -DLIBCLANG_BUILD_STATIC=ON -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_ZLIB=OFF -DLLVM_ENABLE_ZSTD=OFF -DLLVM_ENABLE_LIBEDIT=OFF -DLLVM_ENABLE_Z3_SOLVER=OFF -DLLVM_ENABLE_OCAMLDOC=OFF -DLLVM_ENABLE_LIBXML2=OFF -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_TOOL_CLANG_TOOLS_EXTRA_BUILD=OFF -DCLANG_ENABLE_STATIC_ANALYZER=OFF -DCLANG_ENABLE_ARCMT=OFF '-DLLVM_CCACHE_BUILD=OFF' '-DLLVM_ENABLE_ASSERTIONS=OFF'
-- The CXX compiler identification is Clang 14.0.0
-- The ASM compiler identification is Clang with GNU-like command-line
-- Found assembler: /usr/bin/clang
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - failed
-- Check for working CXX compiler: /usr/bin/clang++
-- Check for working CXX compiler: /usr/bin/clang++ - broken
CMake Error at /usr/share/cmake-3.22/Modules/CMakeTestCXXCompiler.cmake:62 (message):
  The C++ compiler

    "/usr/bin/clang++"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /home/olej/2024/Go/tinygo/llvm-build/CMakeFiles/CMakeTmp
    
    Run Build Command(s):/usr/bin/ninja cmTC_76899 && [1/2] Building CXX object CMakeFiles/cmTC_76899.dir/testCXXCompiler.cxx.o
    [2/2] Linking CXX executable cmTC_76899
    FAILED: cmTC_76899 
    : && /usr/bin/clang++   CMakeFiles/cmTC_76899.dir/testCXXCompiler.cxx.o -o cmTC_76899   && :
    /usr/bin/ld: невозможно найти -lstdc++: Нет такого файла или каталога
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    ninja: build stopped: subcommand failed.

  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:54 (project)

-- Configuring incomplete, errors occurred!
See also "/home/olej/2024/Go/tinygo/llvm-build/CMakeFiles/CMakeOutput.log".
See also "/home/olej/2024/Go/tinygo/llvm-build/CMakeFiles/CMakeError.log".
make: *** [Makefile:247: llvm-build/build.ninja] Ошибка 1

real	0m0,609s
user	0m0,277s
sys	0m0,338s

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: TinyGo

Непрочитанное сообщение Olej » 11 фев 2024, 19:43

Olej писал(а):
11 фев 2024, 19:21
/usr/bin/ld: невозможно найти -lstdc++: Нет такого файла или каталога
Я так понимаю, это связано с вот этим: Clang и с библиоткой libc++.so.
Которая у меня установлена ... но каким-то образом не попадает в дефаулты:

Код: Выделить всё

olej@R420:~/2024/Go/tinygo$ aptitude search "libc\+\+" | grep ^i
i A libc++-14-dev - LLVM C++ Standard library (development files)
i  libc++-dev - LLVM C++ Standard library (development files)
i A libc++1 - LLVM C++ Standard library
i  libc++1-14 - LLVM C++ Standard library
i A libc++abi-14-dev - LLVM low level support for a standard C++ library (development files)
i  libc++abi-dev - LLVM low level support for a standard C++ library (development files)
i  libc++abi1-14 - LLVM low level support for a standard C++ library

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: TinyGo

Непрочитанное сообщение Olej » 15 фев 2024, 19:05

Продолжаю разгребаться с TinyGo...
На другом совсем компьютере (теперь уже на 3-м - под рукой оказался):

Код: Выделить всё

olej@nvidia:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Linuxmint
Description:    Linux Mint 21.2
Release:        21.2
Codename:       victoria

Код: Выделить всё

olej@nvidia:~$ uname -a
Linux nvidia 5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

Код: Выделить всё

olej@nvidia:~$ go version
go version devel go1.21-b37c0602cd Tue Mar 14 10:02:09 2023 +0000 linux/amd64

Код: Выделить всё

olej@nvidia:~/2024$ sudo apt deb tinygo_0.30.0_amd64.deb
[sudo] пароль для olej:
Выбор ранее не выбранного пакета tinygo.
(Чтение базы данных … на данный момент установлено 467666 файлов и каталогов.)
Подготовка к распаковке tinygo_0.30.0_amd64.deb …
Распаковывается tinygo (0.30.0) …
Настраивается пакет tinygo (0.30.0) …

Код: Выделить всё

olej@nvidia:~/2024$ tinygo version
tinygo version 0.30.0 linux/amd64 (using go version devel go1.21-b37c0602cd Tue Mar 14 10:02:09 2023 +0000 and LLVM version 16.0.1)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: TinyGo

Непрочитанное сообщение Olej » 15 фев 2024, 19:08

Olej писал(а):
15 фев 2024, 19:05
Продолжаю разгребаться с TinyGo...
Olej писал(а):
11 фев 2024, 16:40
... хотя можно (и разумно :?: ) предварительно к себе просто скопировать нужный пример кода

Код: Выделить всё

olej@nvidia:~/2024/Go$ pwd
/home/olej/2024/Go

Код: Выделить всё

olej@nvidia:~/2024/Go$ cp `tinygo env TINYGOROOT`/src/examples/blinky1/blinky1.go ./

Код: Выделить всё

olej@nvidia:~/2024/Go$ ls -o blinky1.go
-rw-r--r-- 1 olej 328 фев 15 17:00 blinky1.go

Код: Выделить всё

olej@nvidia:~/2024/Go$ tinygo build -target arduino blinky1.go
error: could not parse Go version: version does not start with 'go' prefix
О-ба-на :-o
Какой облом :cry: :!:
Для проверки сборки из исходного каталога проекта:

Код: Выделить всё

olej@nvidia:~/2024/Go$ tinygo build -target arduino `tinygo env TINYGOROOT`/src/examples/blinky1/blinky1.go
error: could not parse Go version: version does not start with 'go' prefix
:-(

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: TinyGo

Непрочитанное сообщение Olej » 15 фев 2024, 19:19

Olej писал(а):
15 фев 2024, 19:08
Какой облом
Может он настолько новый, что не может жить без файла описания модуля :?: :-o

Код: Выделить всё

olej@nvidia:~/2024/Go$ go mod init blinky
go: creating new go.mod: module blinky
go: to add module requirements and sums:
    go mod tidy
И, на всякий случай:

Код: Выделить всё

olej@nvidia:~/2024/Go$ go mod tidy

Код: Выделить всё

olej@nvidia:~/2024/Go$ cat go.mod
module blinky

go 1.21
Повторяю:

Код: Выделить всё

olej@nvidia:~/2024/Go$ tinygo build -target arduino blinky1.go
error: could not parse Go version: version does not start with 'go' prefix
Тот же облом :evil:
Проверяю, в том же каталоге (что за чертовщина :?: :shock: ) сборку небольшой тестовой программы с GoLang:

Код: Выделить всё

olej@nvidia:~/2024/Go$ go version
go version devel go1.21-b37c0602cd Tue Mar 14 10:02:09 2023 +0000 linux/amd64

Код: Выделить всё

olej@nvidia:~/2024/Go$ touch tiny.go

Код: Выделить всё

olej@nvidia:~/2024/Go$ go build tiny.go 

Код: Выделить всё

olej@nvidia:~/2024/Go$ ./tiny
минимальное приложение
Всё путём :!: :!: :!: :roll:

Ответить

Вернуться в «Одноплатные компьютеры»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей