diff options
Diffstat (limited to '')
-rw-r--r-- | action.yml | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/action.yml b/action.yml new file mode 100644 index 0000000..77afb1b --- /dev/null +++ b/action.yml @@ -0,0 +1,133 @@ +name: Install MinGW +description: Install MinGW-w64 + +inputs: + platform: + description: Target platform + required: false + default: x64 + cygwin: + description: Install inside Cygwin + required: false + default: 0 + static: + description: Enable static linking workaround + required: False + default: 1 + +outputs: + prefix: + description: Cross-compilation toolchain prefix + value: '${{ steps.setup.outputs.prefix }}' + gcc: + description: gcc binary name + value: '${{ steps.setup.outputs.gcc }}' + gxx: + description: g++ binary name + value: '${{ steps.setup.outputs.gxx }}' + windres: + description: windres binary name + value: '${{ steps.setup.outputs.windres }}' + +runs: + using: composite + steps: + - id: setup + run: | + $x64 = '${{ inputs.platform }}' -eq 'x64' + $cygwin = '${{ inputs.cygwin }}' -eq '1' + $static_workaround = '${{ inputs.static }}' -eq '1' + + $prefix32 = 'i686-w64-mingw32' + $prefix64 = 'x86_64-w64-mingw32' + $prefix = if ($x64) { $prefix64 } else { $prefix32 } + + if ('${{ runner.os }}' -eq 'Linux') { + # ------------------------------------------------------------- + # Ubuntu + # ------------------------------------------------------------- + sudo apt install mingw-w64 + + # Make the compilers use the POSIX threading model, whatever that + # is. Without it, the stuff from <mutex>/<thread>/etc. doesn't + # compile. Of course, it makes the binaries depend on + # libwinpthread-1.dll, but what you gonna do? + + sudo update-alternatives --set "$prefix32-gcc" "/usr/bin/$prefix32-gcc-posix" + sudo update-alternatives --set "$prefix32-g++" "/usr/bin/$prefix32-g++-posix" + sudo update-alternatives --set "$prefix64-gcc" "/usr/bin/$prefix64-gcc-posix" + sudo update-alternatives --set "$prefix64-g++" "/usr/bin/$prefix64-g++-posix" + + if ($static_workaround) { + sudo rm ` + "/usr/$prefix32/lib/libpthread.dll.a" ` + "/usr/$prefix32/lib/libwinpthread.dll.a" ` + "/usr/$prefix64/lib/libpthread.dll.a" ` + "/usr/$prefix64/lib/libwinpthread.dll.a" + } + } elseif ('${{ runner.os }}' -eq 'Windows') { + if ($cygwin) { + # ------------------------------------------------------------- + # Cygwin + # ------------------------------------------------------------- + $cygwin_pkg = if ($x64) { 'mingw64-x86_64-gcc-g++' } else { 'mingw64-i686-gcc-g++' } + choco.exe install -y --no-progress --source=cygwin $cygwin_pkg + + if ($static_workaround) { + $cygwin_lib = Join-Path C: tools cygwin usr $prefix sys-root mingw lib + Remove-Item (Join-Path $cygwin_lib 'libpthread.dll.a') + Remove-Item (Join-Path $cygwin_lib 'libwinpthread.dll.a') + } + } else { + # ------------------------------------------------------------- + # Windows + # ------------------------------------------------------------- + $mingw32 = 'mingw32' + $mingw64 = 'mingw64' + $mingw = if ($x64) { $mingw64 } else { $mingw32 } + + $mingw_install = Join-Path C: ProgramData chocolatey lib mingw tools install + + $mingw32_root = Join-Path $mingw_install $mingw32 + $mingw64_root = Join-Path $mingw_install $mingw64 + $mingw_root = Join-Path $mingw_install $mingw + + $mingw32_bin = Join-Path $mingw32_root bin + $mingw64_bin = Join-Path $mingw64_root bin + $mingw_bin = Join-Path $mingw_root bin + + $mingw_lib = Join-Path $mingw_root $prefix lib + + if ($x64) { + # Assuming the 64-bit version is installed. If 32-bit + # version is installed, we won't detect that. But it's not + # _that_ important, and we save a lot of time. + choco.exe install -y --no-progress mingw + echo $mingw64_bin >> $env:GITHUB_PATH + } else { + # Assuming the 64-bit version is installed. + choco.exe uninstall -y --no-progress mingw + choco.exe install -y --no-progress --x86 mingw + echo $mingw32_bin >> $env:GITHUB_PATH + } + + if ($static_workaround) { + Remove-Item (Join-Path $mingw_lib 'libpthread.dll.a') + Remove-Item (Join-Path $mingw_lib 'libwinpthread.dll.a') + } + } + } + + $gcc = $prefix + '-gcc' + $gxx = $prefix + '-g++' + $windres = $prefix = '-windres' + + echo "::set-output name=prefix::$prefix" + echo "::set-output name=gcc::$gcc" + echo "::set-output name=gxx::$gxx" + echo "::set-output name=windres::$windres" + shell: pwsh + +branding: + icon: star + color: green |