Добавление пользовательского macosx.internal SDK

Основная цель: я хочу установку, где я могу скомпилировать как со стандартным SDK, так и с модифицированным SDK для разработки ядра, передав правильный SDK в xcodebuild.

При сборке ядра MacOS X SDK по умолчанию необходимо изменить. Эти изменения могут помешать нормальной разработке приложений.

Apple, очевидно, имеет macosx.internal SDK для этой цели (и, возможно, для различных других целей). Могу ли я как-то взломать настройку SDKROOT=macosx.internal?

Просто положить macosx.internal или же macosx.internal.sdk папка в $(xcode-select -p)Platforms/MacOSX.platform/Developer/SDKs кажется, не делает трюк.

Я что-то пропустил?

1 ответ

Вы можете попробовать использовать xnu-make, проект для сборки xnu. Он служит автономной средой сборки и автоматически создает локальную копию SDK вместо изменения по умолчанию. Посмотрите строки ниже из его Makefile, которые используются для копирования SDK и создания символической ссылки в Xcode, чтобы ее можно было использовать:

MACOSX_SDK = MacOSX10.11
...
#make a copy of the current sdk to the build directory and create a symlink in the Xcode SDKs directory
XCODE_SDKS_DIR := $(shell xcrun -sdk macosx --show-sdk-platform-path)/Developer/SDKs
MACOSX_SDK_SRC := $(XCODE_SDKS_DIR)/$(MACOSX_SDK).sdk
MACOSX_SDK_DST := $(CURDIR)/build/sdk/$(MACOSX_SDK)-xnu.sdk
MACOSX_SDK_LNK := $(XCODE_SDKS_DIR)/$(shell basename $(MACOSX_SDK_DST))
MACOSX_SDK_XNU := $(shell echo $(MACOSX_SDK) | tr A-Z a-z)-xnu

sdk:
ifeq ($(shell test -d $(MACOSX_SDK_SRC); echo $$?), 1)
    $(error "The SDK $(MACOSX_SDK) cannot be found, make sure that the latest Xcode version is installed")
endif
    mkdir -p $(MACOSX_SDK_DST)
    cd $(MACOSX_SDK_SRC) && rsync -rtpl . $(MACOSX_SDK_DST)
    plutil -replace CanonicalName -string $(MACOSX_SDK_XNU) $(MACOSX_SDK_DST)/SDKSettings.plist
    rm -f $(MACOSX_SDK_LNK)
    ln -sf $(MACOSX_SDK_DST) $(MACOSX_SDK_LNK)

Я немного обновил Makefile для сборки MacOSX10.13 и заменил.gitmodules новыми источниками кода xnu и поддерживающими библиотеками, но как только я сделал это, это собрало ядро ​​без изменения локального SDK.

Вы также можете просто адаптировать приведенные выше строки в скрипт для копирования SDK, если вы не хотите использовать проект xnu-make.

Другие вопросы по тегам