MNN/package_scripts/win/build_tools.ps1

117 lines
3.3 KiB
PowerShell
Raw Normal View History

2020-11-06 11:05:52 +08:00
Param(
[Parameter(Mandatory=$true)][String]$path,
2022-02-18 11:30:27 +08:00
[Switch]$dynamic_link,
[String]$backends,
[Switch]$build_all,
[Switch]$build_train, # MNN_BUILD_TRAIN
[Switch]$build_tools, # MNN_BUILD_TOOLS
[Switch]$build_quantools, # MNN_BUILD_QUANTOOLS
[Switch]$build_evaluation, # MNN_EVALUATION
[Switch]$build_converter, # MNN_BUILD_CONVERTER
[Switch]$build_benchmark, # MNN_BUILD_BENCHMARK
[Switch]$build_test, # MNN_BUILD_TEST
[Switch]$build_demo # MNN_BUILD_DEMO
2020-11-06 11:05:52 +08:00
)
2021-04-28 18:02:10 +08:00
if ($build_all) {
$build_train = $true
$build_tools = $true
$build_quantools = $true
$build_evaluation = $true
$build_converter = $true
$build_benchmark = $true
$build_test = $true
$build_demo = $true
}
2020-11-06 11:05:52 +08:00
$erroractionpreference = "stop"
Remove-Item $path -Recurse -ErrorAction Ignore
mkdir -p $path
$TOOLS_PATH = $(Resolve-Path $path).Path
powershell ./schema/generate.ps1
2022-02-18 11:30:27 +08:00
$CMAKE_ARGS = "-DMNN_SEP_BUILD=OFF -DCMAKE_BUILD_TYPE=Release -DMNN_BUILD_OPENCV=ON -DMNN_IMGCODECS=ON -DMNN_AVX512=ON"
if ($dynamic_link) {
$CMAKE_ARGS = "$CMAKE_ARGS -DMNN_BUILD_SHARED_LIBS=ON"
} else {
$CMAKE_ARGS = "$CMAKE_ARGS -DMNN_BUILD_SHARED_LIBS=OFF -DMNN_WIN_RUNTIME_MT=ON"
}
if ($build_train) {
$CMAKE_ARGS = "$CMAKE_ARGS -DMNN_BUILD_TRAIN=ON"
}
if (!$build_tools) {
$CMAKE_ARGS = "$CMAKE_ARGS -DMNN_BUILD_TOOLS=OFF"
}
if ($build_quantools) {
$CMAKE_ARGS = "$CMAKE_ARGS -DMNN_BUILD_QUANTOOLS=ON"
}
if ($build_evaluation) {
$CMAKE_ARGS = "$CMAKE_ARGS -DMNN_EVALUATION=ON"
}
if ($build_converter) {
$CMAKE_ARGS = "$CMAKE_ARGS -DMNN_BUILD_CONVERTER=ON"
2022-02-18 11:30:27 +08:00
if ($dynamic_link) {
$CMAKE_ARGS = "$CMAKE_ARGS -Dprotobuf_BUILD_SHARED_LIBS=ON"
} else {
$CMAKE_ARGS = "$CMAKE_ARGS -Dprotobuf_BUILD_SHARED_LIBS=OFF"
}
}
if ($build_benchmark) {
$CMAKE_ARGS = "$CMAKE_ARGS -DMNN_BUILD_BENCHMARK=ON"
}
if ($build_test) {
$CMAKE_ARGS = "$CMAKE_ARGS -DMNN_BUILD_TEST=ON"
}
if ($build_demo) {
$CMAKE_ARGS = "$CMAKE_ARGS -DMNN_BUILD_DEMO=ON"
}
2021-04-28 18:02:10 +08:00
if ($backends -ne $null) {
Foreach ($backend in $backends.Split(",")) {
if ($backend -eq "opencl") {
$CMAKE_ARGS = "$CMAKE_ARGS -DMNN_OPENCL=ON"
} elseif ($backend -eq "vulkan") {
$CMAKE_ARGS = "$CMAKE_ARGS -DMNN_VULKAN=ON"
}
}
2020-11-06 11:05:52 +08:00
}
Remove-Item build -Recurse -ErrorAction Ignore
mkdir build
pushd build
2022-02-18 11:30:27 +08:00
# build it according to cmake_cmd, exit 1 when any error occur
function Build([String]$cmake_cmd, [String]$ninja_cmd = "ninja") {
Invoke-Expression $cmake_cmd
# build process may failed because of lnk1181, but be success when run again
$try_times = 2
if ($LastExitCode -eq 0) {
For ($cnt = 0; $cnt -lt $try_times; $cnt++) {
try {
Invoke-Expression $ninja_cmd
if ($LastExitCode -eq 0) {
return
}
} catch {}
}
}
popd
exit 1
}
2020-11-06 11:05:52 +08:00
Remove-Item CMakeCache.txt -ErrorAction Ignore
2022-02-18 11:30:27 +08:00
Build "cmake -G Ninja $CMAKE_ARGS .."
2022-02-18 11:30:27 +08:00
$PRODUCTS = $(Get-ChildItem -Path . -Include "*.exe" -Name)
if ($dynamic_link) {
$PRODUCTS = "$PRODUCTS MNN.dll"
if ($build_converter) {
$PRODUCTS = "$PRODUCTS ./3rd_party/protobuf/cmake/libprotobuf.dll"
}
}
2022-02-18 11:30:27 +08:00
Foreach ($PRODUCT in $PRODUCTS.Trim().Split()) {
Invoke-Expression "cp $PRODUCT $TOOLS_PATH"
}
2020-11-06 11:05:52 +08:00
popd