Skip to content

Commit f18a722

Browse files
committed
Adding WEBUI_WEBVIEW_STATIC (WebView2LoaderStatic.lib)
1 parent 50310b9 commit f18a722

3 files changed

Lines changed: 34 additions & 9 deletions

File tree

GNUmakefile

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ CIVETWEB_BUILD_FLAGS := -o civetweb.o -I"$(MAKEFILE_DIR)/include/" -c "$(MAKEFIL
4949
CIVETWEB_DEFINE_FLAGS = -DNDEBUG -DNO_CACHING -DNO_CGI -DUSE_WEBSOCKET $(TLS_CFLAG)
5050
WEBUI_BUILD_FLAGS := -o webui.o -I"$(MAKEFILE_DIR)/include/" -c "$(MAKEFILE_DIR)/src/webui.c" -I"$(WEBUI_TLS_INCLUDE)" $(TLS_CFLAG)
5151
WIN32_WV2_BUILD_FLAGS := -o win32_wv2.o -I"$(MAKEFILE_DIR)/include/" -c "$(MAKEFILE_DIR)/src/webview/win32_wv2.cpp" -I"$(WEBUI_TLS_INCLUDE)" $(TLS_CFLAG)
52+
WV2_STATIC_LIB :=
53+
ifeq ($(WEBUI_WEBVIEW_STATIC),1)
54+
WIN32_WV2_BUILD_FLAGS += -DWEBUI_WEBVIEW_STATIC
55+
WV2_STATIC_LIB := "$(MAKEFILE_DIR)/WebView2LoaderStatic.lib"
56+
endif
5257
WARNING_RELEASE := -w
5358
WARNING_LOG := -Wall -Wno-unused
5459

@@ -144,7 +149,7 @@ endif
144149
&& echo "Build WebUI library ($(CC) $(TARGET) debug dynamic)..." \
145150
&& $(CC) $(TARGET) $(CIVETWEB_BUILD_FLAGS) $(CIVETWEB_DEFINE_FLAGS) -g -fPIC \
146151
&& $(CC) $(TARGET) $(WEBUI_BUILD_FLAGS) $(WARNING_LOG) -g -fPIC -DWEBUI_LOG -DWEBUI_DYNAMIC \
147-
&& $(CC) $(TARGET) -shared -o $(LIB_DYN_OUT) webui.o civetweb.o $(WEBKIT_OBJ) $(WIN32_WV2_OBJ) -g -L"$(WEBUI_TLS_LIB)" $(TLS_LDFLAG_DYNAMIC) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) $(CPP_FLAGS)
152+
&& $(CC) $(TARGET) -shared -o $(LIB_DYN_OUT) webui.o civetweb.o $(WEBKIT_OBJ) $(WIN32_WV2_OBJ) -g -L"$(WEBUI_TLS_LIB)" $(TLS_LDFLAG_DYNAMIC) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) $(CPP_FLAGS) $(WV2_STATIC_LIB)
148153
ifeq ($(PLATFORM),windows)
149154
@cd "$(BUILD_DIR)/debug" && del *.o >nul 2>&1
150155
else
@@ -183,7 +188,7 @@ endif
183188
&& echo "Build WebUI library ($(CC) $(TARGET) release dynamic)..." \
184189
&& $(CC) $(TARGET) $(CIVETWEB_BUILD_FLAGS) $(CIVETWEB_DEFINE_FLAGS) -Os -fPIC \
185190
&& $(CC) $(TARGET) $(WEBUI_BUILD_FLAGS) $(WARNING_RELEASE) -O3 -fPIC -DWEBUI_DYNAMIC \
186-
&& $(CC) $(TARGET) -shared -o $(LIB_DYN_OUT) webui.o civetweb.o $(WEBKIT_OBJ) $(WIN32_WV2_OBJ) -L"$(WEBUI_TLS_LIB)" $(TLS_LDFLAG_DYNAMIC) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) $(CPP_FLAGS)
191+
&& $(CC) $(TARGET) -shared -o $(LIB_DYN_OUT) webui.o civetweb.o $(WEBKIT_OBJ) $(WIN32_WV2_OBJ) -L"$(WEBUI_TLS_LIB)" $(TLS_LDFLAG_DYNAMIC) $(LWS2_OPT) $(WKWEBKIT_LINK_FLAGS) $(CPP_FLAGS) $(WV2_STATIC_LIB)
187192
# Clean
188193
ifeq ($(PLATFORM),windows)
189194
@strip --strip-unneeded $(BUILD_DIR)/$(LIB_DYN_OUT)

Makefile

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,17 @@ CIVETWEB_BUILD_FLAGS = /Fo"civetweb.obj" /c /EHsc "$(MAKEDIR)/src/civetweb/civet
3232
CIVETWEB_DEFINE_FLAGS = /D NDEBUG /D NO_CACHING /D NO_CGI /D USE_WEBSOCKET
3333
WEBUI_BUILD_FLAGS = /Fo"webui.obj" /c /EHsc "$(MAKEDIR)/src/webui.c" /I"$(MAKEDIR)/include" /I"$(MAKEDIR)/src/webview" /I"$(WEBUI_TLS_INCLUDE)" $(TLS_CFLAG)
3434
WIN32_WV2_BUILD_FLAGS = /Fo"win32_wv2.obj" /c /EHsc "$(MAKEDIR)/src/webview/win32_wv2.cpp" /I"$(MAKEDIR)/include" /I"$(MAKEDIR)/src/webview" /I"$(WEBUI_TLS_INCLUDE)" $(TLS_CFLAG)
35+
WV2_STATIC_LIB =
36+
!IF "$(WEBUI_WEBVIEW_STATIC)" == "1"
37+
WIN32_WV2_BUILD_FLAGS = $(WIN32_WV2_BUILD_FLAGS) /DWEBUI_WEBVIEW_STATIC
38+
WV2_STATIC_LIB = "$(MAKEDIR)\WebView2LoaderStatic.lib"
39+
!ENDIF
3540
WARNING_RELEASE = /w
3641
WARNING_LOG = /W4
3742

