95 Commits

Author SHA1 Message Date
Michael Davidsaver
261f218e09 use cpu_count when available
Some checks failed
ci-scripts build/test / cross linux-aarch64 / / default (push) Successful in 2m6s
ci-scripts build/test / cross RTEMS-pc386-qemu@4.10 / / default (push) Successful in 2m46s
ci-scripts build/test / cross RTEMS-pc386-qemu@4.9 / / default (push) Successful in 2m42s
ci-scripts build/test / cross linux-arm@arm-linux-gnueabi / / default (push) Successful in 2m17s
ci-scripts build/test / cross linux-arm@arm-linux-gnueabihf / / default (push) Successful in 2m42s
ci-scripts build/test / cross linux-ppc / / default (push) Successful in 3m11s
ci-scripts build/test / cross linux-ppc64 / / default (push) Successful in 2m8s
ci-scripts build/test / cross RTEMS-pc686-qemu@5 / / default (push) Successful in 4m26s
ci-scripts build/test / cross win32-x86-mingw / / default (push) Successful in 2m10s
ci-scripts build/test / cross windows-x64-mingw / / default (push) Successful in 2m19s
ci-scripts build/test / Unit tests on macos-14 (push) Has been cancelled
ci-scripts build/test / Unit tests on macos-15 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / macos-14 (push) Has been cancelled
ci-scripts build/test / clang / debug / macos-15 (push) Has been cancelled
ci-scripts build/test / clang / default / macos-14 (push) Has been cancelled
ci-scripts build/test / clang / default / macos-15 (push) Has been cancelled
ci-scripts build/test / gcc / debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / debug / windows-2025 (push) Has been cancelled
ci-scripts build/test / gcc / default / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / default / windows-2025 (push) Has been cancelled
ci-scripts build/test / vs2022 / static-debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / static-debug / windows-2025 (push) Has been cancelled
ci-scripts build/test / Unit tests on windows-2022 (push) Has been cancelled
ci-scripts build/test / Unit tests on windows-2025 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / static / windows-2025 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / windows-2025 (push) Has been cancelled
ci-scripts build/test / vs2022 / debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / debug / windows-2025 (push) Has been cancelled
ci-scripts build/test / vs2022 / default / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / default / windows-2025 (push) Has been cancelled
ci-scripts build/test / vs2022 / static / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / static / windows-2025 (push) Has been cancelled
2025-11-18 10:41:49 +01:00
Ralph Lange
a096fe1b76 ci: remove macos-13 from GHA workflow
GitHub announcement:
The macOS 13 runner image will be retired by December 4th, 2025
2025-11-18 10:32:59 +01:00
Ralph Lange
63f979bf5c test: fix default branch name for MCoreUtils 2025-11-18 10:28:37 +01:00
Ralph Lange
4e4f33e54f ci: update GHA examples
Some checks failed
ci-scripts build/test / cross linux-aarch64 / / default (push) Successful in 2m56s
ci-scripts build/test / cross linux-arm@arm-linux-gnueabihf / / default (push) Successful in 2m52s
ci-scripts build/test / cross linux-arm@arm-linux-gnueabi / / default (push) Successful in 3m15s
ci-scripts build/test / cross RTEMS-pc386-qemu@4.9 / / default (push) Successful in 3m25s
ci-scripts build/test / cross RTEMS-pc386-qemu@4.10 / / default (push) Successful in 3m45s
ci-scripts build/test / cross linux-ppc64 / / default (push) Successful in 3m29s
ci-scripts build/test / cross linux-ppc / / default (push) Successful in 3m58s
ci-scripts build/test / cross windows-x64-mingw / / default (push) Successful in 4m25s
ci-scripts build/test / cross win32-x86-mingw / / default (push) Successful in 4m31s
ci-scripts build/test / cross RTEMS-pc686-qemu@5 / / default (push) Successful in 5m32s
ci-scripts build/test / Unit tests on macos-13 (push) Has been cancelled
ci-scripts build/test / Unit tests on macos-14 (push) Has been cancelled
ci-scripts build/test / Unit tests on macos-15 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / Unit tests on windows-2022 (push) Has been cancelled
ci-scripts build/test / Unit tests on windows-2025 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-24.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / macos-13 (push) Has been cancelled
ci-scripts build/test / clang / debug / macos-14 (push) Has been cancelled
ci-scripts build/test / clang / debug / macos-15 (push) Has been cancelled
ci-scripts build/test / clang / default / macos-13 (push) Has been cancelled
ci-scripts build/test / clang / default / macos-14 (push) Has been cancelled
ci-scripts build/test / clang / default / macos-15 (push) Has been cancelled
ci-scripts build/test / gcc / debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / debug / windows-2025 (push) Has been cancelled
ci-scripts build/test / gcc / default / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / default / windows-2025 (push) Has been cancelled
ci-scripts build/test / gcc / static / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / static / windows-2025 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / windows-2025 (push) Has been cancelled
ci-scripts build/test / vs2022 / debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / debug / windows-2025 (push) Has been cancelled
ci-scripts build/test / vs2022 / default / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / default / windows-2025 (push) Has been cancelled
ci-scripts build/test / vs2022 / static / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / static / windows-2025 (push) Has been cancelled
ci-scripts build/test / vs2022 / static-debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / static-debug / windows-2025 (push) Has been cancelled
2025-08-28 17:21:12 +02:00
Ralph Lange
df2367fcd3 ci/test: change patch and its target to work on MacOS 2025-08-28 14:55:33 +02:00
Ralph Lange
3f77ee12af ci: bump GHA actions/checkout v3->v4 2025-08-28 10:23:43 +02:00
Ralph Lange
e952bb9cf4 ci: update GHA runners
- ubuntu: add 24.04; remove 20.04 and 18.04
- windows: add 2025; remove 2019
- macos: add 15, 14, 13; remove 12 and 11
2025-08-28 10:23:43 +02:00
Michael Davidsaver
fe1e31e527 more "" environment variable handling
Enforce equivalence between unset and set to empty string
for some more environment variables.

