diff --git a/Examples/Embedded/Package.swift b/Examples/Embedded/Package.swift index 4ebc6e841..227a049ff 100644 --- a/Examples/Embedded/Package.swift +++ b/Examples/Embedded/Package.swift @@ -15,9 +15,7 @@ let package = Package( "JavaScriptKit", .product(name: "dlmalloc", package: "swift-dlmalloc") ], - cSettings: [ - .unsafeFlags(["-fdeclspec"]) - ], + cSettings: [.unsafeFlags(["-fdeclspec"])], swiftSettings: [ .enableExperimentalFeature("Embedded"), .enableExperimentalFeature("Extern"), @@ -29,7 +27,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..1f35305a1 100644 --- a/Package.swift +++ b/Package.swift @@ -1,10 +1,9 @@ -// swift-tools-version:5.7 +// 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", @@ -19,9 +18,15 @@ let package = Package( name: "JavaScriptKit", dependencies: ["_CJavaScriptKit"], resources: shouldBuildForEmbedded ? [] : [.copy("Runtime")], + cSettings: shouldBuildForEmbedded ? [ + .unsafeFlags(["-fdeclspec"]) + ] : nil, swiftSettings: shouldBuildForEmbedded - ? [.unsafeFlags(["-Xfrontend", "-emit-empty-object-file"])] - : [] + ? [ + .enableExperimentalFeature("Embedded"), + .enableExperimentalFeature("Extern"), + .unsafeFlags(["-Xfrontend", "-emit-empty-object-file"]) + ] : nil ), .target(name: "_CJavaScriptKit"), .target( 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..aa0b978a2 100644 --- a/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h +++ b/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h @@ -1,10 +1,10 @@ #ifndef _CJavaScriptKit_h #define _CJavaScriptKit_h -#if __Embedded -#include -#else +#if __has_include("stdlib.h") #include +#else +#include #endif #include #include