3843
# Output Commands
39-
LIB_STATIC_OUT = /OUT:"$(WEBUI_OUT_LIB_NAME)-static.lib" "webui.obj" "civetweb.obj" "win32_wv2.obj"
40-
LIB_DYN_OUT = /DLL /OUT:"$(WEBUI_OUT_LIB_NAME).dll" "webui.obj" "civetweb.obj" "win32_wv2.obj" user32.lib Advapi32.lib Shell32.lib Ole32.lib $(TLS_LDFLAG_DYNAMIC)
44+
LIB_STATIC_OUT = /OUT:"$(WEBUI_OUT_LIB_NAME)-static.lib" "webui.obj" "civetweb.obj" "win32_wv2.obj" $(WV2_STATIC_LIB)
45+
LIB_DYN_OUT = /DLL /OUT:"$(WEBUI_OUT_LIB_NAME).dll" "webui.obj" "civetweb.obj" "win32_wv2.obj" user32.lib Advapi32.lib Shell32.lib Ole32.lib $(TLS_LDFLAG_DYNAMIC) $(WV2_STATIC_LIB)
4146

4247
# == 2.TARGETS ================================================================
4348

src/webview/win32_wv2.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -287,16 +287,24 @@ class WebView2Instance {
287287
};
288288
#endif
289289

290+
#ifdef WEBUI_WEBVIEW_STATIC
291+
// The WebView2LoaderStatic.lib is linked, no need to load WebView2Loader.dll
292+
#else
290293
// Cached WebView2Loader.dll handle and function pointer
291294
static HMODULE g_webviewLib = NULL;
292295
typedef HRESULT (__stdcall *CreateCoreWebView2EnvironmentWithOptionsFunc)(
293296
PCWSTR, PCWSTR, ICoreWebView2EnvironmentOptions*,
294297
ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler*);
295298
static CreateCoreWebView2EnvironmentWithOptionsFunc g_createEnv = NULL;
299+
#endif
296300

297301
extern "C" {
298302

299303
bool _webui_win32_wv2_check_loader_dll(void) {
304+
#ifdef WEBUI_WEBVIEW_STATIC
305+
// The WebView2LoaderStatic.lib is linked, no need to load WebView2Loader.dll
306+
return true;
307+
#else
300308
// Already loaded and cached
301309
if (g_webviewLib && g_createEnv) {
302310
return true;
@@ -314,6 +322,7 @@ bool _webui_win32_wv2_check_loader_dll(void) {
314322
return false;
315323
}
316324
return true;
325+
#endif
317326
}
318327

319328
_webui_win32_wv2_handle _webui_win32_wv2_create(void) {
@@ -441,11 +450,9 @@ bool _webui_win32_wv2_create_environment(_webui_win32_wv2_handle handle, wchar_t
441450
if (!handle) return false;
442451
WebView2Instance* instance = static_cast<WebView2Instance*>(handle);
443452

444-
// Ensure DLL is loaded (use cached if available)
445-
if (!g_webviewLib || !g_createEnv) {
446-
if (!_webui_win32_wv2_check_loader_dll()) {
447-
return false;
448-
}
453+
// Ensure loader is ready (DLL or static)
454+
if (!_webui_win32_wv2_check_loader_dll()) {
455+
return false;
449456
}
450457

451458
_wputenv(L"WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS=--enable-features=msWebView2EnableDraggableRegions");
@@ -455,13 +462,21 @@ bool _webui_win32_wv2_create_environment(_webui_win32_wv2_handle handle, wchar_t
455462
if (!environmentHandler) {
456463
return false;
457464
}
465+
#ifdef WEBUI_WEBVIEW_STATIC
466+
HRESULT hr = CreateCoreWebView2EnvironmentWithOptions(NULL, cacheFolder, NULL, environmentHandler.Get());
467+
#else
458468
HRESULT hr = g_createEnv(NULL, cacheFolder, NULL, environmentHandler.Get());
469+
#endif
459470
#else
460471
EnvironmentCompletedHandler* environmentHandler = new EnvironmentCompletedHandler(instance);
461472
if (!environmentHandler) {
462473
return false;
463474
}
475+
#ifdef WEBUI_WEBVIEW_STATIC
476+
HRESULT hr = CreateCoreWebView2EnvironmentWithOptions(NULL, cacheFolder, NULL, environmentHandler);
477+
#else
464478
HRESULT hr = g_createEnv(NULL, cacheFolder, NULL, environmentHandler);
479+
#endif
465480
#endif
466481

467482
return SUCCEEDED(hr);

0 commit comments

Comments
 (0)