forked from contentauth/c2pa-rs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup-rust-openssl.ps1
More file actions
149 lines (121 loc) · 6.09 KB
/
setup-rust-openssl.ps1
File metadata and controls
149 lines (121 loc) · 6.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# setup-rust-openssl.ps1
# Script to setup Rust with OpenSSL using Visual Studio tools on GitHub Actions windows-latest image
# Stop on first error
$ErrorActionPreference = "Stop"
Write-Host "Setting up Rust with OpenSSL (MSVC) environment..."
# Define variables
$OPENSSL_VERSION = "3.1.4"
$OPENSSL_DIR = "C:\OpenSSL"
$TEMP_DIR = "C:\openssl_build"
# Detect Visual Studio installation path using vswhere
Write-Host "Detecting Visual Studio installation..."
$vswhere_path = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
if (-Not (Test-Path $vswhere_path)) {
Write-Host "Error: vswhere.exe not found. Please ensure Visual Studio is installed." -ForegroundColor Red
exit 1
}
$vs_installation_path = & $vswhere_path -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
if (-Not $vs_installation_path) {
Write-Host "Error: Could not detect Visual Studio installation. Ensure the required components are installed." -ForegroundColor Red
exit 1
}
$VCVARS_PATH = Join-Path -Path $vs_installation_path -ChildPath "VC\Auxiliary\Build\vcvars64.bat"
if (-Not (Test-Path $VCVARS_PATH)) {
Write-Host "Error: vcvars64.bat not found. Ensure Visual Studio is properly installed." -ForegroundColor Red
exit 1
}
Write-Host "Visual Studio detected at: $vs_installation_path"
Write-Host "Using vcvars64.bat at: $VCVARS_PATH"
# Create directories
New-Item -ItemType Directory -Force -Path $TEMP_DIR | Out-Null
New-Item -ItemType Directory -Force -Path $OPENSSL_DIR | Out-Null
# Change to temp directory
Push-Location $TEMP_DIR
try {
# Download OpenSSL source
Write-Host "Downloading OpenSSL source..."
$openssl_url = "https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz"
Invoke-WebRequest -Uri $openssl_url -OutFile "openssl.tar.gz"
# Extract OpenSSL
Write-Host "Extracting OpenSSL source..."
tar -xf openssl.tar.gz
# Setup Visual Studio environment
Write-Host "Setting up Visual Studio environment..."
cmd.exe /c "call `"$VCVARS_PATH`" && set > %temp%\vcvars.txt"
Get-Content "$env:temp\vcvars.txt" | ForEach-Object {
if ($_ -match "^(.*?)=(.*)$") {
$name = $matches[1]
$value = $matches[2]
[Environment]::SetEnvironmentVariable($name, $value, [EnvironmentVariableTarget]::Process)
}
}
# Add LLVM (clang) to PATH (Ring requires this)
$llvmBin = "C:\Program Files\LLVM\bin"
if (Test-Path $llvmBin) {
Write-Host "Adding LLVM (clang) to PATH: $llvmBin"
$env:PATH = "$llvmBin;$env:PATH"
[Environment]::SetEnvironmentVariable("PATH", "$llvmBin;$([Environment]::GetEnvironmentVariable('PATH', [EnvironmentVariableTarget]::User))", [EnvironmentVariableTarget]::User)
} else {
Write-Host "Warning: LLVM (clang) not found at $llvmBin"
}
# Configure and build OpenSSL
Write-Host "Configuring and building OpenSSL..."
cd "openssl-$OPENSSL_VERSION"
# Configure OpenSSL for MSVC (not MinGW/GNU)
perl Configure VC-WIN64A --prefix=$OPENSSL_DIR --openssldir=$OPENSSL_DIR\ssl
# Set locale environment variables to avoid Perl warnings
[Environment]::SetEnvironmentVariable("LC_ALL", "C", [EnvironmentVariableTarget]::Process)
[Environment]::SetEnvironmentVariable("LANG", "C", [EnvironmentVariableTarget]::Process)
# Set environment variables for Rust
Write-Host "Setting environment variables for Rust..."
[Environment]::SetEnvironmentVariable("OPENSSL_DIR", $OPENSSL_DIR, [EnvironmentVariableTarget]::User)
[Environment]::SetEnvironmentVariable("OPENSSL_LIB_DIR", "$OPENSSL_DIR\lib", [EnvironmentVariableTarget]::User)
[Environment]::SetEnvironmentVariable("OPENSSL_INCLUDE_DIR", "$OPENSSL_DIR\include", [EnvironmentVariableTarget]::User)
# Set for current process as well
$env:OPENSSL_DIR = $OPENSSL_DIR
$env:OPENSSL_LIB_DIR = "$OPENSSL_DIR\lib"
$env:OPENSSL_INCLUDE_DIR = "$OPENSSL_DIR\include"
# Add OpenSSL bin to PATH for DLLs
$current_path = [Environment]::GetEnvironmentVariable("PATH", [EnvironmentVariableTarget]::User)
$new_path = "$OPENSSL_DIR\bin;$current_path"
[Environment]::SetEnvironmentVariable("PATH", $new_path, [EnvironmentVariableTarget]::user)
$env:PATH = "$OPENSSL_DIR\bin;$env:PATH"
# Output summary
Write-Host "`n=== Configuration Summary ===`n"
Write-Host "OpenSSL installed to: $OPENSSL_DIR"
Write-Host "OpenSSL version: $OPENSSL_VERSION"
Write-Host "Rust toolchain: $(rustc --version)"
Write-Host "Environment variables set:"
Write-Host " OPENSSL_DIR = $env:OPENSSL_DIR"
Write-Host " OPENSSL_LIB_DIR = $env:OPENSSL_LIB_DIR"
Write-Host " OPENSSL_INCLUDE_DIR = $env:OPENSSL_INCLUDE_DIR"
Write-Host "`nSetup completed successfully!"
# build with Rust msvc
Write-Host "Building Rust project with msvc toolchain ..."
rustup update stable-msvc
rustup target add x86_64-pc-windows-msvc
cargo build --target=x86_64-pc-windows-msvc --release
# generate zip file with version and platform and add to artifacts folder
$platform = "x86_64-pc-windows-msvc"
$ReleaseDir = "target\$platform\release"
$artifactsDir = "target\artifacts"
$includeDir = "$ReleaseDir\include"
$libDir = "$ReleaseDir\lib"
Write-Host "Reading version from $ReleaseDir\c2pa.h"
$versionLine = Select-String -Path "$ReleaseDir\c2pa.h" -Pattern "^// Version:" | Select-Object -First 1
$version = $versionLine -replace "^// Version: ", ""
New-Item -ItemType Directory -Force -Path $artifactsDir | Out-Null
New-Item -ItemType Directory -Force -Path $includeDir | Out-Null
New-Item -ItemType Directory -Force -Path $libDir | Out-Null
Copy-Item "$ReleaseDir\c2pa.h" $includeDir -Force
Copy-Item "$ReleaseDir\libc2pa_c.*" $libDir -Force
$zipPath = "$artifactsDir\c2pa-v$version-$Platform.zip"
Compress-Archive -Path "$includeDir", "$libDir" -DestinationPath $zipPath -Force
Write-Host "Zip file created: $zipPath"
} catch {
Write-Host "Error: $_" -ForegroundColor Red
exit 1
} finally {
# Return to original directory
Pop-Location
}