From e14a7562794e654fab00ac31ca318899c8fb6afe Mon Sep 17 00:00:00 2001 From: Simon Leeb <52261246+sliemeobn@users.noreply.github.com> Date: Wed, 30 Oct 2024 13:22:15 +0100 Subject: [PATCH 1/5] get rid of external flags for building --- Examples/Embedded/Package.swift | 6 ++++-- Examples/Embedded/build.sh | 11 +++-------- Package.swift | 18 ++++++++++++++---- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/Examples/Embedded/Package.swift b/Examples/Embedded/Package.swift index 4ebc6e841..af5de3df6 100644 --- a/Examples/Embedded/Package.swift +++ b/Examples/Embedded/Package.swift @@ -16,7 +16,8 @@ let package = Package( .product(name: "dlmalloc", package: "swift-dlmalloc") ], cSettings: [ - .unsafeFlags(["-fdeclspec"]) + .unsafeFlags(["-fdeclspec"]), + .define("__Embedded"), ], swiftSettings: [ .enableExperimentalFeature("Embedded"), @@ -29,7 +30,8 @@ let package = Package( linkerSettings: [ .unsafeFlags([ "-Xclang-linker", "-nostdlib", - "-Xlinker", "--no-entry" + "-Xlinker", "--no-entry", + "-Xlinker", "--export-if-defined=__main_argc_argv" ]) ] ) diff --git a/Examples/Embedded/build.sh b/Examples/Embedded/build.sh index e1c3e3c4e..1fde1fe91 100755 --- a/Examples/Embedded/build.sh +++ b/Examples/Embedded/build.sh @@ -1,10 +1,5 @@ #!/bin/bash package_dir="$(cd "$(dirname "$0")" && pwd)" -JAVASCRIPTKIT_EXPERIMENTAL_EMBEDDED_WASM=true swift build --package-path "$package_dir" -c release --product EmbeddedApp \ - --triple wasm32-unknown-none-wasm \ - -Xswiftc -enable-experimental-feature -Xswiftc Embedded \ - -Xswiftc -enable-experimental-feature -Xswiftc Extern \ - -Xcc -D__Embedded -Xcc -fdeclspec \ - -Xlinker --export-if-defined=__main_argc_argv \ - -Xlinker --export-if-defined=swjs_call_host_function \ - -Xswiftc -Xclang-linker -Xswiftc -mexec-model=reactor +JAVASCRIPTKIT_EXPERIMENTAL_EMBEDDED_WASM=true \ + swift build --package-path "$package_dir" --product EmbeddedApp \ + -c release --triple wasm32-unknown-none-wasm diff --git a/Package.swift b/Package.swift index f94fb8bc8..9a659695d 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.7 +// swift-tools-version:5.8 import PackageDescription import Foundation @@ -19,11 +19,21 @@ let package = Package( name: "JavaScriptKit", dependencies: ["_CJavaScriptKit"], resources: shouldBuildForEmbedded ? [] : [.copy("Runtime")], + cSettings: shouldBuildForEmbedded ? [ + .unsafeFlags(["-fdeclspec"]), + .define("__Embedded"), + ] : nil, swiftSettings: shouldBuildForEmbedded - ? [.unsafeFlags(["-Xfrontend", "-emit-empty-object-file"])] - : [] + ? [ + .enableExperimentalFeature("Embedded"), + .enableExperimentalFeature("Extern"), + .unsafeFlags(["-Xfrontend", "-emit-empty-object-file"]) + ] : nil, + ), + .target( + name: "_CJavaScriptKit", + cSettings: shouldBuildForEmbedded ? [.define("__Embedded")] : nil ), - .target(name: "_CJavaScriptKit"), .target( name: "JavaScriptBigIntSupport", dependencies: ["_CJavaScriptBigIntSupport", "JavaScriptKit"] From d4348f336973fc3efd2bbe37b82a1740e7a447c7 Mon Sep 17 00:00:00 2001 From: Simon Leeb <52261246+sliemeobn@users.noreply.github.com> Date: Wed, 30 Oct 2024 13:47:24 +0100 Subject: [PATCH 2/5] use Context.environment instead of Foundation --- Package.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Package.swift b/Package.swift index 9a659695d..1c8a63195 100644 --- a/Package.swift +++ b/Package.swift @@ -1,10 +1,9 @@ // swift-tools-version:5.8 import PackageDescription -import Foundation // NOTE: needed for embedded customizations, ideally this will not be necessary at all in the future, or can be replaced with traits -let shouldBuildForEmbedded = ProcessInfo.processInfo.environment["JAVASCRIPTKIT_EXPERIMENTAL_EMBEDDED_WASM"].flatMap(Bool.init) ?? false +let shouldBuildForEmbedded = Context.environment["JAVASCRIPTKIT_EXPERIMENTAL_EMBEDDED_WASM"].flatMap(Bool.init) ?? false let package = Package( name: "JavaScriptKit", From fbd62f440d6b847d530a75fe3bc8b712ececf059 Mon Sep 17 00:00:00 2001 From: Simon Leeb <52261246+sliemeobn@users.noreply.github.com> Date: Wed, 30 Oct 2024 15:58:32 +0100 Subject: [PATCH 3/5] use __wasi__ instead of __Embedded --- Examples/Embedded/Package.swift | 5 +---- Package.swift | 8 ++------ Sources/_CJavaScriptKit/_CJavaScriptKit.c | 8 +++++--- Sources/_CJavaScriptKit/include/_CJavaScriptKit.h | 2 +- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/Examples/Embedded/Package.swift b/Examples/Embedded/Package.swift index af5de3df6..227a049ff 100644 --- a/Examples/Embedded/Package.swift +++ b/Examples/Embedded/Package.swift @@ -15,10 +15,7 @@ let package = Package( "JavaScriptKit", .product(name: "dlmalloc", package: "swift-dlmalloc") ], - cSettings: [ - .unsafeFlags(["-fdeclspec"]), - .define("__Embedded"), - ], + cSettings: [.unsafeFlags(["-fdeclspec"])], swiftSettings: [ .enableExperimentalFeature("Embedded"), .enableExperimentalFeature("Extern"), diff --git a/Package.swift b/Package.swift index 1c8a63195..bf50843a0 100644 --- a/Package.swift +++ b/Package.swift @@ -19,8 +19,7 @@ let package = Package( dependencies: ["_CJavaScriptKit"], resources: shouldBuildForEmbedded ? [] : [.copy("Runtime")], cSettings: shouldBuildForEmbedded ? [ - .unsafeFlags(["-fdeclspec"]), - .define("__Embedded"), + .unsafeFlags(["-fdeclspec"]) ] : nil, swiftSettings: shouldBuildForEmbedded ? [ @@ -29,10 +28,7 @@ let package = Package( .unsafeFlags(["-Xfrontend", "-emit-empty-object-file"]) ] : nil, ), - .target( - name: "_CJavaScriptKit", - cSettings: shouldBuildForEmbedded ? [.define("__Embedded")] : nil - ), + .target(name: "_CJavaScriptKit"), .target( name: "JavaScriptBigIntSupport", dependencies: ["_CJavaScriptBigIntSupport", "JavaScriptKit"] diff --git a/Sources/_CJavaScriptKit/_CJavaScriptKit.c b/Sources/_CJavaScriptKit/_CJavaScriptKit.c index 6fc3fa916..424e9081b 100644 --- a/Sources/_CJavaScriptKit/_CJavaScriptKit.c +++ b/Sources/_CJavaScriptKit/_CJavaScriptKit.c @@ -1,6 +1,6 @@ #include "_CJavaScriptKit.h" #if __wasm32__ -#if __Embedded +#ifndef __wasi__ #if __has_include("malloc.h") #include #endif @@ -31,8 +31,10 @@ void swjs_cleanup_host_function_call(void *argv_buffer) { free(argv_buffer); } -#ifndef __Embedded -// cdecls don't work in Embedded, also @_expose(wasm) can be used with Swift >=6.0 +// NOTE: This __wasi__ check is a hack for Embedded compatibility (assuming that if __wasi__ is defined, we are not building for Embedded) +// cdecls don't work in Embedded, but @_expose(wasm) can be used with Swift >=6.0 +// the previously used `#if __Embedded` did not play well with SwiftPM (defines needed to be on every target up the chain) +#ifdef __wasi__ bool _call_host_function_impl(const JavaScriptHostFuncRef host_func_ref, const RawJSValue *argv, const int argc, const JavaScriptObjectRef callback_func); diff --git a/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h b/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h index f8279bff9..09689d711 100644 --- a/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h +++ b/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h @@ -1,7 +1,7 @@ #ifndef _CJavaScriptKit_h #define _CJavaScriptKit_h -#if __Embedded +#ifndef __wasi__ #include #else #include From e1821ea856e0760c35e751a2ce1e699923e1b5f9 Mon Sep 17 00:00:00 2001 From: Simon Leeb <52261246+sliemeobn@users.noreply.github.com> Date: Wed, 30 Oct 2024 16:59:49 +0100 Subject: [PATCH 4/5] removed trailing comma --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index bf50843a0..1f35305a1 100644 --- a/Package.swift +++ b/Package.swift @@ -26,7 +26,7 @@ let package = Package( .enableExperimentalFeature("Embedded"), .enableExperimentalFeature("Extern"), .unsafeFlags(["-Xfrontend", "-emit-empty-object-file"]) - ] : nil, + ] : nil ), .target(name: "_CJavaScriptKit"), .target( From dcdb1c55763c4e396058113a42f1d9bf08710869 Mon Sep 17 00:00:00 2001 From: Simon Leeb <52261246+sliemeobn@users.noreply.github.com> Date: Wed, 30 Oct 2024 17:14:23 +0100 Subject: [PATCH 5/5] using __has_include --- Sources/_CJavaScriptKit/include/_CJavaScriptKit.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h b/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h index 09689d711..aa0b978a2 100644 --- a/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h +++ b/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h @@ -1,10 +1,10 @@ #ifndef _CJavaScriptKit_h #define _CJavaScriptKit_h -#ifndef __wasi__ -#include -#else +#if __has_include("stdlib.h") #include +#else +#include #endif #include #include