randombit / botan

Cryptography Toolkit
https://botan.randombit.net
BSD 2-Clause "Simplified" License
2.56k stars 562 forks source link

Compile Botan with Emscripten on Windows #2285

Closed Satancito closed 1 year ago

Satancito commented 4 years ago

I'm using powershell. My commands

Activating Emscripten tools

PS> cd "I:\WebAssembly\emsdk" PS> ./emsdk activate latest

Writing .emscripten configuration file to user home directory C:\Users\Megam/
Backing up old Emscripten configuration file in C:\Users\Megam\.emscripten.old
The Emscripten configuration file C:\Users\Megam\.emscripten has been rewritten with the following contents:

NODE_JS = 'I:/WebAssembly/emsdk/node/12.9.1_64bit/bin/node.exe'
PYTHON = 'I:/WebAssembly/emsdk/python/3.7.4_64bit/python.exe'
JAVA = 'I:/WebAssembly/emsdk/java/8.152_64bit/bin/java.exe'
LLVM_ROOT = 'I:/WebAssembly/emsdk/upstream/bin'
BINARYEN_ROOT = 'I:/WebAssembly/emsdk/upstream'
EMSCRIPTEN_ROOT = 'I:/WebAssembly/emsdk/upstream/emscripten'
TEMP_DIR = 'C:/Users/Megam/AppData/Local/Temp'
COMPILER_ENGINE = NODE_JS
JS_ENGINES = [NODE_JS]

Setting environment variables:
EMSDK = I:/WebAssembly/emsdk

Set the following tools as active:
   node-12.9.1-64bit
   python-3.7.4-64bit
   java-8.152-64bit
   releases-upstream-9e60f34accb4627d7358223862a7e74291886ab6-64bit

The changes made to environment variables only apply to the currently running shell instance. Use the 'emsdk_env.bat' to re-enter this environment later, or if you'd like to permanently register this environment globally to all users in Windows Registry, rerun this command with the option --global.

PS> ./emsdk_env.bat

Setting environment variables:
EMSDK = I:/WebAssembly/emsdk

PS> cd "C:\Users\Megam/Temp/Botan/"

PS> $Env:CXX="em++" PS> python "C:\Users\Megam/Temp/Botan/configure.py" --os=emscripten --cc=clang --cpu=llvm --debug-mode --prefix="C:\Users\Megam\Dropbox\Tools/Libs/Botan-2.12.1-Emscripten-llvm-Debug" --without-documentation

INFO: C:\Users\Megam/Temp/Botan/configure.py invoked with options "--os=emscripten --cc=clang --cpu=llvm --debug-mode --prefix=C:\Users\Megam\Dropbox\Tools/Libs/Botan-2.12.1-Emscripten-llvm-Debug --without-documentation"
   INFO: Configuring to build Botan 2.12.1 (revision git:1a6ad661ce64287ccbe26460ccc3aa4247d86ba8)
   INFO: Running under 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)]
   INFO: CXX environment variable is set which will override compiler path
   INFO: Implicit --cc-bin=em++ due to environment variable CXX
   INFO: Autodetected platform information: OS="Windows" machine="AMD64" proc="Intel64 Family 6 Model 58 Stepping 9, GenuineIntel"
   INFO: Shared libs not supported on emscripten, disabling shared lib support
WARNING: Could not execute ['em++', '-E', 'C:\\Users\\Megam/Temp/Botan\\src\\build-data\\detect_version.cpp']: [WinError 2] El sistema no puede encontrar el archivo especificado
WARNING: Tried to get clang version, but output '0.0' does not match expected version format
WARNING: Could not execute ['em++', '-E', '', 'C:\\Users\\Megam/Temp/Botan\\src\\build-data\\detect_arch.cpp']: [WinError 2] El sistema no puede encontrar el archivo especificado
WARNING: Unable to detect target architecture via compiler macro checks
   INFO: Target is clang:0.0-emscripten-llvm
   INFO: Skipping (dependency failure): asio certstor_sqlite3 chacha_simd32 noekeon_simd rdrand serpent_simd sessions_sqlite3 shacal2_simd
   INFO: Skipping (incompatible CPU): aes_armv8 aes_ni aes_power8 aes_vperm 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_x86 simd simd_avx2 sm4_armv8 threefish_512_avx2
   INFO: Skipping (incompatible OS): certstor_system_macos certstor_system_windows commoncrypto getentropy proc_walk thread_utils 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 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 checksum cmac codec_filt 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 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 rsa salsa20 scrypt seed serpent sessions_sql sha1 sha2_32 sha2_64 sha3 shacal2 shake shake_cipher siphash siv skein sm2 sm3 sm4 socket sodium sp800_108 sp800_56a sp800_56c srp6 stateful_rng stream streebog system_rng threefish_512 tiger tls tls_cbc tss twofish utils uuid whirlpool x509 x919_mac xmss xtea xts
   INFO: Using symlink to link files into build dir (use --link-method to change)
  ERROR: Error linking C:\Users\Megam/Temp/Botan\src\lib\asn1\alg_id.h into build\include\botan: symbolic link privilege not held

but cannot run make.

randombit commented 4 years ago

Two issues I'm seeing in the output from configure.py which would probably prevent a build:

em++ not being available in path. I'm not sure what that might be about. Perhaps it is named something differently on Windows? Or it was not found in your PATH?

ERROR: Error linking ... symbolic link privilege not held

This is a bug, we avoid trying to use symlink on Windows since apparently symlink requires a admin permission not normally held by users. But the logic does not expect anyone to be cross compiling from Windows. Provide additional option --link-method=hardlink to resolve this.

Satancito commented 4 years ago

PS C:\Users\Megam\Temp\Botan> $env:CXX="em++.bat" PS C:\Users\Megam\Temp\Botan> python ./configure.py --cc=clang --cpu=llvm --os=emscripten --debug-mode --without-documentation --prefix="C:/users/Megam/Temp/Botan/dist/Botan-2.12.1-Emscripten-llvm-Debug" --link-method=hardlink

INFO: ./configure.py invoked with options "--cc=clang --cpu=llvm --os=emscripten --debug-mode --without-documentation --prefix=C:/users/Megam/Temp/Botan/dist/Botan-2.12.1-Emscripten-llvm-Debug --link-method=hardlink"
   INFO: Configuring to build Botan 2.12.1 (revision git:1a6ad661ce64287ccbe26460ccc3aa4247d86ba8)
   INFO: Running under 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)]
   INFO: CXX environment variable is set which will override compiler path
   INFO: Implicit --cc-bin=em++.bat due to environment variable CXX
   INFO: Autodetected platform information: OS="Windows" machine="AMD64" proc="Intel64 Family 6 Model 58 Stepping 9, GenuineIntel"
   INFO: Shared libs not supported on emscripten, disabling shared lib support
   INFO: Auto-detected compiler version 11.0
WARNING: Unable to detect target architecture via compiler macro checks
   INFO: Target is clang:11.0-emscripten-llvm
   INFO: Skipping (dependency failure): asio certstor_sqlite3 chacha_simd32 noekeon_simd rdrand serpent_simd sessions_sqlite3 shacal2_simd
   INFO: Skipping (incompatible CPU): aes_armv8 aes_ni aes_power8 aes_vperm 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_x86 simd simd_avx2 sm4_armv8 threefish_512_avx2
   INFO: Skipping (incompatible OS): certstor_system_macos certstor_system_windows commoncrypto getentropy proc_walk thread_utils 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 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 checksum cmac codec_filt 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 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 rsa salsa20 scrypt seed serpent sessions_sql sha1 sha2_32 sha2_64 sha3 shacal2 shake shake_cipher siphash siv skein sm2 sm3 sm4 socket sodium sp800_108 sp800_56a sp800_56c srp6 stateful_rng stream streebog system_rng threefish_512 tiger tls 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.12.1 (revision git:1a6ad661ce64287ccbe26460ccc3aa4247d86ba8) (release dated 20191014) build setup is complete

All Ok. but make tool doesn't exists.

