Какие цели доступны для опции swiftc -target и -target-cpu?

этот вопрос касается перекрестной компиляции.

Какие различные цели доступны с помощью опции -target или -target-cpu для быстрого компилятора? Где я могу найти обзор?

Нужно ли только создавать приложения iOS/watchOS или я могу использовать его для создания Linux-программ (обычный процессор x86-64) на macOS?

Я попытался выполнить поиск в репозитории github и нашел 'x86_64-unknown-linux-gnu' в качестве цели. Однако, когда я пытаюсь скомпилировать простую программу "hello world" (swiftc -target x86_64-unknown-linux-gnu test.swift), я получаю эту ошибку:

<unknown>:0: error: unable to load standard library for target 'x86_64-unknown-linux-gnu'

Edit: Я согласен с CristiFati. Последняя часть этого вопроса скорее касается того, как правильно включать/ссылаться на glibc (?!?).

Ответы

Ответ 1

Если вы посмотрите Swift-репозиторий на Github (точное местоположение: swift/utils/swift_build_support/swift_build_support/targets.py) Вы увидите все цели хоста на строка 149-192 в target.py.

Поддержка:

def host_target():
    """
    Return the host target for the build machine, if it is one of
    the recognized targets. Otherwise, throw a NotImplementedError.
    """
    system = platform.system()
    machine = platform.machine()

    if system == 'Linux':
        if machine == 'x86_64':
            return StdlibDeploymentTarget.Linux.x86_64
        elif machine.startswith('armv7'):
            # linux-armv7* is canonicalized to 'linux-armv7'
            return StdlibDeploymentTarget.Linux.armv7
        elif machine.startswith('armv6'):
            # linux-armv6* is canonicalized to 'linux-armv6'
            return StdlibDeploymentTarget.Linux.armv6
        elif machine == 'aarch64':
            return StdlibDeploymentTarget.Linux.aarch64
        elif machine == 'ppc64':
            return StdlibDeploymentTarget.Linux.powerpc64
        elif machine == 'ppc64le':
            return StdlibDeploymentTarget.Linux.powerpc64le
        elif machine == 's390x':
            return StdlibDeploymentTarget.Linux.s390x

    elif system == 'Darwin':
        if machine == 'x86_64':
            return StdlibDeploymentTarget.OSX.x86_64

    elif system == 'FreeBSD':
        if machine == 'amd64':
            return StdlibDeploymentTarget.FreeBSD.x86_64

    elif system == 'CYGWIN_NT-10.0':
        if machine == 'x86_64':
            return StdlibDeploymentTarget.Cygwin.x86_64

    elif system == 'Windows':
        if machine == "AMD64":
            return StdlibDeploymentTarget.Windows.x86_64

    raise NotImplementedError('System "%s" with architecture "%s" is not '
                              'supported' % (system, machine))