swift-everywhere-toolchain icon indicating copy to clipboard operation
swift-everywhere-toolchain copied to clipboard

no NDK arm-linux-androideabi-gcc on $PATH at (eval 10) line 124.

Open kangwang1988 opened this issue 4 years ago • 10 comments

@vgorloff Thanks for your job.

When running "node main.js bootstrap", I met error here:

cd /Users/kylewong/Codes/Swift/swift-everywhere-toolchain/ToolChain/Sources/ssl && \
   ANDROID_NDK=/usr/local/ndk/21.3.6528147 PATH=/usr/local/ndk/21.3.6528147/toolchains/llvm/prebuilt/darwin-x86_64/bin:$PATH \
   ./Configure \
   -D__ANDROID_API__=21 \
   --prefix=/Users/kylewong/Codes/Swift/swift-everywhere-toolchain/ToolChain/Install/darwin-armv7a/ssl \
   android-arm
Configuring OpenSSL version 1.1.1d (0x1010104fL) for android-arm
Using os-specific seed configuration

Failure!  build file wasn't produced.
Please read INSTALL and associated NOTES files.  You may also have to look over
your available compiler tool chain or change your configuration.

no NDK arm-linux-androideabi-gcc on $PATH at (eval 10) line 124.
Execution of command is failed:
cd /Users/kylewong/Codes/Swift/swift-everywhere-toolchain/ToolChain/Sources/ssl && \
   ANDROID_NDK=/usr/local/ndk/21.3.6528147 PATH=/usr/local/ndk/21.3.6528147/toolchains/llvm/prebuilt/darwin-x86_64/bin:$PATH \
   ./Configure \
   -D__ANDROID_API__=21 \
   --prefix=/Users/kylewong/Codes/Swift/swift-everywhere-toolchain/ToolChain/Install/darwin-armv7a/ssl \
   android-arm

If error was due Memory, CPU, or Disk peak resource usage (i.e. missed file while file exists),
then try to run previous command again. Build process will perform "configure" step again,
but most of compilation steps will be skipped.

/Users/kylewong/Codes/Swift/swift-everywhere-toolchain/lib/Tool.js:82
      throw error;
      ^

Error: Command failed: cd /Users/kylewong/Codes/Swift/swift-everywhere-toolchain/ToolChain/Sources/ssl && \
   ANDROID_NDK=/usr/local/ndk/21.3.6528147 PATH=/usr/local/ndk/21.3.6528147/toolchains/llvm/prebuilt/darwin-x86_64/bin:$PATH \
   ./Configure \
   -D__ANDROID_API__=21 \
   --prefix=/Users/kylewong/Codes/Swift/swift-everywhere-toolchain/ToolChain/Install/darwin-armv7a/ssl \
   android-arm
    at checkExecSyncError (child_process.js:630:11)
    at Object.execSync (child_process.js:666:15)
    at SSLBuilder.execute (/Users/kylewong/Codes/Swift/swift-everywhere-toolchain/lib/Tool.js:72:10)
    at SSLBuilder.executeCommands (/Users/kylewong/Codes/Swift/swift-everywhere-toolchain/lib/Tool.js:89:10)
    at SSLBuilder.executeConfigure (/Users/kylewong/Codes/Swift/swift-everywhere-toolchain/lib/Builders/SSLBuilder.js:62:10)
    at SSLBuilder.configure (/Users/kylewong/Codes/Swift/swift-everywhere-toolchain/lib/Builder.js:79:10)
    at SSLBuilder.make (/Users/kylewong/Codes/Swift/swift-everywhere-toolchain/lib/Builder.js:96:10)
    at SSLBuilder.runAction (/Users/kylewong/Codes/Swift/swift-everywhere-toolchain/lib/Builder.js:62:12)
    at /Users/kylewong/Codes/Swift/swift-everywhere-toolchain/Automation.js:123:57
    at Array.forEach (<anonymous>) {
  status: 2,
  signal: null,
  output: [ null, null, null ],
  pid: 22798,
  stdout: null,
  stderr: null
}

arm-linux-androideabi-gcc indeed doesn't exist in the ndk.

kylewong@KyleWongs-MacBook-Pro swift-everywhere-toolchain % ls ~/Library/Android/sdk/ndk/21.3.6528147/toolchains/llvm/prebuilt/darwin-x86_64/bin | grep gcc

How to resolve this issue?

kangwang1988 avatar Dec 07 '20 01:12 kangwang1988

Seems you got this case:

One can engage clang by adjusting PATH to cover same NDK's clang. Just keep in mind that if you miss it, Configure will try to use gcc...

Source: https://github.com/openssl/openssl/blob/master/NOTES-Android.md

That is seems why Configure trying to use arm-linux-androideabi-gcc.


Try to comment or remove line -D__ANDROID_API__=${ndk.api} in file lib/Builders/SSLBuilder.js. Maybe it will help.

