Невозможно построить ботан за Android на Windows - PullRequest
2 голосов
/ 21 марта 2020

Я не могу понять, как собрать Botan для android, согласно инструкции здесь :

$ export CXX = / opt / android -ndk / toolchains / llvm / prebuilt / linux -x86_64 / bin / aarch64- linux -android28-clang ++

$ ./configure.py --os = android --cc = clang --cpu = arm64

я не могу понять, как использовать эти команды на Windows, чтение предыдущих выпусков не помогло мне, вы можете рассказать, как вы создавали эту библиотеку на windows пошагово шаг, только примеры вашей команды?

Я использовал - cc -bin параметр configure.py , чтобы указать путь к компилятору, это считается решение для windows, но у меня есть следующее:

D:\Programming\Libraries\botanAndroid\botan-master>python configure.py --cc-bin=D:\Android\android-ndk-r19c\toolchains\llvm\prebuilt\windows-x86_64\bin\armv7a-linux-androideabi28-clang++ --os=android --cc=clang --cpu=armv7
INFO: configure.py invoked with options "--cc-bin=D:\Android\android-ndk-r19c\toolchains\llvm\prebuilt\windows-x86_64\bin\armv7a-linux-androideabi28-clang++ --os=android --cc=clang --cpu=armv7"
INFO: Configuring to build Botan 2.14.0 (revision unknown)
INFO: Running under 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 22:20:52) [MSC v.1916 32 bit (Intel)]
INFO: Autodetected platform information: OS="Windows" machine="AMD64" proc="Intel64 Family 6 Model 142 Stepping 10, GenuineIntel"
INFO: Canonicalized CPU target armv7 to arm32
WARNING: Could not execute ['D:\Android\android-ndk-r19c\toolchains\llvm\prebuilt\windows-x86_64\bin\armv7a-linux-androideabi28-clang++', '-E', 'src\build-data\detect_version.cpp']: [WinError 193] %1 is not an application of Win32
WARNING: Tried to get clang version, but output '0.0' does not match expected version format
WARNING: Could not execute ['D:\Android\android-ndk-r19c\toolchains\llvm\prebuilt\windows-x86_64\bin\armv7a-linux-androideabi28-clang++', '-E', '-fstack-protector', '-pthread', 'src\build-data\detect_arch.cpp']: [WinError 193] %1 is not an application of Win32
WARNING: Unable to detect target architecture via compiler macro checks
INFO: Target is clang:0.0-android-arm32
INFO: Assuming target arm32 is little endian
INFO: Skipping (dependency failure): asio certstor_sqlite3 rdrand sessions_sqlite3
INFO: Skipping (incompatible CPU): aes_armv8 aes_ni aes_power8 chacha_avx2 clmul_cpu clmul_ssse3 idea_sse2 p9_darn rdrand_rng rdseed serpent_avx2 sha1_armv8 sha1_sse2 sha1_x86 sha2_32_armv8 sha2_32_bmi2 sha2_32_x86 sha2_64_bmi2 sha3_bmi2 shacal2_avx2 shacal2_x86 simd_avx2 sm4_armv8 threefish_512_avx2
INFO: Skipping (incompatible OS): certstor_system_macos certstor_system_windows commoncrypto getentropy proc_walk win32_stats
INFO: Skipping (no enabled compression schemes): compression
INFO: Skipping (requires external dependency): boost bzip2 lzma openssl sqlite3 tpm zlib
INFO: Loading modules: adler32 aead aes aes_vperm aont argon2 aria asn1 auto_rng base base32 base58 base64 bcrypt bcrypt_pbkdf bigint blake2 block blowfish camellia cascade cast128 cast256 cbc cbc_mac ccm cecpq1 certstor_flatfile certstor_sql certstor_system cfb chacha chacha20poly1305 chacha_rng chacha_simd32 checksum cmac comb4p cpuid crc24 crc32 cryptobox ctr curve25519 des dev_random dh dl_algo dl_group dlies dsa dyn_load eax ec_group ecc_key ecdh ecdsa ecgdsa ecies eckcdsa ed25519 elgamal eme_oaep eme_pkcs1 eme_raw emsa1 emsa_pkcs1 emsa_pssr emsa_raw emsa_x931 entropy fd_unix ffi filters fpe_fe1 gcm gmac gost_28147 gost_3410 gost_3411 hash hash_id hex hkdf hmac hmac_drbg hotp http_util idea iso9796 kasumi kdf kdf1 kdf1_iso18033 kdf2 keccak keypair lion locking_allocator mac mce mceies md4 md5 mdx_hash mem_pool mgf1 misty1 mode_pad modes mp newhope nist_keywrap noekeon noekeon_simd numbertheory ocb ofb par_hash passhash9 pbes2 pbkdf pbkdf1 pbkdf2 pem pgp_s2k pk_pad pkcs11 poly1305 poly_dbl prf_tls prf_x942 psk_db pubkey rc4 rfc3394 rfc6979 rmd160 rng roughtime rsa salsa20 scrypt seed serpent serpent_simd sessions_sql sha1 sha2_32 sha2_64 sha3 shacal2 shacal2_simd shake shake_cipher simd siphash siv skein sm2 sm3 sm4 socket sodium sp800_108 sp800_56a sp800_56c srp6 stateful_rng stream streebog system_rng thread_utils threefish_512 tiger tls tls_10 tls_cbc tss twofish utils uuid whirlpool x509 x919_mac xmss xtea xts
INFO: Using hardlink to link files into build dir (use --link-method to change)
INFO: Botan 2.14.0 (revision unknown) (unreleased undated) build setup is complete

