либ с сишными биндингами? Может есть какие-то готовые инструменты (например докер контейнеры) с компиляторами и репами либ под целевую платформу?
Можно через докер, мы билдим так. Чуть позже могу скинуть пример (часа через 4)
Супер, заранее благодарен!!!
Билд образа происходит командой (Makefile syntax) docker build $(BUILD_DIR) -f $(DOCKERFILE) -t $(IMAGE_NAME) --build-arg ARCH=$(ARCH) В самом Dockerfile ARG ARCH=amd64 FROM ${ARCH}/golang:1.16.3-buster … т.е. по умолчанию amd64, но когда надо передаем ARCH=arm64v8. Внутри образа уже весь тулинг соответственно под архитектуру $(ARCH). Билд бинарей как обычно - в готовом образе $(DOCKER_CMD) go build \ -o $@ $(BUILD_FLAGS) \ -ldflags "-X cli.Version=$(VERSION) -w -s" \ ./cmd/$*/.
Спасибо за ответ! По вашему способу сделать не получилось, но он подтолкнул в правильном направлении на https://github.com/docker/buildx, с помощью которого уже все получилось))) Кстати с использованием этой штуки, достаточно только добавить ключ --platform linux/arm/7 и собирается под целевую платформу стандартный dockerfile. Еще раз спасибо)
слышал похожее про xgo (или gox)
Нет проблем. У нас просто на билдерах CI нет buildx, поэтому через манипуляции с образом
у меня манипуляции с образами не взлетели, тк он ругался на то что архитектура хоста не совпадает с архитектурой контейнера. И если честно я не понимаю как оно у вас работает, ведь инструкции для arm отличаются от x86, явно нужен эмулятор на хостовой ОС
Есть же эмуляторы из qemu которые позволяют бинарники чужой архитектуры запускать
Аха я на него тоже наткнулся при быстром гуглеже, но я так понял что оно было актуально пока go не поддерживал GOOS и GOARCH, у меня биндинги к сишным либам, надо их откуда-то взять и скомпилить, а это нужен сишный компилер под арм и все его зависимости...
можно воспользоваться либо этим https://github.com/karalabe/xgo либо вот этим https://dev.to/kristoff/zig-makes-go-cross-compilation-just-work-29ho
В данном случае это и используется только через докер и его апи)
Спасибо, поизучаю!
Глянул поперек, вроде то что нужно, но с ходу не понятно как подготовить тулчейн для билдинга, то есть надо откуда-то выкачать необходимые либы и их зависимости под целевую платформу и натравить сборщик на это все... Как по мне, вариант с докер контейнером, где все либы и их зависимости ставятся "нативно" через apt-get, проще для той задачи которую я решаю. Но спасибо за наводку, возьму на вооружение, вдруг когда-то пригодится.)))
Обсуждают сегодня