Добавление пользовательского 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.