new plugin system
This commit is contained in:
+60
-17
@@ -5,40 +5,83 @@ set "ROOT=%~dp0"
|
||||
set "PLUGIN_DIR=%ROOT%plugin-sample-go"
|
||||
if not "%~1"=="" set "PLUGIN_DIR=%~1"
|
||||
|
||||
set "WASM_DIR=%PLUGIN_DIR%\wasm"
|
||||
set "NATIVE_DIR=%PLUGIN_DIR%\native"
|
||||
set "PLUGIN_NAME=sample"
|
||||
set "WASM_OUT=%PLUGIN_DIR%\%PLUGIN_NAME%.wasm"
|
||||
set "ZIP_OUT=%PLUGIN_DIR%\%PLUGIN_NAME%.zip"
|
||||
|
||||
if not exist "%WASM_DIR%" (
|
||||
echo [error] wasm folder not found: %WASM_DIR%
|
||||
if not exist "%NATIVE_DIR%" (
|
||||
echo [error] native folder not found: %NATIVE_DIR%
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
pushd "%WASM_DIR%"
|
||||
pushd "%NATIVE_DIR%"
|
||||
|
||||
echo [build] go build -o "%WASM_OUT%" (GOOS=wasip1 GOARCH=wasm)
|
||||
set "GOOS=wasip1"
|
||||
set "GOARCH=wasm"
|
||||
go build -o "%WASM_OUT%" .
|
||||
set "GOOS="
|
||||
set "GOARCH="
|
||||
if errorlevel 1 (
|
||||
echo [warn] go build failed, trying tinygo
|
||||
echo [build] tinygo build -o "%WASM_OUT%" -target wasi -scheduler=none -gc=leaking .
|
||||
tinygo build -o "%WASM_OUT%" -target wasi -scheduler=none -gc=leaking .
|
||||
REM Build targets - default to windows-amd64 on Windows
|
||||
if not defined BUILD_TARGETS set "BUILD_TARGETS=windows-amd64"
|
||||
|
||||
set "BUILT_FILES="
|
||||
for %%T in (%BUILD_TARGETS%) do (
|
||||
for /f "tokens=1,2 delims=-" %%A in ("%%T") do (
|
||||
set "TARGET_OS=%%A"
|
||||
set "TARGET_ARCH=%%B"
|
||||
)
|
||||
|
||||
if "!TARGET_OS!"=="windows" (
|
||||
set "EXT=dll"
|
||||
) else if "!TARGET_OS!"=="darwin" (
|
||||
set "EXT=dylib"
|
||||
) else (
|
||||
set "EXT=so"
|
||||
)
|
||||
set "BUILDMODE=c-shared"
|
||||
|
||||
set "OUTFILE=%PLUGIN_DIR%\%PLUGIN_NAME%-!TARGET_OS!-!TARGET_ARCH!.!EXT!"
|
||||
echo [build] GOOS=!TARGET_OS! GOARCH=!TARGET_ARCH! CGO_ENABLED=1 go build -buildmode=!BUILDMODE! -o "!OUTFILE!"
|
||||
set "GOOS=!TARGET_OS!"
|
||||
set "GOARCH=!TARGET_ARCH!"
|
||||
set "CGO_ENABLED=1"
|
||||
go build -buildmode=!BUILDMODE! -o "!OUTFILE!" .
|
||||
if errorlevel 1 (
|
||||
echo [error] tinygo build failed
|
||||
echo [error] build failed for !TARGET_OS!-!TARGET_ARCH!
|
||||
popd
|
||||
exit /b 1
|
||||
)
|
||||
set "BUILT_FILES=!BUILT_FILES! '%PLUGIN_DIR%\%PLUGIN_NAME%-!TARGET_OS!-!TARGET_ARCH!.!EXT!'"
|
||||
)
|
||||
|
||||
set "GOOS="
|
||||
set "GOARCH="
|
||||
set "CGO_ENABLED="
|
||||
|
||||
popd
|
||||
|
||||
if exist "%ZIP_OUT%" del /f /q "%ZIP_OUT%"
|
||||
|
||||
powershell -NoProfile -Command "Compress-Archive -Path '%PLUGIN_DIR%\%PLUGIN_NAME%.wasm','%PLUGIN_DIR%\%PLUGIN_NAME%.html','%PLUGIN_DIR%\%PLUGIN_NAME%.css','%PLUGIN_DIR%\%PLUGIN_NAME%.js' -DestinationPath '%ZIP_OUT%'"
|
||||
REM Collect all build outputs and web assets
|
||||
set "ZIP_SOURCES="
|
||||
for %%T in (%BUILD_TARGETS%) do (
|
||||
for /f "tokens=1,2 delims=-" %%A in ("%%T") do (
|
||||
set "TARGET_OS=%%A"
|
||||
set "TARGET_ARCH=%%B"
|
||||
)
|
||||
if "!TARGET_OS!"=="windows" (
|
||||
set "ZIP_SOURCES=!ZIP_SOURCES!,'%PLUGIN_DIR%\%PLUGIN_NAME%-!TARGET_OS!-!TARGET_ARCH!.dll'"
|
||||
) else if "!TARGET_OS!"=="darwin" (
|
||||
set "ZIP_SOURCES=!ZIP_SOURCES!,'%PLUGIN_DIR%\%PLUGIN_NAME%-!TARGET_OS!-!TARGET_ARCH!.dylib'"
|
||||
) else (
|
||||
set "ZIP_SOURCES=!ZIP_SOURCES!,'%PLUGIN_DIR%\%PLUGIN_NAME%-!TARGET_OS!-!TARGET_ARCH!.so'"
|
||||
)
|
||||
)
|
||||
|
||||
REM Add web assets
|
||||
if exist "%PLUGIN_DIR%\%PLUGIN_NAME%.html" set "ZIP_SOURCES=!ZIP_SOURCES!,'%PLUGIN_DIR%\%PLUGIN_NAME%.html'"
|
||||
if exist "%PLUGIN_DIR%\%PLUGIN_NAME%.css" set "ZIP_SOURCES=!ZIP_SOURCES!,'%PLUGIN_DIR%\%PLUGIN_NAME%.css'"
|
||||
if exist "%PLUGIN_DIR%\%PLUGIN_NAME%.js" set "ZIP_SOURCES=!ZIP_SOURCES!,'%PLUGIN_DIR%\%PLUGIN_NAME%.js'"
|
||||
|
||||
REM Remove leading comma
|
||||
set "ZIP_SOURCES=!ZIP_SOURCES:~1!"
|
||||
|
||||
powershell -NoProfile -Command "Compress-Archive -Path !ZIP_SOURCES! -DestinationPath '%ZIP_OUT%'"
|
||||
if errorlevel 1 (
|
||||
echo [error] zip failed
|
||||
exit /b 1
|
||||
|
||||
Reference in New Issue
Block a user