Also, stricter validation of $WINE
2025-08-28 09:44:26 +02:00
Ralph Lange
b2b4e777f7 ci: fix AppVeyor install configuration
- Chocolatey dropped the 'cinst' shortname
2025-01-04 16:10:29 +01:00
Ralph Lange
0e93b70855 Windows: set CHOCO=NO to not use chocolatey
- needed when using the MSYS2 shell
2024-07-22 13:57:39 +02:00
Minijackson
fe29811d26 add --add-env argument for appending to generic environment variables 2024-04-30 16:38:14 +09:00
Ralph Lange
dead44c3cb Merge pull request #92 from Insomnia1437/master
Some checks failed
ci-scripts build/test / cross linux-aarch64 / / default (push) Successful in 2m57s
ci-scripts build/test / cross linux-arm@arm-linux-gnueabihf / / default (push) Successful in 2m56s
ci-scripts build/test / cross linux-arm@arm-linux-gnueabi / / default (push) Successful in 3m22s
ci-scripts build/test / cross RTEMS-pc386-qemu@4.9 / / default (push) Successful in 3m32s
ci-scripts build/test / cross linux-ppc64 / / default (push) Successful in 3m31s
ci-scripts build/test / cross RTEMS-pc386-qemu@4.10 / / default (push) Successful in 3m55s
ci-scripts build/test / cross linux-ppc / / default (push) Successful in 4m5s
ci-scripts build/test / cross windows-x64-mingw / / default (push) Successful in 4m31s
ci-scripts build/test / cross win32-x86-mingw / / default (push) Successful in 4m44s
ci-scripts build/test / cross RTEMS-pc686-qemu@5 / / default (push) Successful in 5m54s
ci-scripts build/test / Unit tests on macos-11 (push) Has been cancelled
ci-scripts build/test / Unit tests on macos-12 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / Unit tests on windows-2019 (push) Has been cancelled
ci-scripts build/test / Unit tests on windows-2022 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / macos-11 (push) Has been cancelled
ci-scripts build/test / clang / debug / macos-12 (push) Has been cancelled
ci-scripts build/test / clang / default / macos-11 (push) Has been cancelled
ci-scripts build/test / clang / default / macos-12 (push) Has been cancelled
ci-scripts build/test / gcc / debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / default / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / default / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / static / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / static / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2019 / debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2019 / default / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2019 / static / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2019 / static-debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2022 / debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / default / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / static / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / static-debug / windows-2022 (push) Has been cancelled
fix GHA example error and warning
2024-03-10 14:45:55 +01:00
DW
ca8fde2eaf fix GHA example error and warning 2024-03-10 11:50:21 +01:00
Michael Davidsaver
130e88b709 set TOP before processing --add-path
fix regression in dffe32c23e
2023-11-05 18:57:59 -08:00
Ralph Lange
20f8e05393 test: explicitly run tests using 'python3'
Some checks failed
ci-scripts build/test / cross linux-aarch64 / / default (push) Successful in 2m58s
ci-scripts build/test / cross RTEMS-pc386-qemu@4.10 / / default (push) Successful in 3m50s
ci-scripts build/test / cross linux-arm@arm-linux-gnueabi / / default (push) Successful in 2m51s
ci-scripts build/test / cross linux-arm@arm-linux-gnueabihf / / default (push) Successful in 3m2s
ci-scripts build/test / cross RTEMS-pc386-qemu@4.9 / / default (push) Successful in 3m55s
ci-scripts build/test / cross linux-ppc / / default (push) Successful in 3m33s
ci-scripts build/test / cross linux-ppc64 / / default (push) Successful in 3m35s
ci-scripts build/test / cross RTEMS-pc686-qemu@5 / / default (push) Successful in 5m33s
ci-scripts build/test / cross win32-x86-mingw / / default (push) Successful in 4m21s
ci-scripts build/test / cross windows-x64-mingw / / default (push) Successful in 5m3s
ci-scripts build/test / Unit tests on macos-11 (push) Has been cancelled
ci-scripts build/test / Unit tests on macos-12 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / Unit tests on windows-2019 (push) Has been cancelled
ci-scripts build/test / Unit tests on windows-2022 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / macos-11 (push) Has been cancelled
ci-scripts build/test / clang / debug / macos-12 (push) Has been cancelled
ci-scripts build/test / clang / default / macos-11 (push) Has been cancelled
ci-scripts build/test / clang / default / macos-12 (push) Has been cancelled
ci-scripts build/test / gcc / debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / default / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / default / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / static / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / static / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2019 / debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2019 / default / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2019 / static / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2019 / static-debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2022 / debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / default / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / static / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / static-debug / windows-2022 (push) Has been cancelled
- 'python' is Python 2.7 on MacOS 12
2023-11-03 10:29:39 +01:00
Ralph Lange
2246ee79e4 Merge pull request #86 from mdavidsaver/win32-fix-make-path
Fix make path on Windows builds
2023-11-03 09:17:06 +01:00
Ralph Lange
7def04dc0e test: follow changes in unittest
- rename assertRegexpMatches() to assertRegex() (Python 3.2)
- rename assertRaisesRegexp() to assertRaisesRegex() (Python 3.2)
(fixes #88)
2023-11-03 09:14:03 +01:00
Ralph Lange
c153c10a11 Merge branch 'master' into win32-fix-make-path 2023-11-02 14:44:48 +01:00
Ralph Lange
a133e160ee Use get_platform() from sysconfig instead distutils.util
- distutils is dropped in python 3.10/3.12
- fixes #87
2023-11-02 11:32:08 +01:00
Michael Davidsaver
f57c9d5930 windows choose intended make.exe 2023-10-24 18:50:32 -07:00
Michael Davidsaver
dffe32c23e finish PATH manipulation before probing "make" 2023-10-24 11:39:54 -07:00
Michael Davidsaver
afeb69564c print tool location along with version 2023-10-24 10:48:54 -07:00
Michael Davidsaver
6ec067da78 Revert "workaround make -Otarget bug on windows"
This reverts commit 899b18336b.
2023-10-24 10:37:16 -07:00
Michael Davidsaver
899b18336b workaround make -Otarget bug on windows
Sometimes triggers "invalid output sync mutex" error from make.
2023-10-22 13:26:47 -07:00
Ralph Lange
8e0cb61c12 Merge pull request #83 from dirk-zimoch/colors
(fixes #82)
2023-10-03 11:58:59 +02:00
Ralph Lange
4028a10be9 removed debug message that spamed log files 2023-10-03 11:56:16 +02:00
Ralph Lange
b61f5079b7 Pull Request #83: removed debug message that spamed log files 2023-10-03 10:14:53 +02:00
e79a7fbf1e removed debug message that spamed log files 2023-10-03 10:12:30 +02:00
Ralph Lange
e0a7c52160 Merge pull request #81 from simon-ess/update_seq_url
Update default sequencer url
2023-09-15 10:08:05 +02:00
Simon Rose
6e190542d6 Update default sequencer url
Due to issues at CSR-bessy, sequencer is no longer hosted there. M.
Davidsaver is currently maintaining a mirror of that repository, which
we can point to instead.
2023-09-15 10:05:12 +02:00
Ralph Lange
a8bffdcfb7 Merge pull request #79 from dirk-zimoch/colors 2023-05-24 18:21:44 +02:00
Ralph Lange
8ea51154c0 enable compiler color output if available 2023-05-24 18:18:16 +02:00
Ralph Lange
4248dffeca Pull Request #79: enable compiler color output if available 2023-05-24 17:47:04 +02:00
9721faa716 enable compiler color output if available 2023-05-22 11:36:42 +02:00
Michael Davidsaver
c8b2773316 gha: drop ubuntu-18.04 2023-05-04 09:11:19 -07:00
Ralph Lange
1e0e326f74 Merge pull request #73 from mdavidsaver/split-extra
(closes #73)
2023-03-09 11:59:08 +00:00
Ralph Lange
bd0cd5434c Do not run tests on pc386-qemu@4.10
These started to fail with apparent reason.
2023-03-09 11:40:07 +00:00
Ralph Lange
819c2abba0 Readme: add paragraph on EXTRA args for make 2023-03-09 11:37:26 +00:00
Ralph Lange
6491f0116f Merge pull request #76 from FreddieAkeroyd/retry-choco
(closes #76)
2023-03-09 10:23:36 +00:00
Ralph Lange
f47280547b Fix unit tests to allow shlex.split() on EXTRA* 2023-03-09 10:04:31 +00:00
Freddie Akeroyd
e32822b9a3 Retry choco install 2023-03-09 00:09:47 +00:00
Michael Davidsaver
918feccf51 use shlex.split on $EXTRA* 2023-02-01 09:04:27 -08:00
Ralph Lange
fd925d83b6 Merge pull request #71 from mdavidsaver/master
GHA update to actions/checkout@v3
2022-10-17 12:17:43 +02:00
Michael Davidsaver
cd21488ec7 GHA update to actions/checkout@v3 2022-10-12 10:16:02 -07:00
Ralph Lange
aea7906839 Update README (top, GHA) and GHA example-full
Some checks failed
ci-scripts build/test / Unit tests on macos-11 (push) Has been cancelled
ci-scripts build/test / Unit tests on macos-12 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / Unit tests on windows-2019 (push) Has been cancelled
ci-scripts build/test / Unit tests on windows-2022 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-22.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / macos-11 (push) Has been cancelled
ci-scripts build/test / clang / debug / macos-12 (push) Has been cancelled
ci-scripts build/test / clang / default / macos-11 (push) Has been cancelled
ci-scripts build/test / clang / default / macos-12 (push) Has been cancelled
ci-scripts build/test / gcc / debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / default / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / default / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / static / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / static / windows-2022 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2019 / debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2019 / default / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2019 / static / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2019 / static-debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2022 / debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / default / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / static / windows-2022 (push) Has been cancelled
ci-scripts build/test / vs2022 / static-debug / windows-2022 (push) Has been cancelled
ci-scripts build/test / cross RTEMS-pc386-qemu@4.10 / / default (push) Has been cancelled
ci-scripts build/test / cross RTEMS-pc386-qemu@4.9 / / default (push) Has been cancelled
ci-scripts build/test / cross RTEMS-pc686-qemu@5 / / default (push) Has been cancelled
ci-scripts build/test / cross linux-aarch64 / / default (push) Has been cancelled
ci-scripts build/test / cross linux-arm@arm-linux-gnueabi / / default (push) Has been cancelled
ci-scripts build/test / cross linux-arm@arm-linux-gnueabihf / / default (push) Has been cancelled
ci-scripts build/test / cross linux-ppc / / default (push) Has been cancelled
ci-scripts build/test / cross linux-ppc64 / / default (push) Has been cancelled
ci-scripts build/test / cross win32-x86-mingw / / default (push) Has been cancelled
ci-scripts build/test / cross windows-x64-mingw / / default (push) Has been cancelled
2022-07-22 15:33:13 +02:00
Ralph Lange
c6bc90b06a Merge pull request #70 from mdavidsaver/py-hook
(closes #70)
2022-07-22 14:06:02 +02:00
Ralph Lange
af1ecbabae Add skip_dep_builds flag to suppress dependency builds
To allow unit tests suppressing the build of
dependencies when using the prepare() function.
2022-07-22 13:55:00 +02:00
Ralph Lange
22b2e3f796 Fix handling of some global variables and clear them properly
- move make_timeout to global and add it to clear_lists()
- add _modified_files and building_base to clear_lists()

This is needed to run tests that include prepare().
2022-07-22 13:55:00 +02:00
Ralph Lange
d36800b2e0 test: add unit test for RTEMS/WINE compatibility handling
see https://github.com/epics-base/ci-scripts/pull/69
"If we're going to continue to support the old $RTEMS and $WINE,
then they should be covered by the test"
2022-07-22 13:55:00 +02:00
Ralph Lange
b6723d0be4 Fix handle_old_cross_variables()
For cross-builds using deprecated WINE and RTEMS variables:
- add correct entry to CI_CROSS_TARGETS
- print added entry as part of the deprecation warning
- log change in CI_CROSS_TARGETS to debug log

(see review in #69)
2022-07-21 15:23:28 +02:00
Ralph Lange
db7677a48e Merge pull request #69 from minijackson/extra-linux-targets
(closes #69)
2022-07-21 15:23:04 +02:00
Ralph Lange
ee9d6b3497 Update GHA virtual environments
- remove ubuntu-16, windows-2016, macos-10.15
  see https://github.com/actions/virtual-environments/issues/5238
  see https://github.com/actions/virtual-environments/issues/5583
- add ubuntu-22, macos-12, macos-11
2022-07-21 15:21:28 +02:00
Ralph Lange
89a16e4499 Merge pull request #63 from mdavidsaver/vs2022
Add vs2022
2022-07-04 12:22:21 +02:00
Michael Davidsaver
91fb22b79a run .py hooks with same interpreter
Avoids #! and allows .py hook scripts to work on windows
2022-06-30 18:48:04 -07:00
Minijackson
514737a106 cue: move cross compilation spec to new CI_CROSS_TARGETS variable 2022-05-12 09:10:05 -07:00
Ralph Lange
f7e21c7c9d Cover vs2022 in documentation and example files 2022-01-18 08:46:39 -08:00
Michael Davidsaver
e065445f76 Add vs2022 2022-01-18 08:45:16 -08:00
Ralph Lange
93062ba941 test: bump seq version to 2.2.9 in test01.set
attempt to fix a compilation failure on VS2017
(see https://github.com/epics-base/ci-scripts/pull/63#issuecomment-1012611739)
2022-01-17 19:12:38 +01:00
Ralph Lange
75d2911498 Set EPICS_BASE for 'exec' user commands
(fixes #66)
2022-01-02 16:52:55 +01:00
Ralph Lange
3a1d04914f appveyor: drop support for VS2008
- Visual Studio 2008 has been dropped
  by EPICS Base end of 2020
(fixes #64)
2022-01-02 14:00:10 +01:00
Ralph Lange
75bae77c1d Add repo-configuration for CentOS6 (afterlife)
- install as /etc/yum.repos.d/CentOS-Base.repo to use yum
- include the Red Hat Software Collections (scl) repository
2021-05-08 17:44:53 +02:00
Michael Davidsaver
d675de24e6 GHA fix rtems_target 2021-04-21 15:58:19 -07:00
Michael Davidsaver
e703210fad Avoid "No handlers ..." message. 2021-04-21 15:58:16 -07:00
Ralph Lange
5764601630 Update README
Some checks failed
ci-scripts build/test / Unit tests on macos-10.15 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-16.04 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / Unit tests on ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / Unit tests on windows-2016 (push) Has been cancelled
ci-scripts build/test / Unit tests on windows-2019 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-16.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-16.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / clang / default / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-16.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / clang / static / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-16.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / clang / static-debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-16.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / gcc / debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-16.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / gcc / default / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-16.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / gcc / static / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-16.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / gcc-4.8 / default / ubuntu-16.04 (push) Has been cancelled
ci-scripts build/test / gcc-4.8 / static / ubuntu-16.04 (push) Has been cancelled
ci-scripts build/test / gcc-4.9 / default / ubuntu-16.04 (push) Has been cancelled
ci-scripts build/test / gcc-4.9 / static / ubuntu-16.04 (push) Has been cancelled
ci-scripts build/test / clang / debug / macos-10.15 (push) Has been cancelled
ci-scripts build/test / gcc / debug / windows-2016 (push) Has been cancelled
ci-scripts build/test / vs2019 / default / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2019 / static-debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / RTEMS4.10 / debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / RTEMS4.9 / debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / RTEMS5 / debug / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / RTEMS4.10 / default / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / RTEMS4.9 / default / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / RTEMS5 / default / ubuntu-20.04 (push) Has been cancelled
ci-scripts build/test / WINE32 / debug / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / WINE64 / debug / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / WINE32 / default / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / WINE64 / default / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / WINE32 / static / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / WINE64 / static / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / WINE32 / static-debug / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / WINE64 / static-debug / ubuntu-18.04 (push) Has been cancelled
ci-scripts build/test / clang / default / macos-10.15 (push) Has been cancelled
ci-scripts build/test / gcc / debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / default / windows-2016 (push) Has been cancelled
ci-scripts build/test / gcc / default / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / static / windows-2016 (push) Has been cancelled
ci-scripts build/test / gcc / static / windows-2019 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / windows-2016 (push) Has been cancelled
ci-scripts build/test / gcc / static-debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2017 / debug / windows-2016 (push) Has been cancelled
ci-scripts build/test / vs2017 / default / windows-2016 (push) Has been cancelled
ci-scripts build/test / vs2017 / static / windows-2016 (push) Has been cancelled
ci-scripts build/test / vs2017 / static-debug / windows-2016 (push) Has been cancelled
ci-scripts build/test / vs2019 / debug / windows-2019 (push) Has been cancelled
ci-scripts build/test / vs2019 / static / windows-2019 (push) Has been cancelled
2021-04-09 18:44:42 +02:00
Ralph Lange
0c2f903516 gitlab: set DEBIAN_FRONTEND="noninteractive"
- fixes hanging apt install tzdata
2021-04-09 18:44:42 +02:00
Ralph Lange
822293de04 Add RTEMS 5 (pc686-qemu) jobs 2021-04-09 18:44:42 +02:00
Ralph Lange
6702a8a19c travis: osx default to 10.14 / xcode 11.3
(also no brew update to speed up builds)
2021-04-09 18:39:44 +02:00
Ralph Lange
7c29683ad5 travis: update README for service changes 2021-04-09 18:39:44 +02:00
Ralph Lange
2bcd84a01c travis: default to bionic, test on focal and trusty 2021-04-09 18:39:44 +02:00
Ralph Lange
c6df7df2bd Install usrmerge on ubuntu (needed for RTEMS builds)
- travis: only do that for RTEMS
  (as precise & trusty don't have usrmerge)
- gitlab: use focal instead
  (apt install usrmerge doesn't work in Docker)
2021-04-09 18:39:44 +02:00
Ralph Lange
8bf77eba0c Update README for RTEMS builds 2021-04-09 18:39:44 +02:00
Ralph Lange
5b123f4e88 Merge pull request #56 from mdavidsaver/rtems5 2021-04-07 16:53:29 +02:00
Ralph Lange
349eb9434d cue: set rtems_target and rtems_bsp if base is not rebuilt
(rtems_bsp is needed when cached Base is used)
2021-04-07 16:47:03 +02:00
Ralph Lange
2464284271 Merge pull request #61 from FreddieAkeroyd/mingw_vs_2019
Use MSYS2 for gcc builds on AppVeyor.
2021-03-22 18:53:03 +01:00
Ralph Lange
13b7f097c1 Merge pull request #60 from mdavidsaver/master
Add timeout for make (intended to catch hanging tests). Default: no timeout.
2021-03-22 09:50:56 +01:00
Freddie Akeroyd
2464f82ce6 Use MSYS2 for gcc builds 2021-03-20 22:02:30 +00:00
Michael Davidsaver
9a94f4712b add timeout for make 2021-03-18 12:22:22 -07:00
Michael Davidsaver
028b752cb2 update RTEMS toolchains
Allow selection of RTEMS target and toolchain build.
Default build requires ubuntu-20.04 (aka. focal).
2021-03-06 13:51:03 -08:00
Ralph Lange
3db08b5977 cue: make cxx work when base is cached 2021-02-15 19:28:49 +01:00
Ralph Lange
99057a5ff6 Merge pull request #59 from mdavidsaver/master
Really Fix qualified GCC version builds
2021-02-15 18:24:03 +01:00
Michael Davidsaver
c734d558c2 print c++ compiler version
also ensures that the separate g++... binary is present.
2021-02-10 09:51:02 -08:00
Michael Davidsaver
b047a6c641 Revert "Add compiler-class and compiler-suffix as config"
This reverts commit 2016cb2ae7.
2021-02-10 09:51:02 -08:00
Michael Davidsaver
9183238f9d Revert "test: fix test_HostArchConfiguration on Windows"
This reverts commit e7b1214d09.
2021-02-10 09:51:02 -08:00
Michael Davidsaver
3ff483a1bb install old g++ 2021-02-10 09:51:02 -08:00
Ralph Lange
495f8622cd Readme: move version badge to shields.io 2021-02-08 18:47:08 +01:00
Ralph Lange
e7b1214d09 test: fix test_HostArchConfiguration on Windows 2021-02-08 18:10:37 +01:00
Ralph Lange
2016cb2ae7 Add compiler-class and compiler-suffix as config 2021-02-08 14:11:52 +01:00
Michael Davidsaver
cef930dd06 test gcc 4.8/4.9 2021-02-07 12:28:34 -08:00
Michael Davidsaver
fa2a1e1d39 log modified config files 2021-02-07 11:35:41 -08:00
Michael Davidsaver
aa25701c58 fix qualified compiler name selection 2021-02-07 11:00:07 -08:00
Michael Davidsaver
5d7e82256c PARALLEL_MAKE is numeric 2020-12-31 20:55:59 -08:00
Ralph Lange
ad8dd4a136 Merge pull request #57 from mdavidsaver/clearenv
Clear empty environment variables
2020-11-16 09:56:52 +01:00
Michael Davidsaver
fe8a9f5953 clear empty environment variables 2020-11-08 09:37:48 -08:00
Michael Davidsaver
7d9d426629 avoid empty EXTRA*
Helpful when the value of EXTRA can be conditionally
computed, but unset is not an easy option.
eg. with github actions
2020-11-07 08:13:47 -08:00
Ralph Lange
2929ee2a03 Readme: add GitLab badge 2020-10-19 09:34:19 +02:00
22 changed files with 983 additions and 389 deletions

View File

@@ -45,9 +45,9 @@ skip_commits:
install: install:
# fetch submodules (like ci-scripts) # fetch submodules (like ci-scripts)
- cmd: git submodule update --init --recursive - git submodule update --init --recursive
# for the sequencer # for the sequencer
- cinst re2c - choco install re2c
#---------------------------------# #---------------------------------#
# build matrix configuration # # build matrix configuration #
@@ -72,19 +72,21 @@ environment:
VV: 1 VV: 1
matrix: matrix:
- CMP: vs2019 - CMP: vs2022
SET: test00 SET: test00
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
- CMP: gcc - CMP: gcc
- CMP: vs2019 - CMP: vs2022
VV: 0 VV: 0
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
- CMP: vs2019 - CMP: vs2022
BASE: 3.15 BASE: 3.15
CLEAN_DEPS: NO CLEAN_DEPS: NO
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
- CMP: vs2019 - CMP: vs2022
BASE: 3.14 BASE: 3.14
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
- CMP: vs2019
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
- CMP: vs2017 - CMP: vs2017
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
@@ -95,7 +97,6 @@ environment:
- CMP: vs2013 - CMP: vs2013
- CMP: vs2012 - CMP: vs2012
- CMP: vs2010 - CMP: vs2010
- CMP: vs2008
# Platform: architecture # Platform: architecture
platform: platform:
@@ -125,8 +126,6 @@ matrix:
CMP: vs2012 CMP: vs2012
- platform: x64 - platform: x64
CMP: vs2010 CMP: vs2010
- platform: x64
CMP: vs2008
# Run test script for unit tests (SET = test00) # Run test script for unit tests (SET = test00)
for: for:
@@ -148,7 +147,7 @@ build_script:
- cmd: python cue.py build - cmd: python cue.py build
test_script: test_script:
- cmd: python cue.py test - cmd: python cue.py -T 15M test
- cmd: python cue.py test-results - cmd: python cue.py test-results
#---------------------------------# #---------------------------------#

View File

@@ -19,13 +19,13 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, windows-2019, windows-2016, macos-10.15] os: [ubuntu-24.04, ubuntu-22.04, windows-2025, windows-2022, macos-15, macos-14]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- name: Show initial environment - name: Show initial environment
run: python cue-test.py env run: python3 cue-test.py env
- name: Run unit tests - name: Run unit tests
run: python cue-test.py run: python3 cue-test.py
build-linux: build-linux:
name: ${{ matrix.cmp }} / ${{ matrix.configuration }} / ${{ matrix.os }} name: ${{ matrix.cmp }} / ${{ matrix.configuration }} / ${{ matrix.os }}
@@ -36,17 +36,17 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04] os: [ubuntu-24.04, ubuntu-22.04]
cmp: [gcc, clang] cmp: [gcc, clang]
configuration: [default, static, debug, static-debug] configuration: [default, static, debug, static-debug]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- name: Prepare and compile dependencies - name: Prepare and compile dependencies
run: python cue.py prepare run: python cue.py prepare
- name: Build main module (example app) - name: Build main module (example app)
run: python cue.py build run: python cue.py build
- name: Run main module tests - name: Run main module tests
run: python cue.py test run: python cue.py -T 15M test
- name: Collect and show test results - name: Collect and show test results
run: python cue.py test-results run: python cue.py test-results
@@ -59,17 +59,17 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [macos-10.15] os: [macos-15, macos-14]
cmp: [clang] cmp: [clang]
configuration: [default, debug] configuration: [default, debug]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- name: Prepare and compile dependencies - name: Prepare and compile dependencies
run: python cue.py prepare run: python cue.py prepare
- name: Build main module (example app) - name: Build main module (example app)
run: python cue.py build run: python cue.py build
- name: Run main module tests - name: Run main module tests
run: python cue.py test run: python cue.py -T 15M test
- name: Collect and show test results - name: Collect and show test results
run: python cue.py test-results run: python cue.py test-results
@@ -82,73 +82,56 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [windows-2019, windows-2016] os: [windows-2025, windows-2022]
cmp: [gcc, vs2019, vs2017] cmp: [gcc, vs2022]
configuration: [default, static, debug, static-debug] configuration: [default, static, debug, static-debug]
exclude:
- os: windows-2019
cmp: vs2017
- os: windows-2016
cmp: vs2019
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- name: Prepare and compile dependencies - name: Prepare and compile dependencies
run: python cue.py prepare run: python cue.py prepare
- name: Build main module (example app) - name: Build main module (example app)
run: python cue.py build run: python cue.py build
- name: Run main module tests - name: Run main module tests
run: python cue.py test run: python cue.py -T 15M test
- name: Collect and show test results - name: Collect and show test results
run: python cue.py test-results run: python cue.py test-results
build-rtems: build-cross:
name: RTEMS${{ matrix.rtems }} / ${{ matrix.configuration }} / ${{ matrix.os }} name: cross ${{ matrix.cross }} / ${{ matrix.cmp }} / ${{ matrix.configuration }}
runs-on: ${{ matrix.os }} runs-on: ubuntu-latest
env: env:
CMP: ${{ matrix.cmp }} CMP: gcc
BCFG: ${{ matrix.configuration }} BCFG: default
RTEMS: ${{ matrix.rtems }} CI_CROSS_TARGETS: ${{ matrix.cross }}
APT: re2c g++-mingw-w64-i686 g++-mingw-w64-x86-64 qemu-system-x86 TEST: ${{ matrix.test }}
APT: re2c
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-18.04] # configuration: [default, static, debug, static-debug]
cmp: [gcc] configuration: [default]
configuration: [default, debug] cross:
rtems: ["4.9", "4.10"] - linux-aarch64
- linux-arm@arm-linux-gnueabi
- linux-arm@arm-linux-gnueabihf
- linux-ppc
- linux-ppc64
- win32-x86-mingw
- windows-x64-mingw
- RTEMS-pc386-qemu@4.9
- RTEMS-pc386-qemu@4.10
- RTEMS-pc686-qemu@5
include:
- cross: RTEMS-pc386-qemu@4.10
test: NO
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- name: Prepare and compile dependencies - name: Prepare and compile dependencies
run: python cue.py prepare run: python cue.py prepare
- name: Build main module (example app) - name: Build main module (example app)
run: python cue.py build run: python cue.py build
- name: Run main module tests - name: Run main module tests
run: python cue.py test run: python cue.py -T 15M test
- name: Collect and show test results
run: python cue.py test-results
build-wine:
name: WINE${{ matrix.wine }} / ${{ matrix.configuration }} / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
env:
CMP: ${{ matrix.cmp }}
BCFG: ${{ matrix.configuration }}
WINE: ${{ matrix.wine }}
APT: re2c g++-mingw-w64-i686 g++-mingw-w64-x86-64
strategy:
fail-fast: false
matrix:
os: [ubuntu-18.04]
cmp: [gcc]
configuration: [default, static, debug, static-debug]
wine: [32, 64]
steps:
- uses: actions/checkout@v2
- name: Prepare and compile dependencies
run: python cue.py prepare
- name: Build main module (example app)
run: python cue.py build
- name: Run main module tests
run: python cue.py test
- name: Collect and show test results - name: Collect and show test results
run: python cue.py test-results run: python cue.py test-results

View File

@@ -17,6 +17,7 @@ variables:
SETUP_PATH: ".:.ci" SETUP_PATH: ".:.ci"
BASE_RECURSIVE: "NO" BASE_RECURSIVE: "NO"
APT: "libreadline6-dev libncurses5-dev perl clang g++-mingw-w64-i686 g++-mingw-w64-x86-64 qemu-system-x86 re2c" APT: "libreadline6-dev libncurses5-dev perl clang g++-mingw-w64-i686 g++-mingw-w64-x86-64 qemu-system-x86 re2c"
DEBIAN_FRONTEND: "noninteractive"
CMP: "gcc" CMP: "gcc"
BGFC: "default" BGFC: "default"
VV: "1" VV: "1"
@@ -137,12 +138,14 @@ wine64_static_debug:
# Cross-builds to RTEMS 4.9 and 4.10 # Cross-builds to RTEMS 4.9 and 4.10
rtems4.9_default: rtems4.9_default:
extends: .build extends: .build
image: ubuntu:focal
variables: variables:
RTEMS: "4.9" RTEMS: "4.9"
BASE: "3.15" BASE: "3.15"
rtems4.9_debug: rtems4.9_debug:
extends: .build extends: .build
image: ubuntu:focal
variables: variables:
RTEMS: "4.9" RTEMS: "4.9"
BASE: "3.15" BASE: "3.15"
@@ -150,11 +153,28 @@ rtems4.9_debug:
rtems4.10_default: rtems4.10_default:
extends: .build extends: .build
image: ubuntu:focal
variables: variables:
RTEMS: "4.10" RTEMS: "4.10"
rtems4.10_debug: rtems4.10_debug:
extends: .build extends: .build
image: ubuntu:focal
variables: variables:
RTEMS: "4.10" RTEMS: "4.10"
BCFG: "debug" BCFG: "debug"
rtems5_default:
extends: .build
image: ubuntu:focal
variables:
RTEMS: "5"
RTEMS_TARGET: "RTEMS-pc686-qemu"
rtems5_debug:
extends: .build
image: ubuntu:focal
variables:
RTEMS: "5"
RTEMS_TARGET: "RTEMS-pc686-qemu"
BCFG: "debug"

View File

@@ -7,7 +7,7 @@
language: cpp language: cpp
compiler: gcc compiler: gcc
dist: xenial dist: bionic
cache: cache:
directories: directories:
@@ -35,7 +35,6 @@ addons:
packages: packages:
- re2c - re2c
- p7zip - p7zip
update: true
install: install:
- python cue.py prepare - python cue.py prepare
@@ -84,6 +83,7 @@ jobs:
- env: SET=test00 - env: SET=test00
os: osx os: osx
osx_image: xcode11.3
install: python cue-test.py env install: python cue-test.py env
script: python cue-test.py script: python cue-test.py
@@ -95,10 +95,10 @@ jobs:
# Compile example # Compile example
- env: SET=test01 - env: SET=test01
dist: bionic dist: focal
- env: SET=test01 BCFG=static-debug - env: SET=test01 BCFG=static-debug
dist: bionic dist: focal
- env: SET=test01 CLEAN_DEPS=NO - env: SET=test01 CLEAN_DEPS=NO
dist: trusty dist: trusty
@@ -122,6 +122,7 @@ jobs:
compiler: clang compiler: clang
- os: osx - os: osx
osx_image: xcode11.3
env: env:
- SET=test01 - SET=test01
- EXTRA=CMD_CFLAGS="-mmacosx-version-min=10.7" - EXTRA=CMD_CFLAGS="-mmacosx-version-min=10.7"
@@ -131,6 +132,7 @@ jobs:
- env: SET=test01 BCFG=debug - env: SET=test01 BCFG=debug
os: osx os: osx
osx_image: xcode11.3
compiler: clang compiler: clang
- env: SET=test01 WINE=32 TEST=NO - env: SET=test01 WINE=32 TEST=NO
@@ -143,11 +145,16 @@ jobs:
- env: SET=test01 WINE=64 TEST=NO BCFG=debug - env: SET=test01 WINE=64 TEST=NO BCFG=debug
- env: SET=test01 WINE=64 TEST=NO BCFG=static-debug - env: SET=test01 WINE=64 TEST=NO BCFG=static-debug
- env: SET=test01 RTEMS=4.9 BASE=3.15 TEST=NO - env: SET=test01 RTEMS=4.9 BASE=3.15 TEST=NO APT=usrmerge
- env: SET=test01 RTEMS=4.9 BASE=3.15 TEST=NO BCFG=debug - env: SET=test01 RTEMS=4.9 BASE=3.15 TEST=NO BCFG=debug APT=usrmerge
- env: SET=test01 RTEMS=4.10 - env: SET=test01 RTEMS=4.10 APT=usrmerge
- env: SET=test01 RTEMS=4.10 BCFG=debug - env: SET=test01 RTEMS=4.10 BCFG=debug APT=usrmerge
- env: SET=test01 RTEMS=5 RTEMS_TARGET=RTEMS-pc686-qemu
dist: focal
- env: SET=test01 RTEMS=5 RTEMS_TARGET=RTEMS-pc686-qemu BCFG=debug
dist: focal
- env: SET=test01 - env: SET=test01
os: windows os: windows

103
README.md
View File

@@ -2,6 +2,7 @@
<a target="_blank" href="https://travis-ci.org/epics-base/ci-scripts">![Travis status][badge.travis]</a> <a target="_blank" href="https://travis-ci.org/epics-base/ci-scripts">![Travis status][badge.travis]</a>
<a target="_blank" href="https://ci.appveyor.com/project/epics-base/ci-scripts">![AppVeyor status][badge.appveyor]</a> <a target="_blank" href="https://ci.appveyor.com/project/epics-base/ci-scripts">![AppVeyor status][badge.appveyor]</a>
<a target="_blank" href="https://github.com/epics-base/ci-scripts/actions">![GitHub Actions status][badge.gh-actions]</a> <a target="_blank" href="https://github.com/epics-base/ci-scripts/actions">![GitHub Actions status][badge.gh-actions]</a>
<a target="_blank" href="https://gitlab.com/epics-base/ci-scripts/-/pipelines">![GitLab CI/CD status][badge.gitlab]</a>
# Continuous Integration for EPICS Modules # Continuous Integration for EPICS Modules
@@ -49,7 +50,7 @@ levels as the example files.
the module can be patched or further configured. the module can be patched or further configured.
- Define shared (default) or static builds (for executables and libraries). - Define shared (default) or static builds (for executables and libraries).
- Define optimized (default) or debug builds. - Define optimized (default) or debug builds.
- Run tests (using the EPICS build system, i.e., `make runtests` - Run tests (using the EPICS build system, i.e., `make runtests`
@@ -66,15 +67,16 @@ on customer infrastructure, which will have different performance
and limitations. and limitations.
### [Travis-CI](https://travis-ci.org/) ### [Travis-CI](https://travis-ci.org/)
- Five parallel runners on Linux/Windows (one runner on MacOS) - Two parallel runners on Linux/Windows (two runners on MacOS)
- Ubuntu 12/14/16/18, MacOS 10.13, Windows Server v1809 - Ubuntu 14/16/18/20, MacOS 10.13/14/15, Windows Server v1809
- Compile natively on Linux (different versions of gcc, clang) - Compile natively on Linux (different versions of gcc, clang)
- Compile natively on MacOS (clang) - Compile natively on MacOS (clang)
- Compile natively on Windows (gcc/MinGW, Visual Studio 2017) - Compile natively on Windows (gcc/MinGW, Visual Studio 2017)
- Cross-compile for Windows 32bit and 64bit using MinGW and WINE - Cross-compile for Windows 32bit and 64bit using MinGW and WINE
- Cross-compile for RTEMS 4.9 and 4.10 (Base >= 3.15) - Cross-compile for RTEMS 4.9 and 4.10 (pc386, Base >= 3.15)
- Cross-compile for RTEMS 5 (10 BSPs, Base >= 7.0.5.1)
- Built dependencies are cached (for faster builds). - Built dependencies are cached (for faster builds).
See specific See specific
**[ci-scripts on Travis-CI README](travis/README.md)** **[ci-scripts on Travis-CI README](travis/README.md)**
for more details. for more details.
@@ -83,7 +85,7 @@ for more details.
- One parallel runner (all builds are sequential) - One parallel runner (all builds are sequential)
- Windows Server 2012/2016/2019 - Windows Server 2012/2016/2019
- Compile using gcc/MinGW or different Visual Studio versions: \ - Compile using gcc/MinGW or different Visual Studio versions: \
2008, 2010, 2012, 2013, 2015, 2017, 2019 2010, 2012, 2013, 2015, 2017, 2019, 2022
- Compile for Windows 32bit and 64bit - Compile for Windows 32bit and 64bit
- No useful caching available. - No useful caching available.
@@ -93,12 +95,13 @@ for more details.
### [GitHub Actions](https://github.com/) ### [GitHub Actions](https://github.com/)
- 20 parallel runners on Linux/Windows (5 runners on MacOS) - 20 parallel runners on Linux/Windows (5 runners on MacOS)
- Ubuntu 16/18/20, MacOS 10.15, Windows Server 2016/2019 - Ubuntu 18/20/22, MacOS 11/12, Windows Server 2019/2022
- Compile natively on Linux (gcc, clang) - Compile natively on Linux (gcc, clang)
- Compile natively on MacOS (clang) - Compile natively on MacOS (clang)
- Compile natively on Windows (gcc/MinGW, Visual Studio 2017 & 2019) - Compile natively on Windows (gcc/MinGW, Visual Studio 2019/2022)
- Cross-compile for Windows 32bit and 64bit using MinGW and WINE - Cross-compile for Windows 32bit and 64bit using MinGW and WINE
- Cross-compile for RTEMS 4.9 and 4.10 (Base >= 3.15) - Cross-compile for RTEMS 4.9 and 4.10 (pc386, Base >= 3.15)
- Cross-compile for RTEMS 5 (10 BSPs, Base >= 7.0.5.1)
- Caching not supported by ci-scripts yet. - Caching not supported by ci-scripts yet.
See specific See specific
@@ -109,10 +112,11 @@ for more details.
- Docker-based runners on Linux (one VM instance per job) - Docker-based runners on Linux (one VM instance per job)
- Can use any Docker image from Dockerhub (the examples use - Can use any Docker image from Dockerhub (the examples use
`ubuntu:bionic`) `ubuntu:bionic`)
- Compile natively using different compilers (gcc, clang) - Compile natively using different compilers (gcc, clang)
- Cross-compile for Windows 32bit and 64bit using MinGW and WINE - Cross-compile for Windows 32bit and 64bit using MinGW and WINE
- Cross-compile for RTEMS 4.9 and 4.10 (Base >= 3.15) - Cross-compile for RTEMS 4.9 and 4.10 (pc386, Base >= 3.15)
- Cross-compile for RTEMS 5 (10 BSPs, Base >= 7.0.5.1)
- Built dependencies are cached (for faster builds). - Built dependencies are cached (for faster builds).
See specific See specific
@@ -185,6 +189,19 @@ Collect the results of your tests and print a summary.
`exec`\ `exec`\
Execute the remainder of the line using the default command shell. Execute the remainder of the line using the default command shell.
## Extra arguments to `make`
You can add additional arguments to the make runs that the `cue.py` script
starts. Put your additional arguments into environment variables named
`EXTRA`, `EXTRA1`, ... `EXTRA5`.
The variables may contain multiple arguments, separated by whitespace.
Use regular shell script quoting (single/double quotes, backslash escapes)
if you need spaces inside an extra argument.
The YAML syntax needed to set environment variables depends on the CI
service and platform. (See the full example configuration file.)
## Setup Files ## Setup Files
Your module might depend on EPICS Base and a few other support modules. Your module might depend on EPICS Base and a few other support modules.
@@ -277,6 +294,58 @@ that usually it is sufficient to set `FOO=<version>`.
You can find the list of supported (and tested) modules in `defaults.set`. You can find the list of supported (and tested) modules in `defaults.set`.
Feel free to suggest more default settings using a Pull Request. Feel free to suggest more default settings using a Pull Request.
## RTEMS
Cross-compiling to RTEMS versions 4.9, 4.10 or 5 is supported
on supported CI services. For configuration see below.
Tests can also be run cross-platform, using `qemu`.
The RTEMS 5 builds now include most of the BSPs with configuration in Base:
- beatnik
- gen68360
- mcp750
- mvme167
- mvme2100
- mvme3100
- pc686 w/ libbsd
- qoriq_e500 w/ libbsd
- uC5282
- xilinx_zynq_a9_qemu w/ libbsd
Build configuration [can be found here][ref.rtems5build].
Set `RSB_BUILD` to select the RTEMS toolchain release name/data from
https://github.com/mdavidsaver/rsb/releases.
RTEMS 5 builds need to be switched to ubuntu version >= 20
(aka. **os: ubuntu-20.04** with GitHub Actions,
**dist: focal** with Travis-CI or
**image: ubuntu:focal** with GitLab CI/CD).
## Cross Compilation
Setting the `CI_CROSS_TARGETS` environment variable enables cross-compiling
from Linux to the provided targets architectures.
The value of the environment variable must contain the EPICS architecture
and - depending on the target - may contain additional information like
the compiler prefix to be used or the version of the target OS.
Multiple cross-targets can be added to the `CI_CROSS_TARGETS` variable
by separating them with a colon (`:`) character.
For example, possible values are:
- linux-aarch64
- linux-arm@arm-linux-gnueabi
- linux-arm@arm-linux-gnueabihf
- linux-ppc
- linux-ppc64
- win32-x86-mingw
- windows-x64-mingw
- RTEMS-pc386-qemu@4.9
- RTEMS-pc386-qemu@4.10
- RTEMS-pc686-qemu@5
## Debugging ## Debugging
Setting `VV=1` in your service configuration (e.g., `.travis.yml`) for a Setting `VV=1` in your service configuration (e.g., `.travis.yml`) for a
@@ -299,6 +368,8 @@ in the service specific subdirectories:
- [Travis-CI README](travis/README.md) - [Travis-CI README](travis/README.md)
- [AppVeyor README](appveyor/README.md) - [AppVeyor README](appveyor/README.md)
- [GitHub Actions README](github-actions/README.md)
- [GitLab README](gitlab/README.md)
## References: EPICS Modules Using ci-scripts ## References: EPICS Modules Using ci-scripts
@@ -387,16 +458,16 @@ This will make all builds (not just for your module) verbose.
Update the submodule in `.ci` first, then change your CI configuration Update the submodule in `.ci` first, then change your CI configuration
(if needed) and commit both to your module. E.g., to update your Travis (if needed) and commit both to your module. E.g., to update your Travis
setup to release 3.2.0 of ci-scripts: setup to release 3.3.0 of ci-scripts:
```bash ```bash
cd .ci cd .ci
git pull origin v3.2.0 git pull origin v3.3.0
cd - cd -
git add .ci git add .ci
# if needed: # if needed:
edit .travis.yml # and/or other CI service configurations edit .travis.yml # and/or other CI service configurations
git add .travis.yml git add .travis.yml
git commit -m "Update ci-scripts submodule to v3.2.0" git commit -m "Update ci-scripts submodule to v3.3.0"
``` ```
Check the example configuration files inside ci-scripts (and their Check the example configuration files inside ci-scripts (and their
@@ -447,11 +518,13 @@ This module is distributed subject to a Software License Agreement found
in file LICENSE that is included with this distribution. in file LICENSE that is included with this distribution.
<!-- Links --> <!-- Links -->
[badge.version]: https://badge.fury.io/gh/epics-base%2Fci-scripts.svg [badge.version]: https://img.shields.io/github/v/release/epics-base/ci-scripts?sort=semver
[badge.travis]: https://travis-ci.org/epics-base/ci-scripts.svg?branch=master [badge.travis]: https://travis-ci.org/epics-base/ci-scripts.svg?branch=master
[badge.appveyor]: https://ci.appveyor.com/api/projects/status/8b578alg974axvux?svg=true [badge.appveyor]: https://ci.appveyor.com/api/projects/status/8b578alg974axvux?svg=true
[badge.gh-actions]: https://github.com/epics-base/ci-scripts/workflows/ci-scripts%20build/test/badge.svg [badge.gh-actions]: https://github.com/epics-base/ci-scripts/workflows/ci-scripts%20build/test/badge.svg
[badge.gitlab]: https://gitlab.com/epics-base/ci-scripts/badges/master/pipeline.svg
[reddit.bash]: https://www.reddit.com/r/bash/comments/393oqv/why_is_the_version_of_bash_included_in_os_x_so_old/ [reddit.bash]: https://www.reddit.com/r/bash/comments/393oqv/why_is_the_version_of_bash_included_in_os_x_so_old/
[ref.ethercatmc]: https://github.com/EuropeanSpallationSource/m-epics-ethercatmc [ref.ethercatmc]: https://github.com/EuropeanSpallationSource/m-epics-ethercatmc
[ref.rtems5build]: https://github.com/mdavidsaver/rsb/blob/3911854462e74838e3e5f33a9e8f936fd0f1d95d/.github/workflows/build-5.yml#L98-L137

View File

@@ -41,9 +41,9 @@ skip_commits:
install: install:
# fetch submodules (like ci-scripts) # fetch submodules (like ci-scripts)
- cmd: git submodule update --init --recursive - git submodule update --init --recursive
# for the sequencer # for the sequencer
- cinst re2c - choco install re2c
#---------------------------------# #---------------------------------#
# build matrix configuration # # build matrix configuration #
@@ -92,8 +92,8 @@ environment:
BASE: 7.0 BASE: 7.0
matrix: matrix:
- CMP: vs2019 - CMP: vs2022
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
- CMP: gcc - CMP: gcc
- CMP: vs2019 - CMP: vs2019
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
@@ -109,7 +109,6 @@ environment:
- CMP: vs2013 - CMP: vs2013
- CMP: vs2012 - CMP: vs2012
- CMP: vs2010 - CMP: vs2010
- CMP: vs2008
# Platform: processor architecture # Platform: processor architecture
platform: platform:
@@ -124,8 +123,6 @@ matrix:
CMP: vs2012 CMP: vs2012
- platform: x64 - platform: x64
CMP: vs2010 CMP: vs2010
- platform: x64
CMP: vs2008
# Exclude more jobs to reduce build time # Exclude more jobs to reduce build time
# E.g., skip 32-bit for newer compilers # E.g., skip 32-bit for newer compilers
#- platform: x86 #- platform: x86

View File

@@ -18,9 +18,9 @@ skip_commits:
- '.travis.yml' - '.travis.yml'
install: install:
- cmd: git submodule update --init --recursive - git submodule update --init --recursive
image: Visual Studio 2019 image: Visual Studio 2022
# Build Configurations: shared/static, optimized/debug # Build Configurations: shared/static, optimized/debug
configuration: configuration:
@@ -34,9 +34,9 @@ environment:
SETUP_PATH: .ci-local:.ci SETUP_PATH: .ci-local:.ci
matrix: matrix:
- CMP: vs2019 - CMP: vs2022
BASE: 7.0 BASE: 7.0
- CMP: vs2019 - CMP: vs2022
BASE: 3.15 BASE: 3.15
# Platform: processor architecture # Platform: processor architecture
@@ -52,8 +52,6 @@ matrix:
CMP: vs2012 CMP: vs2012
- platform: x64 - platform: x64
CMP: vs2010 CMP: vs2010
- platform: x64
CMP: vs2008
build_script: build_script:
- cmd: python .ci/cue.py prepare - cmd: python .ci/cue.py prepare

View File

@@ -5,7 +5,7 @@
- One parallel runner (all builds are sequential) - One parallel runner (all builds are sequential)
- Windows Server 2012/2016/2019 - Windows Server 2012/2016/2019
- Compile using gcc/MinGW or different Visual Studio versions: \ - Compile using gcc/MinGW or different Visual Studio versions: \
2008, 2010, 2012, 2013, 2015, 2017, 2019 2010, 2012, 2013, 2015, 2017, 2019, 2022
- Compile for Windows 32bit and 64bit - Compile for Windows 32bit and 64bit
- No useful caching available. - No useful caching available.
@@ -46,7 +46,7 @@
List of environment variable settings. Each list element (starting with List of environment variable settings. Each list element (starting with
a dash) is one step on the axis of the build matrix. \ a dash) is one step on the axis of the build matrix. \
Set `CMP` to select the compiler: `gcc` for the native Set `CMP` to select the compiler: `gcc` for the native
[MinGW](http://mingw-w64.org/) GNU compiler, `vs2008` ...`vs2019` [MinGW](http://mingw-w64.org/) GNU compiler, `vs2010` ...`vs2022`
(options listed above) for the Microsoft Visual Studio compilers. (options listed above) for the Microsoft Visual Studio compilers.
Your builds will take long. \ Your builds will take long. \

47
centos6-eol.repo Normal file
View File

@@ -0,0 +1,47 @@
[C6.10-base]
name=CentOS-6.10 - Base
baseurl=http://vault.centos.org/6.10/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=1
metadata_expire=never
[C6.10-updates]
name=CentOS-6.10 - Updates
baseurl=http://vault.centos.org/6.10/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=1
metadata_expire=never
[C6.10-extras]
name=CentOS-6.10 - Extras
baseurl=http://vault.centos.org/6.10/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=1
metadata_expire=never
[C6.10-contrib]
name=CentOS-6.10 - Contrib
baseurl=http://vault.centos.org/6.10/contrib/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=0
metadata_expire=never
[C6.10-centosplus]
name=CentOS-6.10 - CentOSPlus
baseurl=http://vault.centos.org/6.10/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=0
metadata_expire=never
[centos-sclo-rh]
name=CentOS-6 - SCLo rh
baseurl=http://vault.centos.org/6.10/sclo/$basearch/rh/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
enabled=1
metadata_expire=never

View File

@@ -8,11 +8,11 @@
from __future__ import print_function from __future__ import print_function
import sys, os, shutil, fileinput import sys, os, shutil, fileinput
import distutils.util
import re import re
import subprocess as sp import subprocess as sp
import unittest import unittest
import logging import logging
import fnmatch
from argparse import Namespace from argparse import Namespace
builddir = os.getcwd() builddir = os.getcwd()
@@ -66,6 +66,8 @@ import cue
# we're working with tags (detached heads) a lot: suppress advice # we're working with tags (detached heads) a lot: suppress advice
cue.call_git(['config', '--global', 'advice.detachedHead', 'false']) cue.call_git(['config', '--global', 'advice.detachedHead', 'false'])
# Don't build dependencies when running unit tests
cue.skip_dep_builds = True
class TestSourceSet(unittest.TestCase): class TestSourceSet(unittest.TestCase):
@@ -78,10 +80,10 @@ class TestSourceSet(unittest.TestCase):
def test_EmptySetupDirsPath(self): def test_EmptySetupDirsPath(self):
del os.environ['SETUP_PATH'] del os.environ['SETUP_PATH']
self.assertRaisesRegexp(NameError, '\(SETUP_PATH\) is empty', cue.source_set, 'test01') self.assertRaisesRegex(NameError, '\(SETUP_PATH\) is empty', cue.source_set, 'test01')
def test_InvalidSetupName(self): def test_InvalidSetupName(self):
self.assertRaisesRegexp(NameError, 'does not exist in SETUP_PATH', cue.source_set, 'xxdoesnotexistxx') self.assertRaisesRegex(NameError, 'does not exist in SETUP_PATH', cue.source_set, 'xxdoesnotexistxx')
def test_ValidSetupName(self): def test_ValidSetupName(self):
capturedOutput = getStringIO() capturedOutput = getStringIO()
@@ -111,14 +113,14 @@ class TestSourceSet(unittest.TestCase):
self.assertEqual(cue.setup['FOO'], 'bar', 'Setting of single word does not work') self.assertEqual(cue.setup['FOO'], 'bar', 'Setting of single word does not work')
self.assertEqual(cue.setup['FOO2'], 'bar bar2', 'Setting of multiple words does not work') self.assertEqual(cue.setup['FOO2'], 'bar bar2', 'Setting of multiple words does not work')
self.assertEqual(cue.setup['FOO3'], 'bar bar2', 'Indented setting of multiple words does not work') self.assertEqual(cue.setup['FOO3'], 'bar bar2', 'Indented setting of multiple words does not work')
self.assertEqual(cue.setup['SNCSEQ'], 'R2-2-8', 'Setup test01 was not included') self.assertEqual(cue.setup['SNCSEQ'], 'R2-2-9', 'Setup test01 was not included')
def test_DoubleIncludeGetsIgnored(self): def test_DoubleIncludeGetsIgnored(self):
capturedOutput = getStringIO() capturedOutput = getStringIO()
sys.stdout = capturedOutput sys.stdout = capturedOutput
cue.source_set('test03') cue.source_set('test03')
sys.stdout = sys.__stdout__ sys.stdout = sys.__stdout__
self.assertRegexpMatches(capturedOutput.getvalue(), 'Ignoring already included setup file') self.assertRegex(capturedOutput.getvalue(), 'Ignoring already included setup file')
class TestUpdateReleaseLocal(unittest.TestCase): class TestUpdateReleaseLocal(unittest.TestCase):
@@ -267,12 +269,12 @@ class TestAddDependencyOptions(unittest.TestCase):
cue.detect_context() cue.detect_context()
if os.path.exists(cue.ci['cachedir']): if os.path.exists(cue.ci['cachedir']):
shutil.rmtree(cue.ci['cachedir'], onerror=cue.remove_readonly) shutil.rmtree(cue.ci['cachedir'], onerror=cue.remove_readonly)
self.location = os.path.join(cue.ci['cachedir'], 'mcoreutils-master') self.location = os.path.join(cue.ci['cachedir'], 'mcoreutils-main')
self.testfile = os.path.join(self.location, '.ci', 'LICENSE') self.testfile = os.path.join(self.location, '.ci', 'LICENSE')
os.path.join(cue.ci['cachedir'], 'mcoreutils-master') os.path.join(cue.ci['cachedir'], 'mcoreutils-main')
cue.source_set('defaults') cue.source_set('defaults')
cue.complete_setup('MCoreUtils') cue.complete_setup('MCoreUtils')
cue.setup['MCoreUtils'] = 'master' cue.setup['MCoreUtils'] = 'main'
def test_Default(self): def test_Default(self):
cue.add_dependency('MCoreUtils') cue.add_dependency('MCoreUtils')
@@ -349,8 +351,10 @@ class TestVCVars(unittest.TestCase):
os.environ['CONFIGURATION'] = 'default' os.environ['CONFIGURATION'] = 'default'
if ci_service == 'github-actions' and os.environ['IMAGEOS'] == 'win16': if ci_service == 'github-actions' and os.environ['IMAGEOS'] == 'win16':
os.environ['CMP'] = 'vs2017' os.environ['CMP'] = 'vs2017'
else: elif ci_service == 'github-actions' and os.environ['IMAGEOS'] == 'win19':
os.environ['CMP'] = 'vs2019' os.environ['CMP'] = 'vs2019'
else:
os.environ['CMP'] = 'vs2022'
cue.detect_context() cue.detect_context()
cue.with_vcvars('env') cue.with_vcvars('env')
@@ -525,7 +529,7 @@ class TestTravisDetectContext(unittest.TestCase):
sys.stdout = capturedOutput sys.stdout = capturedOutput
cue.detect_context() cue.detect_context()
sys.stdout = sys.__stdout__ sys.stdout = sys.__stdout__
self.assertRegexpMatches(capturedOutput.getvalue(), "Variable 'STATIC' not supported anymore") self.assertRegex(capturedOutput.getvalue(), "Variable 'STATIC' not supported anymore")
def test_MisspelledBcfgGetsWarning(self): def test_MisspelledBcfgGetsWarning(self):
os.environ['BCFG'] = 'static-dubug' os.environ['BCFG'] = 'static-dubug'
@@ -533,7 +537,7 @@ class TestTravisDetectContext(unittest.TestCase):
sys.stdout = capturedOutput sys.stdout = capturedOutput
cue.detect_context() cue.detect_context()
sys.stdout = sys.__stdout__ sys.stdout = sys.__stdout__
self.assertRegexpMatches(capturedOutput.getvalue(), "Unrecognized build configuration setting") self.assertRegex(capturedOutput.getvalue(), "Unrecognized build configuration setting")
@unittest.skipIf(ci_service != 'appveyor', 'Run appveyor tests only on appveyor') @unittest.skipIf(ci_service != 'appveyor', 'Run appveyor tests only on appveyor')
@@ -686,7 +690,7 @@ class TestAppveyorDetectContext(unittest.TestCase):
sys.stdout = capturedOutput sys.stdout = capturedOutput
cue.detect_context() cue.detect_context()
sys.stdout = sys.__stdout__ sys.stdout = sys.__stdout__
self.assertRegexpMatches(capturedOutput.getvalue(), "Variable 'STATIC' not supported anymore") self.assertRegex(capturedOutput.getvalue(), "Variable 'STATIC' not supported anymore")
def test_MisspelledConfigurationGetsWarning(self): def test_MisspelledConfigurationGetsWarning(self):
os.environ['CONFIGURATION'] = 'static-dubug' os.environ['CONFIGURATION'] = 'static-dubug'
@@ -694,12 +698,11 @@ class TestAppveyorDetectContext(unittest.TestCase):
sys.stdout = capturedOutput sys.stdout = capturedOutput
cue.detect_context() cue.detect_context()
sys.stdout = sys.__stdout__ sys.stdout = sys.__stdout__
self.assertRegexpMatches(capturedOutput.getvalue(), "Unrecognized build configuration setting") self.assertRegex(capturedOutput.getvalue(), "Unrecognized build configuration setting")
class TestSetupForBuild(unittest.TestCase): class TestSetupForBuild(unittest.TestCase):
args = Namespace(paths=[]) args = Namespace(extra_env_vars=[])
cue.building_base = True
if ci_os == 'windows': if ci_os == 'windows':
choco_installs = ['make'] choco_installs = ['make']
if ci_service != 'appveyor': if ci_service != 'appveyor':
@@ -707,6 +710,7 @@ class TestSetupForBuild(unittest.TestCase):
sp.check_call(['choco', 'install', '-ry'] + choco_installs) sp.check_call(['choco', 'install', '-ry'] + choco_installs)
def setUp(self): def setUp(self):
cue.building_base = True
if ci_service == 'appveyor': if ci_service == 'appveyor':
os.environ['CONFIGURATION'] = 'default' os.environ['CONFIGURATION'] = 'default'
cue.detect_context() cue.detect_context()
@@ -717,7 +721,7 @@ class TestSetupForBuild(unittest.TestCase):
def test_AddPathsOption(self): def test_AddPathsOption(self):
os.environ['FOOBAR'] = 'BAR' os.environ['FOOBAR'] = 'BAR'
args = Namespace(paths=['/my/{FOOBAR}/dir', '/my/foobar']) args = Namespace(extra_env_vars=['PATH=/my/{FOOBAR}/dir', 'PATH=/my/foobar'])
cue.setup_for_build(args) cue.setup_for_build(args)
self.assertTrue(re.search('/my/BAR/dir', os.environ['PATH']), 'Expanded path not in PATH') self.assertTrue(re.search('/my/BAR/dir', os.environ['PATH']), 'Expanded path not in PATH')
self.assertTrue(re.search('/foobar', os.environ['PATH']), 'Plain path not in PATH') self.assertTrue(re.search('/foobar', os.environ['PATH']), 'Plain path not in PATH')
@@ -836,7 +840,7 @@ class TestSetupForBuild(unittest.TestCase):
def test_ExtraMakeArgs(self): def test_ExtraMakeArgs(self):
os.environ['EXTRA'] = 'bla' os.environ['EXTRA'] = 'bla'
for ind in range(1,5): for ind in range(1,5):
os.environ['EXTRA{0}'.format(ind)] = 'bla {0}'.format(ind) os.environ['EXTRA{0}'.format(ind)] = '"bla {0}"'.format(ind)
cue.setup_for_build(self.args) cue.setup_for_build(self.args)
self.assertTrue(cue.extra_makeargs[0] == 'bla', 'Extra make arg [0] not set') self.assertTrue(cue.extra_makeargs[0] == 'bla', 'Extra make arg [0] not set')
for ind in range(1,5): for ind in range(1,5):
@@ -859,7 +863,8 @@ class TestHooks(unittest.TestCase):
pass pass
with open(self.bla_file, 'w') as f: with open(self.bla_file, 'w') as f:
f.write('''LINE1=YES f.write('''LINE1=YES
LINE2=NO''') LINE2=NO
''')
def test_patchfile(self): def test_patchfile(self):
hook = os.path.join(builddir, 'test.patch') hook = os.path.join(builddir, 'test.patch')
@@ -881,6 +886,77 @@ LINE2=NO''')
cue.extract_archive(hook, cwd=self.location) cue.extract_archive(hook, cwd=self.location)
self.assertTrue(os.path.exists(self.new_file), "archive extract didn't add new file") self.assertTrue(os.path.exists(self.new_file), "archive extract didn't add new file")
@unittest.skipIf(ci_os != 'linux', 'CrossCompatibilityHandling tests only apply to linux')
class TestCrossCompatibilityHandling(unittest.TestCase):
args = Namespace(extra_env_vars=[])
def setUp(self):
cue.clear_lists()
os.environ.pop('CI_CROSS_TARGETS', None)
os.environ.pop('RTEMS_TARGET', None)
os.environ.pop('RTEMS', None)
os.environ.pop('WINE', None)
os.environ['MODULES'] = ''
cue.detect_context()
# Make cue.prepare() reconfigure base
for root, dirs, files in os.walk(cue.ci['cachedir']):
if 'checked_out' in files:
if fnmatch.fnmatch(root, '*/base-*'):
os.remove(os.path.join(root, 'checked_out'))
def runtest_rtems(self, arch, ver):
cue.prepare(self.args)
self.assertTrue('CI_CROSS_TARGETS' in os.environ, "CI_CROSS_TARGETS has not been set")
self.assertTrue(os.environ['CI_CROSS_TARGETS'].startswith(':' + arch),
"CI_CROSS_TARGETS is {0} (expected: :{1}...)"
.format(os.environ['CI_CROSS_TARGETS'], arch))
self.assertTrue(os.environ['CI_CROSS_TARGETS'].endswith('@' + ver),
"CI_CROSS_TARGETS is {0} (expected: ...@{1})"
.format(os.environ['CI_CROSS_TARGETS'], ver))
def test_RTEMS49_no_target(self):
os.environ['RTEMS'] = '4.9'
self.runtest_rtems('RTEMS-pc386', '4.9')
def test_RTEMS49_with_target(self):
os.environ['RTEMS'] = '4.9'
os.environ['RTEMS_TARGET'] = 'RTEMS-pc386'
self.runtest_rtems('RTEMS-pc386', '4.9')
def test_RTEMS410_no_target(self):
os.environ['RTEMS'] = '4.10'
self.runtest_rtems('RTEMS-pc386', '4.10')
def test_RTEMS410_with_target(self):
os.environ['RTEMS'] = '4.10'
os.environ['RTEMS_TARGET'] = 'RTEMS-pc386'
self.runtest_rtems('RTEMS-pc386', '4.10')
def test_RTEMS5_no_target(self):
os.environ['RTEMS'] = '5'
self.runtest_rtems('RTEMS-pc686', '5')
def test_RTEMS5_with_target(self):
os.environ['RTEMS'] = '5'
os.environ['RTEMS_TARGET'] = 'RTEMS-pc686'
self.runtest_rtems('RTEMS-pc686', '5')
def test_WINE32(self):
os.environ['WINE'] = '32'
cue.prepare(self.args)
self.assertTrue('CI_CROSS_TARGETS' in os.environ, "CI_CROSS_TARGETS has not been set")
self.assertEqual(os.environ['CI_CROSS_TARGETS'], ':win32-x86-mingw',
"CI_CROSS_TARGETS is {0} (expected: :win32-x86-mingw)"
.format(os.environ['CI_CROSS_TARGETS']))
def test_WINE64(self):
os.environ['WINE'] = '64'
cue.prepare(self.args)
self.assertTrue('CI_CROSS_TARGETS' in os.environ, "CI_CROSS_TARGETS has not been set")
self.assertEqual(os.environ['CI_CROSS_TARGETS'], ':windows-x64-mingw',
"CI_CROSS_TARGETS is {0} (expected: :windows-x64-mingw)"
.format(os.environ['CI_CROSS_TARGETS']))
if __name__ == "__main__": if __name__ == "__main__":
if 'VV' in os.environ and os.environ['VV'] == '1': if 'VV' in os.environ and os.environ['VV'] == '1':

598
cue.py
View File

@@ -1,18 +1,61 @@
#!/usr/bin/env python #!/usr/bin/env python
"""CI build script for Linux/MacOS/Windows on Travis/AppVeyor/GitHub-Actions """EPICS CI build script for Linux/MacOS/Windows on Travis/GitLab/AppVeyor/GitHub-Actions
""" """
from __future__ import print_function from __future__ import print_function
import sys, os, stat, shutil import sys, os, stat, shlex, shutil
import fileinput import fileinput
import logging import logging
import re import re
import time
import threading
from glob import glob
import subprocess as sp import subprocess as sp
import distutils.util import sysconfig
import shutil
try:
from os import cpu_count
except ImportError:
def cpu_count():
pass # undetermined
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# Keep track of all files we write/append for later logging
_realopen = open
_modified_files = set()
def open(fname, mode='r'):
F = _realopen(fname, mode)
if 'w' in mode or 'a' in mode:
_modified_files.add(os.path.normpath(os.path.abspath(fname)))
return F
def log_modified():
for fname in _modified_files:
with Folded(os.path.basename(fname), 'Contents of '+fname):
with open(fname, 'r') as F:
sys.stdout.write(F.read())
sys.stdout.write(os.linesep)
def whereis(cmd):
if hasattr(shutil, 'which'): # >= py3.3
loc = shutil.which(cmd)
print('{0}Found exec {1} at {2!r} {3}'.format(ANSI_CYAN, cmd, loc, ANSI_RESET))
def prepare_env():
'''HACK
github actions yaml configuration doesn't allow
conditional (un)setting of environments, only values.
Currently this script treats unset and empty environment
variables differently.
While this is the case, we unset any empty environment variables.
'''
toclear = tuple(k for k,v in os.environ.items() if len(v.strip())==0)
for var in toclear:
print('{0}Clearing empty environment variable {1}{2}'.format(ANSI_CYAN, var, ANSI_RESET))
del os.environ[var]
# Detect the service and set up context hash accordingly # Detect the service and set up context hash accordingly
def detect_context(): def detect_context():
@@ -99,7 +142,10 @@ def detect_context():
ci['cachedir'] = os.environ['CACHEDIR'] ci['cachedir'] = os.environ['CACHEDIR']
if 'CHOCO' in os.environ: if 'CHOCO' in os.environ:
ci['choco'].extend(os.environ['CHOCO'].split()) if os.environ['CHOCO'] == 'NO':
ci['choco'] = []
else:
ci['choco'].extend(os.environ['CHOCO'].split())
if 'APT' in os.environ: if 'APT' in os.environ:
ci['apt'].extend(os.environ['APT'].split()) ci['apt'].extend(os.environ['APT'].split())
@@ -111,9 +157,9 @@ def detect_context():
if 'TEST' in os.environ and os.environ['TEST'].lower() == 'no': if 'TEST' in os.environ and os.environ['TEST'].lower() == 'no':
ci['test'] = False ci['test'] = False
ci['parallel_make'] = 2 ci['parallel_make'] = cpu_count() or 2
if 'PARALLEL_MAKE' in os.environ: if 'PARALLEL_MAKE' in os.environ:
ci['parallel_make'] = os.environ['PARALLEL_MAKE'] ci['parallel_make'] = int(os.environ['PARALLEL_MAKE'])
ci['clean_deps'] = True ci['clean_deps'] = True
if 'CLEAN_DEPS' in os.environ and os.environ['CLEAN_DEPS'].lower() == 'no': if 'CLEAN_DEPS' in os.environ and os.environ['CLEAN_DEPS'].lower() == 'no':
@@ -133,17 +179,20 @@ modules_to_compile = []
setup = {} setup = {}
places = {} places = {}
extra_makeargs = [] extra_makeargs = []
make_timeout = 0.
is_base314 = False is_base314 = False
is_make3 = False is_make3 = False
has_test_results = False has_test_results = False
silent_dep_builds = True silent_dep_builds = True
skip_dep_builds = False
do_recompile = False do_recompile = False
installed_7z = False installed_7z = False
def clear_lists(): def clear_lists():
global is_base314, has_test_results, silent_dep_builds, is_make3 global is_base314, has_test_results, silent_dep_builds, is_make3
global _modified_files, do_recompile, building_base
del seen_setups[:] del seen_setups[:]
del modules_to_compile[:] del modules_to_compile[:]
del extra_makeargs[:] del extra_makeargs[:]
@@ -154,6 +203,8 @@ def clear_lists():
has_test_results = False has_test_results = False
silent_dep_builds = True silent_dep_builds = True
do_recompile = False do_recompile = False
building_base = False
_modified_files = set()
ci['service'] = '<none>' ci['service'] = '<none>'
ci['os'] = '<unknown>' ci['os'] = '<unknown>'
ci['platform'] = '<unknown>' ci['platform'] = '<unknown>'
@@ -173,9 +224,8 @@ clear_lists()
if 'BASE' in os.environ and os.environ['BASE'] == 'SELF': if 'BASE' in os.environ and os.environ['BASE'] == 'SELF':
building_base = True building_base = True
skip_dep_builds = True
places['EPICS_BASE'] = curdir places['EPICS_BASE'] = curdir
else:
building_base = False
# Setup ANSI Colors # Setup ANSI Colors
ANSI_RED = "\033[31;1m" ANSI_RED = "\033[31;1m"
@@ -218,6 +268,13 @@ def fold_end(tag, title):
.format(ANSI_YELLOW, title, ANSI_RESET)) .format(ANSI_YELLOW, title, ANSI_RESET))
sys.stdout.flush() sys.stdout.flush()
class Folded(object):
def __init__(self, tag, title):
self.tag, self.title = tag, title
def __enter__(self):
fold_start(self.tag, self.title)
def __exit__(self,A,B,C):
fold_end(self.tag, self.title)
homedir = curdir homedir = curdir
if 'HomeDrive' in os.environ: if 'HomeDrive' in os.environ:
@@ -225,11 +282,12 @@ if 'HomeDrive' in os.environ:
elif 'HOME' in os.environ: elif 'HOME' in os.environ:
homedir = os.getenv('HOME') homedir = os.getenv('HOME')
toolsdir = os.path.join(homedir, '.tools') toolsdir = os.path.join(homedir, '.tools')
rtemsdir = r'/home/travis/.rtems' # Preliminary, until the next generation of toolchain
vcvars_table = { vcvars_table = {
# https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#History # https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#History
'vs2022': [r'C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat',
r'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat'],
'vs2019': [r'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat', 'vs2019': [r'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat',
r'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat'], r'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat'],
'vs2017': [r'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat', 'vs2017': [r'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat',
@@ -271,7 +329,7 @@ def host_info():
print('PYTHONPATH') print('PYTHONPATH')
for dname in sys.path: for dname in sys.path:
print(' ', dname) print(' ', dname)
print('platform =', distutils.util.get_platform()) print('platform =', sysconfig.get_platform())
if ci['os'] == 'windows': if ci['os'] == 'windows':
print('{0}Available Visual Studio versions{1}'.format(ANSI_CYAN, ANSI_RESET)) print('{0}Available Visual Studio versions{1}'.format(ANSI_CYAN, ANSI_RESET))
@@ -379,9 +437,11 @@ def update_release_local(var, location):
def set_setup_from_env(dep): def set_setup_from_env(dep):
for postf in ['', '_DIRNAME', '_REPONAME', '_REPOOWNER', '_REPOURL', for postf in ['', '_DIRNAME', '_REPONAME', '_REPOOWNER', '_REPOURL',
'_VARNAME', '_RECURSIVE', '_DEPTH', '_HOOK']: '_VARNAME', '_RECURSIVE', '_DEPTH', '_HOOK']:
if dep + postf in os.environ: env = dep + postf
setup[dep + postf] = os.environ[dep + postf] val = os.environ.get(env)
logger.debug('ENV assignment: %s = %s', dep + postf, setup[dep + postf]) if val:
setup[env] = val
logger.debug('ENV assignment: %s = %s', env, setup[env])
def call_git(args, **kws): def call_git(args, **kws):
@@ -397,6 +457,7 @@ def call_git(args, **kws):
def call_make(args=None, **kws): def call_make(args=None, **kws):
global make_timeout
if args is None: if args is None:
args = [] args = []
place = kws.get('cwd', os.getcwd()) place = kws.get('cwd', os.getcwd())
@@ -416,7 +477,19 @@ def call_make(args=None, **kws):
makeargs += extra_makeargs makeargs += extra_makeargs
logger.debug("EXEC '%s' in %s", ' '.join(['make'] + makeargs + args), place) logger.debug("EXEC '%s' in %s", ' '.join(['make'] + makeargs + args), place)
sys.stdout.flush() sys.stdout.flush()
exitcode = sp.call(['make'] + makeargs + args, **kws) sys.stderr.flush()
child = sp.Popen(['make'] + makeargs + args, **kws)
if make_timeout:
def expire(child):
logger.error('Timeout')
child.terminate()
timer = threading.Timer(make_timeout, expire, args=(child,))
timer.start()
exitcode = child.wait()
if make_timeout:
timer.cancel()
logger.debug('EXEC DONE') logger.debug('EXEC DONE')
if exitcode != 0: if exitcode != 0:
sys.exit(exitcode) sys.exit(exitcode)
@@ -556,15 +629,21 @@ def add_dependency(dep):
if dep + '_HOOK' in setup: if dep + '_HOOK' in setup:
hook = setup[dep + '_HOOK'] hook = setup[dep + '_HOOK']
hook_file = os.path.join(curdir, hook) hook_file = os.path.join(curdir, hook)
hook_ext = os.path.splitext(hook_file)[1]
if os.path.exists(hook_file): if os.path.exists(hook_file):
if re.match(r'.+\.patch$', hook): if hook_ext == '.patch':
apply_patch(hook_file, cwd=place) apply_patch(hook_file, cwd=place)
elif re.match(r'.+\.(zip|7z)$', hook): elif hook_ext in ('.zip', '.7z'):
extract_archive(hook_file, cwd=place) extract_archive(hook_file, cwd=place)
elif hook_ext == '.py':
print('Running py hook {0} in {1}'.format(hook, place))
sp.check_call([sys.executable, hook_file], cwd=place)
else: else:
print('Running hook {0} in {1}'.format(hook, place)) print('Running hook {0} in {1}'.format(hook, place))
sys.stdout.flush() sys.stdout.flush()
sp.check_call(hook_file, shell=True, cwd=place) sp.check_call(hook_file, shell=True, cwd=place)
else:
print('Skipping invalid hook {0} in {1}'.format(hook, place))
# write checked out commit hash to marker file # write checked out commit hash to marker file
head = get_git_hash(place) head = get_git_hash(place)
@@ -625,8 +704,10 @@ def setup_for_build(args):
if ci['os'] == 'windows': if ci['os'] == 'windows':
if os.path.exists(r'C:\Strawberry\perl\bin'): if os.path.exists(r'C:\Strawberry\perl\bin'):
# Put strawberry perl in front of the PATH (so that Git Perl is further behind) # Put strawberry perl in front of the PATH (so that Git Perl is further behind)
# Put Chocolatey\bin ahead to select correct make.exe
logger.debug('Adding Strawberry Perl in front of the PATH') logger.debug('Adding Strawberry Perl in front of the PATH')
os.environ['PATH'] = os.pathsep.join([r'C:\Strawberry\c\bin', os.environ['PATH'] = os.pathsep.join([r'C:\ProgramData\Chocolatey\bin',
r'C:\Strawberry\c\bin',
r'C:\Strawberry\perl\site\bin', r'C:\Strawberry\perl\site\bin',
r'C:\Strawberry\perl\bin', r'C:\Strawberry\perl\bin',
os.environ['PATH']]) os.environ['PATH']])
@@ -637,15 +718,15 @@ def setup_for_build(args):
os.environ['INCLUDE'] = '' os.environ['INCLUDE'] = ''
if ci['platform'] == 'x86': if ci['platform'] == 'x86':
os.environ['INCLUDE'] = os.pathsep.join( os.environ['INCLUDE'] = os.pathsep.join(
[r'C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\include', [r'C:\msys64\mingw32\include',
os.environ['INCLUDE']]) os.environ['INCLUDE']])
os.environ['PATH'] = os.pathsep.join([r'C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin', os.environ['PATH'] = os.pathsep.join([r'C:\msys64\mingw32\bin',
os.environ['PATH']]) os.environ['PATH']])
elif ci['platform'] == 'x64': elif ci['platform'] == 'x64':
os.environ['INCLUDE'] = os.pathsep.join( os.environ['INCLUDE'] = os.pathsep.join(
[r'C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\include', [r'C:\msys64\mingw64\include',
os.environ['INCLUDE']]) os.environ['INCLUDE']])
os.environ['PATH'] = os.pathsep.join([r'C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin', os.environ['PATH'] = os.pathsep.join([r'C:\msys64\mingw64\bin',
os.environ['PATH']]) os.environ['PATH']])
# Find BASE location # Find BASE location
@@ -694,29 +775,52 @@ def setup_for_build(args):
if re.match('^test-results:', line): if re.match('^test-results:', line):
has_test_results = True has_test_results = True
# Check make version # apparently %CD% is handled automagically, so use getcwd() instead
if re.match(r'^GNU Make 3', sp.check_output(['make', '-v']).decode('ascii')):
is_make3 = True
logger.debug('Check if make is a 3.x series: %s', is_make3)
# apparently %CD% is handled automagically
os.environ['TOP'] = os.getcwd() os.environ['TOP'] = os.getcwd()
os.environ['MAKE'] = 'make'
os.environ['EPICS_BASE'] = places['EPICS_BASE']
addpaths = [] changed_vars = set()
for path in args.paths:
for extra_env_var in args.extra_env_vars:
try: try:
addpaths.append(path.format(**os.environ)) key_value = extra_env_var.split('=')
key = key_value[0]
value = key_value[1]
expanded_value = value.format(**os.environ)
# Update the environment right now so later variables have access
if key in os.environ:
old_value = [os.environ[key]]
else:
old_value = []
os.environ[key] = os.pathsep.join(old_value + [expanded_value])
changed_vars.add(key)
except KeyError: except KeyError:
print('Environment') print('Environment')
[print(' ', K, '=', repr(V)) for K, V in os.environ.items()] [print(' ', K, '=', repr(V)) for K, V in os.environ.items()]
raise raise
os.environ['PATH'] = os.pathsep.join([os.environ['PATH']] + addpaths) for key in changed_vars:
print("{0}{2} = {3}{1}".format(ANSI_CYAN, ANSI_RESET, key, os.environ[key]))
# os.environ completely updated at this point
logger.debug('Final PATH')
for loc in os.environ['PATH'].split(os.pathsep):
logger.debug(' %r', loc)
# Check make version
if re.match(r'^GNU Make 3', sp.check_output(['make', '-v']).decode('ascii')):
is_make3 = True
logger.debug('Check if make is a 3.x series: %s', is_make3)
# Add EXTRA make arguments # Add EXTRA make arguments
for tag in ['EXTRA', 'EXTRA1', 'EXTRA2', 'EXTRA3', 'EXTRA4', 'EXTRA5']: for tag in ['EXTRA', 'EXTRA1', 'EXTRA2', 'EXTRA3', 'EXTRA4', 'EXTRA5']:
if tag in os.environ: val = os.environ.get(tag, "")
extra_makeargs.append(os.environ[tag]) if len(val)>0:
extra_makeargs.extend(shlex.split(val))
def fix_etc_hosts(): def fix_etc_hosts():
@@ -734,6 +838,267 @@ def fix_etc_hosts():
logger.debug('EXEC DONE') logger.debug('EXEC DONE')
def edit_make_file(mode, path, values):
"""Edit an EPICS Make file.
mode should be either "a" or "w", as for the open function.
path should be a list, e.g. ["configure", "CONFIG_SITE"]
values should be a dictionary of values to edit. If the value starts with
a "+" the value will be appended.
Example usage:
edit_make_file("a", ["configure", "CONFIG_SITE"], {
"VARIABLE": "value",
"APPENDED_VARIABLE": "+value",
})
"""
with open(os.path.join(places["EPICS_BASE"], *path), mode) as f:
for variable, value in values.items():
if value.startswith("+"):
op = "+="
value = value[1:]
else:
op = "="
f.write(variable + op + value + "\n")
def handle_old_cross_variables():
if "CI_CROSS_TARGETS" not in os.environ:
os.environ["CI_CROSS_TARGETS"] = ""
if "RTEMS" in os.environ:
rtems_target = os.environ.get('RTEMS_TARGET')
if not rtems_target:
if os.environ['RTEMS'] == '5':
rtems_target = 'RTEMS-pc686-qemu'
else:
rtems_target = 'RTEMS-pc386'
if os.path.exists(os.path.join(places['EPICS_BASE'], 'configure', 'os',
'CONFIG.Common.RTEMS-pc386-qemu')):
# Base 3.15 doesn't have -qemu target architecture
rtems_target = 'RTEMS-pc386-qemu'
new_cross_target = ":" + rtems_target + "@" + os.environ["RTEMS"]
os.environ["CI_CROSS_TARGETS"] += new_cross_target
print(
"{0}WARNING: deprecated RTEMS environment variable was specified." \
" Please add '{1}' to CI_CROSS_TARGETS instead.{2}".format(
ANSI_RED, new_cross_target, ANSI_RESET
)
)
logger.debug('Replaced deprecated RTEMS target with new entry in CI_CROSS_TARGETS: %s', new_cross_target)
if "WINE" in os.environ:
if os.environ['WINE'] == '32':
new_cross_target = ":win32-x86-mingw"
elif os.environ['WINE'] == '64':
new_cross_target = ":windows-x64-mingw"
else:
raise RuntimeError("Invalid $WINE, must be 32/64")
os.environ["CI_CROSS_TARGETS"] += new_cross_target
print(
"{0}WARNING: deprecated WINE environment variable was specified." \
" Please add '{1}' to CI_CROSS_TARGETS instead.{2}".format(
ANSI_RED, new_cross_target, ANSI_RESET
)
)
logger.debug('Replaced deprecated WINE target with new entry in CI_CROSS_TARGETS: %s', new_cross_target)
def prepare_cross_compilation(cross_target_info):
"""Prepare the configuration for a single value of the CI_CROSS_TARGETS
variable.
See the README.md file for more information on this variable."""
cross_target_info = cross_target_info.split("@")
if len(cross_target_info) == 2:
target_param = cross_target_info[1]
else:
target_param = None
target = cross_target_info[0]
if target.startswith("RTEMS-"):
prepare_rtems_cross(target, target_param)
elif target.endswith("-mingw"):
prepare_wine_cross(target)
elif target.startswith("linux-"):
prepare_linux_cross(target, target_param)
else:
raise ValueError(
"Unknown CI_CROSS_TARGETS {0}. "
"Please see the ci-scripts README for available values.".format(target)
)
def prepare_rtems_cross(epics_arch, version):
"""Prepare the configuration for RTEMS cross-compilation for the given
RTEMS version.
If version is None, it defaults to version 5 for RTEMS-pc686-*, 4.10
otherwise."""
if version is None:
if epics_arch.startswith("RTEMS-pc686"):
version = "5"
else:
version = "4.10"
# eg. "RTEMS-pc386" or "RTEMS-pc386-qemu" -> "pc386"
rtems_bsp = re.match("^RTEMS-([^-]*)(?:-qemu)?$", epics_arch).group(1)
print("Cross compiler RTEMS{0} @ {1}".format(version, epics_arch))
if ci["os"] == "linux":
download_rtems(version, rtems_bsp)
edit_make_file(
"a",
["configure", "os", "CONFIG_SITE.Common.RTEMS"],
{
"RTEMS_VERSION": version,
"RTEMS_BASE": "/opt/rtems/" + version,
},
)
edit_make_file(
"a",
["configure", "CONFIG_SITE"],
{"CROSS_COMPILER_TARGET_ARCHS": epics_arch},
)
ci["apt"].extend(
["re2c", "g++-mingw-w64-i686", "g++-mingw-w64-x86-64", "qemu-system-x86"]
)
def download_rtems(version, rtems_bsp):
rsb_release = os.environ.get("RSB_BUILD", "20210306")
tar_name = "{0}-rtems{1}.tar.xz".format(rtems_bsp, version)
print("Downloading RTEMS {0} cross compiler: {1}".format(version, tar_name))
sys.stdout.flush()
sp.check_call(
[
"curl",
"-fsSL",
"--retry",
"3",
"-o",
tar_name,
"https://github.com/mdavidsaver/rsb/releases/download/{0}%2F{1}/{2}".format(
version, rsb_release, tar_name
),
],
cwd=toolsdir,
)
sudo_prefix = []
if ci["service"] == "github-actions":
sudo_prefix = ["sudo"]
sp.check_call(
sudo_prefix + ["tar", "-C", "/", "-xmJ", "-f", os.path.join(toolsdir, tar_name)]
)
os.remove(os.path.join(toolsdir, tar_name))
for rtems_cc in glob("/opt/rtems/*/bin/*-gcc"):
print("{0}{1} --version{2}".format(ANSI_CYAN, rtems_cc, ANSI_RESET))
sys.stdout.flush()
sp.check_call([rtems_cc, "--version"])
def prepare_wine_cross(epics_arch):
"""Prepare the configuration for Wine cross-compilation for the given mingw
architecture."""
if epics_arch == "win32-x86-mingw":
gnu_arch = "i686-w64-mingw32"
deb_arch = "mingw-w64-i686"
bits = "32"
elif epics_arch == "windows-x64-mingw":
gnu_arch = "x86_64-w64-mingw32"
deb_arch = "mingw-w64-x86-64"
bits = "64"
else:
raise ValueError(
"Unknown architecture '{0}' for WINE target. "
"Please see the ci-scripts README for available values.".format(epics_arch)
)
print("Cross compiler mingw{} / Wine".format(bits))
edit_make_file(
"a",
["configure", "os", "CONFIG.linux-x86." + epics_arch],
{"CMPLR_PREFIX": gnu_arch + "-"},
)
edit_make_file(
"a",
["configure", "CONFIG_SITE"],
{"CROSS_COMPILER_TARGET_ARCHS": "+" + epics_arch},
)
ci['apt'].extend(["re2c", "g++-" + deb_arch])
def prepare_linux_cross(epics_arch, gnu_arch):
"""Prepare the configuration for Linux cross-compilation for the given
architecture.
If gnu_arch is None, this function will try to guess it using the
epics_arch value.
linux-arm architecture defaults to arm-linux-gnueabi (soft floats)."""
# This list is kind of an intersection between the set of cross-compilers
# provided by Ubuntu[1] and the list of architectures found in
# `epics-base/configure/os`
#
# [1]: https://packages.ubuntu.com/source/focal/gcc-10-cross
if gnu_arch is None:
if epics_arch == "linux-x86":
gnu_arch = "i686-linux-gnu"
elif epics_arch == "linux-arm":
gnu_arch = "arm-linux-gnueabi"
elif epics_arch == "linux-aarch64":
gnu_arch = "aarch64-linux-gnu"
elif epics_arch == "linux-ppc":
gnu_arch = "powerpc-linux-gnu"
elif epics_arch == "linux-ppc64":
gnu_arch = "powerpc64le-linux-gnu"
else:
raise ValueError(
"Could not guess the GNU architecture for EPICS arch: {}. "
"Please use the '@' syntax of the 'CI_CROSS_TARGETS' variable".format(
epics_arch
)
)
print(
"Setting up Linux cross-compiling arch {0} with GNU arch {1}".format(
epics_arch, gnu_arch
)
)
edit_make_file(
"w",
["configure", "os", "CONFIG_SITE.linux-x86_64." + epics_arch],
{
"GNU_TARGET": gnu_arch,
"COMMANDLINE_LIBRARY": "EPICS",
},
)
edit_make_file(
"a",
["configure", "CONFIG_SITE"],
{"CROSS_COMPILER_TARGET_ARCHS": "+" + epics_arch},
)
ci["apt"].extend(["re2c", "g++-" + gnu_arch])
def prepare(args): def prepare(args):
host_info() host_info()
@@ -773,6 +1138,15 @@ def prepare(args):
fold_end('check.out.dependencies', 'Checking/cloning dependencies') fold_end('check.out.dependencies', 'Checking/cloning dependencies')
cxx = None
if ci['compiler'].startswith('clang'):
cxx = re.sub(r'clang', r'clang++', ci['compiler'])
elif ci['compiler'].startswith('gcc'):
cxx = re.sub(r'gcc', r'g++', ci['compiler'])
if not os.path.isdir(toolsdir):
os.makedirs(toolsdir)
if 'BASE' in modules_to_compile or building_base: if 'BASE' in modules_to_compile or building_base:
fold_start('set.up.epics_build', 'Configuring EPICS build system') fold_start('set.up.epics_build', 'Configuring EPICS build system')
@@ -822,77 +1196,41 @@ endif''')
# Cross-compilations from Linux platform # Cross-compilations from Linux platform
if ci['os'] == 'linux': if ci['os'] == 'linux':
handle_old_cross_variables()
# Cross compilation to Windows/Wine (set WINE to architecture "32", "64") for cross_target_info in os.environ.get("CI_CROSS_TARGETS", "").split(":"):
# requires wine and g++-mingw-w64-i686 / g++-mingw-w64-x86-64 if cross_target_info == "":
if 'WINE' in os.environ: continue
if os.environ['WINE'] == '32': prepare_cross_compilation(cross_target_info)
print('Cross compiler mingw32 / Wine')
with open(os.path.join(places['EPICS_BASE'], 'configure', 'os',
'CONFIG.linux-x86.win32-x86-mingw'), 'a') as f:
f.write('''
CMPLR_PREFIX=i686-w64-mingw32-''')
with open(os.path.join(places['EPICS_BASE'], 'configure', 'CONFIG_SITE'), 'a') as f:
f.write('''
CROSS_COMPILER_TARGET_ARCHS+=win32-x86-mingw''')
if os.environ['WINE'] == '64': print('Host compiler', ci['compiler'])
print('Cross compiler mingw64 / Wine')
with open(os.path.join(places['EPICS_BASE'], 'configure', 'os',
'CONFIG.linux-x86.windows-x64-mingw'), 'a') as f:
f.write('''
CMPLR_PREFIX=x86_64-w64-mingw32-''')
with open(os.path.join(places['EPICS_BASE'], 'configure', 'CONFIG_SITE'), 'a') as f:
f.write('''
CROSS_COMPILER_TARGET_ARCHS += windows-x64-mingw''')
# Cross compilation on Linux to RTEMS (set RTEMS to version "4.9", "4.10") if ci['compiler'].startswith('clang'):
# requires qemu, bison, flex, texinfo, install-info
if 'RTEMS' in os.environ:
print('Cross compiler RTEMS{0} @ pc386',format(os.environ['RTEMS']))
with open(os.path.join(places['EPICS_BASE'], 'configure', 'os',
'CONFIG_SITE.Common.RTEMS'), 'a') as f:
f.write('''
RTEMS_VERSION={0}
RTEMS_BASE={1}'''.format(os.environ['RTEMS'], rtemsdir))
# Base 3.15 doesn't have -qemu target architecture
qemu_suffix = ''
if os.path.exists(os.path.join(places['EPICS_BASE'], 'configure', 'os',
'CONFIG.Common.RTEMS-pc386-qemu')):
qemu_suffix = '-qemu'
with open(os.path.join(places['EPICS_BASE'], 'configure', 'CONFIG_SITE'), 'a') as f:
f.write('''
CROSS_COMPILER_TARGET_ARCHS += RTEMS-pc386{0}'''.format(qemu_suffix))
host_ccmplr_name = re.sub(r'^([a-zA-Z][^-]*(-[a-zA-Z][^-]*)*)+(-[0-9.]|)$', r'\1', ci['compiler'])
host_cmplr_ver_suffix = re.sub(r'^([a-zA-Z][^-]*(-[a-zA-Z][^-]*)*)+(-[0-9.]|)$', r'\3', ci['compiler'])
host_cmpl_ver = host_cmplr_ver_suffix[1:]
if host_ccmplr_name == 'clang':
print('Host compiler clang')
host_cppcmplr_name = re.sub(r'clang', r'clang++', host_ccmplr_name)
with open(os.path.join(places['EPICS_BASE'], 'configure', 'os', with open(os.path.join(places['EPICS_BASE'], 'configure', 'os',
'CONFIG_SITE.Common.'+os.environ['EPICS_HOST_ARCH']), 'a') as f: 'CONFIG_SITE.Common.'+os.environ['EPICS_HOST_ARCH']), 'a') as f:
f.write(''' f.write('''
GNU = NO GNU = NO
CMPLR_CLASS = clang CMPLR_CLASS = clang
CC = {0}{2} CC = {0}
CCC = {1}{2}'''.format(host_ccmplr_name, host_cppcmplr_name, host_cmplr_ver_suffix)) CCC = {1}'''.format(ci['compiler'], cxx))
# hack # hack
with open(os.path.join(places['EPICS_BASE'], 'configure', 'CONFIG.gnuCommon'), 'a') as f: with open(os.path.join(places['EPICS_BASE'], 'configure', 'CONFIG.gnuCommon'), 'a') as f:
f.write(''' f.write('''
CMPLR_CLASS = clang''') CMPLR_CLASS = clang''')
if host_ccmplr_name == 'gcc': elif ci['compiler'].startswith('gcc'):
print('Host compiler gcc')
host_cppcmplr_name = re.sub(r'gcc', r'g++', host_ccmplr_name)
with open(os.path.join(places['EPICS_BASE'], 'configure', 'os', with open(os.path.join(places['EPICS_BASE'], 'configure', 'os',
'CONFIG_SITE.Common.' + os.environ['EPICS_HOST_ARCH']), 'a') as f: 'CONFIG_SITE.Common.' + os.environ['EPICS_HOST_ARCH']), 'a') as f:
f.write(''' f.write('''
CC = {0}{2} CC = {0}
CCC = {1}{2}'''.format(host_ccmplr_name, host_cppcmplr_name, host_cmplr_ver_suffix)) CCC = {1}'''.format(ci['compiler'], cxx))
elif ci['compiler'].startswith('vs'):
pass # nothing special
else:
raise ValueError('Unknown compiler name {0}. valid forms include: gcc, gcc-4.8, clang, vs2019'.format(ci['compiler']))
# Add additional settings to CONFIG_SITE # Add additional settings to CONFIG_SITE
extra_config = '' extra_config = ''
@@ -913,14 +1251,27 @@ PERL = C:/Strawberry/perl/bin/perl -CSD'''
with open(os.path.join(places['EPICS_BASE'], 'configure', 'CONFIG_SITE'), 'a') as f: with open(os.path.join(places['EPICS_BASE'], 'configure', 'CONFIG_SITE'), 'a') as f:
f.write(extra_config) f.write(extra_config)
fold_end('set.up.epics_build', 'Configuring EPICS build system') # enable color in error and warning messages if the (cross) compiler supports it
with open(os.path.join(places['EPICS_BASE'], 'configure', 'CONFIG'), 'a') as f:
f.write('''
ifdef T_A
COLOR_FLAG_$(T_A) := $(shell $(CPP) -fdiagnostics-color -E - </dev/null >/dev/null 2>/dev/null && echo -fdiagnostics-color)
USR_CPPFLAGS += $(COLOR_FLAG_$(T_A))
endif''')
if not os.path.isdir(toolsdir): fold_end('set.up.epics_build', 'Configuring EPICS build system')
os.makedirs(toolsdir)
if ci['os'] == 'windows' and ci['choco']: if ci['os'] == 'windows' and ci['choco']:
fold_start('install.choco', 'Installing CHOCO packages') fold_start('install.choco', 'Installing CHOCO packages')
sp.check_call(['choco', 'install'] + ci['choco'] + ['-y', '--limitoutput', '--no-progress']) for i in range(0,3):
try:
sp.check_call(['choco', 'install'] + ci['choco'] + ['-y', '--limitoutput', '--no-progress'])
except Exception as e:
print(e)
print("Retrying choco install attempt {} after 30 seconds".format(i+1))
time.sleep(30)
else:
break
fold_end('install.choco', 'Installing CHOCO packages') fold_end('install.choco', 'Installing CHOCO packages')
if ci['os'] == 'linux' and ci['apt']: if ci['os'] == 'linux' and ci['apt']:
@@ -934,42 +1285,39 @@ PERL = C:/Strawberry/perl/bin/perl -CSD'''
sp.check_call(['brew', 'install'] + ci['homebrew']) sp.check_call(['brew', 'install'] + ci['homebrew'])
fold_end('install.homebrew', 'Installing Homebrew packages') fold_end('install.homebrew', 'Installing Homebrew packages')
if ci['os'] == 'linux' and 'RTEMS' in os.environ:
tar_name = 'i386-rtems{0}-trusty-20171203-{0}.tar.bz2'.format(os.environ['RTEMS'])
print('Downloading RTEMS {0} cross compiler: {1}'
.format(os.environ['RTEMS'], tar_name))
sys.stdout.flush()
sp.check_call(['curl', '-fsSL', '--retry', '3', '-o', tar_name,
'https://github.com/mdavidsaver/rsb/releases/download/20171203-{0}/{1}'
.format(os.environ['RTEMS'], tar_name)],
cwd=toolsdir)
sudo_prefix = []
if ci['service'] == 'github-actions':
sudo_prefix = ['sudo']
sp.check_call(sudo_prefix + ['tar', '-C', '/', '-xmj', '-f', os.path.join(toolsdir, tar_name)])
os.remove(os.path.join(toolsdir, tar_name))
setup_for_build(args) setup_for_build(args)
print('{0}EPICS_HOST_ARCH = {1}{2}'.format(ANSI_CYAN, os.environ['EPICS_HOST_ARCH'], ANSI_RESET)) print('{0}EPICS_HOST_ARCH = {1}{2}'.format(ANSI_CYAN, os.environ['EPICS_HOST_ARCH'], ANSI_RESET))
whereis('make')
print('{0}$ make --version{1}'.format(ANSI_CYAN, ANSI_RESET)) print('{0}$ make --version{1}'.format(ANSI_CYAN, ANSI_RESET))
sys.stdout.flush() sys.stdout.flush()
call_make(['--version'], parallel=0) call_make(['--version'], parallel=0)
whereis('perl')
print('{0}$ perl --version{1}'.format(ANSI_CYAN, ANSI_RESET)) print('{0}$ perl --version{1}'.format(ANSI_CYAN, ANSI_RESET))
sys.stdout.flush() sys.stdout.flush()
sp.check_call(['perl', '--version']) sp.check_call(['perl', '--version'])
if re.match(r'^vs', ci['compiler']): if re.match(r'^vs', ci['compiler']):
whereis('cl')
print('{0}$ cl{1}'.format(ANSI_CYAN, ANSI_RESET)) print('{0}$ cl{1}'.format(ANSI_CYAN, ANSI_RESET))
sys.stdout.flush() sys.stdout.flush()
sp.check_call(['cl']) sp.check_call(['cl'])
else: else:
cc = ci['compiler'] cc = ci['compiler']
whereis(cc)
print('{0}$ {1} --version{2}'.format(ANSI_CYAN, cc, ANSI_RESET)) print('{0}$ {1} --version{2}'.format(ANSI_CYAN, cc, ANSI_RESET))
sys.stdout.flush() sys.stdout.flush()
sp.check_call([cc, '--version']) sp.check_call([cc, '--version'])
if cxx:
whereis(cxx)
print('{0}$ {1} --version{2}'.format(ANSI_CYAN, cxx, ANSI_RESET))
sys.stdout.flush()
sp.check_call([cxx, '--version'])
if not building_base: if logging.getLogger().isEnabledFor(logging.DEBUG):
log_modified()
if not skip_dep_builds:
fold_start('build.dependencies', 'Build missing/outdated dependencies') fold_start('build.dependencies', 'Build missing/outdated dependencies')
for mod in modules_to_compile: for mod in modules_to_compile:
place = places[setup[mod + "_VARNAME"]] place = places[setup[mod + "_VARNAME"]]
@@ -995,7 +1343,6 @@ PERL = C:/Strawberry/perl/bin/perl -CSD'''
with open(os.path.join(ci['cachedir'], 'RELEASE.local'), 'r') as f: with open(os.path.join(ci['cachedir'], 'RELEASE.local'), 'r') as f:
print(f.read().strip()) print(f.read().strip())
def build(args): def build(args):
setup_for_build(args) setup_for_build(args)
fold_start('build.module', 'Build the main module') fold_start('build.module', 'Build the main module')
@@ -1035,7 +1382,6 @@ def test_results(args):
def doExec(args): def doExec(args):
'exec user command with vcvars' 'exec user command with vcvars'
setup_for_build(args) setup_for_build(args)
os.environ['MAKE'] = 'make'
fold_start('exec.command', 'Execute command {}'.format(args.cmd)) fold_start('exec.command', 'Execute command {}'.format(args.cmd))
sp.check_call(' '.join(args.cmd), shell=True) sp.check_call(' '.join(args.cmd), shell=True)
fold_end('exec.command', 'Execute command {}'.format(args.cmd)) fold_end('exec.command', 'Execute command {}'.format(args.cmd))
@@ -1085,12 +1431,32 @@ call "{vcvars}" {arch}
def getargs(): def getargs():
from argparse import ArgumentParser, REMAINDER from argparse import ArgumentParser, ArgumentError, REMAINDER
def timespec(s):
M = re.match(r'^\s*(\d+)\s*([A-Za-z]*)', s)
if not M:
raise ArgumentError('Expected timespec not {!r}'.format(s))
val = float(M.group(1))
try:
mult = {
'':1.0,
'S':1.0,
'M':60.0,
'H':60.0*60.0,
}[M.group(2).upper()]
except KeyError:
raise ArgumentError('Expect suffix S, M, or H. not {!r}'.format(s))
return val*mult
p = ArgumentParser() p = ArgumentParser()
p.add_argument('--no-vcvars', dest='vcvars', default=True, action='store_false', p.add_argument('--no-vcvars', dest='vcvars', default=True, action='store_false',
help='Assume vcvarsall.bat has already been run') help='Assume vcvarsall.bat has already been run')
p.add_argument('--add-path', dest='paths', default=[], action='append', p.add_argument('--add-path', dest='extra_env_vars', type=lambda x: "PATH={}".format(x), default=[], action='append',
help='Append directory to $PATH or %%PATH%%. Expands {ENVVAR}') help='Append directory to $PATH or %%PATH%%. Expands {ENVVAR}. Equivalent to: "--add-env PATH=<PATHS>"')
p.add_argument('--add-env', dest='extra_env_vars', default=[], action='append',
help='Append directory to the specified $ENVVAR or %%ENVVAR%%. Expands {OTHER_ENVVAR}. Example: "--add-env \'LD_LIBRARY_PATH={EPICS_BASE}/lib/{EPICS_HOST_ARCH}\'"')
p.add_argument('-T', '--timeout', type=timespec, metavar='DLY',
help='Terminate make after delay. DLY interpreted as second, or may be qualified with "S", "M", or "H". (default no timeout)')
subp = p.add_subparsers() subp = p.add_subparsers()
cmd = subp.add_parser('prepare') cmd = subp.add_parser('prepare')
@@ -1115,11 +1481,19 @@ def getargs():
def main(raw): def main(raw):
global silent_dep_builds global silent_dep_builds
global make_timeout
args = getargs().parse_args(raw) args = getargs().parse_args(raw)
if 'VV' in os.environ and os.environ['VV'] == '1': if 'VV' in os.environ and os.environ['VV'] == '1':
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
silent_dep_builds = False silent_dep_builds = False
else:
logging.basicConfig(level=logging.CRITICAL)
make_timeout = args.timeout
if make_timeout:
logger.info('Will timeout after %.1f seconds', make_timeout)
prepare_env()
detect_context() detect_context()
if args.vcvars and ci['compiler'].startswith('vs'): if args.vcvars and ci['compiler'].startswith('vs'):

View File

@@ -18,7 +18,7 @@ NTYPES_REPONAME=normativeTypesCPP
NTYPES_REPOOWNER=epics-base NTYPES_REPOOWNER=epics-base
# Sequencer # Sequencer
SNCSEQ_REPOURL=https://www-csr.bessy.de/control/SoftDist/sequencer/repo/branch-2-2.git SNCSEQ_REPOURL=https://github.com/mdavidsaver/sequencer-mirror.git
SNCSEQ_DEPTH=0 SNCSEQ_DEPTH=0
SNCSEQ_DIRNAME=seq SNCSEQ_DIRNAME=seq

View File

@@ -3,12 +3,13 @@
## Features ## Features
- 20 parallel runners on Linux/Windows (5 runners on MacOS) - 20 parallel runners on Linux/Windows (5 runners on MacOS)
- Ubuntu 16/18/20, MacOS 10.15, Windows Server 2016/2019 - Ubuntu 18/20/22, MacOS 11/12, Windows Server 2019/2022
- Compile natively on Linux (gcc, clang) - Compile natively on Linux (gcc, clang)
- Compile natively on MacOS (clang) - Compile natively on MacOS (clang)
- Compile natively on Windows (gcc/MinGW, Visual Studio 2017 & 2019) - Compile natively on Windows (gcc/MinGW, Visual Studio 2019/2022)
- Cross-compile for Windows 32bit and 64bit using MinGW and WINE - Cross-compile for Windows 32bit and 64bit using MinGW and WINE
- Cross-compile for RTEMS 4.9 and 4.10 (Base >= 3.15) - Cross-compile for RTEMS 4.9 and 4.10 (pc386, Base >= 3.15)
- Cross-compile for RTEMS 5 (10 BSPs, Base >= 7.0.5.1)
- Caching not supported yet. - Caching not supported yet.
## How to Use these Scripts ## How to Use these Scripts

View File

@@ -5,158 +5,132 @@
# Set the 'name:' properties to values that work for you (MYMODULE) # Set the 'name:' properties to values that work for you (MYMODULE)
name: MYMODULE ci-scripts build name: MYMODULE
# Trigger on pushes and PRs to any branch # Trigger on pushes and PRs to any branch
on: [push, pull_request] on:
push:
paths-ignore:
- 'documentation/*'
- '**/*.html'
- '**/*.md'
pull_request:
env: env:
SETUP_PATH: .ci-local:.ci SETUP_PATH: .ci-local:.ci
CMP: gcc
# For the sequencer on Linux/Windows/MacOS # For the sequencer on Linux/Windows/MacOS
APT: re2c APT: re2c
CHOCO: re2c CHOCO: re2c
BREW: re2c BREW: re2c
jobs: jobs:
build-linux: build-base:
name: ${{ matrix.cmp }} / ${{ matrix.configuration }} / ${{ matrix.os }} name: ${{ matrix.name }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
# Set environment variables from matrix parameters # Set environment variables from matrix parameters
env:
CMP: ${{ matrix.cmp }}
BCFG: ${{ matrix.configuration }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04]
cmp: [gcc, clang]
configuration: [default, static, debug, static-debug]
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Prepare and compile dependencies
run: python .ci/cue.py prepare
- name: Build main module
run: python .ci/cue.py build
- name: Run main module tests
run: python .ci/cue.py test
- name: Collect and show test results
run: python .ci/cue.py test-results
build-macos:
name: ${{ matrix.cmp }} / ${{ matrix.configuration }} / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
# Set environment variables from matrix parameters
env:
CMP: ${{ matrix.cmp }}
BCFG: ${{ matrix.configuration }}
strategy:
fail-fast: false
matrix:
os: [macos-10.15]
cmp: [clang]
# No static builds on MacOS
configuration: [default, debug]
steps:
- uses: actions/checkout@v2
- name: Prepare and compile dependencies
run: python .ci/cue.py prepare
- name: Build main module
run: python .ci/cue.py build
- name: Run main module tests
run: python .ci/cue.py test
- name: Collect and show test results
run: python .ci/cue.py test-results
build-windows:
name: ${{ matrix.cmp }} / ${{ matrix.configuration }} / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
env:
CMP: ${{ matrix.cmp }}
BCFG: ${{ matrix.configuration }}
strategy:
fail-fast: false
matrix:
os: [windows-2019, windows-2016]
cmp: [gcc, vs2019, vs2017]
configuration: [default, static, debug, static-debug]
# Available: vs2017/windows-2016 and vs2019/windows-2019
exclude:
- os: windows-2019
cmp: vs2017
- os: windows-2016
cmp: vs2019
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Prepare and compile dependencies
run: python .ci/cue.py prepare
- name: Build main module
run: python .ci/cue.py build
- name: Run main module tests
run: python .ci/cue.py test
- name: Collect and show test results
run: python .ci/cue.py test-results
# Same setup and toolchain as on Travis.
# Needs Base >= 3.15 to compile, EPICS 7 to also run the tests on qemu
build-rtems:
name: RTEMS${{ matrix.rtems }} / ${{ matrix.configuration }} / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
env:
CMP: ${{ matrix.cmp }}
BCFG: ${{ matrix.configuration }}
RTEMS: ${{ matrix.rtems }}
APT: re2c g++-mingw-w64-i686 g++-mingw-w64-x86-64 qemu-system-x86
strategy:
fail-fast: false
matrix:
os: [ubuntu-18.04]
cmp: [gcc]
configuration: [default, debug]
rtems: ["4.9", "4.10"]
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Prepare and compile dependencies
run: python .ci/cue.py prepare
- name: Build main module
run: python .ci/cue.py build
- name: Run main module tests
run: python .ci/cue.py test
- name: Collect and show test results
run: python .ci/cue.py test-results
# The WINE cross builds are of somewhat limited use,
# as there are native gcc/MinGW builds available on GitHub Actions
build-wine:
name: WINE${{ matrix.wine }} / ${{ matrix.configuration }} / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
env: env:
CMP: ${{ matrix.cmp }} CMP: ${{ matrix.cmp }}
BCFG: ${{ matrix.configuration }} BCFG: ${{ matrix.configuration }}
WINE: ${{ matrix.wine }} WINE: ${{ matrix.wine }}
APT: re2c g++-mingw-w64-i686 g++-mingw-w64-x86-64 RTEMS: ${{ matrix.rtems }}
RTEMS_TARGET: ${{ matrix.rtems_target }}
EXTRA: ${{ matrix.extra }}
TEST: ${{ matrix.test }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-18.04] # Job names also name artifacts, character limitations apply
cmp: [gcc] include:
configuration: [default, static, debug, static-debug] - os: ubuntu-24.04
wine: [32, 64] cmp: gcc
configuration: default
wine: "64"
name: "Ub-24 gcc + MinGW"
- os: ubuntu-24.04
cmp: gcc
configuration: static
wine: "64"
name: "Ub-24 gcc + MinGW, static"
- os: ubuntu-24.04
cmp: gcc
configuration: static
extra: "CMD_CXXFLAGS=-std=c++11"
name: "Ub-24 gcc C++11, static"
- os: ubuntu-24.04
cmp: clang
configuration: default
extra: "CMD_CXXFLAGS=-std=c++11"
name: "Ub-24 clang C++11"
- os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "RTEMS-pc686-qemu@5"
name: "Ub-22 gcc + RT-5.1 pc686"
- os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "RTEMS-beatnik@5"
test: NO
name: "Ub-22 gcc + RT-5.1 beatnik"
- os: macos-latest
cmp: clang
configuration: default
name: "MacOS clang"
- os: windows-2022
cmp: gcc
configuration: default
name: "Win2022 MinGW"
- os: windows-2022
cmp: gcc
configuration: static
name: "Win2022 MinGW, static"
- os: windows-2022
cmp: vs2022
configuration: default
name: "Win2022 MSC-22"
- os: windows-2022
cmp: vs2022
configuration: static
name: "Win2022 MSC-22, static"
- os: ubuntu-latest
cmp: gcc
configuration: default
name: "Cross linux-aarch64"
cross: linux-aarch64
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
with: with:
submodules: true submodules: true
- name: Automatic core dumper analysis
uses: mdavidsaver/ci-core-dumper@master
- name: "apt-get install"
run: |
sudo apt-get update
sudo apt-get -y install qemu-system-x86 g++-mingw-w64-x86-64 gdb
if: runner.os == 'Linux'
- name: Prepare and compile dependencies - name: Prepare and compile dependencies
run: python .ci/cue.py prepare run: python .ci/cue.py prepare
- name: Build main module - name: Build main module
run: python .ci/cue.py build run: python .ci/cue.py build
- name: Run main module tests - name: Run main module tests
run: python .ci/cue.py test run: python .ci/cue.py -T 15M test
- name: Upload tapfiles Artifact
uses: actions/upload-artifact@v4
with:
name: tapfiles ${{ matrix.name }}
path: '**/O.*/*.tap'
- name: Collect and show test results - name: Collect and show test results
run: python .ci/cue.py test-results if: ${{ always() }}
run: python .ci/cue.py -T 5M test-results

View File

@@ -5,18 +5,23 @@
# Set the 'name:' properties to values that work for you # Set the 'name:' properties to values that work for you
name: MYMODULE ci-scripts build name: MYMODULE
# Trigger on pushes and PRs to any branch # Trigger on pushes and PRs to any branch
on: [push, pull_request] on:
push:
paths-ignore:
- 'documentation/*'
- '**/*.html'
- '**/*.md'
pull_request:
env: env:
SETUP_PATH: .ci-local:.ci SETUP_PATH: .ci-local:.ci
CMP: gcc
jobs: jobs:
build-linux: build-linux:
name: ${{ matrix.base }} / ${{ matrix.cmp }} / ${{ matrix.configuration }} / ${{ matrix.os }} name: ${{ matrix.name }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
# Set environment variables from matrix parameters # Set environment variables from matrix parameters
env: env:
@@ -26,12 +31,39 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-20.04, ubuntu-18.04] include:
cmp: [gcc] - os: ubuntu-24.04
configuration: [default, static] cmp: gcc
base: ["7.0", "3.15"] configuration: default
base: "3.15"
name: "3.15 Ub-24 gcc"
- os: ubuntu-24.04
cmp: gcc
configuration: default
base: "7.0"
name: "7.0 Ub-24 gcc"
- os: ubuntu-24.04
cmp: gcc
configuration: static
base: "3.15"
name: "3.15 Ub-24 gcc static"
- os: ubuntu-24.04
cmp: gcc
configuration: debug
base: "3.15"
name: "3.15 Ub-24 gcc debug"
- os: ubuntu-24.04
cmp: clang
configuration: default
base: "3.15"
name: "3.15 Ub-24 clang"
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
with: with:
submodules: true submodules: true
- name: Prepare and compile dependencies - name: Prepare and compile dependencies

View File

@@ -99,7 +99,7 @@ wine64_debug:
BCFG: "debug" BCFG: "debug"
WINE: "64" WINE: "64"
# Cross-builds to RTEMS 4.9 and 4.10 # Cross-builds to RTEMS 4.9, 4.10 and 5
rtems4.9_default: rtems4.9_default:
extends: .build extends: .build
variables: variables:
@@ -112,3 +112,10 @@ rtems4.10_debug:
RTEMS: "4.10" RTEMS: "4.10"
BASE: "7.0" BASE: "7.0"
BCFG: "debug" BCFG: "debug"
rtems5_default:
extends: .build
image: ubuntu:focal
variables:
RTEMS: "5"
RTEMS_TARGET: "RTEMS-pc686-qemu"

View File

@@ -7,7 +7,8 @@
`ubuntu:bionic`) `ubuntu:bionic`)
- Compile natively using different compilers (gcc, clang) - Compile natively using different compilers (gcc, clang)
- Cross-compile for Windows 32bit and 64bit using MinGW and WINE - Cross-compile for Windows 32bit and 64bit using MinGW and WINE
- Cross-compile for RTEMS 4.9 and 4.10 (Base >= 3.15) - Cross-compile for RTEMS 4.9 and 4.10 (pc386, Base >= 3.15)
- Cross-compile for RTEMS 5 (10 BSPs, Base >= 7.0.5.1)
- Built dependencies are cached (for faster builds). - Built dependencies are cached (for faster builds).
## How to Use these Scripts ## How to Use these Scripts

View File

@@ -1,7 +1,7 @@
diff -ruN a/bla.txt b/bla.txt diff -ruN a/bla.txt b/bla.txt
--- a/bla.txt 2020-06-19 18:54:43.129076711 +0200 --- a/bla.txt 2020-06-19 18:54:43.129076711 +0200
+++ b/bla.txt 2020-06-19 18:55:05.093948316 +0200 +++ b/bla.txt 2020-06-19 18:55:05.093948316 +0200
@@ -1,3 +1,3 @@ @@ -1,2 +1,2 @@
-LINE1=YES -LINE1=YES
+LINE1=NO +LINE1=NO
LINE2=NO LINE2=NO

View File

@@ -1,4 +1,4 @@
MODULES="sncseq" MODULES="sncseq"
BASE=7.0 BASE=7.0
SNCSEQ=R2-2-8 SNCSEQ=R2-2-9

View File

@@ -5,7 +5,7 @@
language: cpp language: cpp
compiler: gcc compiler: gcc
dist: xenial dist: bionic
cache: cache:
directories: directories:
@@ -39,7 +39,6 @@ addons:
- re2c - re2c
# for .zip/.7z archive hooks # for .zip/.7z archive hooks
- p7zip - p7zip
update: true
install: install:
- python .ci/cue.py prepare - python .ci/cue.py prepare
@@ -104,9 +103,12 @@ jobs:
# Cross-compilation to RTEMS # Cross-compilation to RTEMS
- env: BASE=7.0 RTEMS=4.10 - env: BASE=7.0 RTEMS=4.10 APT=usrmerge
- env: BASE=7.0 RTEMS=4.9 - env: BASE=7.0 RTEMS=4.9 APT=usrmerge
- env: BASE=7.0 RTEMS=5 RTEMS_TARGET=RTEMS-pc686-qemu
dist: focal
# Other gcc versions (added as an extra package) # Other gcc versions (added as an extra package)
@@ -122,6 +124,7 @@ jobs:
- env: BASE=7.0 - env: BASE=7.0
os: osx os: osx
osx_image: xcode11.3
compiler: clang compiler: clang
# Windows builds # Windows builds

View File

@@ -3,7 +3,7 @@
language: cpp language: cpp
compiler: gcc compiler: gcc
dist: xenial dist: bionic
# Minimal set of packages needed to compile EPICS Base # Minimal set of packages needed to compile EPICS Base

View File

@@ -2,11 +2,13 @@
## Features ## Features
- Five parallel runners on Linux/Windows (one runner on MacOS) - Two parallel runners on Linux/Windows (two runners on MacOS)
- Ubuntu 14/16/18/20, MacOS 10.13/14/15, Windows Server v1809
- Use different compilers (gcc, clang) - Use different compilers (gcc, clang)
- Use different gcc versions - Use different gcc versions
- Cross-compile for Windows 32bit and 64bit using MinGW and WINE - Cross-compile for Windows 32bit and 64bit using MinGW and WINE
- Cross-compile for RTEMS 4.9 and 4.10 (Base >= 3.15) - Cross-compile for RTEMS 4.9 and 4.10 (pc386, Base >= 3.15)
- Cross-compile for RTEMS 5 (10 BSPs, Base >= 7.0.5.1)
- Compile natively on MacOS (clang) - Compile natively on MacOS (clang)
- Compile natively on Windows (gcc/MinGW, Visual Studio 2017) - Compile natively on Windows (gcc/MinGW, Visual Studio 2017)
- Built dependencies are cached (for faster builds). - Built dependencies are cached (for faster builds).