Skip to content

Commit 64e2e11

Browse files
Merge pull request #267 from sliemeobn/embedded/build-flags
improved embedded support for building with SwiftPM
2 parents 43607e5 + dcdb1c5 commit 64e2e11

File tree

5 files changed

+24
-23
lines changed

5 files changed

+24
-23
lines changed

Examples/Embedded/Package.swift

+3-4
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@ let package = Package(
1515
"JavaScriptKit",
1616
.product(name: "dlmalloc", package: "swift-dlmalloc")
1717
],
18-
cSettings: [
19-
.unsafeFlags(["-fdeclspec"])
20-
],
18+
cSettings: [.unsafeFlags(["-fdeclspec"])],
2119
swiftSettings: [
2220
.enableExperimentalFeature("Embedded"),
2321
.enableExperimentalFeature("Extern"),
@@ -29,7 +27,8 @@ let package = Package(
2927
linkerSettings: [
3028
.unsafeFlags([
3129
"-Xclang-linker", "-nostdlib",
32-
"-Xlinker", "--no-entry"
30+
"-Xlinker", "--no-entry",
31+
"-Xlinker", "--export-if-defined=__main_argc_argv"
3332
])
3433
]
3534
)

Examples/Embedded/build.sh

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
#!/bin/bash
22
package_dir="$(cd "$(dirname "$0")" && pwd)"
3-
JAVASCRIPTKIT_EXPERIMENTAL_EMBEDDED_WASM=true swift build --package-path "$package_dir" -c release --product EmbeddedApp \
4-
--triple wasm32-unknown-none-wasm \
5-
-Xswiftc -enable-experimental-feature -Xswiftc Embedded \
6-
-Xswiftc -enable-experimental-feature -Xswiftc Extern \
7-
-Xcc -D__Embedded -Xcc -fdeclspec \
8-
-Xlinker --export-if-defined=__main_argc_argv \
9-
-Xlinker --export-if-defined=swjs_call_host_function \
10-
-Xswiftc -Xclang-linker -Xswiftc -mexec-model=reactor
3+
JAVASCRIPTKIT_EXPERIMENTAL_EMBEDDED_WASM=true \
4+
swift build --package-path "$package_dir" --product EmbeddedApp \
5+
-c release --triple wasm32-unknown-none-wasm

Package.swift

+10-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
// swift-tools-version:5.7
1+
// swift-tools-version:5.8
22

33
import PackageDescription
4-
import Foundation
54

65
// NOTE: needed for embedded customizations, ideally this will not be necessary at all in the future, or can be replaced with traits
7-
let shouldBuildForEmbedded = ProcessInfo.processInfo.environment["JAVASCRIPTKIT_EXPERIMENTAL_EMBEDDED_WASM"].flatMap(Bool.init) ?? false
6+
let shouldBuildForEmbedded = Context.environment["JAVASCRIPTKIT_EXPERIMENTAL_EMBEDDED_WASM"].flatMap(Bool.init) ?? false
87

98
let package = Package(
109
name: "JavaScriptKit",
@@ -19,9 +18,15 @@ let package = Package(
1918
name: "JavaScriptKit",
2019
dependencies: ["_CJavaScriptKit"],
2120
resources: shouldBuildForEmbedded ? [] : [.copy("Runtime")],
21+
cSettings: shouldBuildForEmbedded ? [
22+
.unsafeFlags(["-fdeclspec"])
23+
] : nil,
2224
swiftSettings: shouldBuildForEmbedded
23-
? [.unsafeFlags(["-Xfrontend", "-emit-empty-object-file"])]
24-
: []
25+
? [
26+
.enableExperimentalFeature("Embedded"),
27+
.enableExperimentalFeature("Extern"),
28+
.unsafeFlags(["-Xfrontend", "-emit-empty-object-file"])
29+
] : nil
2530
),
2631
.target(name: "_CJavaScriptKit"),
2732
.target(

Sources/_CJavaScriptKit/_CJavaScriptKit.c

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "_CJavaScriptKit.h"
22
#if __wasm32__
3-
#if __Embedded
3+
#ifndef __wasi__
44
#if __has_include("malloc.h")
55
#include <malloc.h>
66
#endif
@@ -31,8 +31,10 @@ void swjs_cleanup_host_function_call(void *argv_buffer) {
3131
free(argv_buffer);
3232
}
3333

34-
#ifndef __Embedded
35-
// cdecls don't work in Embedded, also @_expose(wasm) can be used with Swift >=6.0
34+
// NOTE: This __wasi__ check is a hack for Embedded compatibility (assuming that if __wasi__ is defined, we are not building for Embedded)
35+
// cdecls don't work in Embedded, but @_expose(wasm) can be used with Swift >=6.0
36+
// the previously used `#if __Embedded` did not play well with SwiftPM (defines needed to be on every target up the chain)
37+
#ifdef __wasi__
3638
bool _call_host_function_impl(const JavaScriptHostFuncRef host_func_ref,
3739
const RawJSValue *argv, const int argc,
3840
const JavaScriptObjectRef callback_func);

Sources/_CJavaScriptKit/include/_CJavaScriptKit.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
#ifndef _CJavaScriptKit_h
22
#define _CJavaScriptKit_h
33

4-
#if __Embedded
5-
#include <stddef.h>
6-
#else
4+
#if __has_include("stdlib.h")
75
#include <stdlib.h>
6+
#else
7+
#include <stddef.h>
88
#endif
99
#include <stdbool.h>
1010
#include <stdint.h>

0 commit comments

Comments
 (0)