Files
UUVPN/iOS-SwiftUI-Code/GRDB.swift-6.29.3/Makefile
T
2025-01-22 14:09:10 +08:00

464 lines
15 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Rules
# =====
#
# make test - Run all tests but performance tests
# make test_performance - Run performance tests
# make doc - Generate DocC documentation
# make clean - Remove build artifacts
# make distclean - Restore repository to a pristine state
default: test
smokeTest: test_framework_GRDBiOS_maxTarget test_framework_GRDBiOS_minTarget test_framework_SQLCipher3 test_framework_SQLCipher4Encrypted test_framework_GRDBCustomSQLiteiOS_maxTarget test_SPM
# =====
# Tools
GIT := $(shell command -v git)
POD := $(shell command -v pod)
XCRUN := $(shell command -v xcrun)
XCODEBUILD := set -o pipefail && $(shell command -v xcodebuild)
ifdef TOOLCHAIN
# If TOOLCHAIN is specified, add xcodebuild parameter
XCODEBUILD += -toolchain $(TOOLCHAIN)
# If TOOLCHAIN is specified, get the location of the toolchains SWIFT
TOOLCHAINSWIFT = $(shell $(XCRUN) --toolchain '$(TOOLCHAIN)' --find swift 2> /dev/null)
ifdef TOOLCHAINSWIFT
# Update the SWIFT path to the toolchains SWIFT
SWIFT = $(TOOLCHAINSWIFT)
else
@echo Cannot find `swift` for specified toolchain.
@exit 1
endif
else
# If TOOLCHAIN is not specified, use standard Swift
SWIFT = $(shell $(XCRUN) --find swift 2> /dev/null)
endif
# =====
# Configuration
DOCS_PATH = Documentation/Reference
TEST_ACTIONS = clean build build-for-testing test-without-building
OTHER_SWIFT_FLAGS = '$$(inherited) -D SQLITE_ENABLE_FTS5 -D SQLITE_ENABLE_PREUPDATE_HOOK' # -Xfrontend -warn-concurrency -Xfrontend -enable-actor-data-race-checks'
GCC_PREPROCESSOR_DEFINITIONS = '$$(inherited) GRDB_SQLITE_ENABLE_PREUPDATE_HOOK=1'
# Extract min and max destinations from the available devices
MIN_IOS_DESTINATION := $(shell xcrun simctl list -j devices available | Scripts/destination.rb | grep iPhone | grep -v ^13\.7 | sort -n | head -1 | cut -wf 3 | sed 's/\(.*\)/"platform=iOS Simulator,id=\1"/')
MAX_IOS_DESTINATION := $(shell xcrun simctl list -j devices available | Scripts/destination.rb | grep iPhone | grep -v ^13\.7 | sort -rn | head -1 | cut -wf 3 | sed 's/\(.*\)/"platform=iOS Simulator,id=\1"/')
MIN_TVOS_DESTINATION := $(shell xcrun simctl list -j devices available | Scripts/destination.rb | grep tvOS | sort -n | head -1 | cut -wf 3 | sed 's/\(.*\)/"platform=tvOS Simulator,id=\1"/')
MAX_TVOS_DESTINATION := $(shell xcrun simctl list -j devices available | Scripts/destination.rb | grep tvOS | sort -rn | head -1 | cut -wf 3 | sed 's/\(.*\)/"platform=tvOS Simulator,id=\1"/')
# If xcbeautify or xcpretty is available, use it for xcodebuild output, except in CI.
XCPRETTY =
ifeq ($(CI),true)
else
XCBEAUTIFY_PATH := $(shell command -v xcbeautify 2> /dev/null)
XCPRETTY_PATH := $(shell command -v xcpretty 2> /dev/null)
ifdef XCBEAUTIFY_PATH
XCPRETTY = | xcbeautify
else ifdef XCPRETTY_PATH
XCPRETTY = | xcpretty -c
endif
endif
# =====
# Tests
test: test_framework test_archive test_install test_demo_apps
test_framework: test_framework_darwin
test_framework_darwin: test_framework_GRDB test_framework_GRDBCustom test_framework_SQLCipher test_SPM
test_framework_GRDB: test_framework_GRDBOSX test_framework_GRDBiOS test_framework_GRDBtvOS
test_framework_GRDBCustom: test_framework_GRDBCustomSQLiteOSX test_framework_GRDBCustomSQLiteiOS
test_framework_SQLCipher: test_framework_SQLCipher3 test_framework_SQLCipher3Encrypted test_framework_SQLCipher4 test_framework_SQLCipher4Encrypted
test_archive: test_universal_xcframework
test_install: test_install_manual test_install_SPM test_install_customSQLite test_install_GRDB_CocoaPods
test_CocoaPodsLint: test_CocoaPodsLint_GRDB
test_demo_apps: test_GRDBDemoiOS test_GRDBCombineDemo test_GRDBAsyncDemo
test_framework_GRDBOSX:
$(XCODEBUILD) \
-project GRDB.xcodeproj \
-scheme GRDB \
-destination "platform=macOS" \
OTHER_SWIFT_FLAGS=$(OTHER_SWIFT_FLAGS) \
GCC_PREPROCESSOR_DEFINITIONS=$(GCC_PREPROCESSOR_DEFINITIONS) \
$(TEST_ACTIONS) \
$(XCPRETTY)
test_framework_GRDBiOS: test_framework_GRDBiOS_maxTarget test_framework_GRDBiOS_minTarget
test_framework_GRDBiOS_maxTarget:
$(XCODEBUILD) \
-project GRDB.xcodeproj \
-scheme GRDB \
-destination $(MAX_IOS_DESTINATION) \
OTHER_SWIFT_FLAGS=$(OTHER_SWIFT_FLAGS) \
GCC_PREPROCESSOR_DEFINITIONS=$(GCC_PREPROCESSOR_DEFINITIONS) \
$(TEST_ACTIONS) \
$(XCPRETTY)
test_framework_GRDBiOS_minTarget:
$(XCODEBUILD) \
-project GRDB.xcodeproj \
-scheme GRDB \
-destination $(MIN_IOS_DESTINATION) \
$(TEST_ACTIONS) \
$(XCPRETTY)
test_framework_GRDBtvOS: test_framework_GRDBtvOS_maxTarget test_framework_GRDBtvOS_minTarget
test_framework_GRDBtvOS_maxTarget:
$(XCODEBUILD) \
-project GRDB.xcodeproj \
-scheme GRDB \
-destination $(MAX_TVOS_DESTINATION) \
OTHER_SWIFT_FLAGS=$(OTHER_SWIFT_FLAGS) \
GCC_PREPROCESSOR_DEFINITIONS=$(GCC_PREPROCESSOR_DEFINITIONS) \
$(TEST_ACTIONS) \
$(XCPRETTY)
test_framework_GRDBtvOS_minTarget:
$(XCODEBUILD) \
-project GRDB.xcodeproj \
-scheme GRDB \
-destination $(MIN_TVOS_DESTINATION) \
$(TEST_ACTIONS) \
$(XCPRETTY)
test_framework_GRDBCustomSQLiteOSX: SQLiteCustom
$(XCODEBUILD) \
-project GRDBCustom.xcodeproj \
-scheme GRDBCustom \
-destination "platform=macOS" \
$(TEST_ACTIONS) \
$(XCPRETTY)
test_framework_GRDBCustomSQLiteiOS: test_framework_GRDBCustomSQLiteiOS_maxTarget test_framework_GRDBCustomSQLiteiOS_minTarget
test_framework_GRDBCustomSQLiteiOS_maxTarget: SQLiteCustom
$(XCODEBUILD) \
-project GRDBCustom.xcodeproj \
-scheme GRDBCustom \
-destination $(MAX_IOS_DESTINATION) \
$(TEST_ACTIONS) \
$(XCPRETTY)
test_framework_GRDBCustomSQLiteiOS_minTarget: SQLiteCustom
$(XCODEBUILD) \
-project GRDBCustom.xcodeproj \
-scheme GRDBCustom \
-destination $(MIN_IOS_DESTINATION) \
$(TEST_ACTIONS) \
$(XCPRETTY)
test_framework_SQLCipher3:
ifdef POD
cd Tests/CocoaPods/SQLCipher3 && \
$(POD) install && \
$(XCODEBUILD) \
-workspace GRDBTests.xcworkspace \
-scheme GRDBTests \
build-for-testing test-without-building \
$(XCPRETTY)
else
@echo CocoaPods must be installed for test_framework_SQLCipher3
@exit 1
endif
test_framework_SQLCipher3Encrypted:
ifdef POD
cd Tests/CocoaPods/SQLCipher3 && \
$(POD) install && \
$(XCODEBUILD) \
-workspace GRDBTests.xcworkspace \
-scheme GRDBEncryptedTests \
build-for-testing test-without-building \
$(XCPRETTY)
else
@echo CocoaPods must be installed for test_framework_SQLCipher3Encrypted
@exit 1
endif
test_framework_SQLCipher4:
ifdef POD
cd Tests/CocoaPods/SQLCipher4 && \
$(POD) install && \
$(XCODEBUILD) \
-workspace GRDBTests.xcworkspace \
-scheme GRDBTests \
build-for-testing test-without-building \
$(XCPRETTY)
else
@echo CocoaPods must be installed for test_framework_SQLCipher4
@exit 1
endif
test_framework_SQLCipher4Encrypted:
ifdef POD
cd Tests/CocoaPods/SQLCipher4 && \
$(POD) install && \
$(XCODEBUILD) \
-workspace GRDBTests.xcworkspace \
-scheme GRDBEncryptedTests \
build-for-testing test-without-building \
$(XCPRETTY)
else
@echo CocoaPods must be installed for test_framework_SQLCipher4Encrypted
@exit 1
endif
test_SPM:
# Add sanitizers when available: https://twitter.com/simjp/status/929140877540278272
$(SWIFT) package clean
$(SWIFT) build
$(SWIFT) build -c release
set -o pipefail && $(SWIFT) test --parallel
test_universal_xcframework:
rm -rf Tests/products
mkdir Tests/products
$(XCODEBUILD) archive \
-project GRDB.xcodeproj \
-scheme GRDB \
-destination "generic/platform=iOS" \
OTHER_SWIFT_FLAGS=$(OTHER_SWIFT_FLAGS) \
GCC_PREPROCESSOR_DEFINITIONS=$(GCC_PREPROCESSOR_DEFINITIONS) \
-archivePath "$(PWD)/Tests/products/GRDB-iOS.xcarchive" \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
$(XCODEBUILD) archive \
-project GRDB.xcodeproj \
-scheme GRDB \
-destination "generic/platform=iOS Simulator" \
OTHER_SWIFT_FLAGS=$(OTHER_SWIFT_FLAGS) \
GCC_PREPROCESSOR_DEFINITIONS=$(GCC_PREPROCESSOR_DEFINITIONS) \
-archivePath "$(PWD)/Tests/products/GRDB-iOS_Simulator.xcarchive" \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
$(XCODEBUILD) archive \
-project GRDB.xcodeproj \
-scheme GRDB \
-destination "generic/platform=macOS" \
OTHER_SWIFT_FLAGS=$(OTHER_SWIFT_FLAGS) \
GCC_PREPROCESSOR_DEFINITIONS=$(GCC_PREPROCESSOR_DEFINITIONS) \
-archivePath "$(PWD)/Tests/products/GRDB-macOS.xcarchive" \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
$(XCODEBUILD) archive \
-project GRDB.xcodeproj \
-scheme GRDB \
-destination "generic/platform=macOS,variant=Mac Catalyst" \
OTHER_SWIFT_FLAGS=$(OTHER_SWIFT_FLAGS) \
GCC_PREPROCESSOR_DEFINITIONS=$(GCC_PREPROCESSOR_DEFINITIONS) \
-archivePath "$(PWD)/Tests/products/GRDB-Mac_Catalyst.xcarchive" \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
$(XCODEBUILD) -create-xcframework \
-archive '$(PWD)/Tests/products/GRDB-iOS.xcarchive' -framework GRDB.framework \
-archive '$(PWD)/Tests/products/GRDB-iOS_Simulator.xcarchive' -framework GRDB.framework \
-archive '$(PWD)/Tests/products/GRDB-macOS.xcarchive' -framework GRDB.framework \
-archive '$(PWD)/Tests/products/GRDB-Mac_Catalyst.xcarchive' -framework GRDB.framework \
-output '$(PWD)/Tests/products/GRDB.xcframework'
test_install_manual:
$(XCODEBUILD) \
-project Documentation/DemoApps/GRDBDemoiOS/GRDBDemoiOS.xcodeproj \
-scheme GRDBDemoiOS \
-configuration Release \
-destination $(MAX_IOS_DESTINATION) \
clean build \
$(XCPRETTY)
test_install_SPM: test_install_SPM_Package test_install_SPM_Project test_install_SPM_Dynamic_Project test_install_SPM_macos_release test_install_SPM_ios_release
test_install_SPM_Package:
cd Tests/SPM/PlainPackage && \
$(SWIFT) build && \
./.build/debug/SPM
test_install_SPM_Project:
$(XCODEBUILD) \
-project Tests/SPM/PlainProject/Plain.xcodeproj \
-scheme Plain \
-destination "platform=macOS" \
-configuration Release \
clean build \
$(XCPRETTY)
test_install_SPM_Dynamic_Project:
$(XCODEBUILD) \
-project Tests/SPM/ios-dynamic/ios-dynamic.xcodeproj \
-scheme ios-dynamic \
-destination $(MAX_IOS_DESTINATION) \
-configuration Release \
clean build \
$(XCPRETTY)
test_install_SPM_macos_release:
$(XCODEBUILD) \
-project Tests/SPM/macos/macos.xcodeproj \
-scheme macos \
-destination "platform=macOS" \
-configuration Release \
clean build \
$(XCPRETTY)
test_install_SPM_ios_release:
$(XCODEBUILD) \
-project Tests/SPM/ios/ios.xcodeproj \
-scheme ios \
-destination $(MAX_IOS_DESTINATION) \
-configuration Release \
clean build \
$(XCPRETTY)
test_install_customSQLite: SQLiteCustom
$(XCODEBUILD) \
-project Tests/CustomSQLite/CustomSQLite.xcodeproj \
-scheme CustomSQLite \
-destination "platform=macOS" \
-configuration Release \
clean build \
$(XCPRETTY)
test_install_GRDB_CocoaPods: test_install_GRDB_CocoaPods_framework test_install_GRDB_CocoaPods_static
test_install_GRDB_CocoaPods_framework:
ifdef POD
cd Tests/CocoaPods/GRDBiOS-framework && \
$(POD) install && \
$(XCODEBUILD) \
-workspace iOS.xcworkspace \
-scheme iOS \
-configuration Release \
-destination $(MAX_IOS_DESTINATION) \
clean build \
$(XCPRETTY)
else
@echo CocoaPods must be installed for test_install_GRDB_CocoaPods
@exit 1
endif
test_install_GRDB_CocoaPods_static:
ifdef POD
cd Tests/CocoaPods/GRDBiOS-static && \
$(POD) install && \
$(XCODEBUILD) \
-workspace iOS.xcworkspace \
-scheme iOS \
-configuration Release \
-destination $(MAX_IOS_DESTINATION) \
clean build \
$(XCPRETTY)
else
@echo CocoaPods must be installed for test_install_GRDB_CocoaPods
@exit 1
endif
test_CocoaPodsLint_GRDB:
ifdef POD
$(POD) lib lint GRDB.swift.podspec --allow-warnings
else
@echo CocoaPods must be installed for test_CocoaPodsLint_GRDB
@exit 1
endif
test_GRDBDemoiOS:
$(XCODEBUILD) \
-project Documentation/DemoApps/GRDBDemoiOS/GRDBDemoiOS.xcodeproj \
-scheme GRDBDemoiOS \
-destination $(MAX_IOS_DESTINATION) \
$(TEST_ACTIONS) \
$(XCPRETTY)
test_GRDBCombineDemo:
$(XCODEBUILD) \
-project Documentation/DemoApps/GRDBCombineDemo/GRDBCombineDemo.xcodeproj \
-scheme GRDBCombineDemo \
-destination $(MAX_IOS_DESTINATION) \
$(TEST_ACTIONS) \
$(XCPRETTY)
test_GRDBAsyncDemo:
$(XCODEBUILD) \
-project Documentation/DemoApps/GRDBAsyncDemo/GRDBAsyncDemo.xcodeproj \
-scheme GRDBAsyncDemo \
-destination $(MAX_IOS_DESTINATION) \
$(TEST_ACTIONS) \
$(XCPRETTY)
test_performance:
$(XCODEBUILD) \
-project Tests/Performance/GRDBPerformance/GRDBPerformance.xcodeproj \
-scheme GRDBOSXPerformanceComparisonTests \
-destination "platform=macOS" \
build-for-testing test-without-building
# Target that setups SQLite custom builds with extra compilation options.
SQLiteCustom: SQLiteCustom/src/sqlite3.h
echo '/* Makefile generated */' > SQLiteCustom/GRDBCustomSQLite-USER.h
echo '#define SQLITE_ENABLE_PREUPDATE_HOOK' >> SQLiteCustom/GRDBCustomSQLite-USER.h
echo '#define SQLITE_ENABLE_FTS5' >> SQLiteCustom/GRDBCustomSQLite-USER.h
echo '#define SQLITE_ENABLE_SNAPSHOT' >> SQLiteCustom/GRDBCustomSQLite-USER.h
echo '// Makefile generated' > SQLiteCustom/GRDBCustomSQLite-USER.xcconfig
echo 'CUSTOM_OTHER_SWIFT_FLAGS = -D SQLITE_ENABLE_PREUPDATE_HOOK -D SQLITE_ENABLE_FTS5 -D SQLITE_ENABLE_SNAPSHOT' >> SQLiteCustom/GRDBCustomSQLite-USER.xcconfig
echo '// Makefile generated' > SQLiteCustom/src/SQLiteLib-USER.xcconfig
echo 'CUSTOM_SQLLIBRARY_CFLAGS = -DSQLITE_ENABLE_PREUPDATE_HOOK -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_SNAPSHOT' >> SQLiteCustom/src/SQLiteLib-USER.xcconfig
# Makes sure the SQLiteCustom/src submodule has been downloaded
SQLiteCustom/src/sqlite3.h:
$(GIT) submodule update --init SQLiteCustom/src
# Documentation
# =============
doc-localhost:
# Generates documentation in ~/Sites/GRDB
# See https://discussions.apple.com/docs/DOC-3083 for Apache setup on the mac
mkdir -p ~/Sites/GRDB
SPI_BUILDER=1 $(SWIFT) package \
--allow-writing-to-directory ~/Sites/GRDB \
generate-documentation \
--output-path ~/Sites/GRDB \
--target GRDB \
--disable-indexing \
--transform-for-static-hosting \
--hosting-base-path "~$(USER)/GRDB"
open "http://localhost/~$(USER)/GRDB/documentation/grdb/"
doc:
# https://apple.github.io/swift-docc-plugin/documentation/swiftdoccplugin/publishing-to-github-pages/
rm -rf $(DOCS_PATH)
mkdir -p $(DOCS_PATH)
SPI_BUILDER=1 $(SWIFT) package \
--allow-writing-to-directory $(DOCS_PATH) \
generate-documentation \
--output-path $(DOCS_PATH) \
--target GRDB \
--disable-indexing \
--transform-for-static-hosting \
--hosting-base-path GRDB.swift/docs/6.3
# Cleanup
# =======
distclean:
$(GIT) reset --hard
$(GIT) clean -dffx .
rm -rf SQLiteCustom/src && $(GIT) checkout -- SQLiteCustom/src
clean:
$(SWIFT) package reset
cd Tests/SPM && $(SWIFT) package reset
rm -rf $(DOCS_PATH)
find . -name Package.resolved | xargs rm -f
.PHONY: distclean clean doc test smokeTest SQLiteCustom