Before:

  executeConfigure() {
    this.clean();

    var ndk = new NDK();
    // Seems `-D__ANDROID_API__` not needed. See: #{@sources}/NOTES.ANDROID
    var cmd = `
    ${this.options}
    ./Configure
    // -D__ANDROID_API__=${ndk.api} <<<<<<<<<<<<< THIS LINE IS NOW COMMENTED.
    --prefix=${this.paths.installs}
    `;
    if (this.arch.name == Archs.arm.name) {
      cmd = `${cmd} android-arm`;
    } else if (this.arch.name == Archs.arm64.name) {
      cmd = `${cmd} android-arm64`;
    } else if (this.arch.name == Archs.x86.name) {
      cmd = `${cmd} android-x86`;
    } else if (this.arch.name == Archs.x86_64.name) {
      cmd = `${cmd} android-x86_64`;
    }
    this.executeCommands(`cd ${this.paths.sources} && ${cmd}`);
  }

Then execute: node main.js ssl:make arch:armv7a

vgorloff avatar Dec 07 '20 13:12 vgorloff

btw. Similar issue: https://github.com/openssl/openssl/issues/11192

Maybe you have environment variable "CC" set somewhere?

vgorloff avatar Dec 07 '20 14:12 vgorloff

btw: Another similar issue: https://github.com/openssl/openssl/issues/8941

vgorloff avatar Dec 07 '20 14:12 vgorloff

Unfortunately, neither of it works.

kangwang1988 avatar Dec 07 '20 16:12 kangwang1988

OK. What command perl configdata.pm --dump returns?

cd ToolChain/Sources/ssl/
perl configdata.pm --dump

vgorloff avatar Dec 07 '20 16:12 vgorloff

OK. What command perl configdata.pm --dump returns?

cd ToolChain/Sources/ssl/
perl configdata.pm --dump

kylewong@KyleWongs-MacBook-Pro ssl % perl configdata.pm --dump Can't open perl script "configdata.pm": No such file or directory kylewong@KyleWongs-MacBook-Pro ssl % pwd
/Users/kylewong/Codes/Swift/swift-everywhere-toolchain/ToolChain/Sources/ssl

kangwang1988 avatar Dec 08 '20 15:12 kangwang1988

Hm. The file configdata.pm even was not generated. Super strange.

Well. If the commands below not working, then it is an issue of SSL. Seems would be more effective to ask them as well: https://github.com/openssl/openssl/issues.

cd ToolChain/Sources/ssl
git clean --quiet -f -X
git clean --quiet -f -x -d
export ANDROID_NDK_HOME=/usr/local/ndk/21.3.6528147
export ANDROID_NDK_ROOT=/usr/local/ndk/21.3.6528147
PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/darwin-x86_64/bin:$ANDROID_NDK_ROOT/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin:$PATH
./Configure android-arm64 -D__ANDROID_API__=29
make SHLIB_VERSION_NUMBER= SHLIB_EXT=.so

Build commands taken from: https://github.com/openssl/openssl/blob/master/NOTES-Android.md

vgorloff avatar Dec 08 '20 15:12 vgorloff

I ran into the same issue locally and I found out that it only happens when /usr/local/ndk/21.3.6528147 is a symlink. Not sure why, as far as I know it should be possible to add symlinks to $PATH but in that case it doesn't work.

PATH=/usr/local/ndk/21.3.6528147/toolchains/llvm/prebuilt/darwin-x86_64/bin:$PATH
   ./Configure android-arm -D__ANDROID_API__=21

# Failure!  build file wasn't produced.
# Please read INSTALL and associated NOTES files.  You may also have to look over
# your available compiler tool chain or change your configuration.

# no NDK arm-linux-androideabi-gcc on $PATH at (eval 10) line 124.
# configures successfully

PATH=/Users/username/Library/Android/sdk/ndk/21.3.6528147/toolchains/llvm/prebuilt/darwin-x86_64/bin:$PATH \
   ./Configure -D__ANDROID_API__=21 android-arm

I used this commit to workaround it locally. I can open a pr if this makes sense for you as well.

@vgorloff

michaelknoch avatar May 04 '21 14:05 michaelknoch

Interesting. Thank you for the figuring out this issue!

The whole idea of NDK symbolic link – is to have "similar path on user side" in "umbrella header" when setting up glibc.modulemap (e.g. /.../swift-android-toolchain/usr/lib/swift/android/armv7/glibc.modulemap). But of cause symbolic link not really needed during build time.

I will try to use your @michaelknoch commit to make two separate variables for NDK path: one will be used during build time (non symlinked) and another will be used when packing toolchain for distribution.

vgorloff avatar May 05 '21 05:05 vgorloff

Maybe the issue is solved in release https://github.com/vgorloff/swift-everywhere-toolchain/releases/tag/1.0.68. In this release the non-symlinked (absolute paths) to NDK tools were used.

vgorloff avatar May 08 '21 18:05 vgorloff