Skip to content

Commit 08cdd61

Browse files
committed
Add the ability to create an xcframework
1 parent ae8fb3e commit 08cdd61

2 files changed

Lines changed: 59 additions & 25 deletions

File tree

Makefile

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ else ifneq ($(filter shared_lib install-shared, $(MAKECMDGOALS)),)
6060
else ifneq ($(filter static_lib install-static, $(MAKECMDGOALS)),)
6161
DEBUG_LEVEL=0
6262
LIB_MODE=static
63+
else ifneq ($(filter xcframework, $(MAKECMDGOALS)),)
64+
DEBUG_LEVEL=0
65+
LIB_MODE=static
6366
else ifneq ($(filter jtest rocksdbjava%, $(MAKECMDGOALS)),)
6467
OBJ_DIR=jl
6568
LIB_MODE=shared
@@ -281,14 +284,6 @@ endif
281284

282285
CXXFLAGS += $(ARCHFLAG)
283286

284-
ifeq (,$(shell $(CXX) -fsyntax-only -march=armv8-a+crc+crypto -xc /dev/null 2>&1))
285-
ifneq ($(PLATFORM),OS_MACOSX)
286-
CXXFLAGS += -march=armv8-a+crc+crypto
287-
CFLAGS += -march=armv8-a+crc+crypto
288-
ARMCRC_SOURCE=1
289-
endif
290-
endif
291-
292287
export JAVAC_ARGS
293288
CLEAN_FILES += make_config.mk rocksdb.pc
294289

@@ -1302,8 +1297,14 @@ package:
13021297
# Unit tests and tools
13031298
# ---------------------------------------------------------------------------
13041299
$(STATIC_LIBRARY): $(LIB_OBJECTS)
1305-
$(AM_V_AR)rm -f $@ $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
1306-
$(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIB_OBJECTS)
1300+
$(AM_V_AR)rm -f iphonesimulator-$@ $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
1301+
$(AM_V_at)$(AR) $(ARFLAGS) iphonesimulator-$@ $(addprefix ./iphonesimulator/, $(LIB_OBJECTS))
1302+
1303+
$(AM_V_AR)rm -f iphonedevice-$@ $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
1304+
$(AM_V_at)$(AR) $(ARFLAGS) iphonedevice-$@ $(addprefix ./iphonedevice/, $(LIB_OBJECTS))
1305+
1306+
$(AM_V_AR)rm -f maccatalyst-$@ $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
1307+
$(AM_V_at)$(AR) $(ARFLAGS) maccatalyst-$@ $(addprefix maccatalyst/, $(LIB_OBJECTS))
13071308

13081309
$(STATIC_TEST_LIBRARY): $(TEST_OBJECTS)
13091310
$(AM_V_AR)rm -f $@ $(SHARED_TEST_LIBRARY)
@@ -2537,25 +2538,32 @@ build_size:
25372538
ifeq ($(PLATFORM), IOS)
25382539
# For iOS, create universal object files to be used on both the simulator and
25392540
# a device.
2540-
XCODEROOT=$(shell xcode-select -print-path)
2541-
PLATFORMSROOT=$(XCODEROOT)/Platforms
2542-
SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer
2543-
DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer
2544-
IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString)
2541+
SIMULATORSDK =$(shell xcrun --sdk iphonesimulator --show-sdk-path)
2542+
IPHONESDK =$(shell xcrun --sdk iphoneos --show-sdk-path)
2543+
MACOSSDK =$(shell xcrun --sdk macosx --show-sdk-path)
25452544

25462545
.cc.o:
2547-
mkdir -p ios-x86/$(dir $@)
2548-
$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
2549-
mkdir -p ios-arm/$(dir $@)
2550-
xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
2551-
lipo ios-x86/$@ ios-arm/$@ -create -output $@
2546+
mkdir -p iphonesimulator/$(dir $@)
2547+
xcrun -sdk iphonesimulator $(CXX) $(CXXFLAGS) -mios-simulator-version-min=15.0 -isysroot $(SIMULATORSDK) -arch x86_64 -arch arm64 -c $< -o iphonesimulator/$@
2548+
mkdir -p iphonedevice/$(dir $@)
2549+
xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -miphoneos-version-min=15.0 -isysroot $(IPHONESDK) -arch arm64 -c $< -o iphonedevice/$@
2550+
mkdir -p maccatalyst/$(dir $@)
2551+
xcrun -sdk macosx $(CXX) $(CXXFLAGS) -isysroot $(MACOSSDK) -arch x86_64 -arch arm64 -target x86_64-apple-ios15.0-macabi -c $< -o maccatalyst/$@
25522552

25532553
.c.o:
2554-
mkdir -p ios-x86/$(dir $@)
2555-
$(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
2556-
mkdir -p ios-arm/$(dir $@)
2557-
xcrun -sdk iphoneos $(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
2558-
lipo ios-x86/$@ ios-arm/$@ -create -output $@
2554+
mkdir -p iphonesimulator/$(dir $@)
2555+
xcrun -sdk iphonesimulator $(CC) $(CFLAGS) -mios-simulator-version-min=15.0 -isysroot $(SIMULATORSDK) -arch x86_64 -arch arm64 -c $< -o iphonesimulator/$@
2556+
mkdir -p iphonedevice/$(dir $@)
2557+
xcrun -sdk iphoneos $(CC) $(CFLAGS) -miphoneos-version-min=15.0 -isysroot $(IPHONESDK) -arch arm64 -c $< -o iphonedevice/$@
2558+
mkdir -p maccatalyst/$(dir $@)
2559+
xcrun -sdk macosx $(CC) $(CFLAGS) -isysroot $(MACOSSDK) -arch x86_64 -arch arm64 -target x86_64-apple-ios15.0-macabi -c $< -o maccatalyst/$@
2560+
2561+
xcframework:
2562+
xcodebuild -create-xcframework \
2563+
-library iphonedevice-librocksdb.a -headers ./include \
2564+
-library iphonesimulator-librocksdb.a -headers ./include \
2565+
-library maccatalyst-librocksdb.a -headers ./include \
2566+
-output RocksDB.xcframework
25592567

25602568
else
25612569
ifeq ($(HAVE_POWER8),1)

build_tools/make_ios_framework.sh

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#/usr/bin/env bash
2+
3+
set -e
4+
5+
export TARGET_OS=IOS
6+
export USE_RTTI=1
7+
8+
export CXXFLAGS=-DLZ4
9+
export LIBRARY_PATH=/usr/local/lib:$LIBRARY_PATH
10+
export CPLUS_INCLUDE_PATH=/usr/local/include:$CPLUS_INCLUDE_PATH
11+
12+
CORES=$(sysctl -n hw.ncpu)
13+
14+
if ! brew list lz4 &>/dev/null; then
15+
echo "LZ4 not installed. Installing via Homebrew..."
16+
brew install lz4
17+
fi
18+
19+
rm iphonedevice-librocksdb.a || true
20+
rm iphonesimulator-librocksdb.a || true
21+
rm maccatalyst-librocksdb.a || true
22+
make static_lib -j${CORES}
23+
24+
rm -rf RocksDB.xcframework || true
25+
make xcframework
26+

0 commit comments

Comments
 (0)