Skip to content

VaporExamplesLab/SynergySQLiteC

Repository files navigation

SynergySQLiteC

SQLite module package for Swift (built from C source).

Contents

Subproject UsageOriginal SetupUbuntuResources

Subproject Usage

Steps to use SynergySQLiteC as a subproject in another Xcode project.

  1. Clone Repository

    cd WORKING_DIRECTORY
    git clone [email protected]:VaporExamplesLab/SynergySQLiteC.git
  2. Create Xcode project

    cd SynergySQLiteC
    
    # for macOS
    swift package generate-xcodeproj --xcconfig-overrides Package.xcconfig
    open SynergySQLiteC.xcodeproj
  3. Verify DEFINES_MODULE = YES in Project Editor > Target > Build Settings. NOTE: DEFINES_MODULE still needs to be manually set to YES for C only module.
    BuildSettingsModule

  4. Drag and drop SynergySQLiteC.xcodeproj as subproject to the parent Xcode project.

  5. In the parent Xcode project, Project Editor > Target > Build Phases:

    • + add to Target Dependencies
    • + add to Link Binary With Libraries
  6. Add + New Headers Phase to Build Phases of SynergySQLiteC C target.

    Note: If needed, first drag & drop add SynergySQLiteC.h to the project.

Original Setup

Steps taken to initial setup this project.

mkdir SynergySQLiteC
cd SynergySQLiteC
swift package init
git init
git add README.md
git commit -m "first commit"
git remote add origin [email protected]*:VaporExamplesLab/SynergySQLiteC.git
git push -u origin master

# swift build -Xswiftc "-target" -Xswiftc "x86_64-apple-macosx10.13"
swiftbuild # alias

# swift test -Xswiftc "-target" -Xswiftc "x86_64-apple-macosx10.13"
swifttest # alias

# swift package generate-xcodeproj --xcconfig-overrides Configs/Package.xcconfig
swiftxcode # alias

Download sqlite3 amalgamation.

export SQLITE_VERSION=3270100 # see release history
export SQLITE_YEAR=2019
curl -O http://sqlite.org/$SQLITE_YEAR/sqlite-amalgamation-$SQLITE_VERSION.zip
# Ubuntu: sudo apt-get install unzip
unzip sqlite-amalgamation-$SQLITE_VERSION.zip

Move the amalgamation files …

|-- sqlite-amalgamation-3270100
|   |-- shell.c
|   |-- sqlite3.c
|   |-- sqlite3.h
|   `-- sqlite3ext.h

… into a Swift Package structure. shell.c is not used.

|-- Package.swift
|-- Package.xcconfig
|-- README.md
|-- Sources
|   `-- SynergySQLiteC
|       |-- SynergySQLiteC.h
|       |-- include
|       |   |-- module.modulemap
|       |   |-- sqlite3.h
|       |   `-- sqlite3ext.h
|       `-- sqlite3.c

Code Tweak

Fix for warning: ambiguous expansion of macro 'MAX' or 'MIN'. Search sqlite3.c for regex instances of define.*MIN\W or define.*MIN\b. Change both MAX and MIN instances to match <sys/param.h> variant:

/* :EDIT: Macros for min/max. */
#ifndef MIN
#define	MIN(a,b) (((a)<(b))?(a):(b))
#endif /* MIN */
#ifndef MAX
#define	MAX(a,b) (((a)>(b))?(a):(b))
#endif	/* MAX */

Added SynergySQLiteC.h umbrella header since, at the time of this writing, an umbrella header is not automatically generated for a C-only package.

Ubuntu

swift build and swift test run OK on macOS. swift build on Ubuntu produces warnings, however swift test executes and passes.

Compile SynergySQLiteC sqlite3.c
…/.build/checkouts/SynergySQLiteC.git-9149939184881442794/Sources/SynergySQLiteC/sqlite3.c:1:1: 
  warning: umbrella header for module 'SynergySQLiteC' does not include header 'sqlite3ext.h' [-Wincomplete-umbrella]
/******************************************************************************
^
…/.build/checkouts/SynergySQLiteC.git-9149939184881442794/Sources/SynergySQLiteC/sqlite3.c:1:1: 
  warning: umbrella header for module 'SynergySQLiteC' does not include header 'sqlite3.h' [-Wincomplete-umbrella]
2 warnings generated.

Resources

About

SQLite module package for Swift (built from C source).

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published