Skip to content

Commit 0e98a80

Browse files
Feedback fixes
Fixed cmake scripts to build debug win32 correctly
1 parent 60d523f commit 0e98a80

File tree

5 files changed

+62
-45
lines changed

5 files changed

+62
-45
lines changed

src/CMakeLists.txt

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ cmake_minimum_required(VERSION 3.15)
22

33
project(dart_dll VERSION 0.1)
44

5-
set(DART_DIR "${PROJECT_SOURCE_DIR}/../dart-sdk/sdk")
5+
set(DARTSDK_ROOTDIR "${PROJECT_SOURCE_DIR}/../dart-sdk" CACHE FILEPATH "Directory that dart-sdk is cloned too")
6+
set(DART_DIR "${DARTSDK_ROOTDIR}/sdk")
67

78
set(CMAKE_CXX_STANDARD 17)
89
set(CMAKE_CXX_STANDARD_REQUIRED True)
@@ -21,8 +22,12 @@ if(WIN32)
2122
set(LIB_PREFIX "lib")
2223
endif()
2324

25+
find_library(LIB_DART_DEBUG
26+
NAMES "${LIB_PREFIX}dart"
27+
HINTS "${DART_DIR}/out/DebugX64/obj/runtime/bin"
28+
)
2429

25-
find_library(LIB_DART
30+
find_library(LIB_DART_RELEASE
2631
NAMES "${LIB_PREFIX}dart"
2732
HINTS "${DART_DIR}/out/ReleaseX64/obj/runtime/bin"
2833
)
@@ -58,6 +63,8 @@ if(WIN32)
5863
Psapi
5964
shlwapi
6065
)
66+
set_property(TARGET dart_dll PROPERTY
67+
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
6168
elseif(LINUX)
6269
set(THREADS_PREFER_PTHREAD_FLAG ON)
6370
set(CMAKE_C_COMPILER "${DART_DIR}/buildtools/linux-x64/clang/bin/clang")
@@ -72,6 +79,5 @@ elseif(LINUX)
7279
)
7380
endif()
7481

75-
target_link_libraries(dart_dll
76-
${LIB_DART}
77-
)
82+
target_link_libraries(dart_dll debug ${LIB_DART_DEBUG})
83+
target_link_libraries(dart_dll optimized ${LIB_DART_RELEASE})

src/dart_dll.cpp

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,7 @@ static void OnIsolateShutdown(void*, void*) {
9393
Dart_ExitScope();
9494
}
9595

96-
static void DeleteIsolateData(void*, void* callback_data) {
97-
auto isolate_data = reinterpret_cast<IsolateData*>(callback_data);
98-
delete isolate_data;
99-
}
10096

101-
static void DeleteIsolateGroupData(void* callback_data) {
102-
auto isolate_group_data = reinterpret_cast<IsolateGroupData*>(callback_data);
103-
delete isolate_group_data;
104-
}
10597

