diff --git a/platforms/winrt/build_all.bat b/platforms/winrt/build_all.bat new file mode 100644 index 0000000000..c46a6131be --- /dev/null +++ b/platforms/winrt/build_all.bat @@ -0,0 +1,86 @@ +@echo off + + +set FOUND_VC=0 + +if defined VS120COMNTOOLS ( + set VSTOOLS="%VS120COMNTOOLS%" + set VC_VER=120 + set FOUND_VC=1 +) + +set VSTOOLS=%VSTOOLS:"=% +set "VSTOOLS=%VSTOOLS:\=/%" + +set VSVARS="%VSTOOLS%vsvars32.bat" + +if not defined VSVARS ( + echo Can't find VC2013 installed! + goto ERROR +) + + +echo./* +echo. * Building OpenCV +echo. */ +echo. + + +call %VSVARS% + +if %FOUND_VC%==1 ( + call:DoMSBuild ..\..\bin\WP\8.1\x86\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WP\8.1\x86\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WP\8.1\x86\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WP\8.1\x86\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WP\8.1\ARM\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WP\8.1\ARM\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WP\8.1\ARM\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WP\8.1\ARM\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WS\8.1\x86\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WS\8.1\x86\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WS\8.1\x86\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WS\8.1\x86\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WS\8.1\ARM\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WS\8.1\ARM\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WS\8.1\ARM\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WS\8.1\ARM\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WP\8.0\x86\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WP\8.0\x86\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WP\8.0\x86\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WP\8.0\x86\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WP\8.0\ARM\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WP\8.0\ARM\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WP\8.0\ARM\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WP\8.0\ARM\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WS\8.0\x86\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WS\8.0\x86\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WS\8.0\x86\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WS\8.0\x86\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WS\8.0\ARM\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WS\8.0\ARM\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WS\8.0\ARM\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WS\8.0\ARM\INSTALL.vcxproj Release +) + +echo.&goto:EOF + + +::-------------------------------------------------------- +::-- DoMSBuild +::-------------------------------------------------------- +:DoMSBuild +msbuild %~1 /p:Configuration="%~2" /m +@if errorlevel 1 goto :ERROR +goto:EOF + +:ERROR +pause +:EOF \ No newline at end of file diff --git a/platforms/winrt/readme.txt b/platforms/winrt/readme.txt new file mode 100644 index 0000000000..664be599f1 --- /dev/null +++ b/platforms/winrt/readme.txt @@ -0,0 +1,103 @@ +Building OpenCV from Source, using CMake and Command Line +========================================================= + +Requirements +============ +CMake 3.1.0 or higher +Windows Phone/Store 8.1 Visual Studio 2013 +Windows Phone/Store 8.0 Visual Studio 2012 + +For example, to be able to build all Windows Phone and Windows Store projects install the following: + +Install Visual Studio 2013 Community Edition + http://go.microsoft.com/?linkid=9863608 + +Install Visual Studio Express 2012 for Windows Desktop + http://www.microsoft.com/en-us/download/details.aspx?id=34673 + + + +To create all Windows Phone (8.0, 8.1) and Windows Store (8.0, 8.1) Visual Studio projects +========================================================================================== +cd opencv/platforms/winrt +setup_winrt.bat "WP,WS" "8.0,8.1" "x86,ARM" + +If everything's fine, a few minutes later you will get the following output in the opencv/bin directory: + +bin + WP + 8.0 + ARM + x86 + 8.1 + ARM + x86 + WS + 8.0 + ARM + x86 + 8.1 + ARM + x86 + +Build the OpenCV.sln for the particular platform you are targeting. Due to the current limitations of CMake, separate x86/x64/ARM projects must be generated for each platform. + +You can also target a single specific configuration + setup_winrt.bat "WP" "8.1" "x86" + +Or a subset of configurations + setup_winrt.bat "WP,WS" "8.1" "x86" + +To display the command line options for setup_winrt.bat + setup_winrt.bat -h + +Note that x64 CMake generation support is as follows: +------------------------------ +Platform\Version | 8.0 | 8.1 | +-----------------|-----|-----| +Windows Phone | No | No | +Windows Store | Yes | Yes | + +Note: setup_winrt.bat calls the unsigned PowerShell script with the -ExecutionPolicy Unrestricted option. + + +CMake command line options for Windows Phone and Store +====================================================== + +cmake [options] + +Windows Phone 8.1 x86 +cmake -G "Visual Studio 12 2013" -DCMAKE_SYSTEM_NAME=WindowsPhone -DCMAKE_SYSTEM_VERSION=8.1 + +Windows Phone 8.1 ARM +cmake -G "Visual Studio 12 2013 ARM" -DCMAKE_SYSTEM_NAME=WindowsPhone -DCMAKE_SYSTEM_VERSION=8.1 + +Windows Store 8.1 x86 +cmake -G "Visual Studio 12 2013" -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=8.1 + +Windows Store 8.1 ARM +cmake -G "Visual Studio 12 2013 ARM" -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=8.1 + +Note: For Windows 8.0 Phone and Store you can specify either Visual Studio 11 2012 or Visual Studio 12 2013 as the generator + +Windows Phone 8.0 x86 +cmake -G "Visual Studio 12 2013" -DCMAKE_SYSTEM_NAME=WindowsPhone -DCMAKE_SYSTEM_VERSION=8.0 + +Windows Phone 8.0 ARM +cmake -G "Visual Studio 12 2013 ARM" -DCMAKE_SYSTEM_NAME=WindowsPhone -DCMAKE_SYSTEM_VERSION=8.0 + +Windows Store 8.0 x86 +cmake -G "Visual Studio 12 2013" -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=8.0 + +Windows Store 8.0 ARM +cmake -G "Visual Studio 12 2013 ARM" -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=8.0 + +Example +======= + +To generate Windows Phone 8.1 x86 project files in the opencv/bin dir + +mkdir bin +cd bin +cmake -G "Visual Studio 12 2013" -DCMAKE_SYSTEM_NAME=WindowsPhone -DCMAKE_SYSTEM_VERSION=8.1 ../ + diff --git a/platforms/winrt/setup_winrt.bat b/platforms/winrt/setup_winrt.bat new file mode 100644 index 0000000000..3268bcf602 --- /dev/null +++ b/platforms/winrt/setup_winrt.bat @@ -0,0 +1,2 @@ +@echo off +Powershell.exe -ExecutionPolicy Unrestricted -File setup_winrt.ps1 %* diff --git a/platforms/winrt/setup_winrt.ps1 b/platforms/winrt/setup_winrt.ps1 new file mode 100644 index 0000000000..f886545b14 --- /dev/null +++ b/platforms/winrt/setup_winrt.ps1 @@ -0,0 +1,331 @@ +<# +Copyright © Microsoft Open Technologies, Inc. +All Rights Reserved +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. + +You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, +FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache 2 License for the specific language governing permissions and limitations under the License. +#> + +[CmdletBinding()] +Param( + [parameter(Mandatory=$False)] + [switch] + $HELP, + + [parameter(Mandatory=$False)] + [switch] + $BUILD, + + [parameter(Mandatory=$False)] + [Array] + [ValidateNotNull()] + $PLATFORMS_IN = "WP", + + [parameter(Mandatory=$False)] + [Array] + [ValidateNotNull()] + $VERSIONS_IN = "8.1", + + [parameter(Mandatory=$False)] + [Array] + [ValidateNotNull()] + $ARCHITECTURES_IN = "x86", + + [parameter(Mandatory=$False)] + [String] + [ValidateNotNull()] + [ValidateSet("Visual Studio 12 2013","Visual Studio 11 2012")] + $GENERATOR = "Visual Studio 12 2013", + + [parameter(Mandatory=$False)] + [String] + $INSTALL +) + + +Function L() { + Param( + [parameter(Mandatory=$true)] + [String] + [ValidateNotNull()] + $str + ) + + Write-Host "INFO> $str" +} + +Function D() { + Param( + [parameter(Mandatory=$true)] + [String] + [ValidateNotNull()] + $str + ) + + # Use this trigger to toggle debug output + [bool]$debug = $true + + if ($debug) { + Write-Host "DEBUG> $str" + } +} + +function Get-Batchfile ($file) { + $cmd = "`"$file`" & set" + cmd /c $cmd | Foreach-Object { + $p, $v = $_.split('=') + Set-Item -path env:$p -value $v + } +} + +# Enables access to Visual Studio variables via "vsvars32.bat" +function Set-VS12() +{ + Try { + $vs12comntools = (Get-ChildItem env:VS120COMNTOOLS).Value + $batchFile = [System.IO.Path]::Combine($vs12comntools, "vsvars32.bat") + Get-Batchfile $BatchFile + [System.Console]::Title = "Visual Studio 2010 Windows PowerShell" + } Catch { + $ErrorMessage = $_.Exception.Message + L "Error: $ErrorMessage" + return $false + } + return $true +} + +# Executes msbuild to build or install projects +# Throws Exception on error +function Call-MSBuild($path, $config) +{ + $command = "msbuild $path /p:Configuration='$config' /m" + L "Executing: $($command)" + msbuild $path /p:Configuration="$config" /m + + if(-Not $?) { + Throw "Failure executing command: $($command)" + } + + return $true +} + +Function Execute() { + If ($HELP.IsPresent) { + ShowHelp + } + + # Validating arguments. + # This type of validation (rather than using ValidateSet()) is required to make .bat wrapper work + + D "Input Platforms: $PLATFORMS_IN" + $platforms = New-Object System.Collections.ArrayList + $PLATFORMS_IN.Split("," ,[System.StringSplitOptions]::RemoveEmptyEntries) | ForEach { + $_ = $_.Trim() + if ("WP","WS" -Contains $_) { + [void]$platforms.Add($_) + D "$_ is valid" + } else { + Throw "$($_) is not valid! Please use WP, WS" + } + } + D "Processed Platforms: $platforms" + + D "Input Versions: $VERSIONS_IN" + $versions = New-Object System.Collections.ArrayList + $VERSIONS_IN.Split("," ,[System.StringSplitOptions]::RemoveEmptyEntries) | ForEach { + $_ = $_.Trim() + if ("8.0","8.1" -Contains $_) { + [void]$versions.Add($_) + D "$_ is valid" + } else { + Throw "$($_) is not valid! Please use 8.0, 8.1" + } + } + D "Processed Versions: $versions" + + D "Input Architectures: $ARCHITECTURES_IN" + $architectures = New-Object System.Collections.ArrayList + $ARCHITECTURES_IN.Split("," ,[System.StringSplitOptions]::RemoveEmptyEntries) | ForEach { + $_ = $_.Trim() + if ("x86","x64","ARM" -Contains $_) { + $architectures.Add($_) > $null + D "$_ is valid" + } else { + Throw "$($_) is not valid! Please use x86, x64, ARM" + } + } + D "Processed Architectures: $architectures" + + # Assuming we are in '/platforms/winrt' we should move up to sources root directory + Push-Location ../../ + + $SRC = Get-Location + + $def_architectures = @{ + "x86" = ""; + "x64" = " Win64" + "arm" = " ARM" + } + + # Setting up Visual Studio variables to enable build + $shouldBuid = $false + If ($BUILD.IsPresent) { + $shouldBuild = Set-VS12 + } + + foreach($plat in $platforms) { + # Set proper platform name. + $platName = "" + Switch ($plat) { + "WP" { $platName = "WindowsPhone" } + "WS" { $platName = "WindowsStore" } + } + + foreach($vers in $versions) { + + foreach($arch in $architectures) { + + # Set proper architecture. For MSVS this is done by selecting proper generator + $genName = $GENERATOR + Switch ($arch) { + "ARM" { $genName = $GENERATOR + $def_architectures['arm'] } + "x64" { $genName = $GENERATOR + $def_architectures['x64'] } + } + + # Constructing path to the install binaries + # Creating these binaries will be done by building CMake-generated INSTALL project from Visual Studio + $installPath = "$SRC\bin\install\$plat\$vers\$arch" + if ($INSTALL) { + # Do not add architrecture to the path since it will be added by OCV CMake logic + $installPath = "$SRC\$INSTALL\$plat\$vers" + } + + $path = "$SRC\bin\$plat\$vers\$arch" + + L "-----------------------------------------------" + L "Target:" + L " Directory: $path" + L " Platform: $platName" + L " Version: $vers" + L " Architecture: $arch" + L " Generator: $genName" + L " Install Directory: $installPath" + + # Delete target directory if exists to ensure that CMake cache is cleared out. + If (Test-Path $path) { + Remove-Item -Recurse -Force $path + } + + # Validate if required directory exists, create if it doesn't + New-Item -ItemType Directory -Force -Path $path + + # Change location to the respective subdirectory + Push-Location -Path $path + + L "Generating project:" + L "cmake -G $genName -DCMAKE_SYSTEM_NAME:String=$platName -DCMAKE_SYSTEM_VERSION:String=$vers -DCMAKE_VS_EFFECTIVE_PLATFORMS:String=$arch -DCMAKE_INSTALL_PREFIX:PATH=$installPath $SRC" + cmake -G $genName -DCMAKE_SYSTEM_NAME:String=$platName -DCMAKE_SYSTEM_VERSION:String=$vers -DCMAKE_VS_EFFECTIVE_PLATFORMS:String=$arch -DCMAKE_INSTALL_PREFIX:PATH=$installPath $SRC + L "-----------------------------------------------" + + # REFERENCE: + # Executed from '$SRC/bin' folder. + # Targeting x86 WindowsPhone 8.1. + # cmake -G "Visual Studio 12 2013" -DCMAKE_SYSTEM_NAME:String=WindowsPhone -DCMAKE_SYSTEM_VERSION:String=8.1 .. + + + # Building and installing project + Try { + If ($shouldBuild) { + L "Building and installing project:" + + Call-MSBuild "OpenCV.sln" "Debug" + Call-MSBuild "INSTALL.vcxproj" "Debug" + + Call-MSBuild "OpenCV.sln" "Release" + Call-MSBuild "INSTALL.vcxproj" "Release" + } + } Catch { + $ErrorMessage = $_.Exception.Message + L "Error: $ErrorMessage" + + # Exiting at this point will leave command line pointing at the erroneous configuration directory + exit + } + + # Return back to Sources folder + Pop-Location + } + } + } + + # Return back to Script folder + Pop-Location +} + +Function ShowHelp() { + Write-Host "Configures OpenCV and generates projects for specified verion of Visual Studio/platforms/architectures." + Write-Host "Must be executed from the sources folder containing main CMakeLists configuration." + Write-Host "Parameter keys can be shortened down to a signle symbol (e.g. '-a') and are not case sensitive." + Write-Host "Proper parameter sequensing is required when omitting keys." + Write-Host "Generates the following folder structure, depending on the supplied parameters: " + Write-Host " bin/ " + Write-Host " | " + Write-Host " |-WP " + Write-Host " | ... " + Write-Host " |-WinRT " + Write-Host " | |-8.0 " + Write-Host " | |-8.1 " + Write-Host " | | |-x86 " + Write-Host " | | |-x64 " + Write-Host " | | |-ARM " + Write-Host " " + Write-Host " USAGE: " + Write-Host " Calling:" + Write-Host " PS> setup_winrt.ps1 [params]" + Write-Host " cmd> setup_winrt.bat [params]" + Write-Host " cmd> PowerShell.exe -ExecutionPolicy Unrestricted -File setup_winrt.ps1 [params]" + Write-Host " Parameters:" + Write-Host " setup_winrt [options] [platform] [version] [architecture] [generator] [install-path]" + Write-Host " setup_winrt -b 'WP' 'x86,ARM' " + Write-Host " setup_winrt -architecture x86 -platform WP " + Write-Host " setup_winrt -arc x86 -plat 'WP,WS' " + Write-Host " setup_winrt -a x86 -g 'Visual Studio 11 2012' -pl WP " + Write-Host " WHERE: " + Write-Host " options - Options to call " + Write-Host " -h: diplays command line help " + Write-Host " -b: builds BUILD_ALL and INSTALL projects for each generated configuration in both Debug and Release modes." + Write-Host " platform - Array of target platforms. " + Write-Host " Default: WP " + Write-Host " Example: 'WS,WP' " + Write-Host " Options: WP, WS ('WindowsPhone', 'WindowsStore'). " + Write-Host " Note that you'll need to use quotes to specify more than one platform. " + Write-Host " version - Array of platform versions. " + Write-Host " Default: 8.1 " + Write-Host " Example: '8.0,8.1' " + Write-Host " Options: 8.0, 8.1. Available options may be limited depending on your local setup (e.g. SDK availability). " + Write-Host " Note that you'll need to use quotes to specify more than one version. " + Write-Host " architecture - Array of target architectures to build for. " + Write-Host " Default: x86 " + Write-Host " Example: 'ARM,x64' " + Write-Host " Options: x86, ARM, x64. Available options may be limited depending on your local setup. " + Write-Host " Note that you'll need to use quotes to specify more than one architecture. " + Write-Host " generator - Visual Studio instance used to generate the projects. " + Write-Host " Default: Visual Studio 12 2013 " + Write-Host " Example: 'Visual Studio 11 2012' " + Write-Host " Use 'cmake --help' to find all available option on your machine. " + Write-Host " install-path - Path to install binaries (relative to the sources directory). " + Write-Host " Default: \bin\install\\\ " + Write-Host " Example: '../install' " + + Exit +} + +Execute \ No newline at end of file