Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

Resolved IL2CPP build failure in CI - error=86, "Bad CPU type in executable"

Discussion in 'Android' started by abe_unity647, Aug 11, 2022.

  1. abe_unity647

    abe_unity647

    Joined:
    Apr 28, 2022
    Posts:
    6
    Hi all, thanks for taking a look.

    I'm attempting to build a project in a Bitrise CI workflow. Our setup is a little complex - we are embedding the Unity project within a React Native app.

    I'm able to build the project locally on my Apple silicon processor. However, when Gradle in the CI workflow gets to the IL2CPP build step, it fails with the error in the title:
    Caused by: java.io.IOException: Cannot run program "/Users/vagrant/git/unity/builds/android/unityLibrary/src/main/Il2CppOutputProject/IL2CPP/build/deploy/il2cpp" (in directory "/Users/vagrant/git/unity/builds/android/unityLibrary"): error=86, Bad CPU type in executable
    (full stack trace at the end).

    The CI is using a VM based on a Mac Intel chip (Intel Xeon 3.2Ghz, I'm pretty sure, although I can't find it at the moment). I assume that's what's causing the error. However, I'm not seeing a lot of issues with IL2CPP on Mac Intel chips.

    Could this be because I've exported the Android project on an M1 chip and the CI is running on a different architecture? If so, is there any option to build for x86 on my M1?

    Code (CSharp):
    1. Execution failed for task ':unityLibrary:BuildIl2CppTask'.
    2. > A problem occurred starting process 'command '/Users/vagrant/git/unity/builds/android/unityLibrary/src/main/Il2CppOutputProject/IL2CPP/build/deploy/il2cpp''
    3. * Try:
    4. > Run with --info or --debug option to get more log output.
    5. > Run with --scan to get full insights.
    6. * Exception is:
    7. org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':unityLibrary:BuildIl2CppTask'.
    8.     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:145)
    9.     at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
    10.     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:143)
    11.     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:131)
    12.     at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
    13.     at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
    14.     at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
    15.     at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
    16.     at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
    17.     at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
    18.     at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
    19.     at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
    20.     at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
    21.     at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
    22.     at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
    23.     at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
    24.     at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
    25.     at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
    26.     at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
    27.     at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
    28.     at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
    29.     at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
    30.     at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
    31.     at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:402)
    32.     at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:389)
    33.     at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:382)
    34.     at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:368)
    35.     at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
    36.     at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
    37.     at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
    38.     at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
    39.     at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    40.     at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    41.     at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
    42. Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command '/Users/vagrant/git/unity/builds/android/unityLibrary/src/main/Il2CppOutputProject/IL2CPP/build/deploy/il2cpp''
    43.     at org.gradle.process.internal.DefaultExecHandle.execExceptionFor(DefaultExecHandle.java:241)
    44.     at org.gradle.process.internal.DefaultExecHandle.setEndStateInfo(DefaultExecHandle.java:218)
    45.     at org.gradle.process.internal.DefaultExecHandle.failed(DefaultExecHandle.java:369)
    46.     at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:87)
    47.     at org.gradle.internal.operations.CurrentBuildOperationPreservingRunnable.run(CurrentBuildOperationPreservingRunnable.java:42)
    48.     at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    49.     at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    50.     at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
    51. Caused by: net.rubygrapefruit.platform.NativeException: Could not start '/Users/vagrant/git/unity/builds/android/unityLibrary/src/main/Il2CppOutputProject/IL2CPP/build/deploy/il2cpp'
    52.     at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
    53.     at net.rubygrapefruit.platform.internal.WrapperProcessLauncher.start(WrapperProcessLauncher.java:36)
    54.     at org.gradle.process.internal.ExecHandleRunner.startProcess(ExecHandleRunner.java:98)
    55.     at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:71)
    56.     ... 4 more
    57. Caused by: java.io.IOException: Cannot run program "/Users/vagrant/git/unity/builds/android/unityLibrary/src/main/Il2CppOutputProject/IL2CPP/build/deploy/il2cpp" (in directory "/Users/vagrant/git/unity/builds/android/unityLibrary"): error=86, Bad CPU type in executable
    58.     at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
    59.     ... 7 more
    60. Caused by: java.io.IOException: error=86, Bad CPU type in executable
    61.     ... 8 more
     
  2. Aurimas-Cernius

    Aurimas-Cernius

    Unity Technologies

    Joined:
    Jul 31, 2013
    Posts:
    3,640
    Try replacing il2cpp with it's x64 variant. It should be available in Unity.
    Though it's probably better to integrate Unity build into CI as well.
     
  3. abe_unity647

    abe_unity647

    Joined:
    Apr 28, 2022
    Posts:
    6
    Hi, thanks so much for your reply. Can you provide any more information about replacing il2cpp with its 64 bit variant? I didn't have much luck looking for a setting or a way to do this just now. The closest thing I could think of was disabling ARMv7 in the Player configuration (so it's just ARM64 selected), but a build configured like that has just failed my pipeline.

    I hadn't thought of building in CI - thanks. If I can't get anything easier to work I will do that.

    I pasted my Player configuration below. Let me know if I can provide any more information!

    upload_2022-8-11_9-25-37.png
     
    Last edited: Aug 11, 2022
  4. abe_unity647

    abe_unity647

    Joined:
    Apr 28, 2022
    Posts:
    6
    Building the Unity app on my Intel machine resolved the issue in the pipeline. I'm going to look into using Silicon machines in the pipeline before attempting to do the Unity build in the cloud.
     
  5. abe_unity647

    abe_unity647

    Joined:
    Apr 28, 2022
    Posts:
    6
    Confirmed that matching the architecture works for Silicon as well.