8 votos

¿Es posible compilar un programa de línea de comandos de UNIX para la arquitectura de Apple Silicon en una Mac basada en Intel?

Tengo un envoltorio GUI de un programa de línea de comandos de UNIX. Me di cuenta de que Apple anunció Apple Silicon Mac. Tarde o temprano necesitaré construir un Binario Universal de mi envoltorio GUI. Pero primero, necesito construir un programa de línea de comandos de UNIX para Apple Silicon. Actualmente solo tengo una Mac basada en Intel. ¿Es posible compilar un programa de línea de comandos de UNIX para la arquitectura de Apple Silicon en una Mac basada en Intel?

Nota: Sé que Apple ofrece un mini Mac de Apple Silicon por $500, pero no tengo dinero ahora.

0 votos

Para el primer paso de validar su programa de línea de comandos en ARM, compílelo para la Raspberry Pi u otra SBC basada en ARM similar. Esto atrapará todo tipo de errores de portabilidad. Incluso podría lograr que su interfaz gráfica funcione compilando el siguiente paso. Esto no garantiza atrapar cada problema, pero muchos de ellos se mostrarán temprano (junto con cualquier problema de Linux vs. Darwin que quizás no le importe).

0 votos

El formato de MacOS para archivos ejecutables, que yo sepa, no permite tener múltiples arquitecturas en el mismo binario. Por lo tanto, necesitas compilación separada.

1 votos

Uh @ThorbjørnRavnAndersen, un binario de arquitectura múltiple se llama fat. sin embargo, ningún compilador los crea por lo que necesitas compilación separada y luego unirlos.

6voto

benwiggy Puntos 8

El objetivo de los Binarios Universales es que puedas compilar el mismo código para 2 arquitecturas, una de las cuales (por necesidad) no es el hardware en el que estás trabajando.

Anteriormente, ha sido posible compilar Binarios Universales para PPC e Intel, o 32 bits y 64 bits, independientemente del hardware que realiza la compilación.

La documentación de Apple sobre la migración a Apple Silicon (AS) se encuentra aquí: https://developer.apple.com/documentation/xcode/porting_your_macos_apps_to_apple_silicon

Observa el diagrama que tiene las palabras "Cualquier ordenador Mac".

introducir descripción de la imagen aquí

El Mac mini de Apple Silicon es para que los desarrolladores prueben que su código de AS (y el de Apple) funciona bien. No hay Macs con AS disponibles para la compra por parte de no desarrolladores (hasta el 14 de octubre).

Apple ha afirmado que los binarios de Intel se ejecutarán en Apple Silicon utilizando la emulación de Rosetta 2. Por lo tanto, tendrás al menos la duración de Big Sur antes de tener que crear un Binario Universal.

Diría que no necesitas preocuparte por esto hasta:

a) Se hayan lanzado los Macs con AS,
b) La gente que ha comprado los Macs con AS esté interesada en tu herramienta;
c) Xcode 12 se lance oficialmente (junto con Big Sur)

en ese momento, compilar un Binario Universal para una herramienta de línea de comandos debería ser bastante sencillo, simplemente cambiando algunas opciones.

5voto

Jcubed Puntos 2972

El proceso de construir un binario para una arquitectura diferente a la que estás utilizando se llama compilación cruzada.

Como se destaca en las otras respuestas, esto es una ocurrencia relativamente común, especialmente en la historia de Apple que cambió de procesadores 68K a Power PC, luego a Intel y ahora a ARM.

Cabe destacar que cualquiera que construya una aplicación para iPhone o iPad en su Mac ha estado haciendo compilación cruzada, ya que estos dispositivos ya utilizan la arquitectura ARM mientras que las Mac actualmente utilizan la arquitectura Intel. Incluso es común construir aplicaciones iOS multiarquitectura, ya que varias versiones de CPU realmente utilizan variantes diferentes de la arquitectura ARM (armv7, armv8...).

De igual manera, es común construir variantes i386 (Intel 32 bits) y amd64/x64 (Intel 64 bits), ya sea de forma independiente o como binarios gordos/universales.

El proceso para compilar cruzadamente y construir binarios gordos/universales depende mucho del entorno y de la herramienta que utilices. Si usas Xcode, entonces será cuestión de cambiar la configuración del proyecto, y ¡voilà!, está hecho.

Si estás utilizando herramientas tipo Unix (principalmente en la línea de comandos), incluyendo make o variantes, gcc o clang, etc, entonces puede requerir más o menos ajustes en tu proceso de construcción para lograr todo eso, con bastantes opciones para cambiar (arquitectura, pero también rutas de archivos de cabecera y bibliotecas), así como agregar el paso que combina los múltiples binarios dependientes de la arquitectura en un único binario gordo/universal.

Así que realmente todo depende de tu proceso de construcción actual y de las herramientas que utilices. Pero definitivamente será posible.

Por supuesto, todo esto se basa en que el código a compilar sea realmente portátil, es decir, no haga suposiciones sobre cosas (como tamaños de enteros o punteros) y no requiera ningún código en ensamblador. Eso solía ser un gran problema en el pasado (especialmente con código puro en C), pero hoy en día, con la cantidad de arquitecturas para las que actualmente se construye software, es mucho menos común encontrarse con problemas de este tipo.

3voto

Douglas Puntos 10417

¿Es posible compilar un programa de línea de comandos de UNIX para la arquitectura de Apple Silicon en una Mac basada en Intel?

Sí, lo es.

Es una respuesta amplia y dependiendo de sus detalles particulares, deberá ajustar/adaptar su código según sea necesario.

¿Cómo sabemos esto? La historia es nuestra guía y no se limita a Apple.

  • OS X se compiló en PowerPC y luego migró a Intel
  • OS X se derivó de NeXTStep que originalmente se ejecutaba en Motorola 6000, luego Intel, Sparc y RISC-PA
  • Los sistemas operativos de código abierto como FreeBSD se (re)compilan para diferentes plataformas, incluidas i386, AMD64, IA64, Sparc64 y ARM
  • En una nota personal, he compilado XOrg (FreeBSD) para ejecutarse en un XServe G4.

Cambiar de arquitecturas no es tan intimidante como suena. Apple pondrá a disposición las herramientas (XCode) y el hardware de desarrollo (como ya mencionaste). Desde una perspectiva puramente empresarial, ellos deben hacerlo. Lanzar un nuevo sistema operativo y comenzar literalmente con un mercado de aplicaciones prácticamente nulo sería la forma más segura de matar su línea de productos.

Tendrás las herramientas, ya sea de Apple (XCode) o de la comunidad de código abierto. El hardware se volverá más accesible, lo que en última instancia reducirá el costo y, dependiendo de tu estrategia de mercado, es posible que no tengas que preocuparte por esto hasta unos años después de que Apple Silicon se haya lanzado oficialmente debido a las tasas de adopción del mercado.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X