Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 29 additions & 3 deletions Package.swift
Original file line number Diff line number Diff line change
@@ -1,21 +1,47 @@
// swift-tools-version:5.3
// swift-tools-version:6.0
import PackageDescription

let shouldBuildForEmbedded =
Context.environment["JAVASCRIPTKIT_EXPERIMENTAL_EMBEDDED_WASM"].flatMap(Bool.init) ?? false


let swiftSettings: [SwiftSetting] = shouldBuildForEmbedded ? [
.enableExperimentalFeature("Embedded"),
.enableExperimentalFeature("Extern"),
.define("NOSIMD"),
.unsafeFlags([
"-Xfrontend", "-emit-empty-object-file",
]),
] : []

let cSettings: [CSetting] = shouldBuildForEmbedded ? [
.unsafeFlags(["-fdeclspec"])
] : []

let dependencies: [Package.Dependency] = shouldBuildForEmbedded ? [
.package(url: "https://github.com/sakrist/emswiften", branch: "main"), ] : []

let targetDependencies: [Target.Dependency] = shouldBuildForEmbedded ? [
"emswiften"] : []

let package = Package(
name: "SwiftMath",
products: [
.library(
name: "SwiftMath",
type: .static,
targets: ["SwiftMath"]),
],
dependencies: dependencies,
targets: [
.target(
name: "SwiftMath",
dependencies: targetDependencies,
path: ".",
exclude: ["SwiftMath.podspec", "README.md", "Tests", "LICENSE"],
sources: ["Sources"],
swiftSettings: [ .define("NOSIMD", .when(platforms: [.linux, .android, .windows, .wasi, ])),]),
cSettings: cSettings,
swiftSettings: [ .define("NOSIMD", .when(platforms: [.linux, .android, .windows, .wasi, ]))]
+ swiftSettings),

.testTarget(
name: "SwiftMathTests",
Expand Down
2 changes: 2 additions & 0 deletions Sources/Angle.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,13 @@ extension Angle: CustomStringConvertible, CustomDebugStringConvertible {
}
}

#if !hasFeature(Embedded)
extension Angle: CustomPlaygroundDisplayConvertible {
public var playgroundDescription: Any {
return degrees
}
}
#endif

extension Int {
/// Returns the integer value as an angle in degrees
Expand Down
49 changes: 39 additions & 10 deletions Sources/Matrix3x3+nosimd.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,47 @@
#if NOSIMD
@frozen
public struct Matrix3x3f {
public var m11: Float = 0.0
public var m12: Float = 0.0
public var m13: Float = 0.0
public var m21: Float = 0.0
public var m22: Float = 0.0
public var m23: Float = 0.0
public var m31: Float = 0.0
public var m32: Float = 0.0
public var m33: Float = 0.0
private var elements: [Float] = Array(repeating: 0.0, count: 9)

public var m11: Float {
get { elements[0] }
set { elements[0] = newValue }
}
public var m12: Float {
get { elements[1] }
set { elements[1] = newValue }
}
public var m13: Float {
get { elements[2] }
set { elements[2] = newValue }
}
public var m21: Float {
get { elements[3] }
set { elements[3] = newValue }
}
public var m22: Float {
get { elements[4] }
set { elements[4] = newValue }
}
public var m23: Float {
get { elements[5] }
set { elements[5] = newValue }
}
public var m31: Float {
get { elements[6] }
set { elements[6] = newValue }
}
public var m32: Float {
get { elements[7] }
set { elements[7] = newValue }
}
public var m33: Float {
get { elements[8] }
set { elements[8] = newValue }
}

public func toArray() -> [Float] {
return [m11, m12, m13, m21, m22, m23, m31, m32, m33]
return elements
}

public init() {}
Expand Down
2 changes: 2 additions & 0 deletions Sources/Matrix3x3.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// License: https://github.com/SwiftGFX/SwiftMath#license-bsd-2-clause
//

public typealias mat3 = Matrix3x3f

public extension Matrix3x3f {
/// Returns the identity matrix
static let identity = Matrix3x3f(diagonal: vec3(1.0))
Expand Down
2 changes: 2 additions & 0 deletions Sources/Matrix4x4+Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
//
//

public typealias mat4 = Matrix4x4f

public extension Matrix4x4f {
func translated(by v: Vector3f) -> Matrix4x4f {
let col3 = self * vec4(v)
Expand Down
36 changes: 19 additions & 17 deletions Sources/Matrix4x4+nosimd.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,27 @@
#if NOSIMD
@frozen
public struct Matrix4x4f {
internal var m11: Float = 0.0
internal var m12: Float = 0.0
internal var m13: Float = 0.0
internal var m14: Float = 0.0
internal var m21: Float = 0.0
internal var m22: Float = 0.0
internal var m23: Float = 0.0
internal var m24: Float = 0.0
internal var m31: Float = 0.0
internal var m32: Float = 0.0
internal var m33: Float = 0.0
internal var m34: Float = 0.0
internal var m41: Float = 0.0
internal var m42: Float = 0.0
internal var m43: Float = 0.0
internal var m44: Float = 0.0
private var m: [Float] = Array(repeating: 0, count: 16)

internal var m11: Float { get { m[0] } set { m[0] = newValue } }
internal var m12: Float { get { m[1] } set { m[1] = newValue } }
internal var m13: Float { get { m[2] } set { m[2] = newValue } }
internal var m14: Float { get { m[3] } set { m[3] = newValue } }
internal var m21: Float { get { m[4] } set { m[4] = newValue } }
internal var m22: Float { get { m[5] } set { m[5] = newValue } }
internal var m23: Float { get { m[6] } set { m[6] = newValue } }
internal var m24: Float { get { m[7] } set { m[7] = newValue } }
internal var m31: Float { get { m[8] } set { m[8] = newValue } }
internal var m32: Float { get { m[9] } set { m[9] = newValue } }
internal var m33: Float { get { m[10] } set { m[10] = newValue } }
internal var m34: Float { get { m[11] } set { m[11] = newValue } }
internal var m41: Float { get { m[12] } set { m[12] = newValue } }
internal var m42: Float { get { m[13] } set { m[13] = newValue } }
internal var m43: Float { get { m[14] } set { m[14] = newValue } }
internal var m44: Float { get { m[15] } set { m[15] = newValue } }

public func toArray() -> [Float] {
return [m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44]
return m
}

public init() {}
Expand Down
6 changes: 4 additions & 2 deletions Sources/Rect.swift
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,10 @@ public struct Rect {
self.origin = origin
self.size = size
}

public static let zero = Rect(origin: Point.zero, size: Vector2f.zero)

#if !hasFeature(Embedded)
nonisolated(unsafe) public static let zero = Rect(origin: .zero, size: .zero)
#endif
}

extension Rect: CustomStringConvertible {
Expand Down
2 changes: 2 additions & 0 deletions Sources/String+Math.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//
//

#if !hasFeature(Embedded)
import Foundation
internal extension String {
var floatArray: [Float] {
Expand Down Expand Up @@ -42,3 +43,4 @@ public extension Rect {
}
}
}
#endif
8 changes: 6 additions & 2 deletions Sources/Vector2+nosimd.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
import Darwin
#elseif os(Linux) || os(Android)
import Glibc
#elseif canImport(WASILibc)
import WASILibc
#elseif canImport(emsdk)
import emsdk
#endif

@frozen
Expand Down Expand Up @@ -62,7 +66,7 @@ import Glibc
}

public var length: Float {
return sqrt(self.lengthSquared)
return sqrtf(self.lengthSquared)
}

public func dot(_ v: Vector2f) -> Float {
Expand All @@ -78,7 +82,7 @@ import Glibc
if lengthSquared ~= 0 || lengthSquared ~= 1 {
return self
}
return self / sqrt(lengthSquared)
return self / sqrtf(lengthSquared)
}

public func interpolated(to v: Vector2f, factor t: Float) -> Vector2f {
Expand Down
10 changes: 7 additions & 3 deletions Sources/Vector3+nosimd.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,12 @@
import Darwin
#elseif os(Linux) || os(Android)
import Glibc
#elseif canImport(WASILibc)
import WASILibc
#elseif canImport(emsdk)
import emsdk
#endif

@frozen
public struct Vector3f {
public var x: Float = 0.0
Expand Down Expand Up @@ -68,7 +72,7 @@ extension Vector3f {
}

public var length: Float {
return sqrt(self.lengthSquared)
return sqrtf(self.lengthSquared)
}

public func dot(_ v: Vector3f) -> Float {
Expand All @@ -84,7 +88,7 @@ extension Vector3f {
if lengthSquared ~= 0 || lengthSquared ~= 1 {
return self
}
return self / sqrt(lengthSquared)
return self / sqrtf(lengthSquared)
}

public func interpolated(with v: Vector3f, by t: Float) -> Vector3f {
Expand Down
9 changes: 7 additions & 2 deletions Sources/Vector4+nosimd.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,13 @@
import Darwin
#elseif os(Linux) || os(Android)
import Glibc
#elseif canImport(WASILibc)
import WASILibc
#elseif canImport(emsdk)
import emsdk
#endif


@frozen
public struct Vector4f {
public var x: Float = 0.0
Expand Down Expand Up @@ -78,7 +83,7 @@ extension Vector4f: Equatable {
}

public var length: Float {
return sqrt(self.lengthSquared)
return sqrtf(self.lengthSquared)
}

public func dot(_ v: Vector4f) -> Float {
Expand All @@ -90,7 +95,7 @@ extension Vector4f: Equatable {
if lengthSquared ~= 0 || lengthSquared ~= 1 {
return self
}
return self / sqrt(lengthSquared)
return self / sqrtf(lengthSquared)
}

public func interpolated(with v: Vector4f, by t: Float) -> Vector4f {
Expand Down
12 changes: 8 additions & 4 deletions Sources/easing.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
import Darwin
#elseif os(Linux) || os(Android)
import Glibc
#elseif canImport(WASILibc)
import WASILibc
#elseif canImport(emsdk)
import emsdk
#endif

// MARK: Linear
Expand Down Expand Up @@ -132,23 +136,23 @@ public func expoEaseInOut(_ time: Float) -> Float {

// MARK: Circ Ease
public func circEaseIn(_ time: Float) -> Float {
return -(sqrt(1 - time * time) - 1)
return -(sqrtf(1 - time * time) - 1)
}

public func circEaseOut(_ time: Float) -> Float {
var time = time
time = time - 1
return sqrt(1 - time * time)
return sqrtf(1 - time * time)
}

public func circEaseInOut(_ time: Float) -> Float {
var time = time
time = time * 2
if time < 1 {
return -0.5 * (sqrt(1 - time * time) - 1)
return -0.5 * (sqrtf(1 - time * time) - 1)
}
time -= 2
return 0.5 * (sqrt(1 - time * time) + 1)
return 0.5 * (sqrtf(1 - time * time) + 1)
}

// MARK: Elastic Ease
Expand Down
20 changes: 14 additions & 6 deletions Sources/platform.swift
Original file line number Diff line number Diff line change
Expand Up @@ -61,28 +61,36 @@ internal func powf(_ a: Float, _ b: Float) -> Float {
#endif


#if (os(Linux) || os(Android) || os(Windows))
#if (os(Linux) || os(Android) || os(Windows) || canImport(emsdk) || canImport(WASILibc))

#if canImport(emsdk)
import emsdk
#endif

#if canImport(WASILibc)
import WASILibc
#endif

@inline(__always)
internal func __sincospif(_ a: Float, _ sina: inout Float, _ cosa: inout Float) {
sina = sin(a * Float.pi)
cosa = cos(a * Float.pi)
sina = sinf(a * .pi)
cosa = cosf(a * .pi)
}

@inline(__always)
internal func __sinpif(_ a: Float) -> Float {
return sin(a * Float.pi)
return sinf(a * .pi)
}


@inline(__always)
internal func __cospif(_ a: Float) -> Float {
return cos(a * Float.pi)
return cosf(a * .pi)
}

@inline(__always)
internal func __tanpif(_ a: Float) -> Float {
return tan(a * Float.pi)
return tanf(a * .pi)
}

#elseif (os(OSX) || os(iOS) || os(tvOS) || os(watchOS))
Expand Down
Loading
Loading