From 4ab7b6bfdc17e891cee729ae1d5768aa4922b8cd Mon Sep 17 00:00:00 2001 From: Jerry Ma Date: Fri, 23 Feb 2024 11:14:51 +0800 Subject: [PATCH] Add sqlite support for Windows (#350) * add sqlite support * cs fix --- config/ext.json | 1 + config/lib.json | 5 +- src/SPC/builder/windows/library/sqlite.php | 21 +++++++ src/globals/extra/Makefile-sqlite | 69 ++++++++++++++++++++++ src/globals/test-extensions.php | 2 +- 5 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 src/SPC/builder/windows/library/sqlite.php create mode 100644 src/globals/extra/Makefile-sqlite diff --git a/config/ext.json b/config/ext.json index 8e26de94..87a11ba3 100644 --- a/config/ext.json +++ b/config/ext.json @@ -397,6 +397,7 @@ "sqlite3": { "type": "builtin", "arg-type": "with-prefix", + "arg-type-windows": "with", "lib-depends": [ "sqlite" ] diff --git a/config/lib.json b/config/lib.json index 7dfef67c..df55c82d 100644 --- a/config/lib.json +++ b/config/lib.json @@ -520,7 +520,10 @@ "static-libs-unix": [ "libsqlite3.a" ], - "headers-unix": [ + "static-libs-windows": [ + "libsqlite3_a.lib" + ], + "headers": [ "sqlite3.h", "sqlite3ext.h" ] diff --git a/src/SPC/builder/windows/library/sqlite.php b/src/SPC/builder/windows/library/sqlite.php new file mode 100644 index 00000000..096c1e97 --- /dev/null +++ b/src/SPC/builder/windows/library/sqlite.php @@ -0,0 +1,21 @@ +source_dir . '/Makefile'); + return true; + } + + protected function build(): void + { + cmd()->cd($this->source_dir)->execWithWrapper($this->builder->makeSimpleWrapper('nmake'), 'PREFIX=' . BUILD_ROOT_PATH . ' install-static'); + } +} diff --git a/src/globals/extra/Makefile-sqlite b/src/globals/extra/Makefile-sqlite new file mode 100644 index 00000000..e122cd9d --- /dev/null +++ b/src/globals/extra/Makefile-sqlite @@ -0,0 +1,69 @@ + +CC=cl.exe /nologo +AR=lib.exe /nologo +LINK=link.exe /nologo + +!IF "" == "$(MACHINE)" +MACHINE=x64 +!ENDIF + +!IF "" == "$(CRT)" +CRT=vc15 +!ENDIF + +!IF "" == "$(PREFIX)" +PREFIX="$(CRT)-$(MACHINE)" +!ENDIF + +COMMON_CFLAGS=/D SQLITE_THREADSAFE=1 /DSQLITE_ENABLE_FTS3=1 /D SQLITE_ENABLE_FTS4=1 /D SQLITE_ENABLE_FTS5=1 /D SQLITE_ENABLE_JSON1=1 /D SQLITE_ENABLE_COLUMN_METADATA=1 /D SQLITE_CORE=1 +!IF "$(DEBUG)"=="1" +SQLITE3_STATIC_BASE=libsqlite3_a_debug +SQLITE3_DLL_BASE=libsqlite3_debug +SQLITE3_EXE_BASE=sqlite3 +CFLAGS=$(COMMON_CFLAGS) /Zi /MDd /Od /W3 +LDFLAGS=/DEBUG /GUARD:CF /INCREMENTAL:NO +!ELSE +SQLITE3_STATIC_BASE=libsqlite3_a +SQLITE3_DLL_BASE=libsqlite3 +SQLITE3_EXE_BASE=sqlite3 +CFLAGS=$(COMMON_CFLAGS) /Zi /MT /guard:cf /Zc:inline /Qspectre /Ox /W3 /GF /GL /Gw +LDFLAGS=/GUARD:CF /INCREMENTAL:NO /NXCOMPAT /DYNAMICBASE +!ENDIF + + +all: $(SQLITE3_STATIC_BASE).lib $(SQLITE3_EXE_BASE).exe $(SQLITE3_DLL_BASE).dll + +install: all + if not exist $(PREFIX)\bin mkdir $(PREFIX)\bin + if not exist $(PREFIX)\include mkdir $(PREFIX)\include + if not exist $(PREFIX)\lib mkdir $(PREFIX)\lib + copy /Y sqlite3.h $(PREFIX)\include + copy /Y sqlite3ext.h $(PREFIX)\include + copy /Y $(SQLITE3_STATIC_BASE).lib $(PREFIX)\lib + copy /Y $(SQLITE3_STATIC_BASE).pdb $(PREFIX)\lib + copy /Y $(SQLITE3_DLL_BASE).lib $(PREFIX)\lib + copy /Y $(SQLITE3_DLL_BASE).pdb $(PREFIX)\bin + copy /Y $(SQLITE3_DLL_BASE).dll $(PREFIX)\bin + copy /Y $(SQLITE3_EXE_BASE).exe $(PREFIX)\bin + copy /Y $(SQLITE3_EXE_BASE).pdb $(PREFIX)\bin + +install-static: $(SQLITE3_STATIC_BASE).lib + if not exist $(PREFIX)\include mkdir $(PREFIX)\include + if not exist $(PREFIX)\lib mkdir $(PREFIX)\lib + copy /Y sqlite3.h $(PREFIX)\include + copy /Y sqlite3ext.h $(PREFIX)\include + copy /Y $(SQLITE3_STATIC_BASE).lib $(PREFIX)\lib + +clean: + del *.obj *.lib *.exe *.pdb *.dll *.exp + +$(SQLITE3_STATIC_BASE).lib: sqlite3.c sqlite3.h + $(CC) $(CFLAGS) /Fd$(SQLITE3_STATIC_BASE).pdb /c sqlite3.c + $(AR) sqlite3.obj /OUT:$(SQLITE3_STATIC_BASE).lib + +$(SQLITE3_EXE_BASE).exe: shell.c sqlite3.c sqlite3.h + $(CC) $(CFLAGS) shell.c sqlite3.c /Fd$(SQLITE3_EXE_BASE).pdb /Fe$(SQLITE3_EXE_BASE).exe + +$(SQLITE3_DLL_BASE).dll: sqlite3.c sqlite3.h + $(CC) $(CFLAGS) /DSQLITE_API=__declspec(dllexport) /Fd$(SQLITE3_DLL_BASE).pdb /c sqlite3.c + $(LINK) /DLL /OUT:$(SQLITE3_DLL_BASE).dll sqlite3.obj \ No newline at end of file diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 0cb26e07..3e00b921 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -14,7 +14,7 @@ declare(strict_types=1); // If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`). $extensions = match (PHP_OS_FAMILY) { 'Linux', 'Darwin' => 'event,gettext', - 'Windows' => 'mbstring,iconv,dom,xml,xmlwriter,xmlreader,soap,simplexml', + 'Windows' => 'mbstring,pdo_sqlite', }; // If you want to test lib-suggests feature with extension, add them below (comma separated, example `libwebp,libavif`).