Finally in WSL Ubuntu Linux x64.

root@X-PC:/Temp/Botan# CXX=em++ ./configure.py --cc=clang --cpu=llvm --os=emscripten --without-documentation --prefix="/Temp/Botan/dist/Botan-2.12.1-Emscripten-llvm-Debug"

   INFO: ./configure.py invoked with options "--cc=clang --cpu=llvm --os=emscripten --without-documentation --prefix=/Temp/Botan/dist/Botan-2.12.1-Emscripten-llvm-Debug"
   INFO: Configuring to build Botan 2.12.1 (revision git:1a6ad661ce64287ccbe26460ccc3aa4247d86ba8)
   INFO: Running under 2.7.17 (default, Nov  7 2019, 10:07:09) [GCC 7.4.0]
   INFO: CXX environment variable is set which will override compiler path
   INFO: Implicit --cc-bin=em++ due to environment variable CXX
   INFO: Autodetected platform information: OS="Linux" machine="x86_64" proc="x86_64"
   INFO: Using /etc/ssl/certs/ca-certificates.crt as system certificate store
   INFO: Shared libs not supported on emscripten, disabling shared lib support
   INFO: Auto-detected compiler version 11.0
WARNING: Unable to detect target architecture via compiler macro checks
   INFO: Target is clang:11.0-emscripten-llvm
   INFO: Skipping (dependency failure): asio certstor_sqlite3 chacha_simd32 noekeon_simd rdrand serpent_simd sessions_sqlite3 shacal2_simd
   INFO: Skipping (incompatible CPU): aes_armv8 aes_ni aes_power8 aes_vperm 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_x86 simd simd_avx2 sm4_armv8 threefish_512_avx2
   INFO: Skipping (incompatible OS): certstor_system_macos certstor_system_windows commoncrypto getentropy proc_walk thread_utils 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 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 checksum cmac codec_filt 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 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 rsa salsa20 scrypt seed serpent sessions_sql sha1 sha2_32 sha2_64 sha3 shacal2 shake shake_cipher siphash siv skein sm2 sm3 sm4 socket sodium sp800_108 sp800_56a sp800_56c srp6 stateful_rng stream streebog system_rng threefish_512 tiger tls tls_cbc tss twofish utils uuid whirlpool x509 x919_mac xmss xtea xts
   INFO: Using symlink to link files into build dir (use --link-method to change)
   INFO: Botan 2.12.1 (revision git:1a6ad661ce64287ccbe26460ccc3aa4247d86ba8) (release dated 20191014) build setup is complete

root@X-PC:/InsaneTemp/Botan# make

em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/asn1/alg_id.cpp -o build/obj/lib/asn1_alg_id.bc
em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/asn1/asn1_attribute.cpp -o build/obj/lib/asn1_attribute.bc
em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/asn1/asn1_obj.cpp -o build/obj/lib/asn1_obj.bc
em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/asn1/asn1_oid.cpp -o build/obj/lib/asn1_oid.bc
em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/asn1/asn1_print.cpp -o build/obj/lib/asn1_print.bc
em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/asn1/asn1_str.cpp -o build/obj/lib/asn1_str.bc
em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/asn1/asn1_time.cpp -o build/obj/lib/asn1_time.bc
em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/asn1/ber_dec.cpp -o build/obj/lib/asn1_ber_dec.bc
em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/asn1/der_enc.cpp -o build/obj/lib/asn1_der_enc.bc
em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/asn1/oid_maps.cpp -o build/obj/lib/asn1_oid_maps.bc
em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/asn1/oids.cpp -o build/obj/lib/asn1_oids.bc
em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/base/buf_comp.cpp -o build/obj/lib/base_buf_comp.bc
em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/base/scan_name.cpp -o build/obj/lib/base_scan_name.bc
em++   -std=c++11 -D_REENTRANT  -O3 -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild/include -Ibuild/include/external -c src/lib/base/sym_algo.cpp -o build/obj/lib/base_sym_algo.bc

more output...
more output...
more output...
more output...
more output...
more output...
more output...

em++   build/obj/cli/argon2.bc build/obj/cli/asn1.bc build/obj/cli/bcrypt.bc build/obj/cli/cc_enc.bc build/obj/cli/cli.bc build/obj/cli/cli_rng.bc build/obj/cli/codec.bc build/obj/cli/compress.bc build/obj/cli/encryption.bc build/obj/cli/entropy.bc build/obj/cli/hash.bc build/obj/cli/hmac.bc build/obj/cli/main.bc build/obj/cli/math.bc build/obj/cli/pbkdf.bc build/obj/cli/pk_crypt.bc build/obj/cli/psk.bc build/obj/cli/pubkey.bc build/obj/cli/sandbox.bc build/obj/cli/speed.bc build/obj/cli/timing_tests.bc build/obj/cli/tls_client.bc build/obj/cli/tls_http_server.bc build/obj/cli/tls_proxy.bc build/obj/cli/tls_server.bc build/obj/cli/tls_utils.bc build/obj/cli/tss.bc build/obj/cli/utils.bc build/obj/cli/x509.bc -L. -lbotan-2   -o botan.bc
shared:WARNING: **Assuming object file output in the absence of `-c`, based on output filename.** Please add with `-c` or `-r` to avoid this warning
wasm-ld: **error**: unknown file type: asn1_alg_id.o
shared:ERROR: **'/WebAssembly/emsdk/upstream/bin/wasm-ld -o botan.bc --lto-O0 build/obj/cli/argon2.bc build/obj/cli/asn1.bc -L/WebAssembly/emsdk/upstream/emscripten/system/local/lib build/obj/cli/bcrypt.bc -L/WebAssembly/emsdk/upstream/emscripten/system/lib build/obj/cli/cc_enc.bc -L/root/.emscripten_cache/wasm-obj build/obj/cli/cli.bc build/obj/cli/cli_rng.bc build/obj/cli/codec.bc build/obj/cli/compress.bc build/obj/cli/encryption.bc build/obj/cli/entropy.bc build/obj/cli/hash.bc build/obj/cli/hmac.bc build/obj/cli/main.bc build/obj/cli/math.bc build/obj/cli/pbkdf.bc build/obj/cli/pk_crypt.bc build/obj/cli/psk.bc build/obj/cli/pubkey.bc build/obj/cli/sandbox.bc build/obj/cli/speed.bc build/obj/cli/timing_tests.bc build/obj/cli/tls_client.bc build/obj/cli/tls_http_server.bc build/obj/cli/tls_proxy.bc build/obj/cli/tls_server.bc build/obj/cli/tls_utils.bc build/obj/cli/tss.bc build/obj/cli/utils.bc build/obj/cli/x509.bc -L. ./libbotan-2.a --allow-undefined --import-memory --import-table -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --strip-debug --export __wasm_call_ctors --export __data_end --export main --export malloc --export free --export setThrew --export __errno_location --export fflush -z stack-size=5242880 --initial-memory=16777216 --no-entry --max-memory=16777216 --global-base=1024 --relocatable' failed (1)**
Makefile:71: recipe for target 'botan.bc' failed
make: *** [botan.bc] Error 1
randombit commented 4 years ago

For make you'll need some kind of make installed. I'm surprised Emscripten doesn't come with something. GNU make, BSD make or nmake from Visual C++ all should work.

For the error under WSL I'm not sure what is going on. I haven't tested this build in some time maybe we have a regression. It's also possible Emscripten or LLVM has changed in a way that has broken our build. What version of Emscripten do you have installed? The output gives versions for Python etc but not Emscripten or LLVM.

Satancito commented 4 years ago

"Windows x86 Debug" library compilation using nmake. ALL OK "Windows x86 Release" library compilation using nmake. ALL OK "Windows x64 Debug" library compilation using nmake. ALL OK "Windows x64 Release" library compilation using nmake. ALL OK

"Linux x86 Debug" library compilation using GNU make on WSL Ubuntu x64. ALL OK "Linux x86 Release" library compilation using GNU make on WSL Ubuntu x64. ALL OK "Linux x64 Debug" library compilation using GNU make on WSL Ubuntu x64. ALL OK "Linux x64 Release" library compilation using GNU make on WSL Ubuntu x64. ALL OK