10698
extern "C" {
10799

@@ -147,19 +139,19 @@ bool DartDll_Initialize(const DartDllConfig& config) {
147139

148140
Dart_Isolate DartDll_LoadScript(const char* script_uri,
149141
const char* package_config,
150-
void* callbackPtr) {
142+
void* isolate_data) {
151143
Dart_IsolateFlags isolate_flags;
152144
Dart_IsolateFlagsInitialize(&isolate_flags);
153145

154146
char* error = nullptr;
155147
Dart_Isolate isolate = CreateIsolate(true, script_uri, "main", package_config,
156-
&isolate_flags, callbackPtr, &error);
148+
&isolate_flags, isolate_data, &error);
157149

158150
return isolate;
159151
}
160152

161-
void* DartDll_GetCallbackData(void* isolate_group_data) {
162-
return GetCallbackData(isolate_group_data);
153+
void* DartDll_GetUserIsolateData(void* isolate_group_data) {
154+
return GetUserIsolateData(isolate_group_data);
163155
}
164156

165157
Dart_Handle DartDll_RunMain(Dart_Handle library) {
@@ -180,7 +172,8 @@ Dart_Handle DartDll_RunMain(Dart_Handle library) {
180172
Dart_Invoke(isolateLib, Dart_NewStringFromCString("_startMainIsolate"),
181173
kNumIsolateArgs, isolateArgs);
182174
if (Dart_IsError(result)) {
183-
std::cout << "Dart initialized, error was: " << Dart_GetError(result) << "\n"
175+
std::cout << "Dart initialized, error was: " << Dart_GetError(result)
176+
<< "\n"
184177
<< std::endl;
185178
return result;
186179
}

src/dart_dll.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,11 @@ DART_DLL_EXPORT bool DartDll_Initialize(const DartDllConfig& config);
3434
// configuration is usually in ".dart_tool/package_config.json".
3535
DART_DLL_EXPORT Dart_Isolate DartDll_LoadScript(const char* script_uri,
3636
const char* package_config,
37-
void* callbackPtr = nullptr);
37+
void* isolate_data = nullptr);
3838

39-
// Gets the pointer provided in DartDll_LoadScript after calling Dart_CurrentIsolateData
40-
DART_DLL_EXPORT void* DartDll_GetCallbackData(void* isolate_group_data);
39+
// Gets the pointer provided by the `isolate_data` parameter in DartDll_LoadScript after
40+
// calling Dart_CurrentIsolateData
41+
DART_DLL_EXPORT void* DartDll_GetUserIsolateData(void* isolate_group_data);
4142

4243
// Run "main" from the supplied library, usually one you got from
4344
// Dart_RootLibrary()
@@ -51,5 +52,4 @@ DART_DLL_EXPORT Dart_Handle DartDll_DrainMicrotaskQueue();
5152

5253
// Shutdown Dart
5354
DART_DLL_EXPORT bool DartDll_Shutdown();
54-
5555
}

src/isolate_setup.cpp

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,22 @@ extern const uint8_t kDartCoreIsolateSnapshotInstructions[];
1919

2020
namespace {
2121
class DllIsolateGroupData : public IsolateGroupData {
22-
public:
23-
DllIsolateGroupData(const char* url,
24-
const char* packages_file,
25-
AppSnapshot* app_snapshot,
26-
bool isolate_run_app_snapshot)
27-
: IsolateGroupData(url, packages_file, app_snapshot, isolate_run_app_snapshot) {
28-
}
29-
30-
void* callback_data = {};
22+
public:
23+
DllIsolateGroupData(const char* url,
24+
const char* packages_file,
25+
AppSnapshot* app_snapshot,
26+
bool isolate_run_app_snapshot,
27+
void* callback_data = nullptr)
28+
: IsolateGroupData(url,
29+
packages_file,
30+
app_snapshot,
31+
isolate_run_app_snapshot),
32+
callback_data(callback_data) {}
33+
34+
void* callback_data;
3135
};
3236
}
37+
3338
Dart_Handle SetupCoreLibraries(Dart_Isolate isolate,
3439
IsolateData* isolate_data,
3540
bool is_isolate_group_start,
@@ -115,8 +120,8 @@ Dart_Isolate CreateVmServiceIsolate(const char* script_uri,
115120
void* callback_data,
116121
int service_port,
117122
char** error) {
118-
DllIsolateGroupData* isolate_group_data =
119-
new DllIsolateGroupData(script_uri, package_config, nullptr, false);
123+
DllIsolateGroupData* isolate_group_data = new DllIsolateGroupData(
124+
script_uri, package_config, nullptr, false, callback_data);
120125
IsolateData* isolate_data = new IsolateData(isolate_group_data);
121126

122127
flags->load_vmservice_library = true;
@@ -160,11 +165,10 @@ Dart_Isolate CreateIsolate(bool is_main_isolate,
160165
dfe.ReadScript(script_uri, &kernel_buffer, &kernel_buffer_size);
161166
flags->null_safety = true;
162167

163-
DllIsolateGroupData* isolate_group_data =
164-
new DllIsolateGroupData(script_uri, packages_config, nullptr, false);
168+
DllIsolateGroupData* isolate_group_data = new DllIsolateGroupData(
169+
script_uri, packages_config, nullptr, false, callback_data);
165170
isolate_group_data->SetKernelBufferNewlyOwned(kernel_buffer,
166171
kernel_buffer_size);
167-
isolate_group_data->callback_data = callback_data;
168172

169173
const uint8_t* platform_kernel_buffer = nullptr;
170174
intptr_t platform_kernel_buffer_size = 0;
@@ -258,15 +262,26 @@ Dart_Isolate CreateIsolate(bool is_main_isolate,
258262
return isolate;
259263
}
260264

261-
void* GetCallbackData(void* isolate_data) {
265+
void* GetUserIsolateData(void* isolate_data) {
262266
if (isolate_data == nullptr) {
263267
return nullptr;
264268
}
265-
IsolateGroupData* isolate_group_data = static_cast<IsolateData*>(isolate_data)->isolate_group_data();
266-
269+
IsolateGroupData* isolate_group_data =
270+
reinterpret_cast<IsolateData*>(isolate_data)->isolate_group_data();
271+
267272
if (isolate_group_data == nullptr) {
268273
return nullptr;
269274
}
270-
void* callback_data = static_cast<DllIsolateGroupData*>(isolate_group_data)->callback_data;
271-
return callback_data;
275+
return static_cast<DllIsolateGroupData*>(isolate_group_data)->callback_data;
276+
}
277+
278+
void DeleteIsolateData(void* raw_isolate_group_data, void* raw_isolate_data) {
279+
auto isolate_data = reinterpret_cast<IsolateData*>(raw_isolate_data);
280+
delete isolate_data;
281+
}
282+
283+
void DeleteIsolateGroupData(void* raw_isolate_group_data) {
284+
auto isolate_group_data =
285+
reinterpret_cast<DllIsolateGroupData*>(raw_isolate_group_data);
286+
delete isolate_group_data;
272287
}

src/isolate_setup.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ Dart_Isolate CreateKernelIsolate(const char* script_uri,
77
const char* package_root,
88
const char* package_config,
99
Dart_IsolateFlags* flags,
10-
void* callback_data,
10+
void* isolate_data,
1111
char** error);
1212

1313
Dart_Isolate CreateVmServiceIsolate(const char* script_uri,
1414
const char* main,
1515
const char* package_root,
1616
const char* package_config,
1717
Dart_IsolateFlags* flags,
18-
void* callback_data,
18+
void* isolate_data,
1919
int service_port,
2020
char** error);
2121

@@ -24,7 +24,10 @@ Dart_Isolate CreateIsolate(bool is_main_isolate,
2424
const char* name,
2525
const char* packages_config,
2626
Dart_IsolateFlags* flags,
27-
void* callback_data,
27+
void* isolate_data,
2828
char** error);
2929

30-
void* GetCallbackData(void* isolate_group_data);
30+
void* GetUserIsolateData(void* isolate_group_data);
31+
32+
void DeleteIsolateData(void* raw_isolate_group_data, void* raw_isolate_data);
33+
void DeleteIsolateGroupData(void* raw_isolate_group_data);

0 commit comments

Comments
 (0)