Как заставить файл Wireguard- Android make работать на Windows? - PullRequest
4 голосов
/ 10 февраля 2020

Я пытаюсь собрать источники wireguard- android на моей машине windows, шаг за шагом исправляя проблемы методом проб и ошибок.

У меня установлены CMake и Make, первой проблемой, с которой я столкнулся, было 'плохое' значение, сообщаемое uname (mingw64), не совпадающее с golang именами файлов , размещенными Google .

Я отредактировал (взломал) файл make, чтобы указать на реальное имя файла windows версии (amd64). Проблема в том, что версия windows имеет расширение .zip вместо .tar.gz, а результат zip не совместим с командой piped.

Исходная команда :

curl "https://dl.google.com/go/go$(DESIRED_GO_VERSION).$(shell uname -s | tr '[:upper:]' '[:lower:]')-$(NDK_GO_ARCH_MAP_$(shell uname -m)).tar.gz" | tar -C "$(dir $@)" --strip-components=1 -xzf -

Мои попытки изменения : (использует if-else, потому что он все еще должен работать на ма c тоже)

ifeq "msys" "$(shell uname -o | tr '[:upper:]' '[:lower:]')"
    # Note: when enclosed in the ifeq, the ARCH_MAP part no longer worked
    # Note: using tar with the zip fails, because we cant untar a zip (signal 13)
    # Note: using unzip with the zip fails with confusing paths
    curl "https://dl.google.com/go/go$(DESIRED_GO_VERSION).windows-amd64.zip" | unzip -C "$(dir $@)" --strip-components=1 -xzf -
else
    curl "https://dl.google.com/go/go$(DESIRED_GO_VERSION).$(shell uname -s | tr '[:upper:]' '[:lower:]')-$(NDK_GO_ARCH_MAP_$(shell uname -m)).tar.gz" | tar -C "$(dir $@)" --strip-components=1 -xzf -
endif

Результирующий ошибка при использовании unzip :

unzip: не удается найти или открыть C: \ wireguard-android \ app \ build \ middleates \ cmake \ debug \ obj \ armeabi-v7a / .. /generated-src/go-1.13.7/, C: \ wireguard-android \ app \ build \ middleates \ cmake \ debug \ obj \ armeabi-v7a /../ generate-src / go - 1.13.7 / .zip или C: \ wireguard-android \ app \ build \ middleates \ cmake \ debug \ obj \ armeabi-v7a /../ generate-src / go -1.13.7 / .ZIP.

% Всего% получено% Xferd Средняя скорость Время Время Время Текущая загрузка Загрузка Всего израсходованная левая скорость

0 0 0 0 0 0 0 0 -: -: - -: - - -: - -: -: - 0 0 127M 0 5419 0 0 26694 0 1:23:47 -: -: - 1:23:47 26694

curl: (23) Сбой записи тела (34! = 1357)

make: *** [C: \ wireguard-android \ app \ build \ промежуточные \ cmake \ debug \ obj \ armeabi-v7a /. ./generated-src/go-1.13.7/.prepared] Ошибка 9

Результирующая ошибка при использовании tar :

curl "https://dl.google.com/go/go1.13.7.windows-amd64.zip" | tar - C "C: \ wireguard-android \ app \ build \ middleates \ cmake \ debug \ obj \ armeabi-v7a /../ generate-src / go -1.13.7 /" --strip -компоненты = 1 -xzf -

% Всего% полученных%% Xferd Средняя скорость Время Время Время Текущая загрузка Загрузка Всего отработанная левая скорость

0 0 0 0 0 0 0 0 -: - - : - -: -: - -: -: - 0gzip: в stdin есть несколько записей - tar игнорируется: ребенок умер с сигналом 13 tar: ошибка не устраняется: выход из программы

0 127M 0 108k 0 0 248k 0 0:08:47 -: -: - 0:08:47 248k

curl: (23) Неисправное тело записи (738! = 1357)

make: *** [C: \ wireguard-android \ app \ build \ middleates \ cmake \ debug \ obj \ armeabi-v7a /../ generate-src / go -1.13. 7 / .prepared] Ошибка 2


  • Как мне заставить эту команду работать? (С помощью tar или zip / unzip)
  • Кто-то указал мне, что, возможно, мне нужен дистрибутив Android, а не Windows. В этом случае я бы предположил, что мне нужен armeabi-v7a, но я вижу только пакеты ARMv6 и ARMv8. Какой дистрибутив я должен использовать?