image

But compile using Emscripten compiler i have errors. Compiler versión - WSL Ubuntu x64

root@X-PC:~# em++ -v
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 1.39.8
clang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 9dc84e9b02d1e402503906099d42fbae4da7d8d9)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /WebAssembly/emsdk/upstream/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.4.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.4.0
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
shared:INFO: (Emscripten: Running sanity checks)
root@X-PC:~#

image

Invoke Configure.py - WSL Ubuntu x64 image

Invoke make - WSL Ubuntu x64 image image image image more and more output until this error

image

.o is extension from GCC/MSVC compiler (Object files). But em++ compiler generates .bc (bitcode files), maybe this is the error. unknown file type: asn1_alg_id.o maybe emscripten tool needs asn1_alg_id.bc

Satancito commented 4 years ago

Trying on WINDOWS using nmake

Set compiler environment var and Invoke configure.py OK image

Especial powershell function to set MSVC environment variables image


function Set-Vcvars
{
    param (
        [parameter(Mandatory=$true)]
         [ValidateNotNullOrEmpty()]
         [Object]
         $VcvarsFilename
     )

     cmd /c """$vcvarsFilename"" & SET" | ForEach-Object {
         if ($_ -match "=") {
             $v = $_.split("=");
             Set-Item -Force -Path "Env:\$($v[0])" -value "$($v[1])"
         }
     }
}

Run function PS C:\Users\Megam\InsaneTemp\Botan> Set-Vcvars "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"

Run nmake image more and more output until this error "command line is too long" image

Checking last command string is 12902 characters long.

em++.bat   -std=c++11 -D_REENTRANT -g -emit-llvm -fno-use-cxa-atexit -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual  -Ibuild\include -Ibuild\include\external -c src/lib/x509/x509self.cpp -o build\obj\lib\x509_x509self.bc
        emar cr ./libbotan-2.a build\obj\lib\asn1_alg_id.bc build\obj\lib\asn1_attribute.bc build\obj\lib\asn1_obj.bc build\obj\lib\asn1_oid.bc build\obj\lib\asn1_print.bc build\obj\lib\asn1_str.bc build\obj\lib\asn1_time.bc build\obj\lib\asn1_ber_dec.bc build\obj\lib\asn1_der_enc.bc build\obj\lib\asn1_oid_maps.bc build\obj\lib\asn1_oids.bc build\obj\lib\base_buf_comp.bc build\obj\lib\base_scan_name.bc build\obj\lib\base_sym_algo.bc build\obj\lib\base_symkey.bc build\obj\lib\block_aes.bc build\obj\lib\block_aria.bc build\obj\lib\block_cipher.bc build\obj\lib\block_blowfish.bc build\obj\lib\block_camellia.bc build\obj\lib\block_cascade.bc build\obj\lib\block_cast128.bc build\obj\lib\block_cast256.bc build\obj\lib\block_des.bc build\obj\lib\block_des_tab.bc build\obj\lib\block_des_desx.bc build\obj\lib\block_gost_28147.bc build\obj\lib\block_idea.bc build\obj\lib\block_kasumi.bc build\obj\lib\block_lion.bc build\obj\lib\block_misty1.bc build\obj\lib\block_noekeon.bc build\obj\lib\block_seed.bc build\obj\lib\block_serpent.bc build\obj\lib\block_shacal2.bc build\obj\lib\block_sm4.bc build\obj\lib\block_threefish_512.bc build\obj\lib\block_twofish.bc build\obj\lib\block_twofish_tab.bc build\obj\lib\block_xtea.bc build\obj\lib\codec_base32.bc build\obj\lib\codec_base58.bc build\obj\lib\codec_base64.bc build\obj\lib\codec_hex.bc build\obj\lib\compat_sodium_25519.bc build\obj\lib\compat_sodium_aead.bc build\obj\lib\compat_sodium_auth.bc build\obj\lib\compat_sodium_box.bc build\obj\lib\compat_sodium_chacha.bc build\obj\lib\compat_sodium_salsa.bc build\obj\lib\compat_sodium_secretbox.bc build\obj\lib\compat_sodium_utils.bc build\obj\lib\entropy_dev_random.bc build\obj\lib\entropy_srcs.bc build\obj\lib\ffi.bc build\obj\lib\ffi_block.bc build\obj\lib\ffi_cert.bc build\obj\lib\ffi_cipher.bc build\obj\lib\ffi_fpe.bc build\obj\lib\ffi_hash.bc build\obj\lib\ffi_hotp.bc build\obj\lib\ffi_kdf.bc build\obj\lib\ffi_keywrap.bc build\obj\lib\ffi_mac.bc build\obj\lib\ffi_mp.bc build\obj\lib\ffi_pk_op.bc build\obj\lib\ffi_pkey.bc build\obj\lib\ffi_pkey_algs.bc build\obj\lib\ffi_rng.bc build\obj\lib\ffi_totp.bc build\obj\lib\filters_algo_filt.bc build\obj\lib\filters_b64_filt.bc build\obj\lib\filters_basefilt.bc build\obj\lib\filters_buf_filt.bc build\obj\lib\filters_cipher_filter.bc build\obj\lib\filters_comp_filter.bc build\obj\lib\filters_data_snk.bc build\obj\lib\filters_fd_unix.bc build\obj\lib\filters_filter.bc build\obj\lib\filters_hex_filt.bc build\obj\lib\filters_out_buf.bc build\obj\lib\filters_pipe.bc build\obj\lib\filters_pipe_io.bc build\obj\lib\filters_pipe_rw.bc build\obj\lib\filters_secqueue.bc build\obj\lib\filters_threaded_fork.bc build\obj\lib\hash_blake2_blake2b.bc build\obj\lib\hash_checksum_adler32.bc build\obj\lib\hash_checksum_crc24.bc build\obj\lib\hash_checksum_crc32.bc build\obj\lib\hash_comb4p.bc build\obj\lib\hash_gost_3411.bc build\obj\lib\hash.bc build\obj\lib\hash_keccak.bc build\obj\lib\hash_md4.bc build\obj\lib\hash_md5.bc build\obj\lib\hash_mdx_hash.bc build\obj\lib\hash_par_hash.bc build\obj\lib\hash_rmd160.bc build\obj\lib\hash_sha1_sha160.bc build\obj\lib\hash_sha2_32.bc build\obj\lib\hash_sha2_64.bc build\obj\lib\hash_sha3.bc build\obj\lib\hash_shake.bc build\obj\lib\hash_skein_512.bc build\obj\lib\hash_sm3.bc build\obj\lib\hash_streebog.bc build\obj\lib\hash_streebog_precalc.bc build\obj\lib\hash_tiger_tig_tab.bc build\obj\lib\hash_tiger.bc build\obj\lib\hash_whirlpool.bc build\obj\lib\hash_whirlpool_whrl_tab.bc build\obj\lib\kdf_hkdf.bc build\obj\lib\kdf.bc build\obj\lib\kdf_kdf1.bc build\obj\lib\kdf_kdf1_iso18033.bc build\obj\lib\kdf_kdf2.bc build\obj\lib\kdf_prf_tls.bc build\obj\lib\kdf_prf_x942.bc build\obj\lib\kdf_sp800_108.bc build\obj\lib\kdf_sp800_56a.bc build\obj\lib\kdf_sp800_56c.bc build\obj\lib\mac_cbc_mac.bc build\obj\lib\mac_cmac.bc build\obj\lib\mac_gmac.bc build\obj\lib\mac_hmac.bc build\obj\lib\mac.bc build\obj\lib\mac_poly1305.bc build\obj\lib\mac_siphash.bc build\obj\lib\mac_x919_mac.bc build\obj\lib\math_bigint_big_code.bc build\obj\lib\math_bigint_big_io.bc build\obj\lib\math_bigint_big_ops2.bc build\obj\lib\math_bigint_big_ops3.bc build\obj\lib\math_bigint_big_rand.bc build\obj\lib\math_bigint.bc build\obj\lib\math_bigint_divide.bc build\obj\lib\math_mp_comba.bc build\obj\lib\math_mp_karat.bc build\obj\lib\math_mp_monty.bc build\obj\lib\math_mp_monty_n.bc build\obj\lib\math_numbertheory_dsa_gen.bc build\obj\lib\math_numbertheory_jacobi.bc build\obj\lib\math_numbertheory_make_prm.bc build\obj\lib\math_numbertheory_monty.bc build\obj\lib\math_numbertheory_monty_exp.bc build\obj\lib\math_numbertheory_mp_numth.bc build\obj\lib\math_numbertheory_nistp_redc.bc build\obj\lib\math_numbertheory_numthry.bc build\obj\lib\math_numbertheory_pow_mod.bc build\obj\lib\math_numbertheory_primality.bc build\obj\lib\math_numbertheory_primes.bc build\obj\lib\math_numbertheory_reducer.bc build\obj\lib\math_numbertheory_ressol.bc build\obj\lib\misc_aont_package.bc build\obj\lib\misc_cryptobox.bc build\obj\lib\misc_fpe_fe1.bc build\obj\lib\misc_hotp.bc build\obj\lib\misc_hotp_totp.bc build\obj\lib\misc_nist_keywrap.bc build\obj\lib\misc_rfc3394.bc build\obj\lib\misc_srp6.bc build\obj\lib\misc_tss.bc build\obj\lib\modes_aead.bc build\obj\lib\modes_aead_ccm.bc build\obj\lib\modes_aead_chacha20poly1305.bc build\obj\lib\modes_aead_eax.bc build\obj\lib\modes_aead_gcm.bc build\obj\lib\modes_aead_gcm_ghash.bc build\obj\lib\modes_aead_ocb.bc build\obj\lib\modes_aead_siv.bc build\obj\lib\modes_cbc.bc build\obj\lib\modes_cfb.bc build\obj\lib\modes_cipher_mode.bc build\obj\lib\modes_mode_pad.bc build\obj\lib\modes_xts.bc build\obj\lib\passhash_bcrypt.bc build\obj\lib\passhash_passhash9.bc build\obj\lib\pbkdf_argon2.bc build\obj\lib\pbkdf_argon2_argon2fmt.bc build\obj\lib\pbkdf_argon2_argon2pwhash.bc build\obj\lib\pbkdf_bcrypt_pbkdf.bc build\obj\lib\pbkdf.bc build\obj\lib\pbkdf_pbkdf1.bc build\obj\lib\pbkdf_pbkdf2.bc build\obj\lib\pbkdf_pgp_s2k.bc build\obj\lib\pbkdf_pwdhash.bc build\obj\lib\pbkdf_scrypt.bc build\obj\lib\pk_pad_eme.bc build\obj\lib\pk_pad_eme_oaep_oaep.bc build\obj\lib\pk_pad_eme_pkcs1_eme_pkcs.bc build\obj\lib\pk_pad_eme_raw.bc build\obj\lib\pk_pad_emsa.bc build\obj\lib\pk_pad_emsa1.bc build\obj\lib\pk_pad_emsa_pkcs1.bc build\obj\lib\pk_pad_emsa_pssr_pssr.bc build\obj\lib\pk_pad_emsa_raw.bc build\obj\lib\pk_pad_emsa_x931.bc build\obj\lib\pk_pad_hash_id.bc build\obj\lib\pk_pad_iso9796.bc build\obj\lib\pk_pad_mgf1.bc build\obj\lib\pk_pad_padding.bc build\obj\lib\prov_pkcs11_p11.bc build\obj\lib\prov_pkcs11_p11_ecc_key.bc build\obj\lib\prov_pkcs11_p11_ecdh.bc build\obj\lib\prov_pkcs11_p11_ecdsa.bc build\obj\lib\prov_pkcs11_p11_mechanism.bc build\obj\lib\prov_pkcs11_p11_module.bc build\obj\lib\prov_pkcs11_p11_object.bc build\obj\lib\prov_pkcs11_p11_randomgenerator.bc build\obj\lib\prov_pkcs11_p11_rsa.bc build\obj\lib\prov_pkcs11_p11_session.bc build\obj\lib\prov_pkcs11_p11_slot.bc build\obj\lib\prov_pkcs11_p11_x509.bc build\obj\lib\psk_db.bc build\obj\lib\psk_db_psk_db_sql.bc build\obj\lib\pubkey_blinding.bc build\obj\lib\pubkey_cecpq1.bc build\obj\lib\pubkey_curve25519.bc build\obj\lib\pubkey_curve25519_donna.bc build\obj\lib\pubkey_dh.bc build\obj\lib\pubkey_dl_algo.bc build\obj\lib\pubkey_dl_group.bc build\obj\lib\pubkey_dl_group_dl_named.bc build\obj\lib\pubkey_dlies.bc build\obj\lib\pubkey_dsa.bc build\obj\lib\pubkey_ec_group_curve_gfp.bc build\obj\lib\pubkey_ec_group.bc build\obj\lib\pubkey_ec_group_ec_named.bc build\obj\lib\pubkey_ec_group_point_gfp.bc build\obj\lib\pubkey_ec_group_point_mul.bc build\obj\lib\pubkey_ecc_key.bc build\obj\lib\pubkey_ecdh.bc build\obj\lib\pubkey_ecdsa.bc build\obj\lib\pubkey_ecgdsa.bc build\obj\lib\pubkey_ecies.bc build\obj\lib\pubkey_eckcdsa.bc build\obj\lib\pubkey_ed25519.bc build\obj\lib\pubkey_ed25519_fe.bc build\obj\lib\pubkey_ed25519_key.bc build\obj\lib\pubkey_ed25519_ge.bc build\obj\lib\pubkey_ed25519_sc_muladd.bc build\obj\lib\pubkey_ed25519_sc_reduce.bc build\obj\lib\pubkey_elgamal.bc build\obj\lib\pubkey_gost_3410.bc build\obj\lib\pubkey_keypair.bc build\obj\lib\pubkey_mce_code_based_key_gen.bc build\obj\lib\pubkey_mce_gf2m_rootfind_dcmp.bc build\obj\lib\pubkey_mce_gf2m_small_m.bc build\obj\lib\pubkey_mce_goppa_code.bc build\obj\lib\pubkey_mce_workfactor.bc build\obj\lib\pubkey_mce_mceliece.bc build\obj\lib\pubkey_mce_mceliece_key.bc build\obj\lib\pubkey_mce_polyn_gf2m.bc build\obj\lib\pubkey_mceies.bc build\obj\lib\pubkey_newhope.bc build\obj\lib\pubkey_pbes2.bc build\obj\lib\pubkey_pem.bc build\obj\lib\pubkey_pk_algs.bc build\obj\lib\pubkey_pk_keys.bc build\obj\lib\pubkey_pk_ops.bc build\obj\lib\pubkey_pkcs8.bc build\obj\lib\pubkey.bc build\obj\lib\pubkey_rfc6979.bc build\obj\lib\pubkey_rsa.bc build\obj\lib\pubkey_sm2.bc build\obj\lib\pubkey_sm2_enc.bc build\obj\lib\pubkey_workfactor.bc build\obj\lib\pubkey_x509_key.bc build\obj\lib\pubkey_xmss_common_ops.bc build\obj\lib\pubkey_xmss_hash.bc build\obj\lib\pubkey_xmss_index_registry.bc build\obj\lib\pubkey_xmss_parameters.bc build\obj\lib\pubkey_xmss_privatekey.bc build\obj\lib\pubkey_xmss_publickey.bc build\obj\lib\pubkey_xmss_signature.bc build\obj\lib\pubkey_xmss_signature_operation.bc build\obj\lib\pubkey_xmss_verification_operation.bc build\obj\lib\pubkey_xmss_wots_parameters.bc build\obj\lib\pubkey_xmss_wots_privatekey.bc build\obj\lib\pubkey_xmss_wots_publickey.bc build\obj\lib\rng_auto_rng.bc build\obj\lib\rng_chacha_rng.bc build\obj\lib\rng_hmac_drbg.bc build\obj\lib\rng.bc build\obj\lib\rng_stateful_rng.bc build\obj\lib\rng_system_rng.bc build\obj\lib\stream_chacha.bc build\obj\lib\stream_ctr.bc build\obj\lib\stream_ofb.bc build\obj\lib\stream_rc4.bc build\obj\lib\stream_salsa20.bc build\obj\lib\stream_shake_cipher.bc build\obj\lib\stream_cipher.bc build\obj\lib\tls_credentials_manager.bc build\obj\lib\tls_msg_cert_req.bc build\obj\lib\tls_msg_cert_status.bc build\obj\lib\tls_msg_cert_verify.bc build\obj\lib\tls_msg_certificate.bc build\obj\lib\tls_msg_client_hello.bc build\obj\lib\tls_msg_client_kex.bc build\obj\lib\tls_msg_finished.bc build\obj\lib\tls_msg_hello_verify.bc build\obj\lib\tls_msg_server_hello.bc build\obj\lib\tls_msg_server_kex.bc build\obj\lib\tls_msg_session_ticket.bc build\obj\lib\tls_sessions_sql_tls_session_manager_sql.bc build\obj\lib\tls_alert.bc build\obj\lib\tls_algos.bc build\obj\lib\tls_blocking.bc build\obj\lib\tls_callbacks.bc build\obj\lib\tls_cbc.bc build\obj\lib\tls_channel.bc build\obj\lib\tls_ciphersuite.bc build\obj\lib\tls_client.bc build\obj\lib\tls_extensions.bc build\obj\lib\tls_handshake_hash.bc build\obj\lib\tls_handshake_io.bc build\obj\lib\tls_handshake_state.bc build\obj\lib\tls_policy.bc build\obj\lib\tls_record.bc build\obj\lib\tls_server.bc build\obj\lib\tls_session.bc build\obj\lib\tls_session_key.bc build\obj\lib\tls_session_manager_memory.bc build\obj\lib\tls_suite_info.bc build\obj\lib\tls_text_policy.bc build\obj\lib\tls_version.bc build\obj\lib\utils_assert.bc build\obj\lib\utils_calendar.bc build\obj\lib\utils_charset.bc build\obj\lib\utils_cpuid.bc build\obj\lib\utils_cpuid_arm.bc build\obj\lib\utils_cpuid_ppc.bc build\obj\lib\utils_cpuid_x86.bc build\obj\lib\utils_ct_utils.bc build\obj\lib\utils_data_src.bc build\obj\lib\utils_dyn_load.bc build\obj\lib\utils_exceptn.bc build\obj\lib\utils_filesystem.bc build\obj\lib\utils_http_util.bc build\obj\lib\utils_locking_allocator.bc build\obj\lib\utils_mem_ops.bc build\obj\lib\utils_mem_pool.bc build\obj\lib\utils_os_utils.bc build\obj\lib\utils_parsing.bc build\obj\lib\utils_poly_dbl.bc build\obj\lib\utils_read_cfg.bc build\obj\lib\utils_read_kv.bc build\obj\lib\utils_socket.bc build\obj\lib\utils_timer.bc build\obj\lib\utils_uuid.bc build\obj\lib\utils_version.bc build\obj\lib\x509_asn1_alt_name.bc build\obj\lib\x509_cert_status.bc build\obj\lib\x509_certstor.bc build\obj\lib\x509_certstor_flatfile.bc build\obj\lib\x509_certstor_sql.bc build\obj\lib\x509_certstor_system.bc build\obj\lib\x509_crl_ent.bc build\obj\lib\x509_datastor.bc build\obj\lib\x509_key_constraint.bc build\obj\lib\x509_name_constraint.bc build\obj\lib\x509_ocsp.bc build\obj\lib\x509_ocsp_types.bc build\obj\lib\x509_pkcs10.bc build\obj\lib\x509_ca.bc build\obj\lib\x509_crl.bc build\obj\lib\x509_dn.bc build\obj\lib\x509_dn_ub.bc build\obj\lib\x509_ext.bc build\obj\lib\x509_obj.bc build\obj\lib\x509_x509cert.bc build\obj\lib\x509_x509opt.bc build\obj\lib\x509_x509path.bc build\obj\lib\x509_x509self.bc La línea de comandos es demasiado larga.
NMAKE : fatal error U1077: 'I:\WebAssembly\emsdk\upstream\emscripten\emar.BAT' : código devuelto '0x1'
Stop.

Command prompt (Cmd. exe) command-line string limitation

UPDATE I

  1. Replace "build/obj/lib" string with empty string in the previous too large string
  2. Change directory to build/obj/lib
  3. Run command PS C:\Users\Megam\InsaneTemp\Botan> cd .\build\obj\lib\ PS C:\Users\Megam\InsaneTemp\Botan\build\obj\lib> emar cr ./libbotan-2.a asn1_alg_id.bc asn1_attribute.bc asn1_obj.bc asn1_oid.bc asn1_print.bc asn1_str.bc asn1_time.bc asn1_ber_dec.bc asn1_der_enc.bc asn1_oid_maps.bc asn1_oids.bc base_buf_comp.bc base_scan_name.bc base_sym_algo.bc base_symkey.bc block_aes.bc block_aria.bc block_cipher.bc block_blowfish.bc block_camellia.bc block_cascade.bc block_cast128.bc block_cast256.bc block_des.bc block_des_tab.bc block_des_desx.bc block_gost_28147.bc block_idea.bc block_kasumi.bc block_lion.bc block_misty1.bc block_noekeon.bc block_seed.bc block_serpent.bc block_shacal2.bc block_sm4.bc block_threefish_512.bc block_twofish.bc block_twofish_tab.bc block_xtea.bc codec_base32.bc codec_base58.bc codec_base64.bc codec_hex.bc compat_sodium_25519.bc compat_sodium_aead.bc compat_sodium_auth.bc compat_sodium_box.bc compat_sodium_chacha.bc compat_sodium_salsa.bc compat_sodium_secretbox.bc compat_sodium_utils.bc entropy_dev_random.bc entropy_srcs.bc ffi.bc ffi_block.bc ffi_cert.bc ffi_cipher.bc ffi_fpe.bc ffi_hash.bc ffi_hotp.bc ffi_kdf.bc ffi_keywrap.bc ffi_mac.bc ffi_mp.bc ffi_pk_op.bc ffi_pkey.bc ffi_pkey_algs.bc ffi_rng.bc ffi_totp.bc filters_algo_filt.bc filters_b64_filt.bc filters_basefilt.bc filters_buf_filt.bc filters_cipher_filter.bc filters_comp_filter.bc filters_data_snk.bc filters_fd_unix.bc filters_filter.bc filters_hex_filt.bc filters_out_buf.bc filters_pipe.bc filters_pipe_io.bc filters_pipe_rw.bc filters_secqueue.bc filters_threaded_fork.bc hash_blake2_blake2b.bc hash_checksum_adler32.bc hash_checksum_crc24.bc hash_checksum_crc32.bc hash_comb4p.bc hash_gost_3411.bc hash.bc hash_keccak.bc hash_md4.bc hash_md5.bc hash_mdx_hash.bc hash_par_hash.bc hash_rmd160.bc hash_sha1_sha160.bc hash_sha2_32.bc hash_sha2_64.bc hash_sha3.bc hash_shake.bc hash_skein_512.bc hash_sm3.bc hash_streebog.bc hash_streebog_precalc.bc hash_tiger_tig_tab.bc hash_tiger.bc hash_whirlpool.bc hash_whirlpool_whrl_tab.bc kdf_hkdf.bc kdf.bc kdf_kdf1.bc kdf_kdf1_iso18033.bc kdf_kdf2.bc kdf_prf_tls.bc kdf_prf_x942.bc kdf_sp800_108.bc kdf_sp800_56a.bc kdf_sp800_56c.bc mac_cbc_mac.bc mac_cmac.bc mac_gmac.bc mac_hmac.bc mac.bc mac_poly1305.bc mac_siphash.bc mac_x919_mac.bc math_bigint_big_code.bc math_bigint_big_io.bc math_bigint_big_ops2.bc math_bigint_big_ops3.bc math_bigint_big_rand.bc math_bigint.bc math_bigint_divide.bc math_mp_comba.bc math_mp_karat.bc math_mp_monty.bc math_mp_monty_n.bc math_numbertheory_dsa_gen.bc math_numbertheory_jacobi.bc math_numbertheory_make_prm.bc math_numbertheory_monty.bc math_numbertheory_monty_exp.bc math_numbertheory_mp_numth.bc math_numbertheory_nistp_redc.bc math_numbertheory_numthry.bc math_numbertheory_pow_mod.bc math_numbertheory_primality.bc math_numbertheory_primes.bc math_numbertheory_reducer.bc math_numbertheory_ressol.bc misc_aont_package.bc misc_cryptobox.bc misc_fpe_fe1.bc misc_hotp.bc misc_hotp_totp.bc misc_nist_keywrap.bc misc_rfc3394.bc misc_srp6.bc misc_tss.bc modes_aead.bc modes_aead_ccm.bc modes_aead_chacha20poly1305.bc modes_aead_eax.bc modes_aead_gcm.bc modes_aead_gcm_ghash.bc modes_aead_ocb.bc modes_aead_siv.bc modes_cbc.bc modes_cfb.bc modes_cipher_mode.bc modes_mode_pad.bc modes_xts.bc passhash_bcrypt.bc passhash_passhash9.bc pbkdf_argon2.bc pbkdf_argon2_argon2fmt.bc pbkdf_argon2_argon2pwhash.bc pbkdf_bcrypt_pbkdf.bc pbkdf.bc pbkdf_pbkdf1.bc pbkdf_pbkdf2.bc pbkdf_pgp_s2k.bc pbkdf_pwdhash.bc pbkdf_scrypt.bc pk_pad_eme.bc pk_pad_eme_oaep_oaep.bc pk_pad_eme_pkcs1_eme_pkcs.bc pk_pad_eme_raw.bc pk_pad_emsa.bc pk_pad_emsa1.bc pk_pad_emsa_pkcs1.bc pk_pad_emsa_pssr_pssr.bc pk_pad_emsa_raw.bc pk_pad_emsa_x931.bc pk_pad_hash_id.bc pk_pad_iso9796.bc pk_pad_mgf1.bc pk_pad_padding.bc prov_pkcs11_p11.bc prov_pkcs11_p11_ecc_key.bc prov_pkcs11_p11_ecdh.bc prov_pkcs11_p11_ecdsa.bc prov_pkcs11_p11_mechanism.bc prov_pkcs11_p11_module.bc prov_pkcs11_p11_object.bc prov_pkcs11_p11_randomgenerator.bc prov_pkcs11_p11_rsa.bc prov_pkcs11_p11_session.bc prov_pkcs11_p11_slot.bc prov_pkcs11_p11_x509.bc psk_db.bc psk_db_psk_db_sql.bc pubkey_blinding.bc pubkey_cecpq1.bc pubkey_curve25519.bc pubkey_curve25519_donna.bc pubkey_dh.bc pubkey_dl_algo.bc pubkey_dl_group.bc pubkey_dl_group_dl_named.bc pubkey_dlies.bc pubkey_dsa.bc pubkey_ec_group_curve_gfp.bc pubkey_ec_group.bc pubkey_ec_group_ec_named.bc pubkey_ec_group_point_gfp.bc pubkey_ec_group_point_mul.bc pubkey_ecc_key.bc pubkey_ecdh.bc pubkey_ecdsa.bc pubkey_ecgdsa.bc pubkey_ecies.bc pubkey_eckcdsa.bc pubkey_ed25519.bc pubkey_ed25519_fe.bc pubkey_ed25519_key.bc pubkey_ed25519_ge.bc pubkey_ed25519_sc_muladd.bc pubkey_ed25519_sc_reduce.bc pubkey_elgamal.bc pubkey_gost_3410.bc pubkey_keypair.bc pubkey_mce_code_based_key_gen.bc pubkey_mce_gf2m_rootfind_dcmp.bc pubkey_mce_gf2m_small_m.bc pubkey_mce_goppa_code.bc pubkey_mce_workfactor.bc pubkey_mce_mceliece.bc pubkey_mce_mceliece_key.bc pubkey_mce_polyn_gf2m.bc pubkey_mceies.bc pubkey_newhope.bc pubkey_pbes2.bc pubkey_pem.bc pubkey_pk_algs.bc pubkey_pk_keys.bc pubkey_pk_ops.bc pubkey_pkcs8.bc pubkey.bc pubkey_rfc6979.bc pubkey_rsa.bc pubkey_sm2.bc pubkey_sm2_enc.bc pubkey_workfactor.bc pubkey_x509_key.bc pubkey_xmss_common_ops.bc pubkey_xmss_hash.bc pubkey_xmss_index_registry.bc pubkey_xmss_parameters.bc pubkey_xmss_privatekey.bc pubkey_xmss_publickey.bc pubkey_xmss_signature.bc pubkey_xmss_signature_operation.bc pubkey_xmss_verification_operation.bc pubkey_xmss_wots_parameters.bc pubkey_xmss_wots_privatekey.bc pubkey_xmss_wots_publickey.bc rng_auto_rng.bc rng_chacha_rng.bc rng_hmac_drbg.bc rng.bc rng_stateful_rng.bc rng_system_rng.bc stream_chacha.bc stream_ctr.bc stream_ofb.bc stream_rc4.bc stream_salsa20.bc stream_shake_cipher.bc stream_cipher.bc tls_credentials_manager.bc tls_msg_cert_req.bc tls_msg_cert_status.bc tls_msg_cert_verify.bc tls_msg_certificate.bc tls_msg_client_hello.bc tls_msg_client_kex.bc tls_msg_finished.bc tls_msg_hello_verify.bc tls_msg_server_hello.bc tls_msg_server_kex.bc tls_msg_session_ticket.bc tls_sessions_sql_tls_session_manager_sql.bc tls_alert.bc tls_algos.bc tls_blocking.bc tls_callbacks.bc tls_cbc.bc tls_channel.bc tls_ciphersuite.bc tls_client.bc tls_extensions.bc tls_handshake_hash.bc tls_handshake_io.bc tls_handshake_state.bc tls_policy.bc tls_record.bc tls_server.bc tls_session.bc tls_session_key.bc tls_session_manager_memory.bc tls_suite_info.bc tls_text_policy.bc tls_version.bc utils_assert.bc utils_calendar.bc utils_charset.bc utils_cpuid.bc utils_cpuid_arm.bc utils_cpuid_ppc.bc utils_cpuid_x86.bc utils_ct_utils.bc utils_data_src.bc utils_dyn_load.bc utils_exceptn.bc utils_filesystem.bc utils_http_util.bc utils_locking_allocator.bc utils_mem_ops.bc utils_mem_pool.bc utils_os_utils.bc utils_parsing.bc utils_poly_dbl.bc utils_read_cfg.bc utils_read_kv.bc utils_socket.bc utils_timer.bc utils_uuid.bc utils_version.bc x509_asn1_alt_name.bc x509_cert_status.bc x509_certstor.bc x509_certstor_flatfile.bc x509_certstor_sql.bc x509_certstor_system.bc x509_crl_ent.bc x509_datastor.bc x509_key_constraint.bc x509_name_constraint.bc x509_ocsp.bc x509_ocsp_types.bc x509_pkcs10.bc x509_ca.bc x509_crl.bc x509_dn.bc x509_dn_ub.bc x509_ext.bc x509_obj.bc x509_x509cert.bc x509_x509opt.bc x509_x509path.bc x509_x509self.bc

The result image but the rest of makefile tasks are lost. botan-test.bc and botan.bc aren't generated.

randombit commented 4 years ago

I am able to reproduce this on Linux. Something has changed but the error about .o is very confusing given all of the created files are LLVM .bc files...

Emscripten build should probably be added to CI

Satancito commented 4 years ago

Compiled successfuly on Linux. Steps.

  1. Activate emsdk Following these instructions Download and install
root@X-PC:/home/x# emsdk activate latest
Writing .emscripten configuration file to user home directory /root/
Backing up old Emscripten configuration file in /root/.emscripten.old
The Emscripten configuration file /root/.emscripten has been rewritten with the following contents:

NODE_JS = '/WebAssembly/emsdk/node/12.9.1_64bit/bin/node'
LLVM_ROOT = '/WebAssembly/emsdk/upstream/bin'
BINARYEN_ROOT = '/WebAssembly/emsdk/upstream'
EMSCRIPTEN_ROOT = '/WebAssembly/emsdk/upstream/emscripten'
TEMP_DIR = '/tmp'
COMPILER_ENGINE = NODE_JS
JS_ENGINES = [NODE_JS]

To conveniently access the selected set of tools from the command line, consider adding the following directories to PATH, or call 'source ../../WebAssembly/emsdk/emsdk_env.sh' to do this for you.

   /WebAssembly/emsdk:/WebAssembly/emsdk/node/12.9.1_64bit/bin:/WebAssembly/emsdk/upstream/emscripten

Set the following tools as active:
   node-12.9.1-64bit
   releases-upstream-9e60f34accb4627d7358223862a7e74291886ab6-64bit

root@X-PC:/home/x# emsdk_env.sh
Adding directories to PATH:
PATH += /WebAssembly/emsdk/node/12.9.1_64bit/bin

Setting environment variables:
EMSDK = /WebAssembly/emsdk
EM_CONFIG = /root/.emscripten
EMSDK_NODE = /WebAssembly/emsdk/node/12.9.1_64bit/bin/node
  1. Change directory to Botan source folder. root@X-PC:/home/x# cd /Temp/Botan/

  2. Configure Botan using emconfigure, with this tool we no need to set CXX environment variable. It set env variables with correct path to CXX and AR tools.

    root@X-PC:/Temp/Botan# emconfigure ./configure.py --cc=clang --cpu=llvm --os=emscripten --without-documentation --prefix
    ="/Temp/Botan/dist/Botan-2.12.1-Emscripten-llvm-Release"
    cache:INFO: generating system asset: is_vanilla.txt... (this will be cached in "/root/.emscripten_cache/is_vanilla.txt" for subsequent builds)
    cache:INFO:  - ok
    INFO: ./configure.py invoked with options "--cc=clang --cpu=llvm --os=emscripten --without-documentation --prefix=/Temp/Botan/dist/Botan-2.12.1-Emscripten-llvm-Release"
    INFO: Configuring to build Botan 2.12.1 (revision git:1a6ad661ce64287ccbe26460ccc3aa4247d86ba8)
    INFO: Running under 2.7.17 (default, Nov  7 2019, 10:07:09) [GCC 7.4.0]
    INFO: CXX environment variable is set which will override compiler path
    INFO: Implicit --ar-command=/WebAssembly/emsdk/upstream/emscripten/emar due to environment variable AR
    INFO: Implicit --cc-bin=/WebAssembly/emsdk/upstream/emscripten/em++ due to environment variable CXX
    INFO: Autodetected platform information: OS="Linux" machine="x86_64" proc="x86_64"
    INFO: Using /etc/ssl/certs/ca-certificates.crt as system certificate store
    INFO: Shared libs not supported on emscripten, disabling shared lib support
    INFO: Auto-detected compiler version 11.0
    WARNING: Unable to detect target architecture via compiler macro checks
    INFO: Target is clang:11.0-emscripten-llvm
    INFO: Skipping (dependency failure): asio certstor_sqlite3 chacha_simd32 noekeon_simd rdrand serpent_simd sessions_sqlite3 shacal2_simd
    INFO: Skipping (incompatible CPU): aes_armv8 aes_ni aes_power8 aes_vperm 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_x86 simd simd_avx2 sm4_armv8 threefish_512_avx2
    INFO: Skipping (incompatible OS): certstor_system_macos certstor_system_windows commoncrypto getentropy proc_walk thread_utils 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 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 checksum cmac codec_filt 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 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 rsa salsa20 scrypt seed serpent sessions_sql sha1 sha2_32 sha2_64 sha3 shacal2 shake shake_cipher siphash siv skein sm2 sm3 sm4 socket sodium sp800_108 sp800_56a sp800_56c srp6 stateful_rng stream streebog system_rng threefish_512 tiger tls tls_cbc tss twofish utils uuid whirlpool x509 x919_mac xmss xtea xts
    INFO: Using symlink to link files into build dir (use --link-method to change)
    INFO: Botan 2.12.1 (revision git:1a6ad661ce64287ccbe26460ccc3aa4247d86ba8) (release dated 20191014) build setup is complete

Checking our Makefile with full path of CXX and AR image

  1. Use emmake root@X-PC:/Temp/Botan# emmake make

We get compiled "libbotan-2.a"

  1. Use emmake install We get dist folder

root@X-PC:/Temp/Botan# tree dist/Botan-2.12.1-Emscripten-llvm-Release/

Botan-2.12.1-Emscripten-llvm-Release
    ├── bin
    │   └── botan.bc
    ├── include
    │   └── botan-2
    │       └── botan
    │           ├── adler32.h
    │           ├── aead.h
    │           ├── aes.h
    │           ├── alg_id.h
    │           ├── argon2.h
    │           ├── aria.h
    │           ├── asn1_alt_name.h
    │           ├── asn1_attribute.h
    │           ├── asn1_obj.h
    │           ├── asn1_oid.h
    │           ├── asn1_print.h
    │           ├── asn1_str.h
    │           ├── asn1_time.h
    │           ├── assert.h
    │           ├── atomic.h
    │           ├── auto_rng.h
    │           ├── base32.h
    │           ├── base58.h
    │           ├── base64.h
    │           ├── basefilt.h
    │           ├── bcrypt.h
    │           ├── bcrypt_pbkdf.h
    │           ├── ber_dec.h
    │           ├── bigint.h
    │           ├── blake2b.h
    │           ├── blinding.h
    │           ├── block_cipher.h
    │           ├── blowfish.h
    │           ├── botan.h
    │           ├── bswap.h
    │           ├── buf_comp.h
    │           ├── buf_filt.h
    │           ├── build.h
    │           ├── calendar.h
    │           ├── camellia.h
    │           ├── cascade.h
    │           ├── cast128.h
    │           ├── cast256.h
    │           ├── cbc.h
    │           ├── cbc_mac.h
    │           ├── ccm.h
    │           ├── cecpq1.h
    │           ├── cert_status.h
    │           ├── certstor.h
    │           ├── certstor_flatfile.h
    │           ├── certstor_sql.h
    │           ├── certstor_system.h
    │           ├── cfb.h
    │           ├── chacha.h
    │           ├── chacha20poly1305.h
    │           ├── chacha_rng.h
    │           ├── charset.h
    │           ├── cipher_filter.h
    │           ├── cipher_mode.h
    │           ├── cmac.h
    │           ├── comb4p.h
    │           ├── comp_filter.h
    │           ├── compiler.h
    │           ├── cpuid.h
    │           ├── crc24.h
    │           ├── crc32.h
    │           ├── credentials_manager.h
    │           ├── crl_ent.h
    │           ├── cryptobox.h
    │           ├── ctr.h
    │           ├── curve25519.h
    │           ├── curve_gfp.h
    │           ├── curve_nistp.h
    │           ├── data_snk.h
    │           ├── data_src.h
    │           ├── database.h
    │           ├── datastor.h
    │           ├── der_enc.h
    │           ├── des.h
    │           ├── desx.h
    │           ├── dh.h
    │           ├── divide.h
    │           ├── dl_algo.h
    │           ├── dl_group.h
    │           ├── dlies.h
    │           ├── dsa.h
    │           ├── dyn_load.h
    │           ├── eax.h
    │           ├── ec_group.h
    │           ├── ecc_key.h
    │           ├── ecdh.h
    │           ├── ecdsa.h
    │           ├── ecgdsa.h
    │           ├── ecies.h
    │           ├── eckcdsa.h
    │           ├── ed25519.h
    │           ├── elgamal.h
    │           ├── eme.h
    │           ├── eme_pkcs.h
    │           ├── eme_raw.h
    │           ├── emsa.h
    │           ├── emsa1.h
    │           ├── emsa_pkcs1.h
    │           ├── emsa_raw.h
    │           ├── emsa_x931.h
    │           ├── entropy_src.h
    │           ├── exceptn.h
    │           ├── fd_unix.h
    │           ├── ffi.h
    │           ├── filter.h
    │           ├── filters.h
    │           ├── fpe_fe1.h
    │           ├── gcm.h
    │           ├── gf2m_small_m.h
    │           ├── ghash.h
    │           ├── gmac.h
    │           ├── gost_28147.h
    │           ├── gost_3410.h
    │           ├── gost_3411.h
    │           ├── hash.h
    │           ├── hash_id.h
    │           ├── hex.h
    │           ├── hkdf.h
    │           ├── hmac.h
    │           ├── hmac_drbg.h
    │           ├── hotp.h
    │           ├── http_util.h
    │           ├── idea.h
    │           ├── init.h
    │           ├── iso9796.h
    │           ├── kasumi.h
    │           ├── kdf.h
    │           ├── kdf1.h
    │           ├── kdf1_iso18033.h
    │           ├── kdf2.h
    │           ├── keccak.h
    │           ├── key_constraint.h
    │           ├── key_filt.h
    │           ├── key_spec.h
    │           ├── keypair.h
    │           ├── lion.h
    │           ├── loadstor.h
    │           ├── locking_allocator.h
    │           ├── lookup.h
    │           ├── mac.h
    │           ├── mceies.h
    │           ├── mceliece.h
    │           ├── md4.h
    │           ├── md5.h
    │           ├── mdx_hash.h
    │           ├── mem_ops.h
    │           ├── mgf1.h
    │           ├── misty1.h
    │           ├── mode_pad.h
    │           ├── monty.h
    │           ├── mul128.h
    │           ├── mutex.h
    │           ├── name_constraint.h
    │           ├── newhope.h
    │           ├── nist_keywrap.h
    │           ├── noekeon.h
    │           ├── numthry.h
    │           ├── oaep.h
    │           ├── ocb.h
    │           ├── ocsp.h
    │           ├── ocsp_types.h
    │           ├── ofb.h
    │           ├── oids.h
    │           ├── p11.h
    │           ├── p11_ecc_key.h
    │           ├── p11_ecdh.h
    │           ├── p11_ecdsa.h
    │           ├── p11_module.h
    │           ├── p11_object.h
    │           ├── p11_randomgenerator.h
    │           ├── p11_rsa.h
    │           ├── p11_session.h
    │           ├── p11_slot.h
    │           ├── p11_x509.h
    │           ├── package.h
    │           ├── par_hash.h
    │           ├── parsing.h
    │           ├── passhash9.h
    │           ├── pbes2.h
    │           ├── pbkdf.h
    │           ├── pbkdf1.h
    │           ├── pbkdf2.h
    │           ├── pem.h
    │           ├── pgp_s2k.h
    │           ├── pipe.h
    │           ├── pk_algs.h
    │           ├── pk_keys.h
    │           ├── pk_ops.h
    │           ├── pk_ops_fwd.h
    │           ├── pkcs10.h
    │           ├── pkcs11.h
    │           ├── pkcs11f.h
    │           ├── pkcs11t.h
    │           ├── pkcs8.h
    │           ├── point_gfp.h
    │           ├── poly1305.h
    │           ├── polyn_gf2m.h
    │           ├── pow_mod.h
    │           ├── prf_tls.h
    │           ├── prf_x942.h
    │           ├── psk_db.h
    │           ├── psk_db_sql.h
    │           ├── pssr.h
    │           ├── pubkey.h
    │           ├── pwdhash.h
    │           ├── rc4.h
    │           ├── reducer.h
    │           ├── rfc3394.h
    │           ├── rfc6979.h
    │           ├── rmd160.h
    │           ├── rng.h
    │           ├── rotate.h
    │           ├── rsa.h
    │           ├── salsa20.h
    │           ├── scan_name.h
    │           ├── scrypt.h
    │           ├── secmem.h
    │           ├── secqueue.h
    │           ├── seed.h
    │           ├── serpent.h
    │           ├── sha160.h
    │           ├── sha2_32.h
    │           ├── sha2_64.h
    │           ├── sha3.h
    │           ├── shacal2.h
    │           ├── shake.h
    │           ├── shake_cipher.h
    │           ├── siphash.h
    │           ├── siv.h
    │           ├── skein_512.h
    │           ├── sm2.h
    │           ├── sm2_enc.h
    │           ├── sm3.h
    │           ├── sm4.h
    │           ├── sodium.h
    │           ├── sp800_108.h
    │           ├── sp800_56a.h
    │           ├── sp800_56c.h
    │           ├── srp6.h
    │           ├── stateful_rng.h
    │           ├── stl_compatibility.h
    │           ├── stream_cipher.h
    │           ├── stream_mode.h
    │           ├── streebog.h
    │           ├── sym_algo.h
    │           ├── symkey.h
    │           ├── system_rng.h
    │           ├── threefish.h
    │           ├── threefish_512.h
    │           ├── tiger.h
    │           ├── tls_alert.h
    │           ├── tls_algos.h
    │           ├── tls_blocking.h
    │           ├── tls_callbacks.h
    │           ├── tls_channel.h
    │           ├── tls_ciphersuite.h
    │           ├── tls_client.h
    │           ├── tls_exceptn.h
    │           ├── tls_extensions.h
    │           ├── tls_handshake_msg.h
    │           ├── tls_magic.h
    │           ├── tls_messages.h
    │           ├── tls_policy.h
    │           ├── tls_server.h
    │           ├── tls_server_info.h
    │           ├── tls_session.h
    │           ├── tls_session_manager.h
    │           ├── tls_session_manager_sql.h
    │           ├── tls_version.h
    │           ├── totp.h
    │           ├── tss.h
    │           ├── twofish.h
    │           ├── types.h
    │           ├── uuid.h
    │           ├── version.h
    │           ├── whrlpool.h
    │           ├── workfactor.h
    │           ├── x509_ca.h
    │           ├── x509_crl.h
    │           ├── x509_dn.h
    │           ├── x509_ext.h
    │           ├── x509_key.h
    │           ├── x509_obj.h
    │           ├── x509cert.h
    │           ├── x509path.h
    │           ├── x509self.h
    │           ├── x919_mac.h
    │           ├── xmss.h
    │           ├── xmss_address.h
    │           ├── xmss_common_ops.h
    │           ├── xmss_hash.h
    │           ├── xmss_index_registry.h
    │           ├── xmss_key_pair.h
    │           ├── xmss_parameters.h
    │           ├── xmss_privatekey.h
    │           ├── xmss_publickey.h
    │           ├── xmss_tools.h
    │           ├── xmss_wots_parameters.h
    │           ├── xmss_wots_privatekey.h
    │           ├── xmss_wots_publickey.h
    │           ├── xtea.h
    │           └── xts.h
    └── lib
        ├── libbotan-2.a
        └── pkgconfig
            └── botan-2.pc
  1. Ready to battle in real World.
Satancito commented 4 years ago

On Windows I have this limitation Command prompt (Cmd. exe) command-line string limitation

You should decrease the size of the resulting command to be able to compile from Windows using nmake.

I believe that the problem is already solved. Use Linux (virtual machine, real machine or WSL) that has no limitations like Windows. Since the bitcode library is to compile and use in the browser. All ok. Thanks Jack for your help and time.