Skip to content

Commit b45e400

Browse files
MaxDesiatovFranzBusch
authored andcommitted
1 parent 7a927cd commit b45e400

31 files changed

+372
-50
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@ Package.resolved
2020
.vscode
2121
Utilities/InstalledSwiftPMConfiguration/config.json
2222
.devcontainer
23+
Fixtures/BinaryLibraries/Static/Package1/Simple.artifactbundle/build
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// swift-tools-version: 6.0
2+
3+
import PackageDescription
4+
5+
let package = Package(
6+
name: "Package1",
7+
targets: [
8+
.executableTarget(
9+
name: "Example",
10+
dependencies: [
11+
"Simple",
12+
"Wrapper"
13+
]
14+
),
15+
.target(
16+
name: "Wrapper",
17+
dependencies: [
18+
"Simple"
19+
]
20+
),
21+
.binaryTarget(
22+
name: "Simple",
23+
path: "Simple.artifactbundle"
24+
),
25+
]
26+
)
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
SRC_FILES := $(wildcard *.c)
2+
3+
# Define architectures and platforms
4+
ARCHS := x86_64 arm64
5+
PLATFORMS := macos linux
6+
7+
# Define output directories
8+
BUILD_DIR := build
9+
DIST_DIR := dist
10+
11+
# Platform-specific settings
12+
MACOS_SDK := $(shell xcrun --sdk macosx --show-sdk-path 2>/dev/null || echo "")
13+
MACOS_MIN_VERSION := 10.15
14+
15+
# Compiler flags
16+
COMMON_FLAGS := -O2
17+
18+
# Platform and architecture specific flags
19+
MACOS_X86_64_FLAGS := -target x86_64-apple-macos$(MACOS_MIN_VERSION) -isysroot $(MACOS_SDK)
20+
MACOS_ARM64_FLAGS := -target arm64-apple-macos$(MACOS_MIN_VERSION) -isysroot $(MACOS_SDK)
21+
LINUX_X86_64_FLAGS := -target x86_64-unknown-linux-gnu
22+
LINUX_ARM64_FLAGS := -target aarch64-unknown-linux-gnu
23+
24+
.PHONY: all clean macos linux universal
25+
26+
all: macos linux
27+
28+
# Create necessary directories
29+
$(BUILD_DIR):
30+
mkdir -p $(BUILD_DIR)/macos/x86_64
31+
mkdir -p $(BUILD_DIR)/macos/arm64
32+
mkdir -p $(BUILD_DIR)/linux/x86_64
33+
mkdir -p $(BUILD_DIR)/linux/arm64
34+
35+
$(DIST_DIR):
36+
mkdir -p $(DIST_DIR)/macos
37+
mkdir -p $(DIST_DIR)/linux
38+
39+
# macOS x86_64 build
40+
$(BUILD_DIR)/macos/x86_64/%.o: %.c | $(BUILD_DIR)
41+
clang $(COMMON_FLAGS) $(MACOS_X86_64_FLAGS) -c -o $@ $<
42+
43+
# macOS arm64 build
44+
$(BUILD_DIR)/macos/arm64/%.o: %.c | $(BUILD_DIR)
45+
clang $(COMMON_FLAGS) $(MACOS_ARM64_FLAGS) -c -o $@ $<
46+
47+
# Linux x86_64 build
48+
$(BUILD_DIR)/linux/x86_64/%.o: %.c | $(BUILD_DIR)
49+
clang $(COMMON_FLAGS) $(LINUX_X86_64_FLAGS) -c -o $@ $<
50+
51+
# Linux arm64 build
52+
$(BUILD_DIR)/linux/arm64/%.o: %.c | $(BUILD_DIR)
53+
clang $(COMMON_FLAGS) $(LINUX_ARM64_FLAGS) -c -o $@ $<
54+
55+
# Define object files for each platform and architecture
56+
MACOS_X86_64_OBJ_FILES := $(patsubst %.c,$(BUILD_DIR)/macos/x86_64/%.o,$(SRC_FILES))
57+
MACOS_ARM64_OBJ_FILES := $(patsubst %.c,$(BUILD_DIR)/macos/arm64/%.o,$(SRC_FILES))
58+
LINUX_X86_64_OBJ_FILES := $(patsubst %.c,$(BUILD_DIR)/linux/x86_64/%.o,$(SRC_FILES))
59+
LINUX_ARM64_OBJ_FILES := $(patsubst %.c,$(BUILD_DIR)/linux/arm64/%.o,$(SRC_FILES))
60+
61+
# Create individual architecture libraries
62+
$(DIST_DIR)/macos/libSimple_x86_64.a: $(MACOS_X86_64_OBJ_FILES) | $(DIST_DIR)
63+
llvm-ar rc $@ $^
64+
65+
$(DIST_DIR)/macos/libSimple_arm64.a: $(MACOS_ARM64_OBJ_FILES) | $(DIST_DIR)
66+
llvm-ar rc $@ $^
67+
68+
$(DIST_DIR)/linux/libSimple_x86_64.a: $(LINUX_X86_64_OBJ_FILES) | $(DIST_DIR)
69+
llvm-ar rc $@ $^
70+
71+
$(DIST_DIR)/linux/libSimple_arm64.a: $(LINUX_ARM64_OBJ_FILES) | $(DIST_DIR)
72+
llvm-ar rc $@ $^
73+
74+
# Create universal binary for macOS
75+
$(DIST_DIR)/macos/libSimple.a: $(DIST_DIR)/macos/libSimple_x86_64.a $(DIST_DIR)/macos/libSimple_arm64.a
76+
lipo -create -output $@ $^
77+
78+
# For Linux, we'll provide separate libraries since lipo is macOS-specific
79+
linux: $(DIST_DIR)/linux/libSimple_x86_64.a $(DIST_DIR)/linux/libSimple_arm64.a
80+
@echo "Linux libraries built in $(DIST_DIR)/linux/"
81+
@echo "Note: For Linux, use the architecture-specific libraries as needed."
82+
83+
macos: $(DIST_DIR)/macos/libSimple.a
84+
@echo "macOS universal library built at $(DIST_DIR)/macos/libSimple.a"
85+
86+
clean:
87+
rm -rf $(BUILD_DIR) $(DIST_DIR)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
int foo(void);
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module Simple {
2+
header "simple.h"
3+
export *
4+
}

0 commit comments

Comments
 (0)