mirror of https://github.com/aminya/setup-cpp
Merge branch 'feature/cross-mingw' of https://github.com/abeimler/setup-cpp into feature/cross-mingw
This commit is contained in:
commit
9af05511cb
|
@ -143,6 +143,9 @@ jobs:
|
|||
- "arch.dockerfile"
|
||||
- "fedora.dockerfile"
|
||||
- "ubuntu.dockerfile"
|
||||
- "arch-mingw.dockerfile"
|
||||
- "fedora-mingw.dockerfile"
|
||||
- "ubuntu-mingw.dockerfile"
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
|
|
|
@ -36,8 +36,7 @@ RUN pacman -Syuu --noconfirm && \
|
|||
--cppcheck true \
|
||||
--gcovr true \
|
||||
--doxygen true \
|
||||
--ccache true \
|
||||
--powershell true && \
|
||||
--ccache true && \
|
||||
# arch cleanup
|
||||
pacman -Scc --noconfirm && \
|
||||
rm -rf /var/cache/pacman/pkg/* && \
|
||||
|
@ -46,10 +45,9 @@ RUN pacman -Syuu --noconfirm && \
|
|||
ENTRYPOINT ["/bin/bash"]
|
||||
|
||||
#### Cross Building (example)
|
||||
FROM setup-cpp-arch-mingw AS builder
|
||||
FROM setup-cpp-arch-mingw AS builder-mingw
|
||||
|
||||
COPY ./dev/cpp_vcpkg_project /home/app
|
||||
WORKDIR /home/app
|
||||
RUN bash -c 'source ~/.cpprc \
|
||||
&& task build_cross_mingw'
|
||||
|
|
@ -26,8 +26,8 @@ RUN dnf -y install nodejs npm && \
|
|||
|
||||
ENTRYPOINT ["/bin/bash"]
|
||||
|
||||
#### Building (example)
|
||||
FROM setup-cpp-fedora-mingw AS builder
|
||||
#### Cross Building (example)
|
||||
FROM setup-cpp-fedora-mingw AS builder-mingw
|
||||
|
||||
COPY ./dev/cpp_vcpkg_project /home/app
|
||||
WORKDIR /home/app
|
|
@ -1,7 +1,7 @@
|
|||
import { readFile, writeFile } from "fs/promises"
|
||||
|
||||
async function main() {
|
||||
const dockerFiles = ["ubuntu", "arch", "fedora"]
|
||||
const dockerFiles = ["ubuntu", "arch", "fedora", "ubuntu-mingw", "arch-mingw", "fedora-mingw"]
|
||||
await Promise.all(
|
||||
dockerFiles.map(async (dockerFile) => {
|
||||
const dockerFileContent = await readFile(`./dev/docker/setup-cpp-${dockerFile}.dockerfile`, "utf-8")
|
|
@ -33,10 +33,9 @@ RUN apt-get update -qq && \
|
|||
ENTRYPOINT ["/bin/bash"]
|
||||
|
||||
#### Cross Building (example)
|
||||
FROM setup-cpp-ubuntu-mingw AS builder
|
||||
FROM setup-cpp-ubuntu-mingw AS builder-mingw
|
||||
|
||||
COPY ./dev/cpp_vcpkg_project /home/app
|
||||
WORKDIR /home/app
|
||||
RUN bash -c 'source ~/.cpprc \
|
||||
&& task build_cross_mingw'
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
#### Cross Building (example)
|
||||
FROM setup-cpp-arch-mingw AS builder-mingw
|
||||
|
||||
COPY ./dev/cpp_vcpkg_project /home/app
|
||||
WORKDIR /home/app
|
||||
RUN bash -c 'source ~/.cpprc \
|
||||
&& task build_cross_mingw'
|
|
@ -14,11 +14,3 @@ FROM archlinux:base as runner
|
|||
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
||||
WORKDIR /home/app/
|
||||
ENTRYPOINT ["./my_exe"]
|
||||
|
||||
#### Cross Building (example)
|
||||
FROM setup-cpp-arch-mingw AS builder-mingw
|
||||
|
||||
COPY ./dev/cpp_vcpkg_project /home/app
|
||||
WORKDIR /home/app
|
||||
RUN bash -c 'source ~/.cpprc \
|
||||
&& task build_cross_mingw'
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
#### Cross Building (example)
|
||||
FROM setup-cpp-fedora-mingw AS builder-mingw
|
||||
|
||||
COPY ./dev/cpp_vcpkg_project /home/app
|
||||
WORKDIR /home/app
|
||||
RUN bash -c 'source ~/.cpprc \
|
||||
&& task build_cross_mingw'
|
|
@ -14,11 +14,3 @@ FROM fedora:38 as runner
|
|||
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
||||
WORKDIR /home/app/
|
||||
ENTRYPOINT ["./my_exe"]
|
||||
|
||||
#### Cross Building (example)
|
||||
FROM setup-cpp-fedora-mingw AS builder-mingw
|
||||
|
||||
COPY ./dev/cpp_vcpkg_project /home/app
|
||||
WORKDIR /home/app
|
||||
RUN bash -c 'source ~/.cpprc \
|
||||
&& task build_cross_mingw'
|
|
@ -0,0 +1,28 @@
|
|||
## base image
|
||||
FROM archlinux:base as setup-cpp-arch-mingw
|
||||
|
||||
RUN pacman -Syuu --noconfirm && \
|
||||
pacman-db-upgrade && \
|
||||
# install nodejs
|
||||
pacman -S --noconfirm --needed nodejs npm && \
|
||||
# install setup-cpp
|
||||
npm install -g setup-cpp@v0.32.1 && \
|
||||
# install the compiler and tools
|
||||
setup-cpp \
|
||||
--compiler mingw \
|
||||
--cmake true \
|
||||
--ninja true \
|
||||
--task true \
|
||||
--vcpkg true \
|
||||
--python true \
|
||||
--make true \
|
||||
--cppcheck true \
|
||||
--gcovr true \
|
||||
--doxygen true \
|
||||
--ccache true && \
|
||||
# arch cleanup
|
||||
pacman -Scc --noconfirm && \
|
||||
rm -rf /var/cache/pacman/pkg/* && \
|
||||
rm -rf /tmp/*
|
||||
|
||||
ENTRYPOINT ["/bin/bash"]
|
|
@ -0,0 +1,26 @@
|
|||
## base image
|
||||
FROM fedora:38 as setup-cpp-fedora-mingw
|
||||
|
||||
# install nodejs
|
||||
RUN dnf -y install nodejs npm && \
|
||||
# install setup-cpp
|
||||
npm install -g setup-cpp@v0.32.1 && \
|
||||
# install the compiler and tools
|
||||
setup-cpp \
|
||||
--compiler mingw \
|
||||
--cmake true \
|
||||
--ninja true \
|
||||
--task true \
|
||||
--vcpkg true \
|
||||
--python true \
|
||||
--make true \
|
||||
--cppcheck true \
|
||||
--gcovr true \
|
||||
--doxygen true \
|
||||
--ccache true \
|
||||
--powershell true && \
|
||||
# cleanup
|
||||
dnf clean all && \
|
||||
rm -rf /tmp/*
|
||||
|
||||
ENTRYPOINT ["/bin/bash"]
|
|
@ -0,0 +1,32 @@
|
|||
#### Base Image
|
||||
FROM ubuntu:22.04 as setup-cpp-ubuntu-mingw
|
||||
|
||||
RUN apt-get update -qq && \
|
||||
# install nodejs
|
||||
apt-get install -y --no-install-recommends nodejs npm && \
|
||||
# install setup-cpp
|
||||
npm install -g setup-cpp@v0.32.1 && \
|
||||
# install the compiler and tools
|
||||
setup-cpp \
|
||||
--nala true \
|
||||
--compiler mingw \
|
||||
--cmake true \
|
||||
--ninja true \
|
||||
--task true \
|
||||
--vcpkg true \
|
||||
--python true \
|
||||
--make true \
|
||||
--cppcheck true \
|
||||
--gcovr true \
|
||||
--doxygen true \
|
||||
--ccache true \
|
||||
--powershell true && \
|
||||
# cleanup
|
||||
nala autoremove -y && \
|
||||
nala autopurge -y && \
|
||||
apt-get clean && \
|
||||
nala clean --lists && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
rm -rf /tmp/*
|
||||
|
||||
ENTRYPOINT ["/bin/bash"]
|
|
@ -0,0 +1,7 @@
|
|||
#### Cross Building (example)
|
||||
FROM setup-cpp-ubuntu-mingw AS builder-mingw
|
||||
|
||||
COPY ./dev/cpp_vcpkg_project /home/app
|
||||
WORKDIR /home/app
|
||||
RUN bash -c 'source ~/.cpprc \
|
||||
&& task build_cross_mingw'
|
|
@ -14,11 +14,3 @@ FROM ubuntu:22.04 as runner
|
|||
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
||||
WORKDIR /home/app/
|
||||
ENTRYPOINT ["./my_exe"]
|
||||
|
||||
#### Cross Building (example)
|
||||
FROM setup-cpp-ubuntu-mingw AS builder-mingw
|
||||
|
||||
COPY ./dev/cpp_vcpkg_project /home/app
|
||||
WORKDIR /home/app
|
||||
RUN bash -c 'source ~/.cpprc \
|
||||
&& task build_cross_mingw'
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
14
package.json
14
package.json
|
@ -55,19 +55,19 @@
|
|||
"test.lint.eslint": "eslint **/*.{ts,tsx,js,jsx,cjs,mjs,json,yaml} --no-error-on-unmatched-pattern --cache --cache-location ./.cache/eslint/",
|
||||
"test.lint.prettier": "prettier . --check",
|
||||
"test.unit": "jest --runInBand",
|
||||
"build.docker_tests": "pnpm build && node ./dev/scripts/generate-docker-tests.mjs",
|
||||
"build.docker_tests": "pnpm build && node ./dev/docker/__tests__/generate-docker-tests.mjs",
|
||||
"build.docker.arch": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/arch.dockerfile -t setup-cpp:arch .",
|
||||
"build.docker.fedora": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/fedora.dockerfile -t setup-cpp:fedora .",
|
||||
"build.docker.ubuntu": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/ubuntu.dockerfile -t setup-cpp:ubuntu .",
|
||||
"build.docker.arch.mingw": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/arch.mingw.dockerfile -t setup-cpp:arch-mingw .",
|
||||
"build.docker.fedora.mingw": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/fedora.mingw.dockerfile -t setup-cpp:fedora-mingw .",
|
||||
"build.docker.ubuntu.mingw": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/ubuntu.mingw.dockerfile -t setup-cpp:ubuntu-mingw .",
|
||||
"build.docker.arch.mingw": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/arch-mingw.dockerfile -t setup-cpp:arch-mingw .",
|
||||
"build.docker.fedora.mingw": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/fedora-mingw.dockerfile -t setup-cpp:fedora-mingw .",
|
||||
"build.docker.ubuntu.mingw": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/ubuntu-mingw.dockerfile -t setup-cpp:ubuntu-mingw .",
|
||||
"test.docker.arch": "pnpm build.docker.arch && container-structure-test test --image setup-cpp:arch --config ./dev/docker/__tests__/arch.yml",
|
||||
"test.docker.fedora": "pnpm build.docker.fedora && container-structure-test test --image setup-cpp:fedora --config ./dev/docker/__tests__/fedora.yml",
|
||||
"test.docker.ubuntu": "pnpm build.docker.ubuntu && container-structure-test test --image setup-cpp:ubuntu --config ./dev/docker/__tests__/ubuntu.yml",
|
||||
"test.docker.arch.mingw": "pnpm build.docker.arch.mingw && container-structure-test test --image setup-cpp:arch-mingw --config ./dev/docker/__tests__/arch.mingw.yml",
|
||||
"test.docker.fedora.mingw": "pnpm build.docker.fedora.mingw && container-structure-test test --image setup-cpp:fedora-mingw --config ./dev/docker/__tests__/fedora.mingw.yml",
|
||||
"test.docker.ubuntu.mingw": "pnpm build.docker.ubuntu.mingw && container-structure-test test --image setup-cpp:ubuntu-mingw --config ./dev/docker/__tests__/ubuntu.mingw.yml"
|
||||
"test.docker.arch.mingw": "pnpm build.docker.arch.mingw && container-structure-test test --image setup-cpp:arch-mingw --config ./dev/docker/__tests__/arch-mingw.yml",
|
||||
"test.docker.fedora.mingw": "pnpm build.docker.fedora.mingw && container-structure-test test --image setup-cpp:fedora-mingw --config ./dev/docker/__tests__/fedora-mingw.yml",
|
||||
"test.docker.ubuntu.mingw": "pnpm build.docker.ubuntu.mingw && container-structure-test test --image setup-cpp:ubuntu-mingw --config ./dev/docker/__tests__/ubuntu-mingw.yml"
|
||||
},
|
||||
"prettier": "prettier-config-atomic",
|
||||
"devDependencies": {
|
||||
|
|
|
@ -60,8 +60,12 @@ export async function installCompiler(
|
|||
case "mingw":
|
||||
case "cygwin":
|
||||
case "msys": {
|
||||
const gccVersion = (compiler === "mingw")? getVersion("mingw", version, osVersion) : getVersion("gcc", version, osVersion)
|
||||
const installationInfo = (compiler === "mingw")? await setupMingw(gccVersion, join(setupCppDir, "gcc"), arch) : await setupGcc(gccVersion, join(setupCppDir, "gcc"), arch)
|
||||
const gccVersion =
|
||||
compiler === "mingw" ? getVersion("mingw", version, osVersion) : getVersion("gcc", version, osVersion)
|
||||
const installationInfo =
|
||||
compiler === "mingw"
|
||||
? await setupMingw(gccVersion, join(setupCppDir, "gcc"), arch)
|
||||
: await setupGcc(gccVersion, join(setupCppDir, "gcc"), arch)
|
||||
|
||||
if (hasLLVM) {
|
||||
// remove back the added CPPFLAGS of LLVM that include the LLVM headers
|
||||
|
|
|
@ -153,9 +153,7 @@ export async function setupMingw(version: string, setupDir: string, arch: string
|
|||
if (isArch()) {
|
||||
installationInfo = await setupPacmanPack("mingw-w64-gcc", version)
|
||||
} else if (hasDnf()) {
|
||||
installationInfo = await setupDnfPack([
|
||||
{ name: "mingw64-gcc", version },
|
||||
])
|
||||
installationInfo = await setupDnfPack([{ name: "mingw64-gcc", version }])
|
||||
} else if (isUbuntu()) {
|
||||
installationInfo = await setupAptPack([
|
||||
{ name: "mingw-w64", version, repositories: ["ppa:ubuntu-toolchain-r/test"] },
|
||||
|
|
|
@ -2,6 +2,7 @@ import { InstallationInfo } from "./setupBin"
|
|||
import { execRootSync } from "admina"
|
||||
import { info, warning } from "ci-log"
|
||||
import { execa, execaSync } from "execa"
|
||||
import which from "which"
|
||||
|
||||
/* eslint-disable require-atomic-updates */
|
||||
let didUpdate: boolean = false
|
||||
|
@ -13,6 +14,11 @@ export async function setupPacmanPack(name: string, version?: string, aur?: stri
|
|||
|
||||
const pacman = "pacman"
|
||||
|
||||
if (aur === "yay" && which.sync("yay", { nothrow: true }) === null) {
|
||||
// TODO: install yay automatically
|
||||
throw new Error(`yay is needed for ${name}, but it is not installed, please install it manually first`)
|
||||
}
|
||||
|
||||
// yay can't run as root, so skip update
|
||||
if (!didUpdate && aur !== "yay") {
|
||||
execRootSync(pacman, ["-Sy", "--noconfirm"])
|
||||
|
|
|
@ -28,5 +28,10 @@
|
|||
"outDir": "./dist"
|
||||
},
|
||||
"compileOnSave": false,
|
||||
"include": ["./src", "dev/scripts", "packages/untildify-user/untildify.ts"]
|
||||
"include": [
|
||||
"./src",
|
||||
"dev/scripts",
|
||||
"packages/untildify-user/untildify.ts",
|
||||
"dev/docker/__tests__/generate-docker-tests.mjs"
|
||||
]
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue