Я пытаюсь написать приложение swift на стороне сервера для драйвера cassandra c ++ (насколько мне известно, никакой быстрой поддержки не было)
Мне удалось установить cassandra c ++ локально на моей машине c примерно так:
# Datastax C++ driver dependencies
brew install libuv cmake
brew install openssl
brew link --force openssl
# Install git if you dont have it
brew install git
# Retrieve the cpp
git clone https://github.com/datastax/cpp-driver.git --depth=1
mkdir cpp-driver/build
cd cpp-driver/build
# Build with qualified path to OpenSSL location
cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib ..
make
make install
проверено с
ls /usr/local/include/cassandra.h
-rw-r--r-- 1 staff 323K Feb 2 14:26 /usr/local/include/cassandra.h
, а также:
pkg-config --list-all
...
cassandra cassandra - A C/C++ client driver for Apache Cassandra and DataStax Products
...
Я создал быстрый пакет, используя слишком много учебников для подсчета.
В основном:
https://github.com/apple/swift-package-manager/blob/master/Documentation/Usage.md#requiring -системные библиотеки
и https://medium.com/shopify-mobile/wrapping-a-c-library-in-swift-part-1-6dd240070cef
но похоже что инструкции неверны для этой темы?
https://forums.swift.org/t/system-library-targets-package-has-unsupported-layout-modulemap/16614/6
в настоящее время моя структура выглядит следующим образом:
/Developer/cassandra-swift: tree
.
├── Package.swift
├── README.md
├── Sources
│ ├── cassandra
│ │ ├── cassandraumb.h
│ │ └── module.modulemap
│ └── cassandra-swift
│ └── cassandra_swift.swift
├── Tests
│ ├── LinuxMain.swift
│ └── cassandra-swiftTests
│ ├── XCTestManifests.swift
│ └── cassandra_swiftTests.swift
и содержимое :
cassandra-swift: cat Package.swift
// swift-tools-version:5.1
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "cassandra-swift",
products: [
// Products define the executables and libraries produced by a package, and make them visible to other packages.
.library(
name: "CCassandra",
targets: ["CCassandra"])
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.systemLibrary(
name: "CCassandra",
path: "Sources/cassandra",
pkgConfig: "cassandra"
// providers: [
// .brew(["libgraphqlparser"]),
// .apt(["libgraphqlparser"]),
// ]
),
// .testTarget(
// name: "cassandra-swiftTests",
// dependencies: ["cassandra-swift"]),
]
)
//git clone https://github.com/datastax/cpp-driver.git --depth=1
//cd cpp-driver/
//ls
//mkdir build
//cd build/
// cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib ..
//make
//make install
//less /usr/local/include/cassandra.h
//cat /usr/local/lib/pkgconfig/cassandra.pc
//-- Install configuration: ""
//-- Installing: /usr/local/include/cassandra.h
//-- Installing: /usr/local/include/dse.h
//-- Installing: /usr/local/lib/libcassandra.2.15.0.dylib
//-- Installing: /usr/local/lib/libcassandra.2.dylib
//-- Up-to-date: /usr/local/lib/libcassandra.dylib
//-- Installing: /usr/local/lib/pkgconfig/cassandra.pc
cassandra-swift: cat Sources/cassandra/module.modulemap
module CCassandra [system] {
umbrella header "cassandraump.h"
header "/usr/local/include/cassandra.h"
link "cassandra"
export *
}
cat Sources/cassandra/cassandraumb.h
#import <c/cassandra.h>
У меня есть 2 тестовых проекта. Первый тестовый проект - это приложение ma c XCode, использующее интегрированную поддержку SPM
и добавляющее ссылку на репозиторий git 1042 *
, другой проект - сгенерированный SPM проект, ссылающийся на пакет SPM
Оба не работают должным образом.
Я играю с этим часами.
Я бы хотел, чтобы это работало локально в XCode для dev, а также было переносимым. (при условии, что через spm
) выполняется в быстром docker контейнере.