Теперь я использую командную строку нативного инструмента VisualStudio 2017 или вызываю vcvarsall.bat для настройки среды.

1 Ответ

1 голос
/ 22 марта 2020

Кажется, поддержка Botan для сборки Android бинарных файлов на Windows хостах ограничена. Вам придется использовать dark magi c, чтобы сделать эту работу.

Процесс сборки состоит из двух фаз, фазы конфигурации и фазы сборки.

Android -specifi c инструкции в связанной с вами документации не охватывают весь процесс сборки, а только этап настройки. На этапе изготовления вам необходимо следовать инструкциям Windows -specifi c ( ссылка ).

Этап настройки:

Вам потребуется следующее двоичные файлы, настройте пути к вашей машине:

  • clang ++ (обратите внимание на .cmd в конце): C:\Development\android-ndk-r19c-windows-x86_64\android-ndk-r19c\toolchains\llvm\prebuilt\windows-x86_64\bin\armv7a-linux-androideabi28-clang++.cmd

  • ar: C:\Development\android-ndk-r19c-windows-x86_64\android-ndk-r19c\toolchains\llvm\prebuilt\windows-x86_64\bin\arm-linux-androideabi-ar.exe

В папке Botan введите команду configure:

python.exe .\configure.py --cc-bin=C:\Development\android-ndk-r19c-windows-x86_64\android-ndk-r19c\toolchains\llvm\prebuilt\windows-x86_64\bin\armv7a-linux-androideabi28-clang++.cmd --ar-command=C:\Development\android-ndk-r19c-windows-x86_64\android-ndk-r19c\toolchains\llvm\prebuilt\windows-x86_64\bin\arm-linux-androideabi-ar.exe --os=android --cpu=armv7 --verbose

Выполните этап

На этапе настройки создается Makefile в папке Botan. Вам нужно будет внести некоторые коррективы в этот файл:

  • В строке all: libs cli tests docs удалить docs

    Причина: для создания файлов документации необходимы дополнительные инструменты , Если вам действительно нужна документация, вы также можете попробовать установить эти инструменты, но я не проверял это.

  • Замените вхождения ln -fs на copy.

    Причина: Linux ln -fs создаст символьную ссылку c из второго файла в списке параметров на первый. Эта команда недоступна, поэтому изменение ее на копирование первого файла во второй мне кажется прагматическим обходным путем c. Вы также можете изменить ее на соответствующую команду для создания ссылки на Windows, но тогда вам, возможно, придется настроить ее снова при развертывании на целевую Android.

  • В строки, начинающиеся с LIBOBJS =, CLIOBJS = и TESTOBJS =, заменяют все вхождения \ на /. Во всем файле замените вхождения .\ на ./. Причина: использование разделителя пути Windows в стиле \ в некоторых местах вызывает проблемы.

  • Найдите блок с помощью # Executable targets и # Library targets. Вставьте @<< ... << вокруг списков параметров (так называемый встроенный файл nmake, основанный на этом ответе), чтобы он выглядел следующим образом:

# Executable targets
$(CLI): $(LIBRARIES) $(CLIOBJS)
  $(EXE_LINK_CMD) @<<
$(ABI_FLAGS) $(CLIOBJS) $(EXE_LINKS_TO) $(LDFLAGS) -o $@
<<

$(TEST): $(LIBRARIES) $(TESTOBJS)
  $(EXE_LINK_CMD) @<<
$(ABI_FLAGS) $(TESTOBJS) $(EXE_LINKS_TO) $(LDFLAGS) -o $@
<<

# Library targets
./libbotan-2.a: $(LIBOBJS)
  $(AR) @<<
$(AR_OPTIONS) $@ $(LIBOBJS)
<<

./libbotan-2.so.13: $(LIBOBJS)
  $(CXX) @<<
-shared -fPIC -Wl,-soname,libbotan-2.so.13  $(ABI_FLAGS) $(LDFLAGS) $(LIBOBJS) $(LIB_LINKS_TO) -o $@
<<

Причина: без этого изменения я получил ошибку о слишком длинном списке параметров.

Вам понадобится nmake (часть Visual Studio). На моей машине он установлен в C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64\nmake.exe

В папке Botan запустите nmake.exe. После этого ваша папка Botan должна содержать двоичные файлы botan, botan-test и библиотеки libbotan-2....

...