1 Ответ

0 голосов
/ 12 февраля 2020

Мне удалось решить эту проблему, я отвечаю на свой вопрос, а не удаляю, потому что думаю, что это в конечном итоге поможет другому разработчику.

Первые некоторые уточнения :

  • Может показаться, что вы должны включить целевую платформу Go libs (т.е. ARM для Android), но если вы попытаетесь это сделать, вы получите ошибку, что файл не исполняется при сборке , (Таким образом, платформа сборки соответствует версии, то есть Windows здесь)
  • Поскольку Google предоставляет библиотеки Windows в виде Zip (против tar.gz для других платформ), вы не можете использовать tar команда.
    • Поскольку zip-файлы не могут быть прочитаны из потока curl (индекс находится в конце файла), вам необходимо загрузить файл и затем распаковать . Некоторые люди предложили использовать команду jar, однако это не сработало успешно с помощью cmake / make
    • Файл zip будет извлечен в подкаталог 'go' внутри любого выбранного вами пути. По этой причине вам нужно изменить пути
  • Некоторые команды на Windows не будут принимать .. в качестве середины пути, поэтому мне пришлось изменить файл CMakeLists использовать абсолютный путь

Измененный конец файла Makefile : (после операторов .prepared / mkdir)

# Warning the (lack-of) indentation here is critical https://stackoverflow.com/a/4483467/984830
# Note: I've hardcoded the windows filename below, so you'll need to do an `if` (like in my question) if you want to support other platforms as well

    curl -o "$(BUILDDIR)/go-$(DESIRED_GO_VERSION)/gofile.zip" "https://dl.google.com/go/go$(DESIRED_GO_VERSION).windows-amd64.zip"
    unzip -o "$(BUILDDIR)/go-$(DESIRED_GO_VERSION)/gofile.zip" -d "$(dir $@)"
    rm -f "$(BUILDDIR)/go-$(DESIRED_GO_VERSION)/gofile.zip"

    patch -p1 -f -N -r- -d "$(dir $@)go/" < goruntime-boottime-over-monotonic.diff
    touch "$@"

$(DESTDIR)/libwg-go.so: export PATH := $(BUILDDIR)/go-$(DESIRED_GO_VERSION)/go/bin/:$(PATH)
$(DESTDIR)/libwg-go.so: $(BUILDDIR)/go-$(DESIRED_GO_VERSION)/.prepared go.mod
    go build -tags linux -ldflags="-X golang.zx2c4.com/wireguard/ipc.socketDirectory=/data/data/$(ANDROID_PACKAGE_NAME)/cache/wireguard" -v -trimpath -o "$@" -buildmode c-shared

измененный конец файла CMakeLists : (заменяет раздел add_custom_target)

# added a new variable to get the parent dir without using .. in the path
get_filename_component(destdirparent "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/.." ABSOLUTE)

# referred to the variable on the last line of this statment
add_custom_target(libwg-go.so WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/libwg-go" COMMENT "Building wireguard-go" VERBATIM COMMAND make
    ANDROID_ARCH_NAME=${ANDROID_ARCH_NAME}
    ANDROID_C_COMPILER=${ANDROID_C_COMPILER}
    ANDROID_TOOLCHAIN_ROOT=${ANDROID_TOOLCHAIN_ROOT}
    ANDROID_LLVM_TRIPLE=${ANDROID_LLVM_TRIPLE}
    ANDROID_SYSROOT=${ANDROID_SYSROOT}
    ANDROID_PACKAGE_NAME=${ANDROID_PACKAGE_NAME}
    CFLAGS=${CMAKE_C_FLAGS}\ -Wno-unused-command-line-argument
    LDFLAGS=${CMAKE_SHARED_LINKER_FLAGS}\ -fuse-ld=gold
    DESTDIR=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
    BUILDDIR=${destdirparent}/generated-src
    )

Для справки исходные файлы находятся здесь: Makefile & CMakeLists и являются зеркальное отображение Github

...