mirror of
https://github.com/apple/container.git
synced 2026-10-16 02:59:21 +00:00
- Setting 6.3 in the .swift-version is pulling in 6.3.1 but we can't go there until there is a docker image for it, or Linux build breaks. Alternatively we'd need to have different Swift SDKs for Linux musl build vs macOS.
105 lines
3.4 KiB
Makefile
105 lines
3.4 KiB
Makefile
# Copyright © 2025-2026 Apple Inc. and the Containerization project authors.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# https://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
BUILD_CONFIGURATION ?= debug
|
|
WARNINGS_AS_ERRORS ?= true
|
|
export GIT_COMMIT := $(shell git rev-parse HEAD)
|
|
export GIT_TAG := $(shell git describe --tags --exact-match 2>/dev/null || echo "")
|
|
export BUILD_TIME := $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
SWIFT_WARNING_CONFIG := $(if $(filter-out false,$(WARNINGS_AS_ERRORS)),-Xswiftc -warnings-as-errors)
|
|
UNAME_M := $(shell uname -m)
|
|
ifeq ($(UNAME_M),arm64)
|
|
MUSL_ARCH := aarch64
|
|
else ifeq ($(UNAME_M),aarch64)
|
|
MUSL_ARCH := aarch64
|
|
else
|
|
MUSL_ARCH := x86_64
|
|
endif
|
|
|
|
LIBC ?= musl
|
|
ifeq ($(LIBC),musl)
|
|
SWIFT_SDK_FLAGS := --swift-sdk $(MUSL_ARCH)-swift-linux-musl
|
|
endif
|
|
|
|
SWIFT_CONFIGURATION := $(SWIFT_SDK_FLAGS) $(SWIFT_WARNING_CONFIG) -Xlinker -s --disable-automatic-resolution
|
|
|
|
SWIFT_VERSION := 6.3.0
|
|
SWIFT_SDK_URL := https://download.swift.org/swift-6.3-release/static-sdk/swift-6.3-RELEASE/swift-6.3-RELEASE_static-linux-0.1.0.artifactbundle.tar.gz
|
|
SWIFT_SDK_CHECKSUM := d2078b69bdeb5c31202c10e9d8a11d6f66f82938b51a4b75f032ccb35c4c286c
|
|
SWIFT_SDK_PATH := /tmp/$(notdir $(SWIFT_SDK_URL))
|
|
|
|
SYSTEM_TYPE := $(shell uname -s)
|
|
ifeq ($(SYSTEM_TYPE),Darwin)
|
|
SWIFTLY_URL := https://download.swift.org/swiftly/darwin/swiftly.pkg
|
|
SWIFTLY_FILENAME := $(notdir $(SWIFTLY_URL))
|
|
SWIFTLY_BIN_DIR ?= ~/.swiftly/bin
|
|
SWIFT := $(SWIFTLY_BIN_DIR)/swift
|
|
else
|
|
SWIFT ?= swift
|
|
endif
|
|
BUILD_BIN_DIR := $(shell $(SWIFT) build -c $(BUILD_CONFIGURATION) $(SWIFT_CONFIGURATION) --show-bin-path)
|
|
|
|
ifeq ($(SYSTEM_TYPE),Darwin)
|
|
MACOS_VERSION := $(shell sw_vers -productVersion)
|
|
MACOS_MAJOR := $(shell echo $(MACOS_VERSION) | cut -d. -f1)
|
|
MACOS_RELEASE_TYPE := $(shell sw_vers | grep ReleaseType)
|
|
endif
|
|
|
|
.DEFAULT_GOAL := all
|
|
|
|
.PHONY: all
|
|
all:
|
|
@echo Building vminitd and vmexec...
|
|
@mkdir -p ./bin/
|
|
@rm -f ./bin/vminitd
|
|
@rm -f ./bin/vmexec
|
|
@$(SWIFT) --version
|
|
@$(SWIFT) build -c $(BUILD_CONFIGURATION) $(SWIFT_CONFIGURATION)
|
|
@install "$(BUILD_BIN_DIR)/vminitd" ./bin/
|
|
@install "$(BUILD_BIN_DIR)/vmexec" ./bin/
|
|
|
|
.PHONY: cross-prep
|
|
cross-prep: swift linux-sdk
|
|
|
|
.PHONY: swiftly
|
|
swiftly:
|
|
@if ! command -v ${SWIFTLY_BIN_DIR}/swiftly > /dev/null 2>&1; then \
|
|
echo "Installing Swiftly..."; \
|
|
curl -o /var/tmp/$(SWIFTLY_FILENAME) $(SWIFTLY_URL) && \
|
|
installer -pkg /var/tmp/$(SWIFTLY_FILENAME) -target CurrentUserHomeDirectory && \
|
|
${SWIFTLY_BIN_DIR}/swiftly init --quiet-shell-followup --skip-install && \
|
|
. ~/.swiftly/env.sh && \
|
|
hash -r && \
|
|
rm /var/tmp/$(SWIFTLY_FILENAME); \
|
|
fi
|
|
|
|
.PHONY: swift
|
|
swift: swiftly
|
|
@echo Installing Swift $(SWIFT_VERSION)...
|
|
@${SWIFTLY_BIN_DIR}/swiftly install $(SWIFT_VERSION)
|
|
|
|
.PHONY: linux-sdk
|
|
linux-sdk:
|
|
@echo Installing Static Linux SDK...
|
|
@curl -L -o $(SWIFT_SDK_PATH) $(SWIFT_SDK_URL)
|
|
-@$(SWIFT) sdk install $(SWIFT_SDK_PATH) --checksum $(SWIFT_SDK_CHECKSUM)
|
|
@rm $(SWIFT_SDK_PATH)
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
@echo Cleaning the vminitd build files...
|
|
@rm -f ./bin/vminitd
|
|
@rm -f ./bin/vmexec
|
|
@rm -rf .build
|