Compare commits
564 Commits
7.0
...
PSI-7.0.9.
| Author | SHA1 | Date | |
|---|---|---|---|
| 0c2436720a | |||
| bd0c7e7823 | |||
| 46f046c751 | |||
| 60277e0980 | |||
| 12d24d3108 | |||
| 3b846dda9a | |||
| 15cbbe074f | |||
| 3bb6433fe6 | |||
| 0f29b34f68 | |||
| 427c3b4de1 | |||
| b259f5ee44 | |||
| 525cddc43f | |||
| 65cc904262 | |||
| 6196554b17 | |||
| 04a59727ec | |||
| 9921a8ae19 | |||
| 243a18ee43 | |||
|
|
def6cdb61f | ||
|
|
7236f3ad5f | ||
|
|
2422e56d20 | ||
|
|
c39f39cb93 | ||
|
|
f911f8ca3e | ||
|
|
693c95e1d0 | ||
|
|
38376b95ea | ||
|
|
f7f7443c4f | ||
|
|
f34dd44c29 | ||
|
|
e294bb443c | ||
|
|
de6d4e74ef | ||
|
|
ea421f61f5 | ||
|
|
4a81f5c518 | ||
|
|
5813dcd639 | ||
|
|
ae0435c6b2 | ||
|
|
2e00d068d3 | ||
|
|
7449a947ed | ||
|
|
b8e70783d8 | ||
|
|
a2be1c4f4f | ||
|
|
87b8050437 | ||
|
|
b9b2da26fd | ||
|
|
344efb14a9 | ||
|
|
94aa917f5d | ||
|
|
cca6db9d53 | ||
|
|
f3c72ea38e | ||
|
|
43afae523e | ||
|
|
1a4223caa6 | ||
|
|
144ab9074d | ||
|
|
b34465add6 | ||
|
|
d89039dbc6 | ||
|
|
7b6ec35110 | ||
|
|
70d5df05c7 | ||
|
|
2fc955bf8a | ||
|
|
71e4b4ce2a | ||
|
|
482b3943ed | ||
|
|
4edf6baae2 | ||
|
|
4fbe6daab7 | ||
|
|
383d29c93a | ||
|
|
6f562e0ad2 | ||
|
|
455978d9fb | ||
|
|
6683d81eb9 | ||
|
|
d87ad35d37 | ||
|
|
a9b66218c6 | ||
|
|
4cf7077ee2 | ||
|
|
71e86e51bd | ||
|
|
43003ea18a | ||
|
|
61deabd787 | ||
|
|
3ece668f6b | ||
|
|
d7a02342e5 | ||
|
|
ecd76e5b5b | ||
|
|
9b92a98d06 | ||
|
|
16fd65639a | ||
|
|
f3e24ea8e3 | ||
|
|
dd09670b35 | ||
|
|
04c7cdd33a | ||
|
|
3a822ccb0c | ||
|
|
45b2be0171 | ||
|
|
1468319f31 | ||
|
|
82994d600f | ||
|
|
8752372af1 | ||
|
|
41f19bd798 | ||
|
|
a89b12f9ef | ||
|
|
132cc8b90a | ||
|
|
bdb3744e7e | ||
|
|
124f7b9d9b | ||
|
|
579c15e4f2 | ||
|
|
326c8d588f | ||
|
|
77140abe70 | ||
|
|
3d7a6b0b50 | ||
|
|
463ddf4694 | ||
|
|
389f51e55c | ||
|
|
855696b4b1 | ||
|
|
e45da11703 | ||
|
|
94b37fafb6 | ||
|
|
8ecf71c0a4 | ||
|
|
5aff8cee30 | ||
|
|
32517665b9 | ||
|
|
d4ad7c315e | ||
|
|
99682610a0 | ||
|
|
9eca4bc448 | ||
|
|
d2c73046f4 | ||
|
|
62b8653c39 | ||
|
|
1515f4d792 | ||
|
|
91063e4caa | ||
|
|
7b010cecd8 | ||
|
|
569e94b9fe | ||
|
|
bb78ba223c | ||
|
|
42ba2875cc | ||
|
|
5a7b5b3709 | ||
|
|
7876a5f5cf | ||
|
|
2bf9e70ac8 | ||
| 0223ee8465 | |||
| fe3ccfcafd | |||
| 37741efa38 | |||
| 51b57e0043 | |||
|
|
333446e0fe | ||
|
|
8735a7b17c | ||
|
|
81ba6a8a24 | ||
|
|
5c87283866 | ||
|
|
1b167f5de8 | ||
|
|
2f0fbbe1c6 | ||
| 4750b7ee93 | |||
| c9f80d82cc | |||
|
|
93f6c4692f | ||
| 72ca94e04c | |||
| 3de1d93059 | |||
| 8855d15a3b | |||
| 87bb7d430f | |||
| 3963b35c17 | |||
| ec5badc737 | |||
| ca48a217a5 | |||
| 27db57d386 | |||
| 02d25c3c48 | |||
| 4d63e65b9d | |||
|
|
9731d07e68 | ||
|
|
3daba7803b | ||
| ea402b0f73 | |||
|
|
21368dc7b4 | ||
|
|
a7c2292d48 | ||
|
|
0f6fd8fff7 | ||
|
|
c485055bd5 | ||
|
|
35923b5085 | ||
|
|
42e7cbc71d | ||
|
|
8c6336014a | ||
|
|
52d9ef1d20 | ||
|
|
c0da3dd1f9 | ||
|
|
55d918e74c | ||
| ca74f94faa | |||
| 8d46bd3a41 | |||
| 226b752470 | |||
| f7778539e8 | |||
| 45ea3d5664 | |||
| c67982aa3f | |||
|
|
0cbc4eb107 | ||
|
|
72936844ae | ||
|
|
8e29e13a13 | ||
|
|
a85ef1ad1c | ||
| 5e1bd8956b | |||
| b833f12129 | |||
| 1804bcef7d | |||
| 990e08c737 | |||
|
|
e13d65f6f5 | ||
|
|
eb1263795e | ||
|
|
ad326751fa | ||
|
|
f827bd7e34 | ||
|
|
7372b4e5bb | ||
|
|
26e9e407f6 | ||
|
|
a0059b6e91 | ||
|
|
feae322e9a | ||
|
|
1b1bb34c83 | ||
|
|
fe6d946d32 | ||
|
|
004c55503b | ||
|
|
a9ba1c95b2 | ||
|
|
72d751f07d | ||
|
|
d279897181 | ||
|
|
cad535a956 | ||
|
|
6fc6304f19 | ||
|
|
0c75f1fe99 | ||
| f501a2810e | |||
| 997746e5e2 | |||
| 09f96d056a | |||
| 84f49ad149 | |||
| db003e8a10 | |||
| 1732c9440a | |||
| ff565267e5 | |||
| acf4c92697 | |||
| 93ba98cdca | |||
| f2a03e906b | |||
| d6481e190f | |||
| 2e77bc8cc1 | |||
| ea7459084e | |||
| ddc49e9f79 | |||
| a3a99e4d14 | |||
| 12144fe267 | |||
| c5315d95b8 | |||
| 74d231b04f | |||
| 23521e0a08 | |||
| 55791ef470 | |||
| 7b2fb669ec | |||
| 312a602952 | |||
| bc27476554 | |||
| 9c1334ae15 | |||
|
|
9481deacb0 | ||
| 8f1a3888c6 | |||
| c9183b5241 | |||
| c3f57ee818 | |||
| 27f4261dfb | |||
| 5eb9997791 | |||
| bfc2f832ec | |||
| f09b235fce | |||
| ece031c88b | |||
| cbbbd67843 | |||
| 57c0295024 | |||
|
|
8f77e941c7 | ||
|
|
c76395abc6 | ||
| 1ee8338886 | |||
| 250c9658c2 | |||
| eb59cb6c7e | |||
| ab91aee581 | |||
| ccfb5711c8 | |||
| 8accf19239 | |||
| 9b8712e095 | |||
| d13441ebba | |||
| b53505d339 | |||
| 75524e43bc | |||
| 1567da1366 | |||
| 35ba9d65a2 | |||
| 6bb78e0d59 | |||
| 7d73932dc8 | |||
| 4a442bb56c | |||
| 60075df3cf | |||
| 42892f3921 | |||
| 52b3496084 | |||
| 2296dbc132 | |||
| 4af01ed26a | |||
| d83079999b | |||
| 15a2e22149 | |||
| 2dc71ebd6e | |||
| 7077ece7f9 | |||
| 22aaded26d | |||
| c1b8831205 | |||
| 1e64b08c32 | |||
| d67036fcc0 | |||
| d494d91ba2 | |||
| 97ffcb725c | |||
| 5930e8e2e4 | |||
| 212f387d1b | |||
| 1ae21cdde4 | |||
| 03f17a08c3 | |||
| 54117d5371 | |||
| cc134d4649 | |||
| 012c4c73f1 | |||
| 96864abb6c | |||
| ad00947d48 | |||
| 2db99d46a7 | |||
| 11661455f1 | |||
| ecb02803c8 | |||
| fcb720275a | |||
| 87d492bffd | |||
| b379c6f3a5 | |||
| da010afde9 | |||
| cb710920d0 | |||
| 87dea74dcd | |||
| d35c7fe5eb | |||
| c5469efca1 | |||
| fd436c40e8 | |||
| 8557d8adce | |||
| a0c55f597b | |||
| 9090f54f45 | |||
| 6085f9eb0b | |||
| a1de706d2c | |||
| 0b12a0cf7e | |||
| e9dcdd8936 | |||
| e2bb42d8d3 | |||
| abcada0d85 | |||
| 2c35d60a64 | |||
| af1b77eb0f | |||
| 93947eb027 | |||
| 961671259f | |||
|
|
db2482117d | ||
| a66caa5985 | |||
| 4803aae904 | |||
| 427be18e2e | |||
| fff690a449 | |||
| 428b836500 | |||
| 6c74507b11 | |||
| 122ca4e1d3 | |||
|
|
ba1bf00ce7 | ||
|
|
68fea5c2ca | ||
|
|
3f03efe7fe | ||
|
|
98dc97022a | ||
|
|
5d01b637a7 | ||
|
|
69a184ee1d | ||
|
|
aebacff3db | ||
|
|
27ad623d68 | ||
|
|
1b23701946 | ||
|
|
0502fe25e4 | ||
|
|
77a37781af | ||
|
|
ba21e655df | ||
|
|
2e727a0262 | ||
|
|
f4cb31d5d5 | ||
|
|
ab4e687816 | ||
|
|
1d1926eaf3 | ||
|
|
d31ba6ade3 | ||
| 609147dad0 | |||
|
|
5a5535aa5b | ||
|
|
de61390049 | ||
|
|
304d8217d9 | ||
|
|
2c95dc91e9 | ||
|
|
8cc15c6e68 | ||
|
|
680e1734a4 | ||
| 4aea7de032 | |||
|
|
bddbc38e0b | ||
|
|
67e669c5e5 | ||
|
|
e291ca0a03 | ||
|
|
5b84a86ccd | ||
|
|
cb6442da71 | ||
|
|
49b9573f3a | ||
|
|
42dfca2b54 | ||
|
|
3fd79a21a2 | ||
|
|
12f311b780 | ||
|
|
8abc9f8d03 | ||
|
|
ae6f01b8ee | ||
| 1d3a2defa2 | |||
| 43f6fd5060 | |||
|
|
c8d596034a | ||
|
|
1d3459982c | ||
|
|
9934242ccf | ||
|
|
e6dab90bf4 | ||
|
|
c680b9bebd | ||
|
|
9555ca05b8 | ||
|
|
0cd56fa40b | ||
|
|
485ac85fa5 | ||
| 1148931226 | |||
| 73f80cced9 | |||
| 152c72bab0 | |||
| 0f086126b7 | |||
| 5b058d7d27 | |||
|
|
ccbe608c4a | ||
|
|
c68d5a8dc3 | ||
|
|
cfa5ad3195 | ||
|
|
d7a0edf121 | ||
|
|
61fa360461 | ||
|
|
01fc9f83a9 | ||
|
|
ccc730332a | ||
|
|
b948c03675 | ||
|
|
538a3d2f09 | ||
|
|
3724420dc6 | ||
|
|
6b1d30408f | ||
|
|
b615232788 | ||
|
|
763760c58b | ||
|
|
f0d98b9b9a | ||
|
|
60239498a1 | ||
|
|
166157dcbf | ||
|
|
29da5d67e1 | ||
|
|
8e8fb81062 | ||
|
|
448bde1798 | ||
| 28d33d43ec | |||
| b72fcff44d | |||
| d3dc2afd8d | |||
| e9237ef4e8 | |||
| c578148e36 | |||
| 92a461fbd9 | |||
| d5988446c6 | |||
| 26e1e94b90 | |||
| 64f67d036b | |||
| e33728362d | |||
| 23511c4a53 | |||
| 5db310813f | |||
| 6ec0c3b844 | |||
| 8bad990471 | |||
| cb4cb6f4d7 | |||
| 33ecfcb6bc | |||
| 565ccae0b5 | |||
| ddfa24e15d | |||
| 6dc7224cea | |||
| 25a2258663 | |||
|
|
13bd6bac5f | ||
| 39de02f350 | |||
| efd9e7908a | |||
| 96fe9306c7 | |||
| 0caa5a045c | |||
| 4ffa5c8c88 | |||
| 5e076e6d30 | |||
| dcb2c5affd | |||
| 3ac3906fea | |||
| 2d597a68b9 | |||
| 1bfe3dec3c | |||
| ea0b05c32b | |||
| 9c64469f1e | |||
| 2a4ebdf347 | |||
| d5756faef4 | |||
| 77fb5cf425 | |||
| 46141e98d5 | |||
| 5ac51f86ad | |||
| 0af4fce080 | |||
| 4fb42763a2 | |||
| 211d29c0e1 | |||
| da7bca9c16 | |||
| ec346a7b8d | |||
| 81d1082bfd | |||
| 3f8cee7d73 | |||
| aae9d68818 | |||
| f43d21eab3 | |||
| 9e1e4ddd91 | |||
| 8d1cd837d1 | |||
| dc277d1d99 | |||
|
|
b7ad6d906a | ||
|
|
3cfc16f5ff | ||
|
|
05bf567f3b | ||
|
|
ff1b9d4250 | ||
|
|
9b9de013db | ||
|
|
c546f6da23 | ||
| 8a08974f15 | |||
| 04d23354b9 | |||
| ddad6e7b6f | |||
| 9a17604e70 | |||
| c7e3359f08 | |||
| 16d068353a | |||
| f7b4c91163 | |||
| 55536a13db | |||
| 66abb7116f | |||
| bb89d5d24e | |||
| ad7a2ddf65 | |||
| 19031a7d11 | |||
| 1c9887bd45 | |||
| 209b979e56 | |||
| 34ce5c1d21 | |||
| 605aff2461 | |||
| ba1c40df7c | |||
| e25dafa9ca | |||
| ce78836328 | |||
| 8225c313b9 | |||
| be78b33570 | |||
| 9926fe3036 | |||
|
|
718390cfba | ||
|
|
6f864fc10e | ||
|
|
4b6cb2bcdd | ||
|
|
c866609f24 | ||
|
|
ee193edd42 | ||
|
|
40c55d65b3 | ||
|
|
a83b3a5331 | ||
|
|
65098a4120 | ||
|
|
0650fba936 | ||
|
|
16244acd3c | ||
|
|
fe52b0aa1a | ||
|
|
2af0fe894e | ||
|
|
387481799b | ||
|
|
d606155f17 | ||
|
|
c4d639e72a | ||
|
|
19d10b3161 | ||
|
|
220e2f9b12 | ||
|
|
3661874c92 | ||
|
|
a9a3ce535c | ||
|
|
6a81b2c6a0 | ||
|
|
139fac2928 | ||
| dcc6a36bf7 | |||
| 3b7fd004b8 | |||
| 2796764905 | |||
| 4c27619ee9 | |||
| a40737c06b | |||
| 34aebf7eea | |||
| da350d0d54 | |||
| 243807cbe5 | |||
| b3c18ebc4e | |||
| f25f067e9c | |||
| 74d269304c | |||
| c949cb5c8c | |||
| 2495919611 | |||
| 7ed4f6c704 | |||
| eb828f3807 | |||
| a98708302b | |||
| 0dae3e206f | |||
| 505e6f45c1 | |||
| 424de7d9c4 | |||
| 1a0de528e1 | |||
| d795dd76a6 | |||
|
|
45924d28e0 | ||
|
|
b1d0a0d036 | ||
|
|
45e9cf9a94 | ||
|
|
a8dcff2f0d | ||
| 53a7d25923 | |||
|
|
c701e7e98e | ||
|
|
bf8e097756 | ||
|
|
837a2bbdde | ||
|
|
6fb361a965 | ||
| 1db2cba81d | |||
| ce43a67cbd | |||
| 7ac8f056ed | |||
| d157e96aac | |||
| 1d1e3e9527 | |||
| 48d37e6b45 | |||
| 5d03f20831 | |||
| 9e72edb544 | |||
| 4476c71f62 | |||
| e9471b3072 | |||
| 4082cb27c3 | |||
| 88cdffddb6 | |||
| b27d1416b5 | |||
| ab97b5fe54 | |||
| bbaa207603 | |||
|
|
605937bbac | ||
|
|
594fcb9a0d | ||
|
|
e033c0cfb2 | ||
|
|
53ebbab941 | ||
| 86adc529ef | |||
| 3a774d37f8 | |||
| 5f6b1e2b16 | |||
| 584caf54b2 | |||
| d602c1cdcb | |||
| 12ce14b6e5 | |||
| e02709b3a4 | |||
| b19709039d | |||
| 3c4ffbf267 | |||
| 4942da0c88 | |||
| 5f547257ac | |||
| 1b99366887 | |||
| 871af36ac5 | |||
| 0ad6d2aec9 | |||
| 8837d2f275 | |||
| 09a17127a9 | |||
| 3699c5bc4c | |||
| 157b0867fa | |||
| 56529964f3 | |||
| c28e240fce | |||
| b04b2dab22 | |||
| 8edcd7b07f | |||
| ca78451122 | |||
| 4cc44e3dce | |||
| e81d3a1d7d | |||
| 53dd61b80a | |||
| 5b754d320f | |||
| 2be2658cfc | |||
| 2b157096e6 | |||
| 71eaddfd84 | |||
| 5589deb3ad | |||
| 0bb80e373b | |||
| 4acdd83984 | |||
| d12d38f970 | |||
| 74d9749255 | |||
| 3276ada78a | |||
| de378eec34 | |||
| dbb2d875fb | |||
| c7f966a1f5 | |||
| 7889dda6f8 | |||
| a2ccf3b631 | |||
| 57db34b303 | |||
| 4f790758af | |||
| ce9dfc6bb4 | |||
| 4f40ad1927 | |||
| a42a4010d6 | |||
| a2aa17fafc | |||
| 5bf2784db2 | |||
| 7a4e7b7600 | |||
| 70aa23513f | |||
| 71ded2f25f | |||
| 11103351b2 | |||
| 146a413977 | |||
| 4e44550f62 | |||
| 9952470486 | |||
| 02d30dedbc | |||
| 5ed0fe52a0 | |||
| 42b1f774da | |||
| 7738b68320 | |||
| 1199fabe90 | |||
| 1aefc5f2f0 | |||
| 6f666c6c22 |
@@ -6,3 +6,7 @@ root = true
|
||||
# as some compilers complain about files not ending in newline
|
||||
[*]
|
||||
insert_final_newline = true
|
||||
|
||||
# Part of readline test that needs file without final newline
|
||||
[modules/libcom/test/multiline-input.txt]
|
||||
insert_final_newline = false
|
||||
|
||||
24
.github/workflows/ci-scripts-build.yml
vendored
24
.github/workflows/ci-scripts-build.yml
vendored
@@ -153,27 +153,27 @@ jobs:
|
||||
configuration: default
|
||||
name: "MacOS clang"
|
||||
|
||||
- os: windows-2019
|
||||
cmp: vs2019
|
||||
- os: windows-2022
|
||||
cmp: vs2022
|
||||
configuration: debug
|
||||
name: "Win2019 MSC-19"
|
||||
name: "Win-22 MSC-22"
|
||||
extra: "CMD_CXXFLAGS=-analysis"
|
||||
|
||||
- os: windows-2019
|
||||
cmp: vs2019
|
||||
- os: windows-2022
|
||||
cmp: vs2022
|
||||
configuration: static-debug
|
||||
name: "Win2019 MSC-19, static"
|
||||
name: "Win-22 MSC-22, static"
|
||||
extra: "CMD_CXXFLAGS=-analysis"
|
||||
|
||||
- os: windows-2019
|
||||
cmp: vs2019
|
||||
- os: windows-2022
|
||||
cmp: vs2022
|
||||
configuration: debug
|
||||
name: "Win2019 MSC-19, debug"
|
||||
name: "Win-22 MSC-22, debug"
|
||||
|
||||
- os: windows-2019
|
||||
- os: windows-2022
|
||||
cmp: gcc
|
||||
configuration: default
|
||||
name: "Win2019 mingw"
|
||||
name: "Win-22 mingw"
|
||||
|
||||
# Cross builds
|
||||
|
||||
@@ -322,7 +322,7 @@ jobs:
|
||||
yum -y install \
|
||||
curl make gcc curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker \
|
||||
python3 gdb make perl gcc-c++ glibc-devel readline-devel ncurses-devel perl-devel perl-Test-Simple \
|
||||
libevent-devel sudo re2c
|
||||
libevent-devel sudo re2c perl-version
|
||||
[ -e /usr/bin/python ] || ln -sf /usr/bin/python3 /usr/bin/python
|
||||
|
||||
# fake out cue.py
|
||||
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -19,3 +19,7 @@ O.*/
|
||||
.*.swp
|
||||
.DS_Store
|
||||
.iocsh_history
|
||||
RPMS
|
||||
SRPMS
|
||||
BUILDROOT
|
||||
*.rpm
|
||||
|
||||
6
.gitmodules
vendored
6
.gitmodules
vendored
@@ -1,6 +1,7 @@
|
||||
[submodule "modules/pvData"]
|
||||
path = modules/pvData
|
||||
url = https://github.com/epics-base/pvDataCPP
|
||||
# url = https://github.com/epics-base/pvDataCPP
|
||||
url = ./pvData.git
|
||||
branch = master
|
||||
[submodule "modules/pvAccess"]
|
||||
path = modules/pvAccess
|
||||
@@ -26,3 +27,6 @@
|
||||
path = .ci
|
||||
url = https://github.com/epics-base/ci-scripts
|
||||
branch = master
|
||||
[submodule "modules/pcas"]
|
||||
path = modules/pcas
|
||||
url = https://github.com/epics-modules/pcas
|
||||
|
||||
10
Makefile
10
Makefile
@@ -23,3 +23,13 @@ DIRS += modules
|
||||
modules_DEPEND_DIRS = src
|
||||
|
||||
include $(TOP)/configure/RULES_TOP
|
||||
|
||||
UNINSTALL_DIRS += $(INSTALL_LOCATION)/src
|
||||
copysrc:
|
||||
tar cf - --exclude-vcs --exclude-backups --exclude=O.* modules/*/src | tar xf - -C $(INSTALL_LOCATION)
|
||||
|
||||
tar:
|
||||
tar cfjP epics_base-$(EPICS_VERSION_NUMBER).tar.bz2 $(INSTALL_LOCATION)
|
||||
|
||||
rpm:
|
||||
rpmbuild -bb epics-base.spec
|
||||
|
||||
280
configure/CONFIG.msvcCommon
Normal file
280
configure/CONFIG.msvcCommon
Normal file
@@ -0,0 +1,280 @@
|
||||
# MSVC/clang-cl compiler defaults
|
||||
|
||||
CMPLR_CLASS = msvc
|
||||
|
||||
OPT_WHOLE_PROGRAM = YES
|
||||
|
||||
#-------------------------------------------------------
|
||||
|
||||
WINLINK = link
|
||||
|
||||
RCCMD = $(MSVC_PREFIX)rc$(MSVC_SUFFIX) -nologo -l 0x409 $(INCLUDES) -fo $@ $<
|
||||
|
||||
ARCMD = $(MSVC_PREFIX)lib$(MSVC_SUFFIX) -nologo -verbose -out:$@ $(LIB_OPT_LDFLAGS) $(LIBRARY_LD_OBJS)
|
||||
|
||||
#
|
||||
# Configure OS vendor C compiler
|
||||
CC = cl
|
||||
|
||||
# OS vendor c preprocessor
|
||||
CPP = $(CC) -nologo -C -E
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
#
|
||||
# -EHsc - generate code for exceptions
|
||||
# -GR - generate code for run time type identification
|
||||
#
|
||||
CCC = $(CC) -EHsc -GR
|
||||
|
||||
# Override CONFIG.gnuCommon settings for cross builds.
|
||||
GNU = NO
|
||||
HDEPENDS_METHOD = MKMF
|
||||
|
||||
# Compiler flags for C files (C++ is below)
|
||||
|
||||
#
|
||||
# -W<d> display warnings at level d
|
||||
# -W4 is for maximum (lint type) warnings
|
||||
# -W3 is for production quality warnings
|
||||
# -W2 displays significant warnings
|
||||
# -W1 is the default and shows severe warnings only
|
||||
# -w<d><n> Set warning C<n> to be shown at level <d>
|
||||
WARN_CFLAGS_YES = -W3
|
||||
WARN_CFLAGS_NO = -W1
|
||||
|
||||
#
|
||||
# -Ox maximum optimizations
|
||||
# -GL whole program optimization
|
||||
# -Oy- re-enable creation of frame pointers
|
||||
OPT_CFLAGS_YES_YES = -Ox -GL -Oy-
|
||||
OPT_CFLAGS_YES_NO = -Ox -Oy-
|
||||
OPT_CFLAGS_YES = $(OPT_CFLAGS_YES_$(OPT_WHOLE_PROGRAM))
|
||||
|
||||
#
|
||||
# -Z7 generate C7 compatible debugging information (inside .obj)
|
||||
# -RTCsu enable run-time error checks
|
||||
OPT_CFLAGS_NO = -Z7 -RTCsu
|
||||
|
||||
# specify object file name and location
|
||||
OBJ_CFLAG = -Fo
|
||||
|
||||
#
|
||||
# the following options are required when
|
||||
# vis c++ compiles the code (and includes
|
||||
# the header files)
|
||||
#
|
||||
# -MT static multithreaded C RTL
|
||||
# -MTd static multithreaded C RTL (debug version)
|
||||
# -MD multithreaded C RTL in DLL
|
||||
# -MDd multithreaded C RTL in DLL (debug version)
|
||||
BUILD_DLL_CFLAGS_NO =
|
||||
BUILD_DLL_CFLAGS_YES = -DEPICS_BUILD_DLL
|
||||
BUILD_DLL_CFLAGS = $(BUILD_DLL_CFLAGS_$(SHARED_LIBRARIES))
|
||||
VISC_CFLAGS_DEBUG_NO = d
|
||||
VISC_CFLAGS_DEBUG_YES =
|
||||
VISC_CFLAGS_DEBUG = $(VISC_CFLAGS_DEBUG_$(HOST_OPT))
|
||||
STATIC_CFLAGS_YES= -MT$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS)
|
||||
STATIC_CFLAGS_NO= -MD$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS) -DEPICS_CALL_DLL
|
||||
|
||||
# Other compiler flags, used for CPP, C and C++
|
||||
#
|
||||
# -FC - Show absolute path of source file in diagnostics
|
||||
# -D__STDC__=0 gives us both:
|
||||
# 1) define STDC for code (pretend ANSI conformance)
|
||||
# 2) set it to 0 to use MS C "extensions" (open for _open etc.)
|
||||
# because MS uses: if __STDC__ ... disable many nice things
|
||||
#
|
||||
CODE_CPPFLAGS += -nologo -FC -D__STDC__=0
|
||||
CODE_CPPFLAGS += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
|
||||
|
||||
# Compiler flags for C++ files
|
||||
|
||||
#
|
||||
# -W<n> disable warnings from levels > n
|
||||
# -w<n><m> set warning m to level n
|
||||
# -w44355 "'this' used in the base initializer list"
|
||||
# -w44344 "behavior change: use of explicit template arguments results in ..."
|
||||
# -w44251 "class needs to have dll-interface to be used by clients of ..."
|
||||
WARN_CXXFLAGS_YES = -W3 -w44355 -w44344 -w44251
|
||||
WARN_CXXFLAGS_NO = -W1
|
||||
|
||||
# Silence tr1 namespace deprecation warnings
|
||||
WARN_CXXFLAGS += -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
|
||||
|
||||
#
|
||||
# -Ox maximum optimizations
|
||||
# -GL whole program optimization
|
||||
# -Oy- re-enable creation of frame pointers
|
||||
OPT_CXXFLAGS_YES_YES = -Ox -GL -Oy-
|
||||
OPT_CXXFLAGS_YES_NO = -Ox -Oy-
|
||||
OPT_CXXFLAGS_YES = $(OPT_CXXFLAGS_YES_$(OPT_WHOLE_PROGRAM))
|
||||
|
||||
#
|
||||
# -Z7 generate C7 compatible debugging information (inside .obj)
|
||||
# -RTCsu enable run-time error checks
|
||||
OPT_CXXFLAGS_NO = -RTCsu -Z7
|
||||
|
||||
# specify object file name and location
|
||||
OBJ_CXXFLAG = -Fo
|
||||
|
||||
#
|
||||
# the following options are required when
|
||||
# vis c++ compiles the code (and includes
|
||||
# the header files)
|
||||
#
|
||||
# -MT static multithreaded C RTL
|
||||
# -MTd static multithreaded C RTL (debug version)
|
||||
# -MD multithreaded C RTL in DLL
|
||||
# -MDd multithreaded C RTL in DLL (debug version)
|
||||
STATIC_CXXFLAGS_YES= -MT$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS)
|
||||
STATIC_CXXFLAGS_NO= -MD$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS) -DEPICS_CALL_DLL
|
||||
|
||||
STATIC_LDLIBS_YES=ws2_32.lib advapi32.lib user32.lib kernel32.lib winmm.lib dbghelp.lib
|
||||
STATIC_LDLIBS_NO=
|
||||
STATIC_LDFLAGS=
|
||||
RANLIB=
|
||||
|
||||
# add -profile here to run the ms profiler
|
||||
# -LTCG whole program optimization
|
||||
# -incremental:no full linking
|
||||
# -fixed:no generate relocatable code
|
||||
# -version:<major>.<minor> - only 2 components allowed, 0-65535 each
|
||||
# -debug generate debugging info
|
||||
LINK_OPT_FLAGS_WHOLE_YES = -LTCG
|
||||
LINK_OPT_FLAGS_YES = $(LINK_OPT_FLAGS_WHOLE_$(OPT_WHOLE_PROGRAM))
|
||||
LINK_OPT_FLAGS_YES += -incremental:no -opt:ref
|
||||
LINK_OPT_FLAGS_YES += -release $(PROD_VERSION:%=-version:%)
|
||||
LINK_OPT_FLAGS_NO = -debug -incremental:no -fixed:no
|
||||
OPT_LDFLAGS = $(LINK_OPT_FLAGS_$(HOST_OPT))
|
||||
|
||||
LIB_OPT_FLAGS_YES = $(LINK_OPT_FLAGS_WHOLE_$(OPT_WHOLE_PROGRAM))
|
||||
LIB_OPT_LDFLAGS = $(LIB_OPT_FLAGS_$(HOST_OPT))
|
||||
|
||||
ARCH_DEP_CFLAGS=
|
||||
SHRLIB_CFLAGS=
|
||||
|
||||
OS_CLASS=WIN32
|
||||
POSIX=NO
|
||||
|
||||
# ifdef WIN32 looks better that ifeq ($(OS_CLASS),WIN32) ??
|
||||
WIN32=1
|
||||
|
||||
EXE=.exe
|
||||
OBJ=.obj
|
||||
RES=.res
|
||||
|
||||
# MS Visual C++ doesn't recognize *.cc as a C++ source file,
|
||||
# so C++ compiles get the flag -TP
|
||||
COMPILER_CXXFLAGS = -TP
|
||||
|
||||
# Operating system flags
|
||||
OP_SYS_CFLAGS =
|
||||
OP_SYS_CXXFLAGS = $(COMPILER_CXXFLAGS)
|
||||
|
||||
# Files and flags needed to link DLLs (used in RULES_BUILD)
|
||||
WIN32_DLLFLAGS = -subsystem:windows -dll $(OPT_LDFLAGS) \
|
||||
$(USR_LDFLAGS) $(CMD_LDFLAGS) $(TARGET_LDFLAGS) $(LIB_LDFLAGS)
|
||||
|
||||
# Specify dll .def file only if it exists
|
||||
DLL_DEF_FLAG = $(addprefix -def:,$(wildcard ../$(addsuffix .def,$*)))
|
||||
|
||||
# A WIN32 dll has three parts:
|
||||
# x.dll: the real dll (SHRLIBNAME)
|
||||
# x.lib: what you link to progs that use the dll (DLLSTUB_LIBNAME)
|
||||
# x.exp: what you need to build the dll (in no variable)
|
||||
LINK.shrlib = $(WINLINK) -nologo $(WIN32_DLLFLAGS) -out:$@ \
|
||||
-implib:$(@:%$(SHRLIB_SUFFIX)=%$(LIB_SUFFIX)) \
|
||||
$(DLL_DEF_FLAG) $(LIBRARY_LD_OBJS) $(LIBRARY_LD_RESS) $(SHRLIB_LDLIBS)
|
||||
|
||||
# Adjust names of libraries to build
|
||||
SHRLIB_SUFFIX_BASE = .dll
|
||||
SHRLIB_SUFFIX = $(SHRLIB_SUFFIX_BASE)
|
||||
SHRLIBNAME_YES = $(BUILD_LIBRARY:%=%$(SHRLIB_SUFFIX))
|
||||
LOADABLE_SHRLIBNAME = $(LOADABLE_BUILD_LIBRARY:%=%$(SHRLIB_SUFFIX))
|
||||
TESTSHRLIBNAME_YES = $(TESTBUILD_LIBRARY:%=%$(SHRLIB_SUFFIX_BASE))
|
||||
|
||||
# When SHARED_LIBRARIES is YES we are building a DLL shared library.
|
||||
# When SHARED_LIBRARIES is NO we are building an object library
|
||||
DLLSTUB_SUFFIX = .lib
|
||||
DLLSTUB_LIBNAME_YES = $(BUILD_LIBRARY:%=%.lib)
|
||||
DLLSTUB_LIBNAME = $(DLLSTUB_LIBNAME_$(SHARED_LIBRARIES))
|
||||
TESTDLLSTUB_LIBNAME_YES = $(TESTBUILD_LIBRARY:%=%.lib)
|
||||
TESTDLLSTUB_LIBNAME = $(TESTDLLSTUB_LIBNAME_$(SHARED_LIBRARIES))
|
||||
|
||||
LIB_PREFIX=
|
||||
LIB_SUFFIX=.lib
|
||||
LIBNAME_NO = $(BUILD_LIBRARY:%=%.lib)
|
||||
LIBNAME = $(LIBNAME_$(SHARED_LIBRARIES))
|
||||
TESTLIBNAME_NO = $(TESTBUILD_LIBRARY:%=%.lib)
|
||||
TESTLIBNAME = $(TESTLIBNAME_$(SHARED_LIBRARIES))
|
||||
|
||||
# dll install location
|
||||
INSTALL_SHRLIB = $(INSTALL_BIN)
|
||||
|
||||
|
||||
#--------------------------------------------------
|
||||
# Products dependancy definitions
|
||||
|
||||
PROD_DEPLIBS = $(foreach lib, $(PROD_LIBS) $(USR_LIBS), \
|
||||
$(firstword $(wildcard \
|
||||
$(addsuffix /$(DLLSTUB_PREFIX)$(lib)$(DLLSTUB_SUFFIX), \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS)) \
|
||||
$(addsuffix /$(SHRLIB_PREFIX)$(lib)*$(SHRLIB_SUFFIX_BASE)*, \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS)) \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS)) \
|
||||
) $(addsuffix /$(BUILDLIB_PREFIX)$(lib)$(BUILDLIB_SUFFIX), \
|
||||
$(if $(filter $(lib),$(TESTLIBRARY)),.,$(INSTALL_LIB)))))
|
||||
|
||||
|
||||
PROD_LDLIBS += $($*_DEPLIBS) $(PROD_DEPLIBS)
|
||||
PROD_LDLIBS += $(addsuffix .lib, \
|
||||
$($*_SYS_LIBS) $(PROD_SYS_LIBS) $(USR_SYS_LIBS))
|
||||
|
||||
LDLIBS_STATIC_YES = LDLIBS
|
||||
LDLIBS_SHARED_NO = LDLIBS
|
||||
PROD_LDLIBS += $(STATIC_LDLIBS) \
|
||||
$($(firstword $(LDLIBS_STATIC_$(STATIC_BUILD)) \
|
||||
$(LDLIBS_SHARED_$(SHARED_LIBRARIES))))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Libraries dependancy definitions
|
||||
|
||||
# libs that we need to link the DLL with
|
||||
# (it isnt necessary to rebuild the dll if these change)
|
||||
|
||||
SHRLIB_DEPLIBS = $(foreach lib, $(LIB_LIBS) $(USR_LIBS), \
|
||||
$(firstword $(wildcard \
|
||||
$(addsuffix /$(DLLSTUB_PREFIX)$(lib)$(DLLSTUB_SUFFIX), \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS)) \
|
||||
$(addsuffix /$(SHRLIB_PREFIX)$(lib)*$(SHRLIB_SUFFIX_BASE)*, \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS)) \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS)) \
|
||||
) $(addsuffix /$(BUILDLIB_PREFIX)$(lib)$(BUILDLIB_SUFFIX), \
|
||||
$(if $(filter $(lib),$(TESTLIBRARY)),.,$(INSTALL_LIB)))))
|
||||
|
||||
|
||||
SHRLIB_LDLIBS += $($*_DLL_DEPLIBS) $($*_DEPLIBS) $(SHRLIB_DEPLIBS)
|
||||
SHRLIB_LDLIBS += $(addsuffix .lib, \
|
||||
$($*_SYS_DLL_LIBS) \
|
||||
$($*_SYS_LIBS) $(LIB_SYS_LIBS) $(USR_SYS_LIBS) )
|
||||
|
||||
#--------------------------------------------------
|
||||
# Linker definition
|
||||
LINK.cpp = $(WINLINK) -nologo $(STATIC_LDFLAGS) $(LDFLAGS) $(PROD_LDFLAGS) \
|
||||
-out:$@ $(PROD_LD_OBJS) $(PROD_LD_RESS) $(PROD_LDLIBS)
|
||||
|
||||
#--------------------------------------------------
|
||||
# UseManifestTool.pl checks MS Visual c++ compiler version number to
|
||||
# decide whether or not to use the Manifest Tool command to embed the
|
||||
# linker created .manifest file into a library or product target.
|
||||
# useManifestTool.pl returns 0(don't use) or 1(use).
|
||||
#
|
||||
MT.exe = $(MSVC_PREFIX)mt$(MSVC_SUFFIX) -nologo -manifest $@.manifest
|
||||
MT_DLL_COMMAND1 = $(MT.exe) "-outputresource:$@;\#2"
|
||||
MT_EXE_COMMAND_YES =
|
||||
MT_EXE_COMMAND_NO = $(MT.exe) "-outputresource:$@;\#1"
|
||||
MT_EXE_COMMAND1 = $(MT_EXE_COMMAND_$(STATIC_BUILD))
|
||||
MT_DLL_COMMAND = $(MT_DLL_COMMAND$(shell $(PERL) $(TOOLS)/useManifestTool.pl))
|
||||
MT_EXE_COMMAND = $(MT_EXE_COMMAND$(shell $(PERL) $(TOOLS)/useManifestTool.pl))
|
||||
@@ -157,7 +157,9 @@ USE_POSIX_THREAD_PRIORITY_SCHEDULING = YES
|
||||
|
||||
# Site version number, if set will append '-' and this string to the
|
||||
# EPICS version number string that is reported by many tools.
|
||||
EPICS_SITE_VERSION =
|
||||
ifeq ($(INSTALL_LOCATION),$(EPICS_BASE))
|
||||
EPICS_SITE_VERSION=$(shell $(PERL) -MPOSIX -e 'print strftime "%Y-%m-%d", localtime')
|
||||
endif
|
||||
|
||||
# For GNU compiler, use pipes rather than temporary files for
|
||||
# communication between the various stages of compilation.
|
||||
|
||||
@@ -71,7 +71,7 @@ EPICS_TS_NTP_INET=
|
||||
# Number of lines of command history to keep.
|
||||
# IOCSH_HISTEDIT_DISABLE
|
||||
# Prevents use of readline or equivalent if defined.
|
||||
IOCSH_PS1="epics> "
|
||||
IOCSH_PS1=ANSI_GREEN("epics> ")
|
||||
IOCSH_HISTSIZE=50
|
||||
IOCSH_HISTEDIT_DISABLE=
|
||||
|
||||
|
||||
@@ -101,6 +101,23 @@ include $(CONFIG)/RULES_FILE_TYPE
|
||||
|
||||
include $(CONFIG)/RULES.Db
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Do not build anything if current path matches SKIP_BUILDS
|
||||
|
||||
ifneq (,$(strip $(SKIP_BUILDS)))
|
||||
CURRENT_MODULE=$(subst modules/,,$(subst $(realpath $(TOP)/..)/,,$(subst $(realpath $(dir $(lastword $(MAKEFILE_LIST)))..)/,,$(realpath ..))))
|
||||
ifneq ($(filter $(SKIP_BUILDS) $(addsuffix /%,$(SKIP_BUILDS)),$(CURRENT_MODULE)),)
|
||||
$(info Skipping $(CURRENT_MODULE) for $(T_A))
|
||||
PROD=
|
||||
TESTPROD=
|
||||
LIBRARY=
|
||||
TESTLIBRARY=
|
||||
LOADABLE_LIBRARY=
|
||||
TESTS=
|
||||
SRC_FILES=
|
||||
endif
|
||||
endif
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Include defines and rules for prod, library and test* targets
|
||||
|
||||
@@ -227,7 +244,7 @@ $(LOADABLE_SHRLIBNAME): FINAL_DIR=$(INSTALL_SHRLIB)
|
||||
|
||||
$(TESTPRODNAME) $(PRODNAME): $(PRODUCT_OBJS) $(PROD_RESS) $(PROD_DEPLIBS)
|
||||
|
||||
$(TESTPRODNAME) $(PRODNAME): %$(EXE): | $(INSTALL_LIB)
|
||||
$(TESTPRODNAME) $(PRODNAME): %$(EXE):
|
||||
@$(RM) $@
|
||||
$(LINK.cpp)
|
||||
$(MT_EXE_COMMAND)
|
||||
@@ -330,10 +347,6 @@ $(LOADABLE_SHRLIBNAME): $(LOADABLE_SHRLIB_PREFIX)%$(LOADABLE_SHRLIB_SUFFIX):
|
||||
$(LINK.shrlib)
|
||||
$(MT_DLL_COMMAND)
|
||||
|
||||
$(LIBNAME) $(SHRLIBNAME) $(LOADABLE_SHRLIBNAME): | $(INSTALL_LIB)
|
||||
$(INSTALL_LIB):
|
||||
@$(MKDIR) $@
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# C++ munching for VxWorks
|
||||
|
||||
@@ -502,6 +515,13 @@ ifneq (,$(strip $(SHRLIB_VERSION)))
|
||||
@$(RM) $(subst $(SHRLIB_SUFFIX),$(SHRLIB_SUFFIX_BASE),$@)
|
||||
ln -s $< $(subst $(SHRLIB_SUFFIX),$(SHRLIB_SUFFIX_BASE),$@)
|
||||
endif # SHRLIB_VERSION
|
||||
else # SHRLIB_SUFFIX
|
||||
ifeq ($(BUILD_CLASS),HOST)
|
||||
ifneq (,$(strip $(SHRLIB_VERSION)))
|
||||
@$(RM) $@.$(SHRLIB_VERSION)
|
||||
ln -s $< $@.$(SHRLIB_VERSION)
|
||||
endif # HOST
|
||||
endif # SHRLIB_VERSION
|
||||
endif # SHRLIB_SUFFIX
|
||||
|
||||
ifneq ($(INSTALL_TCLLIB),$(INSTALL_BIN))
|
||||
@@ -562,11 +582,11 @@ $(INSTALL_DOC)/%: $(COMMON_DIR)/%
|
||||
|
||||
$(INSTALL_DOC)/%: %
|
||||
$(ECHO) "Installing doc $@"
|
||||
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(INSTALL_DOC)
|
||||
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
|
||||
|
||||
$(INSTALL_DOC)/%: ../%
|
||||
$(ECHO) "Installing doc $@"
|
||||
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(INSTALL_DOC)
|
||||
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
|
||||
|
||||
$(INSTALL_HTML)/$(HTMLS_DIR)/%: $(COMMON_DIR)/%
|
||||
$(ECHO) "Installing generated html $@"
|
||||
|
||||
@@ -41,7 +41,7 @@ RELEASE.host: $(RELEASE_LOCAL)
|
||||
|
||||
$(RELEASE_LOCAL): Makefile $(CONFIG)/CONFIG_SITE \
|
||||
$(wildcard $(CONFIG)/CONFIG_SITE.local)
|
||||
$(ECHO) Creating $@ with
|
||||
$(ECHO) "Creating $@ with"
|
||||
$(ECHO) " $(PARENT_MODULE) = $(INSTALL_ABSOLUTE)"
|
||||
@echo $(PARENT_MODULE) = $(INSTALL_ABSOLUTE)> $@
|
||||
|
||||
|
||||
8
configure/os/CONFIG.Common.RHEL7-x86_64
Normal file
8
configure/os/CONFIG.Common.RHEL7-x86_64
Normal file
@@ -0,0 +1,8 @@
|
||||
# Include definitions common to linux pentium targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linux-x86_64
|
||||
|
||||
BUILD_CLASS = HOST
|
||||
|
||||
TOOLSET_LOCATION = /opt/rh
|
||||
TOOLSET = devtoolset-12
|
||||
STD_CXXFLAGS = -std=c++20
|
||||
3
configure/os/CONFIG.Common.RHEL7-x86_64-clang
Normal file
3
configure/os/CONFIG.Common.RHEL7-x86_64-clang
Normal file
@@ -0,0 +1,3 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.linux-clang
|
||||
|
||||
BUILD_CLASS = HOST
|
||||
20
configure/os/CONFIG.Common.RHEL8-x86_64
Normal file
20
configure/os/CONFIG.Common.RHEL8-x86_64
Normal file
@@ -0,0 +1,20 @@
|
||||
# Include definitions common to linux pentium targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linux-x86_64
|
||||
|
||||
BUILD_CLASS = HOST
|
||||
|
||||
TOOLSET_LOCATION = /opt/rh
|
||||
TOOLSET = gcc-toolset-12
|
||||
STD_CXXFLAGS = -std=c++20
|
||||
|
||||
# Fix bug in gcc-toolset-11 calling the old assembler
|
||||
ifneq ($(filter %-11,$(TOOLSET)),)
|
||||
CPPFLAGS += $(TOOLSET_DIR:%=-B$(SYSROOT)%/bin)
|
||||
LDFLAGS += $(TOOLSET_DIR:%=-B$(SYSROOT)%/bin)
|
||||
endif
|
||||
|
||||
ifneq (($(TOOLSET)),)
|
||||
# Perl requests (native) annobin incompatible with the annobin from any TOOLSET
|
||||
# Disable Perl specific CFLAGS
|
||||
override Cap5_CFLAGS=
|
||||
endif
|
||||
5
configure/os/CONFIG.Common.RHEL8-x86_64-clang
Normal file
5
configure/os/CONFIG.Common.RHEL8-x86_64-clang
Normal file
@@ -0,0 +1,5 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.linux-clang
|
||||
|
||||
BUILD_CLASS = HOST
|
||||
|
||||
STD_CXXFLAGS = -std=c++2a
|
||||
20
configure/os/CONFIG.Common.RHEL9-x86_64
Normal file
20
configure/os/CONFIG.Common.RHEL9-x86_64
Normal file
@@ -0,0 +1,20 @@
|
||||
# Include definitions common to linux pentium targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linux-x86_64
|
||||
|
||||
BUILD_CLASS = HOST
|
||||
|
||||
TOOLSET_LOCATION = /opt/rh
|
||||
TOOLSET = gcc-toolset-12
|
||||
STD_CXXFLAGS = -std=c++20
|
||||
|
||||
# Fix bug in gcc-toolset-11 calling the old assembler
|
||||
ifneq ($(filter %-11,$(TOOLSET)),)
|
||||
CPPFLAGS += $(TOOLSET_DIR:%=-B$(SYSROOT)%/bin)
|
||||
LDFLAGS += $(TOOLSET_DIR:%=-B$(SYSROOT)%/bin)
|
||||
endif
|
||||
|
||||
ifneq (($(TOOLSET)),)
|
||||
# Perl requests (native) annobin incompatible with the annobin from any TOOLSET
|
||||
# Disable Perl specific CFLAGS
|
||||
override Cap5_CFLAGS=
|
||||
endif
|
||||
5
configure/os/CONFIG.Common.RHEL9-x86_64-clang
Normal file
5
configure/os/CONFIG.Common.RHEL9-x86_64-clang
Normal file
@@ -0,0 +1,5 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.linux-clang
|
||||
|
||||
BUILD_CLASS = HOST
|
||||
|
||||
STD_CXXFLAGS = -std=c++2a
|
||||
@@ -165,7 +165,8 @@ MOD_SYS_LDFLAGS += $(CPU_CFLAGS) -Wl,-r -nostdlib
|
||||
GESYS_LIBS += -lgcc
|
||||
GESYS_LIBS += -lc -lm -lrtemscpu -lrtemsbsp -lrtems++
|
||||
GESYS_LIBS += -lcexp -ltecla_r -lspencer_regexp -lpmelf -lpmbfd
|
||||
GESYS_LIBS += -lnfs -ltelnetd -lrtems-gdb-stub
|
||||
GESYS_LIBS += -lnfs -ltelnetd -lrtems-gdb-stub -lbsd -ltftpfs -lz
|
||||
GESYS_LIBS += -lnetworking
|
||||
|
||||
# While not part of the Generic Image it provides symbols which
|
||||
# would conflict.
|
||||
|
||||
2
configure/os/CONFIG.Common.RTEMS49-pc386
Normal file
2
configure/os/CONFIG.Common.RTEMS49-pc386
Normal file
@@ -0,0 +1,2 @@
|
||||
RTEMS_VERSION = 4.9
|
||||
include $(CONFIG)/os/CONFIG.Common.RTEMS-pc386
|
||||
2
configure/os/CONFIG.Common.RTEMS51-pc686
Normal file
2
configure/os/CONFIG.Common.RTEMS51-pc686
Normal file
@@ -0,0 +1,2 @@
|
||||
RTEMS_VERSION = 5
|
||||
include $(CONFIG)/os/CONFIG.Common.RTEMS-pc686
|
||||
8
configure/os/CONFIG.Common.T2-ppc604
Normal file
8
configure/os/CONFIG.Common.T2-ppc604
Normal file
@@ -0,0 +1,8 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
|
||||
VXWORKS_VERSION = 5.5.1
|
||||
WIND_BASE = /opt/VxWorks/Tornado2.2.1
|
||||
|
||||
#there is a problem with our ccppc and optimization
|
||||
# -O0 works, -O and -O1 and higher are buggy
|
||||
OPT_CFLAGS_YES = -O0
|
||||
OPT_CXXFLAGS_YES = -O0
|
||||
@@ -8,7 +8,7 @@
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Unix valid build types
|
||||
VALID_BUILDS = Host Ioc Command
|
||||
VALID_BUILDS = $(if $(filter HOST,$(BUILD_CLASS)),Host) Ioc Command
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Unix prefix and suffix definitions
|
||||
|
||||
2
configure/os/CONFIG.Common.V62-ppc604
Normal file
2
configure/os/CONFIG.Common.V62-ppc604
Normal file
@@ -0,0 +1,2 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
|
||||
VXWORKS_VERSION = 6.2
|
||||
5
configure/os/CONFIG.Common.V63-ppc603
Normal file
5
configure/os/CONFIG.Common.V63-ppc603
Normal file
@@ -0,0 +1,5 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc603_long
|
||||
VXWORKS_VERSION = 6.3
|
||||
|
||||
# Buggy "uninitialized variable" warning produces many false positives
|
||||
ARCH_DEP_CXXFLAGS += -Wno-uninitialized
|
||||
5
configure/os/CONFIG.Common.V63-ppc604
Normal file
5
configure/os/CONFIG.Common.V63-ppc604
Normal file
@@ -0,0 +1,5 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
|
||||
VXWORKS_VERSION = 6.3
|
||||
|
||||
# Buggy "uninitialized variable" warning produces many false positives
|
||||
ARCH_DEP_CXXFLAGS += -Wno-uninitialized
|
||||
5
configure/os/CONFIG.Common.V64-ppc604
Normal file
5
configure/os/CONFIG.Common.V64-ppc604
Normal file
@@ -0,0 +1,5 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
|
||||
VXWORKS_VERSION = 6.4
|
||||
|
||||
# Buggy "uninitialized variable" warning produces many false positives
|
||||
ARCH_DEP_CXXFLAGS += -Wno-uninitialized
|
||||
2
configure/os/CONFIG.Common.V66-ppc603
Normal file
2
configure/os/CONFIG.Common.V66-ppc603
Normal file
@@ -0,0 +1,2 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc603_long
|
||||
VXWORKS_VERSION = 6.6
|
||||
2
configure/os/CONFIG.Common.V66-ppc604
Normal file
2
configure/os/CONFIG.Common.V66-ppc604
Normal file
@@ -0,0 +1,2 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
|
||||
VXWORKS_VERSION = 6.6
|
||||
8
configure/os/CONFIG.Common.V67-ppc604
Normal file
8
configure/os/CONFIG.Common.V67-ppc604
Normal file
@@ -0,0 +1,8 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
|
||||
VXWORKS_VERSION = 6.7
|
||||
|
||||
# needed when including memPartLib.h, e.g. through moduleLib.h or loadLib.h
|
||||
ARCH_DEP_CFLAGS += -D_VSB_CONFIG_FILE='<../lib/h/config/vsbConfig.h>'
|
||||
|
||||
# compiler tries to access license server (even though no license isneeded)
|
||||
export LM_LICENSE_FILE=37000@lic-windriver.psi.ch
|
||||
3
configure/os/CONFIG.Common.V69-ppc32
Normal file
3
configure/os/CONFIG.Common.V69-ppc32
Normal file
@@ -0,0 +1,3 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc32
|
||||
VXWORKS_VERSION = 6.9
|
||||
#export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH:%=%:)$(WIND_BASE)/lmapi-5.0/$(WIND_HOST_TYPE)/lib
|
||||
6
configure/os/CONFIG.Common.V69-ppc604
Normal file
6
configure/os/CONFIG.Common.V69-ppc604
Normal file
@@ -0,0 +1,6 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
|
||||
VXWORKS_VERSION = 6.9
|
||||
#export LD_LIBRARY_PATH:=$(LD_LIBRARY_PATH:%=%:)($(WIND_BASE)/lmapi-5.0/$(WIND_HOST_TYPE)/lib
|
||||
|
||||
# -fno-implicit-fp causes error: "unable to find a register to spill in class 'FLOAT_REGS'"
|
||||
ARCH_DEP_CFLAGS = -mcpu=604 -mstrict-align
|
||||
16
configure/os/CONFIG.Common.deb10-x86_64
Normal file
16
configure/os/CONFIG.Common.deb10-x86_64
Normal file
@@ -0,0 +1,16 @@
|
||||
# Debian 10
|
||||
|
||||
# Include definitions common to all Linux targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linux-x86_64
|
||||
|
||||
BUILD_CLASS = HOST
|
||||
|
||||
STD_CXXFLAGS = -std=c++17
|
||||
|
||||
ifneq ($(EPICS_HOST_ARCH),$(T_A))
|
||||
# Cross compile
|
||||
GNU_DIR = /opt/xgcc/gcc-8.3.0-deb10
|
||||
GNU_TARGET = x86_64-deb10-linux-gnu
|
||||
SYSROOT = $(GNU_DIR)/$(GNU_TARGET)/sys-root
|
||||
CMPLR_PREFIX = $(GNU_TARGET)-
|
||||
endif
|
||||
17
configure/os/CONFIG.Common.deb12-x86_64
Normal file
17
configure/os/CONFIG.Common.deb12-x86_64
Normal file
@@ -0,0 +1,17 @@
|
||||
# Debian 12
|
||||
|
||||
# Include definitions common to all Linux targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linux-x86_64
|
||||
|
||||
BUILD_CLASS = HOST
|
||||
|
||||
STD_CXXFLAGS = -std=c++17
|
||||
|
||||
ifneq ($(EPICS_HOST_ARCH),$(T_A))
|
||||
# Cross compile
|
||||
GNU_DIR = /opt/xgcc/gcc-12.2.0-deb12
|
||||
GNU_TARGET = x86_64-deb12-linux-gnu
|
||||
SYSROOT = $(GNU_DIR)/$(GNU_TARGET)/sys-root
|
||||
CMPLR_PREFIX = $(GNU_TARGET)-
|
||||
ARCH_DEP_LDFLAGS+=-Wl,-rpath-link,$(SYSROOT)/lib/x86_64-linux-gnu
|
||||
endif
|
||||
28
configure/os/CONFIG.Common.eldk42-ppc4xxFP
Normal file
28
configure/os/CONFIG.Common.eldk42-ppc4xxFP
Normal file
@@ -0,0 +1,28 @@
|
||||
# DeltaTau PowerPMAC with ELDK 4.2
|
||||
|
||||
# Include definitions common to all Linux targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linuxCommon
|
||||
|
||||
COMMANDLINE_LIBRARY = READLINE_NCURSES
|
||||
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
ELDK=/opt/eldk-4.2
|
||||
GNU_TARGET=ppc_4xxFP
|
||||
GNU_DIR=$(ELDK)/usr
|
||||
|
||||
# This cross tool chain is installed in a somehow weired way
|
||||
# Without the following lines it does not work on RHEL7
|
||||
# but it worked on SL6
|
||||
ARCH_DEP_CXXFLAGS += -I $(ELDK)/$(GNU_TARGET)/usr/include/c++/4.2.2
|
||||
ARCH_DEP_CXXFLAGS += -I $(ELDK)/$(GNU_TARGET)/usr/include/c++/4.2.2/powerpc-linux
|
||||
ARCH_DEP_CXXFLAGS += -I $(ELDK)/$(GNU_TARGET)/usr/include/c++/4.2.2/backward
|
||||
|
||||
ARCH_DEP_LDFLAGS += -Wl,-rpath-link,$(ELDK)/$(GNU_TARGET)/lib
|
||||
ARCH_DEP_LDFLAGS += -Wl,-rpath-link,$(ELDK)/$(GNU_TARGET)/usr/lib
|
||||
|
||||
# have no C++11
|
||||
STD_CXXFLAGS =
|
||||
|
||||
# suppress strict alias warnings
|
||||
CODE_CPPFLAGS += -fno-strict-aliasing
|
||||
17
configure/os/CONFIG.Common.eldk51-ppc4xxSF
Normal file
17
configure/os/CONFIG.Common.eldk51-ppc4xxSF
Normal file
@@ -0,0 +1,17 @@
|
||||
# Virtex FPGA embedded Processor with ELDK 5.1
|
||||
|
||||
# Include definitions common to all Linux targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linuxCommon
|
||||
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
SDK = eldk
|
||||
SDK_DIR = /opt/eldk-5.1
|
||||
SDK_HOST_ARCH = $(GNU_HOST_ARCH)-$(SDK)-$(GNU_HOST_OS)
|
||||
GNU_TARGET = powerpc-4xx-softfloat
|
||||
GNU_ARCH = ppc405-linux
|
||||
GNU_DIR = $(SDK_DIR)/$(GNU_TARGET)/sysroots/$(SDK_HOST_ARCH)/usr
|
||||
GNU_BIN = $(GNU_DIR)/bin/$(GNU_ARCH)
|
||||
|
||||
# have no full C++11
|
||||
STD_CXXFLAGS = -std=c++0x
|
||||
18
configure/os/CONFIG.Common.eldk52-e500v2
Normal file
18
configure/os/CONFIG.Common.eldk52-e500v2
Normal file
@@ -0,0 +1,18 @@
|
||||
# IOxOS IFC1210 with ELDK 5.2
|
||||
|
||||
# Include definitions common to all Linux targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linuxCommon
|
||||
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
SDK = eldk
|
||||
SDK_DIR = /opt/eldk-5.2
|
||||
SDK_HOST_ARCH = $(GNU_HOST_ARCH)-$(SDK)-$(GNU_HOST_OS)
|
||||
GNU_TARGET = powerpc-e500v2
|
||||
GNU_ARCH = ppce500v2-linux-gnuspe
|
||||
GNU_DIR = $(SDK_DIR)/$(GNU_TARGET)/sysroots/$(SDK_HOST_ARCH)/usr
|
||||
GNU_BIN = $(GNU_DIR)/bin/$(GNU_ARCH)
|
||||
GNU_TARGET_INCLUDE_DIR =
|
||||
|
||||
# have no full C++11
|
||||
STD_CXXFLAGS = -std=c++0x
|
||||
20
configure/os/CONFIG.Common.eldk53-ppc4xxFP
Normal file
20
configure/os/CONFIG.Common.eldk53-ppc4xxFP
Normal file
@@ -0,0 +1,20 @@
|
||||
# DeltaTau PowerPMAC with ELDK 5.3
|
||||
|
||||
# Include definitions common to all Linux targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linuxCommon
|
||||
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
SDK = eldk
|
||||
SDK_DIR = /opt/eldk-5.3
|
||||
SDK_HOST_ARCH = $(GNU_HOST_ARCH)-$(SDK)-$(GNU_HOST_OS)
|
||||
GNU_ARCH = ppc440e-linux
|
||||
SDKTARGETSYSROOT=$(SDK_DIR)/powerpc-4xx/sysroots
|
||||
GNU_DIR = $(SDKTARGETSYSROOT)/$(SDK_HOST_ARCH)/usr
|
||||
GNU_BIN = $(GNU_DIR)/bin/$(GNU_ARCH)
|
||||
GNU_TARGET_INCLUDE_DIR =
|
||||
GNU_TARGET=powerpc-linux
|
||||
SYSROOT = $(SDKTARGETSYSROOT)/$(GNU_ARCH)
|
||||
|
||||
ARCH_DEP_CPPFLAGS = -m32 -mcpu=440fp -mhard-float
|
||||
AS=$(GNU_BIN)/$(GNU_TARGET)-as
|
||||
17
configure/os/CONFIG.Common.fslqoriq20-e6500_64
Normal file
17
configure/os/CONFIG.Common.fslqoriq20-e6500_64
Normal file
@@ -0,0 +1,17 @@
|
||||
# IOxOS IFC1211 with Freescale QorIQ 2.0 toolchain
|
||||
|
||||
# Include definitions common to all Linux targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linuxCommon
|
||||
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
SDK = fslsdk
|
||||
SDK_DIR = /opt/fsl-qoriq/2.0
|
||||
SDK_HOST_ARCH = $(GNU_HOST_ARCH_64)-$(SDK)-$(GNU_HOST_OS)
|
||||
SDK_TARGET = ppc64e6500-fsl-linux
|
||||
GNU_TARGET = powerpc64-fsl-linux
|
||||
SYSROOT = $(SDK_DIR)/sysroots/$(SDK_TARGET)
|
||||
GNU_DIR = $(SDK_DIR)/sysroots/$(SDK_HOST_ARCH)/usr
|
||||
GNU_BIN = $(GNU_DIR)/bin/$(GNU_TARGET)
|
||||
|
||||
ARCH_DEP_CFLAGS = -mcpu=e6500 -m64 -mhard-float
|
||||
14
configure/os/CONFIG.Common.gcc8-ppc4xxFP
Normal file
14
configure/os/CONFIG.Common.gcc8-ppc4xxFP
Normal file
@@ -0,0 +1,14 @@
|
||||
# DeltaTau PowerPMAC with gcc 8.5
|
||||
|
||||
# Include definitions common to all Linux targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linuxCommon
|
||||
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
GNU_DIR = /opt/xgcc/gcc-8.5.0
|
||||
GNU_TARGET = powerpc-ppmac-linux-gnu
|
||||
|
||||
ARCH_DEP_CPPFLAGS = -m32 -mcpu=440fp -mhard-float
|
||||
ARCH_DEP_LDFLAGS += -Wl,-rpath-link,$(GNU_DIR)/$(GNU_TARGET)/sys-root/lib/powerpc-linux-gnu
|
||||
|
||||
STD_CXXFLAGS = -std=c++17
|
||||
5
configure/os/CONFIG.Common.linux-clang
Normal file
5
configure/os/CONFIG.Common.linux-clang
Normal file
@@ -0,0 +1,5 @@
|
||||
include $(CONFIG)/os/CONFIG.Common.linuxCommon
|
||||
GNU = NO
|
||||
CMPLR_CLASS = clang
|
||||
CC = clang
|
||||
CCC = clang++
|
||||
@@ -24,13 +24,13 @@ STATIC_LDFLAGS_NO=
|
||||
STATIC_LDLIBS_YES= -Wl,-Bdynamic
|
||||
|
||||
# Set runtime path for shared libraries if LINKER_USE_RPATH=YES
|
||||
SHRLIBDIR_RPATH_LDFLAGS_YES = $(SHRLIB_DEPLIB_DIRS:%=-Wl,-rpath,%)
|
||||
SHRLIBDIR_RPATH_LDFLAGS_YES = $(subst $(abspath $(LINKER_ORIGIN_ROOT)),$(FINAL_LOCATION),$(SHRLIB_DEPLIB_DIRS:%=-Wl,-rpath,%)) $(SHRLIB_DEPLIB_DIRS:%=-Wl,-rpath-link,%)
|
||||
SHRLIBDIR_RPATH_LDFLAGS_ORIGIN = $(shell $(MAKERPATH) -O '\$$ORIGIN' -F $(FINAL_DIR) -R $(LINKER_ORIGIN_ROOT) $(SHRLIB_DEPLIB_DIRS))
|
||||
SHRLIBDIR_LDFLAGS += \
|
||||
$(SHRLIBDIR_RPATH_LDFLAGS_$(LINKER_USE_RPATH))
|
||||
|
||||
# Set runtime path for products if LINKER_USE_RPATH=YES
|
||||
PRODDIR_RPATH_LDFLAGS_YES = $(PROD_DEPLIB_DIRS:%=-Wl,-rpath,%)
|
||||
PRODDIR_RPATH_LDFLAGS_YES = $(subst $(abspath $(LINKER_ORIGIN_ROOT)),$(FINAL_LOCATION),$(PROD_DEPLIB_DIRS:%=-Wl,-rpath,%)) $(SHRLIB_DEPLIB_DIRS:%=-Wl,-rpath-link,%)
|
||||
PRODDIR_RPATH_LDFLAGS_ORIGIN = $(shell $(MAKERPATH) -O '\$$ORIGIN' -F $(FINAL_DIR) -R $(LINKER_ORIGIN_ROOT) $(PROD_DEPLIB_DIRS))
|
||||
PRODDIR_LDFLAGS += \
|
||||
$(PRODDIR_RPATH_LDFLAGS_$(LINKER_USE_RPATH))
|
||||
|
||||
25
configure/os/CONFIG.Common.moxa42-armv6l
Normal file
25
configure/os/CONFIG.Common.moxa42-armv6l
Normal file
@@ -0,0 +1,25 @@
|
||||
# Moxa DA-66x with SDK 4.2 and ARM7 processor
|
||||
|
||||
# Include definitions common to all Linux ARM targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linux-arm
|
||||
|
||||
GNU_DIR=/opt/moxa/arm-linux-4.4.2-v4
|
||||
GNU_TARGET=arm
|
||||
ARCH_DEP_LDFLAGS+=-Wl,-rpath-link,$(GNU_DIR)/arm-none-linux-gnueabi/lib
|
||||
|
||||
COMMANDLINE_LIBRARY = READLINE_NCURSES
|
||||
|
||||
# suppress note "the mangling of 'va_list' has changed in GCC 4.4"
|
||||
ARCH_DEP_CXXFLAGS += -Wno-psabi
|
||||
|
||||
ARCH_DEP_CFLAGS += -funwind-tables
|
||||
|
||||
# have no full C++11
|
||||
STD_CXXFLAGS = -std=c++0x
|
||||
|
||||
# suppress strict alias warnings
|
||||
CODE_CPPFLAGS += -fno-strict-aliasing
|
||||
|
||||
# accept4() exists but does not work
|
||||
# Give fake __rtems__ macro to posix/osdSock.c because that disables accept4()
|
||||
osdSock_CFLAGS += -D__rtems__
|
||||
18
configure/os/CONFIG.Common.mvl40-xscale_be
Normal file
18
configure/os/CONFIG.Common.mvl40-xscale_be
Normal file
@@ -0,0 +1,18 @@
|
||||
# Moxa DA-66x with Montavista Linux 4.0
|
||||
|
||||
# Include definitions common to all Linux targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linuxCommon
|
||||
|
||||
COMMANDLINE_LIBRARY = READLINE_CURSES
|
||||
|
||||
ARCH_CLASS = xscale
|
||||
|
||||
GNU_DIR=/opt/moxa/xscale_be/armv5teb-montavista-linuxeabi
|
||||
|
||||
ARCH_DEP_CFLAGS += -funwind-tables
|
||||
|
||||
# have no C++11
|
||||
STD_CXXFLAGS =
|
||||
|
||||
# Cannot build PVA because of missing boost support
|
||||
SKIP_BUILDS = pv% normativeTypes
|
||||
21
configure/os/CONFIG.Common.nilrt7-armv7a
Normal file
21
configure/os/CONFIG.Common.nilrt7-armv7a
Normal file
@@ -0,0 +1,21 @@
|
||||
# National Instruments CompactRIO running LabView RT 19.5.1
|
||||
# requires RPM gcc-c++-arm-linux-gnu
|
||||
|
||||
# Include definitions common to all Linux targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linuxCommon
|
||||
|
||||
ARCH_CLASS = arm
|
||||
|
||||
GNU_TARGET = arm-linux-gnu
|
||||
|
||||
SYSROOT = /opt/LabVIEW-RT-19.5.1/arm/sysroots/armv7a-vfp-neon-nilrt-linux-gnueabi
|
||||
GNU_BIN = /opt/RHEL7/bin
|
||||
|
||||
# Needed on RHEL9:
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH:%=%:)/usr/$$LIB:/opt/RHEL7/$$LIB
|
||||
|
||||
ARCH_DEP_CPPFLAGS += -march=armv7-a -mthumb-interwork -mfloat-abi=softfp -mfpu=neon
|
||||
ARCH_DEP_CXXFLAGS += -I=/usr/include/c++/4.7.2/arm-nilrt-linux-gnueabi
|
||||
ARCH_DEP_CXXFLAGS += -I=/usr/include/c++/4.7.2
|
||||
|
||||
COMMANDLINE_LIBRARY = READLINE_NCURSES
|
||||
44
configure/os/CONFIG.Common.raspbian-arm
Normal file
44
configure/os/CONFIG.Common.raspbian-arm
Normal file
@@ -0,0 +1,44 @@
|
||||
# RaspberryPi with github.com/raspberrypi/tools toolchain
|
||||
# Tested on:
|
||||
# * Raspberry 3B+ Raspbian 9
|
||||
# * Raspberry 2 Raspbian 7
|
||||
|
||||
# Include definitions common to all Linux targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linuxCommon
|
||||
|
||||
# Using readline:
|
||||
# Due to missing/messed up libs in the toolchain, readline needs copies of
|
||||
# libtinfo.so.5.9 and libreadline.so.6.2 from a Raspbian 7 rootfs
|
||||
# /lib/arm-linux-gnueabihf/ to the toolchain, e.g.
|
||||
# $(SDK_DIR)/$(SDK_TARGET)/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf/
|
||||
# and manually created links libtinfo.so.5 and libreadline.so.
|
||||
# For gcc-linaro-arm-linux-gnueabihf-raspbian, an existing incompatible
|
||||
# libtinfo.so.5 is in the way. Remove it.
|
||||
# (Built with glibc 2.16 like installed on Raspbian 9 but toolchain uses glibc 2.13.)
|
||||
# Also copy /usr/include/readline/ directory from some readline 6 installation
|
||||
# to $(SDK_DIR)/$(SDK_TARGET)/arm-linux-gnueabihf/libc/usr/include/
|
||||
|
||||
ARCH_CLASS = arm
|
||||
|
||||
SDK_DIR = /opt/raspberrypi/arm-bcm2708
|
||||
|
||||
# Available SDK_TARGETs:
|
||||
|
||||
# gcc 4.8.3 for 32 bit hosts with GLIBC 2.3 or higher
|
||||
# SDK_TARGET = gcc-linaro-arm-linux-gnueabihf-raspbian
|
||||
|
||||
# gcc 4.8.3 for 64 bit hosts with GLIBC 2.14 or higher
|
||||
SDK_TARGET = gcc-linaro-arm-linux-gnueabihf-raspbian-x64
|
||||
|
||||
# gcc 4.7.1 for 64 bit hosts with GLIBC 2.8 or higher
|
||||
# SDK_TARGET = arm-linux-gnueabihf
|
||||
|
||||
# gcc 4.7.1 for 32 bit hosts with GLIBC 2.4 or higher
|
||||
# SDK_TARGET = arm-bcm2708hardfp-linux-gnueabi
|
||||
# SDK_TARGET = arm-bcm2708-linux-gnueabi
|
||||
|
||||
# gcc 4.9.3 for 64 bit hosts
|
||||
# arm-rpi-4.9.3-linux-gnueabihf
|
||||
|
||||
GNU_DIR = $(SDK_DIR)/$(SDK_TARGET)
|
||||
GNU_TARGET = $(if $(filter arm-bcm2708%,SDK_TARGET),$(SDK_TARGET),arm-linux-gnueabihf)
|
||||
18
configure/os/CONFIG.Common.win32-x86-clang
Normal file
18
configure/os/CONFIG.Common.win32-x86-clang
Normal file
@@ -0,0 +1,18 @@
|
||||
# CONFIG.Common.win32-x86-clang
|
||||
#
|
||||
# Definitions for win32-x86-clang target build
|
||||
# Override these definitions in CONFIG_SITE.Common.win32-x86-clang
|
||||
#-------------------------------------------------------
|
||||
|
||||
#Include definitions common to msvc compiler
|
||||
include $(CONFIG)/CONFIG.msvcCommon
|
||||
|
||||
VALID_BUILDS = Ioc Host Command
|
||||
|
||||
# Override CONFIG.msvcCommon settings:
|
||||
MSVC_PREFIX = llvm-
|
||||
CC = clang-cl$(MSVC_SUFFIX) --target=i686-pc-windows-msvc
|
||||
WINLINK = lld-link$(MSVC_SUFFIX)
|
||||
|
||||
# clang-cl does not support /GL option
|
||||
OPT_WHOLE_PROGRAM = NO
|
||||
18
configure/os/CONFIG.Common.windows-x64-clang
Normal file
18
configure/os/CONFIG.Common.windows-x64-clang
Normal file
@@ -0,0 +1,18 @@
|
||||
# CONFIG.Common.windows-x64-clang
|
||||
#
|
||||
# Definitions for windows-x64-clang target builds
|
||||
# Sites may override these definitions in CONFIG_SITE.Common.windows-x64-clang
|
||||
#-------------------------------------------------------
|
||||
|
||||
#Include definitions common to msvc compiler
|
||||
include $(CONFIG)/CONFIG.msvcCommon
|
||||
|
||||
VALID_BUILDS = Ioc Host Command
|
||||
|
||||
# Override CONFIG.msvcCommon settings:
|
||||
MSVC_PREFIX = llvm-
|
||||
CC = clang-cl$(MSVC_SUFFIX) --target=x86_64-pc-windows-msvc
|
||||
WINLINK = lld-link$(MSVC_SUFFIX)
|
||||
|
||||
# clang-cl does not support /GL option
|
||||
OPT_WHOLE_PROGRAM = NO
|
||||
15
configure/os/CONFIG.Common.yocto21-aarch64
Normal file
15
configure/os/CONFIG.Common.yocto21-aarch64
Normal file
@@ -0,0 +1,15 @@
|
||||
# XILINX Zynq with Yocto 2.1 / Petalinux toolchain
|
||||
|
||||
# Include definitions common to all Linux targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linuxCommon
|
||||
|
||||
ARCH_CLASS = arm64
|
||||
|
||||
SDK = petalinux
|
||||
SDK_DIR = /opt/petalinux-gfa/2018.1
|
||||
SDK_HOST_ARCH = $(GNU_HOST_ARCH_64)-$(SDK)-$(GNU_HOST_OS)
|
||||
SDK_TARGET = aarch64-xilinx-linux
|
||||
GNU_TARGET = $(SDK_TARGET)
|
||||
SYSROOT = $(SDK_DIR)/sysroots/$(SDK_TARGET)
|
||||
GNU_DIR = $(SDK_DIR)/sysroots/$(SDK_HOST_ARCH)/usr
|
||||
GNU_BIN = $(GNU_DIR)/bin/$(GNU_TARGET)
|
||||
19
configure/os/CONFIG.Common.yocto40-aarch64
Normal file
19
configure/os/CONFIG.Common.yocto40-aarch64
Normal file
@@ -0,0 +1,19 @@
|
||||
# XILINX Zynq with Yocto 4.0 toolchain
|
||||
|
||||
# Include definitions common to all Linux targets
|
||||
include $(CONFIG)/os/CONFIG.Common.linuxCommon
|
||||
|
||||
ARCH_CLASS = arm64
|
||||
|
||||
SDK = pokysdk
|
||||
SDK_DIR = /opt/yocto40-aarch64
|
||||
SDK_HOST_ARCH = $(GNU_HOST_ARCH_64)-$(SDK)-$(GNU_HOST_OS)
|
||||
SDK_TARGET = cortexa53-poky-linux
|
||||
GNU_TARGET = aarch64-poky-linux
|
||||
SYSROOT = $(SDK_DIR)/sysroots/$(SDK_TARGET)
|
||||
GNU_DIR = $(SDK_DIR)/sysroots/$(SDK_HOST_ARCH)/usr
|
||||
GNU_BIN = $(GNU_DIR)/bin/$(GNU_TARGET)
|
||||
|
||||
ARCH_DEP_CPPFLAGS = -mcpu=cortex-a53 -march=armv8-a+crc
|
||||
|
||||
STD_CXXFLAGS = -std=c++23
|
||||
4
configure/os/CONFIG.Linux.win32-x86
Normal file
4
configure/os/CONFIG.Linux.win32-x86
Normal file
@@ -0,0 +1,4 @@
|
||||
include $(CONFIG)/os/CONFIG.win32-x86.win32-x86
|
||||
|
||||
PATH := /opt/wine-msvc-2017/bin/x86:$(PATH)
|
||||
export WINEPREFIX = $(HOME)/.wine32-$(EPICS_HOST_ARCH)
|
||||
11
configure/os/CONFIG.Linux.windows-x64
Normal file
11
configure/os/CONFIG.Linux.windows-x64
Normal file
@@ -0,0 +1,11 @@
|
||||
include $(CONFIG)/os/CONFIG.windows-x64.windows-x64
|
||||
|
||||
VALID_BUILDS = Ioc Command
|
||||
|
||||
MSVC_VERSION ?= 2019
|
||||
PATH := /opt/gfa-wine/bin:/opt/wine-msvc-$(MSVC_VERSION)/bin/x64:$(PATH)
|
||||
export WINE ?= wine64
|
||||
export WINEPREFIX = $(HOME)/.wine-$(EPICS_HOST_ARCH)
|
||||
export WINEDEBUG := err-all,warn-all,fixme-all$(WINEDEBUG:%=,%)
|
||||
export WINEDLLOVERRIDES := mscoree,mshtml=$(WINEDLLOVERRIDES:%=,%)
|
||||
export WINEPATH := $(WINEPATH:%=%;)$(abspath $(INSTALL_BIN))
|
||||
3
configure/os/CONFIG.RHEL7-x86_64.Common
Normal file
3
configure/os/CONFIG.RHEL7-x86_64.Common
Normal file
@@ -0,0 +1,3 @@
|
||||
#CONFIG.$(EPICS_HOST_ARCH).Common is required by build system
|
||||
#Include definitions common to linux hosts
|
||||
include $(CONFIG)/os/CONFIG.linux-x86_64.Common
|
||||
2
configure/os/CONFIG.RHEL7-x86_64.RHEL7-x86_64
Normal file
2
configure/os/CONFIG.RHEL7-x86_64.RHEL7-x86_64
Normal file
@@ -0,0 +1,2 @@
|
||||
# Include common linux definitions
|
||||
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
|
||||
3
configure/os/CONFIG.RHEL7-x86_64.windows-x64
Normal file
3
configure/os/CONFIG.RHEL7-x86_64.windows-x64
Normal file
@@ -0,0 +1,3 @@
|
||||
# MSVC_VERSION 2019 in wine 4 for on RHEL7 would require winetricks
|
||||
MSVC_VERSION = 2017
|
||||
include $(CONFIG)/os/CONFIG.Linux.windows-x64
|
||||
3
configure/os/CONFIG.RHEL8-x86_64.Common
Normal file
3
configure/os/CONFIG.RHEL8-x86_64.Common
Normal file
@@ -0,0 +1,3 @@
|
||||
#CONFIG.$(EPICS_HOST_ARCH).Common is required by build system
|
||||
#Include definitions common to linux hosts
|
||||
include $(CONFIG)/os/CONFIG.linux-x86_64.Common
|
||||
28
configure/os/CONFIG.RHEL8-x86_64.RHEL7-x86_64
Normal file
28
configure/os/CONFIG.RHEL8-x86_64.RHEL7-x86_64
Normal file
@@ -0,0 +1,28 @@
|
||||
# Include common linux definitions
|
||||
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
|
||||
|
||||
# "Cross compile" for RHEL7-x86_64
|
||||
# Expects RHEL7 RPMs c++ and readline-devel installed
|
||||
# in $(SYSROOT)
|
||||
# This can be installed on RHEL7 with:
|
||||
# yum install --installroot=$(SYSROOT) <packages>
|
||||
# (Assuming $(SYSROOT) is on a shared network volume.)
|
||||
# Optionally use a newer TOOLSET (installed on $(SYSROOT)).
|
||||
|
||||
SYSROOT = /opt/RHEL7
|
||||
|
||||
# "Cross" TOOLSET progs need to find their libraries
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH:%=%:)$(TOOLSET_DIR:%=$(SYSROOT)%/usr/$$LIB)
|
||||
|
||||
# The linker has problems to find indirectly referenced libraries
|
||||
ARCH_DEP_LDFLAGS+=-Wl,-rpath-link,$(INSTALL_LIB)
|
||||
|
||||
# These programs have library problems when using them
|
||||
# from SYSROOT but without TOOLSET.
|
||||
# But provinding LD_LIBRARY PATH crashes other progams.
|
||||
# Our host versions work just fine.
|
||||
AR = ar -rc
|
||||
RANLIB = ranlib
|
||||
|
||||
# Allow to run cross-tests which expect different lib versions
|
||||
export LD_PRELOAD=$(SYSROOT)/lib64/libreadline.so
|
||||
2
configure/os/CONFIG.RHEL8-x86_64.RHEL8-x86_64
Normal file
2
configure/os/CONFIG.RHEL8-x86_64.RHEL8-x86_64
Normal file
@@ -0,0 +1,2 @@
|
||||
# Include common linux definitions
|
||||
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
|
||||
1
configure/os/CONFIG.RHEL8-x86_64.win32-x86-mingw
Normal file
1
configure/os/CONFIG.RHEL8-x86_64.win32-x86-mingw
Normal file
@@ -0,0 +1 @@
|
||||
include $(CONFIG)/os/CONFIG.linux-x86_64.win32-x86-mingw
|
||||
1
configure/os/CONFIG.RHEL8-x86_64.windows-x64
Normal file
1
configure/os/CONFIG.RHEL8-x86_64.windows-x64
Normal file
@@ -0,0 +1 @@
|
||||
include $(CONFIG)/os/CONFIG.Linux.windows-x64
|
||||
1
configure/os/CONFIG.RHEL8-x86_64.windows-x64-mingw
Normal file
1
configure/os/CONFIG.RHEL8-x86_64.windows-x64-mingw
Normal file
@@ -0,0 +1 @@
|
||||
include $(CONFIG)/os/CONFIG.linux-x86_64.windows-x64-mingw
|
||||
9
configure/os/CONFIG.RHEL9-x86_64.Common
Normal file
9
configure/os/CONFIG.RHEL9-x86_64.Common
Normal file
@@ -0,0 +1,9 @@
|
||||
#CONFIG.$(EPICS_HOST_ARCH).Common is required by build system
|
||||
#Include definitions common to linux hosts
|
||||
include $(CONFIG)/os/CONFIG.linux-x86_64.Common
|
||||
|
||||
# Windows 32 bit cross builds using mingw
|
||||
# (broken on RHEL8)
|
||||
|
||||
CROSS_COMPILER_TARGET_ARCHS += win32-x86-mingw
|
||||
CROSS_COMPILER_RUNTEST_ARHCS += win32-x86-mingw
|
||||
21
configure/os/CONFIG.RHEL9-x86_64.RHEL7-x86_64
Normal file
21
configure/os/CONFIG.RHEL9-x86_64.RHEL7-x86_64
Normal file
@@ -0,0 +1,21 @@
|
||||
# Include common linux definitions
|
||||
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
|
||||
|
||||
# "Cross compile" for RHEL7-x86_64
|
||||
# Expects RHEL7 RPMs c++ and readline-devel installed
|
||||
# in $(SYSROOT)
|
||||
# This can be installed on RHEL7 with:
|
||||
# yum install --installroot=$(SYSROOT) <packages>
|
||||
# (Assuming $(SYSROOT) is on a shared network volume.)
|
||||
# Optionally use a newer TOOLSET (installed on $(SYSROOT)).
|
||||
|
||||
SYSROOT = /opt/RHEL7
|
||||
|
||||
# "Cross" TOOLSET progs need to find their libraries
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH:%=%:)$(TOOLSET_DIR:%=$(SYSROOT)%/usr/$$LIB:)/usr/$$LIB:$(SYSROOT)/usr/$$LIB
|
||||
|
||||
# The linker has problems to find indirectly referenced libraries
|
||||
PROD_LDLIBS += $(LDLIBS)
|
||||
|
||||
# Allow to run cross-tests which expect different lib versions
|
||||
export LD_PRELOAD=$(SYSROOT)/lib64/libreadline.so
|
||||
25
configure/os/CONFIG.RHEL9-x86_64.RHEL8-x86_64
Normal file
25
configure/os/CONFIG.RHEL9-x86_64.RHEL8-x86_64
Normal file
@@ -0,0 +1,25 @@
|
||||
# Include common linux definitions
|
||||
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
|
||||
|
||||
# "Cross compile" for RHEL8-x86_64
|
||||
# Expects RHEL8 RPMs gcc-toolset-12-gcc-c++ and readline-devel
|
||||
# to be installed in $(SYSROOT)
|
||||
# These can be installed on RHEL8 with:
|
||||
# yum install --installroot=$(SYSROOT) <packages>
|
||||
# (Assuming $(SYSROOT) is on a shared network volume.)
|
||||
|
||||
SYSROOT = /opt/RHEL8
|
||||
|
||||
# "Cross" TOOLSET progs need to find their libraries.
|
||||
# But linker gets confused with LD_LIBRARY_PATH.
|
||||
# Thus only wrap the compiler.
|
||||
WRAPPER = -wrapper env,LD_LIBRARY_PATH=$(TOOLSET_DIR:%=$(SYSROOT)%/usr/lib64:)/usr/lib64:$(SYSROOT)/usr/lib64
|
||||
CPPFLAGS += $(WRAPPER)
|
||||
|
||||
# These programs as cross tools would also need LD_LIBRARY_PATH.
|
||||
# But but our host versions work just fine.
|
||||
AR = ar -rc
|
||||
RANLIB = ranlib
|
||||
|
||||
# Allow to run cross-tests which expect different lib versions
|
||||
export LD_PRELOAD=$(SYSROOT)/lib64/libreadline.so
|
||||
2
configure/os/CONFIG.RHEL9-x86_64.RHEL9-x86_64
Normal file
2
configure/os/CONFIG.RHEL9-x86_64.RHEL9-x86_64
Normal file
@@ -0,0 +1,2 @@
|
||||
# Include common linux definitions
|
||||
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
|
||||
1
configure/os/CONFIG.RHEL9-x86_64.win32-x86-mingw
Normal file
1
configure/os/CONFIG.RHEL9-x86_64.win32-x86-mingw
Normal file
@@ -0,0 +1 @@
|
||||
include $(CONFIG)/os/CONFIG.linux-x86_64.win32-x86-mingw
|
||||
1
configure/os/CONFIG.RHEL9-x86_64.windows-x64
Normal file
1
configure/os/CONFIG.RHEL9-x86_64.windows-x64
Normal file
@@ -0,0 +1 @@
|
||||
include $(CONFIG)/os/CONFIG.Linux.windows-x64
|
||||
1
configure/os/CONFIG.RHEL9-x86_64.windows-x64-mingw
Normal file
1
configure/os/CONFIG.RHEL9-x86_64.windows-x64-mingw
Normal file
@@ -0,0 +1 @@
|
||||
include $(CONFIG)/os/CONFIG.linux-x86_64.windows-x64-mingw
|
||||
3
configure/os/CONFIG.deb10-x86_64.Common
Normal file
3
configure/os/CONFIG.deb10-x86_64.Common
Normal file
@@ -0,0 +1,3 @@
|
||||
#CONFIG.$(EPICS_HOST_ARCH).Common is required by build system
|
||||
#Include definitions common to linux hosts
|
||||
include $(CONFIG)/os/CONFIG.linux-x86_64.Common
|
||||
3
configure/os/CONFIG.deb10-x86_64.deb10-x86_64
Normal file
3
configure/os/CONFIG.deb10-x86_64.deb10-x86_64
Normal file
@@ -0,0 +1,3 @@
|
||||
# Include common linux definitions
|
||||
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
|
||||
GNU_DIR=/usr
|
||||
3
configure/os/CONFIG.deb12-x86_64.Common
Normal file
3
configure/os/CONFIG.deb12-x86_64.Common
Normal file
@@ -0,0 +1,3 @@
|
||||
#CONFIG.$(EPICS_HOST_ARCH).Common is required by build system
|
||||
#Include definitions common to linux hosts
|
||||
include $(CONFIG)/os/CONFIG.linux-x86_64.Common
|
||||
3
configure/os/CONFIG.deb12-x86_64.deb12-x86_64
Normal file
3
configure/os/CONFIG.deb12-x86_64.deb12-x86_64
Normal file
@@ -0,0 +1,3 @@
|
||||
# Include common linux definitions
|
||||
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
|
||||
GNU_DIR=/usr
|
||||
9
configure/os/CONFIG.win32-x86-clang.Common
Normal file
9
configure/os/CONFIG.win32-x86-clang.Common
Normal file
@@ -0,0 +1,9 @@
|
||||
# CONFIG.win32-x86-clang.Common
|
||||
#
|
||||
# Definitions for win32-x86-clang host arch
|
||||
# Override these definitions in CONFIG_SITE.win32-x86-clang.Common
|
||||
#-------------------------------------------------------
|
||||
|
||||
#Include definitions common to win32-x86 hosts
|
||||
include $(CONFIG)/os/CONFIG.win32-x86.Common
|
||||
|
||||
@@ -4,286 +4,7 @@
|
||||
# Override these definitions in CONFIG_SITE.win32-x86.win32-x86
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Win32 valid build types and include directory suffixes
|
||||
# Include common msvc compiler definitions
|
||||
include $(CONFIG)/CONFIG.msvcCommon
|
||||
|
||||
VALID_BUILDS = Host Ioc Command
|
||||
|
||||
CMPLR_CLASS = msvc
|
||||
|
||||
OPT_WHOLE_PROGRAM = YES
|
||||
|
||||
#-------------------------------------------------------
|
||||
|
||||
WINLINK = link
|
||||
|
||||
RCCMD = rc -nologo -l 0x409 $(INCLUDES) -fo $@ $<
|
||||
|
||||
ARCMD = lib -nologo -verbose -out:$@ $(LIB_OPT_LDFLAGS) $(LIBRARY_LD_OBJS)
|
||||
|
||||
#
|
||||
# Configure OS vendor C compiler
|
||||
CC = cl
|
||||
|
||||
# Override CONFIG.gnuCommon settings for cross builds.
|
||||
GNU = NO
|
||||
HDEPENDS_METHOD = MKMF
|
||||
|
||||
# Compiler flags for C files (C++ is below)
|
||||
|
||||
#
|
||||
# -W<d> display warnings at level d
|
||||
# -W4 is for maximum (lint type) warnings
|
||||
# -W3 is for production quality warnings
|
||||
# -W2 displays significant warnings
|
||||
# -W1 is the default and shows severe warnings only
|
||||
# -w<d><n> Set warning C<n> to be shown at level <d>
|
||||
WARN_CFLAGS_YES = -W3
|
||||
WARN_CFLAGS_NO = -W1
|
||||
|
||||
#
|
||||
# -Ox maximum optimizations
|
||||
# -GL whole program optimization
|
||||
# -Oy- re-enable creation of frame pointers
|
||||
OPT_CFLAGS_YES_YES = -Ox -GL -Oy-
|
||||
OPT_CFLAGS_YES_NO = -Ox -Oy-
|
||||
OPT_CFLAGS_YES = $(OPT_CFLAGS_YES_$(OPT_WHOLE_PROGRAM))
|
||||
|
||||
#
|
||||
# -Z7 generate C7 compatible debugging information (inside .obj)
|
||||
# -RTCsu enable run-time error checks
|
||||
OPT_CFLAGS_NO = -Z7 -RTCsu
|
||||
|
||||
# specify object file name and location
|
||||
OBJ_CFLAG = -Fo
|
||||
|
||||
#
|
||||
# the following options are required when
|
||||
# vis c++ compiles the code (and includes
|
||||
# the header files)
|
||||
#
|
||||
# -MT static multithreaded C RTL
|
||||
# -MTd static multithreaded C RTL (debug version)
|
||||
# -MD multithreaded C RTL in DLL
|
||||
# -MDd multithreaded C RTL in DLL (debug version)
|
||||
BUILD_DLL_CFLAGS_NO =
|
||||
BUILD_DLL_CFLAGS_YES = -DEPICS_BUILD_DLL
|
||||
BUILD_DLL_CFLAGS = $(BUILD_DLL_CFLAGS_$(SHARED_LIBRARIES))
|
||||
VISC_CFLAGS_DEBUG_NO = d
|
||||
VISC_CFLAGS_DEBUG_YES =
|
||||
VISC_CFLAGS_DEBUG = $(VISC_CFLAGS_DEBUG_$(HOST_OPT))
|
||||
STATIC_CFLAGS_YES= -MT$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS)
|
||||
STATIC_CFLAGS_NO= -MD$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS) -DEPICS_CALL_DLL
|
||||
|
||||
# OS vendor c preprocessor
|
||||
CPP = cl -nologo -C -E
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
#
|
||||
# -EHsc - generate code for exceptions
|
||||
# -GR - generate code for run time type identification
|
||||
#
|
||||
CCC = cl -EHsc -GR
|
||||
|
||||
# Other compiler flags, used for CPP, C and C++
|
||||
#
|
||||
# -FC - Show absolute path of source file in diagnostics
|
||||
# -D__STDC__=0 gives us both:
|
||||
# 1) define STDC for code (pretend ANSI conformance)
|
||||
# 2) set it to 0 to use MS C "extensions" (open for _open etc.)
|
||||
# because MS uses: if __STDC__ ... disable many nice things
|
||||
#
|
||||
CODE_CPPFLAGS += -nologo -FC -D__STDC__=0
|
||||
CODE_CPPFLAGS += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
|
||||
|
||||
|
||||
# Compiler flags for C++ files
|
||||
|
||||
#
|
||||
# -W<n> disable warnings from levels > n
|
||||
# -w<n><m> set warning m to level n
|
||||
# -w44355 "'this' used in the base initializer list"
|
||||
# -w44344 "behavior change: use of explicit template arguments results in ..."
|
||||
# -w44251 "class needs to have dll-interface to be used by clients of ..."
|
||||
WARN_CXXFLAGS_YES = -W3 -w44355 -w44344 -w44251
|
||||
WARN_CXXFLAGS_NO = -W1
|
||||
|
||||
# Silence tr1 namespace deprecation warnings
|
||||
WARN_CXXFLAGS += -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
|
||||
|
||||
#
|
||||
# -Ox maximum optimizations
|
||||
# -GL whole program optimization
|
||||
# -Oy- re-enable creation of frame pointers
|
||||
OPT_CXXFLAGS_YES_YES = -Ox -GL -Oy-
|
||||
OPT_CXXFLAGS_YES_NO = -Ox -Oy-
|
||||
OPT_CXXFLAGS_YES = $(OPT_CXXFLAGS_YES_$(OPT_WHOLE_PROGRAM))
|
||||
|
||||
#
|
||||
# -Z7 generate C7 compatible debugging information (inside .obj)
|
||||
# -RTCsu enable run-time error checks
|
||||
OPT_CXXFLAGS_NO = -RTCsu -Z7
|
||||
|
||||
# specify object file name and location
|
||||
OBJ_CXXFLAG = -Fo
|
||||
|
||||
#
|
||||
# the following options are required when
|
||||
# vis c++ compiles the code (and includes
|
||||
# the header files)
|
||||
#
|
||||
# -MT static multithreaded C RTL
|
||||
# -MTd static multithreaded C RTL (debug version)
|
||||
# -MD multithreaded C RTL in DLL
|
||||
# -MDd multithreaded C RTL in DLL (debug version)
|
||||
STATIC_CXXFLAGS_YES= -MT$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS)
|
||||
STATIC_CXXFLAGS_NO= -MD$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS) -DEPICS_CALL_DLL
|
||||
|
||||
STATIC_LDLIBS_YES=ws2_32.lib advapi32.lib user32.lib kernel32.lib winmm.lib dbghelp.lib
|
||||
STATIC_LDLIBS_NO=
|
||||
STATIC_LDFLAGS=
|
||||
RANLIB=
|
||||
|
||||
# add -profile here to run the ms profiler
|
||||
# -LTCG whole program optimization
|
||||
# -incremental:no full linking
|
||||
# -fixed:no generate relocatable code
|
||||
# -version:<major>.<minor> - only 2 components allowed, 0-65535 each
|
||||
# -debug generate debugging info
|
||||
LINK_OPT_FLAGS_WHOLE_YES = -LTCG
|
||||
LINK_OPT_FLAGS_YES = $(LINK_OPT_FLAGS_WHOLE_$(OPT_WHOLE_PROGRAM))
|
||||
LINK_OPT_FLAGS_YES += -incremental:no -opt:ref
|
||||
LINK_OPT_FLAGS_YES += -release $(PROD_VERSION:%=-version:%)
|
||||
LINK_OPT_FLAGS_NO = -debug -incremental:no -fixed:no
|
||||
OPT_LDFLAGS = $(LINK_OPT_FLAGS_$(HOST_OPT))
|
||||
|
||||
LIB_OPT_FLAGS_YES = $(LINK_OPT_FLAGS_WHOLE_$(OPT_WHOLE_PROGRAM))
|
||||
LIB_OPT_LDFLAGS = $(LIB_OPT_FLAGS_$(HOST_OPT))
|
||||
|
||||
ARCH_DEP_CFLAGS=
|
||||
SHRLIB_CFLAGS=
|
||||
|
||||
OS_CLASS=WIN32
|
||||
POSIX=NO
|
||||
|
||||
# ifdef WIN32 looks better that ifeq ($(OS_CLASS),WIN32) ??
|
||||
WIN32=1
|
||||
|
||||
EXE=.exe
|
||||
OBJ=.obj
|
||||
RES=.res
|
||||
|
||||
# MS Visual C++ doesn't recognize *.cc as a C++ source file,
|
||||
# so C++ compiles get the flag -TP
|
||||
COMPILER_CXXFLAGS = -TP
|
||||
|
||||
# Operating system flags
|
||||
OP_SYS_CFLAGS =
|
||||
OP_SYS_CXXFLAGS = $(COMPILER_CXXFLAGS)
|
||||
|
||||
# Files and flags needed to link DLLs (used in RULES_BUILD)
|
||||
WIN32_DLLFLAGS = -subsystem:windows -dll $(OPT_LDFLAGS) \
|
||||
$(USR_LDFLAGS) $(CMD_LDFLAGS) $(TARGET_LDFLAGS) $(LIB_LDFLAGS)
|
||||
|
||||
# Specify dll .def file only if it exists
|
||||
DLL_DEF_FLAG = $(addprefix -def:,$(wildcard ../$(addsuffix .def,$*)))
|
||||
|
||||
# A WIN32 dll has three parts:
|
||||
# x.dll: the real dll (SHRLIBNAME)
|
||||
# x.lib: what you link to progs that use the dll (DLLSTUB_LIBNAME)
|
||||
# x.exp: what you need to build the dll (in no variable)
|
||||
LINK.shrlib = $(WINLINK) -nologo $(WIN32_DLLFLAGS) -out:$@ \
|
||||
-implib:$(@:%$(SHRLIB_SUFFIX)=%$(LIB_SUFFIX)) \
|
||||
$(DLL_DEF_FLAG) $(LIBRARY_LD_OBJS) $(LIBRARY_LD_RESS) $(SHRLIB_LDLIBS)
|
||||
|
||||
# Adjust names of libraries to build
|
||||
SHRLIB_SUFFIX_BASE = .dll
|
||||
SHRLIB_SUFFIX = $(SHRLIB_SUFFIX_BASE)
|
||||
SHRLIBNAME_YES = $(BUILD_LIBRARY:%=%$(SHRLIB_SUFFIX))
|
||||
LOADABLE_SHRLIBNAME = $(LOADABLE_BUILD_LIBRARY:%=%$(SHRLIB_SUFFIX))
|
||||
TESTSHRLIBNAME_YES = $(TESTBUILD_LIBRARY:%=%$(SHRLIB_SUFFIX_BASE))
|
||||
|
||||
# When SHARED_LIBRARIES is YES we are building a DLL shared library.
|
||||
# When SHARED_LIBRARIES is NO we are building an object library
|
||||
DLLSTUB_SUFFIX = .lib
|
||||
DLLSTUB_LIBNAME_YES = $(BUILD_LIBRARY:%=%.lib)
|
||||
DLLSTUB_LIBNAME = $(DLLSTUB_LIBNAME_$(SHARED_LIBRARIES))
|
||||
TESTDLLSTUB_LIBNAME_YES = $(TESTBUILD_LIBRARY:%=%.lib)
|
||||
TESTDLLSTUB_LIBNAME = $(TESTDLLSTUB_LIBNAME_$(SHARED_LIBRARIES))
|
||||
|
||||
LIB_PREFIX=
|
||||
LIB_SUFFIX=.lib
|
||||
LIBNAME_NO = $(BUILD_LIBRARY:%=%.lib)
|
||||
LIBNAME = $(LIBNAME_$(SHARED_LIBRARIES))
|
||||
TESTLIBNAME_NO = $(TESTBUILD_LIBRARY:%=%.lib)
|
||||
TESTLIBNAME = $(TESTLIBNAME_$(SHARED_LIBRARIES))
|
||||
|
||||
# dll install location
|
||||
INSTALL_SHRLIB = $(INSTALL_BIN)
|
||||
|
||||
|
||||
#--------------------------------------------------
|
||||
# Products dependancy definitions
|
||||
|
||||
PROD_DEPLIBS = $(foreach lib, $(PROD_LIBS) $(USR_LIBS), \
|
||||
$(firstword $(wildcard \
|
||||
$(addsuffix /$(DLLSTUB_PREFIX)$(lib)$(DLLSTUB_SUFFIX), \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS)) \
|
||||
$(addsuffix /$(SHRLIB_PREFIX)$(lib)*$(SHRLIB_SUFFIX_BASE)*, \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS)) \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS)) \
|
||||
) $(addsuffix /$(BUILDLIB_PREFIX)$(lib)$(BUILDLIB_SUFFIX), \
|
||||
$(if $(filter $(lib),$(TESTLIBRARY)),.,$(INSTALL_LIB)))))
|
||||
|
||||
|
||||
PROD_LDLIBS += $($*_DEPLIBS) $(PROD_DEPLIBS)
|
||||
PROD_LDLIBS += $(addsuffix .lib, \
|
||||
$($*_SYS_LIBS) $(PROD_SYS_LIBS) $(USR_SYS_LIBS))
|
||||
|
||||
LDLIBS_STATIC_YES = LDLIBS
|
||||
LDLIBS_SHARED_NO = LDLIBS
|
||||
PROD_LDLIBS += $(STATIC_LDLIBS) \
|
||||
$($(firstword $(LDLIBS_STATIC_$(STATIC_BUILD)) \
|
||||
$(LDLIBS_SHARED_$(SHARED_LIBRARIES))))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Libraries dependancy definitions
|
||||
|
||||
# libs that we need to link the DLL with
|
||||
# (it isnt necessary to rebuild the dll if these change)
|
||||
|
||||
SHRLIB_DEPLIBS = $(foreach lib, $(LIB_LIBS) $(USR_LIBS), \
|
||||
$(firstword $(wildcard \
|
||||
$(addsuffix /$(DLLSTUB_PREFIX)$(lib)$(DLLSTUB_SUFFIX), \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS)) \
|
||||
$(addsuffix /$(SHRLIB_PREFIX)$(lib)*$(SHRLIB_SUFFIX_BASE)*, \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS)) \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS)) \
|
||||
) $(addsuffix /$(BUILDLIB_PREFIX)$(lib)$(BUILDLIB_SUFFIX), \
|
||||
$(if $(filter $(lib),$(TESTLIBRARY)),.,$(INSTALL_LIB)))))
|
||||
|
||||
|
||||
SHRLIB_LDLIBS += $($*_DLL_DEPLIBS) $($*_DEPLIBS) $(SHRLIB_DEPLIBS)
|
||||
SHRLIB_LDLIBS += $(addsuffix .lib, \
|
||||
$($*_SYS_DLL_LIBS) \
|
||||
$($*_SYS_LIBS) $(LIB_SYS_LIBS) $(USR_SYS_LIBS) )
|
||||
|
||||
#--------------------------------------------------
|
||||
# Linker definition
|
||||
LINK.cpp = $(WINLINK) -nologo $(STATIC_LDFLAGS) $(LDFLAGS) $(PROD_LDFLAGS) \
|
||||
-out:$@ $(PROD_LD_OBJS) $(PROD_LD_RESS) $(PROD_LDLIBS)
|
||||
|
||||
#--------------------------------------------------
|
||||
# UseManifestTool.pl checks MS Visual c++ compiler version number to
|
||||
# decide whether or not to use the Manifest Tool command to embed the
|
||||
# linker created .manifest file into a library or product target.
|
||||
# useManifestTool.pl returns 0(don't use) or 1(use).
|
||||
#
|
||||
MT.exe = mt.exe -nologo -manifest $@.manifest
|
||||
MT_DLL_COMMAND1 = $(MT.exe) "-outputresource:$@;\#2"
|
||||
MT_EXE_COMMAND_YES =
|
||||
MT_EXE_COMMAND_NO = $(MT.exe) "-outputresource:$@;\#1"
|
||||
MT_EXE_COMMAND1 = $(MT_EXE_COMMAND_$(STATIC_BUILD))
|
||||
MT_DLL_COMMAND = $(MT_DLL_COMMAND$(shell $(PERL) $(TOOLS)/useManifestTool.pl))
|
||||
MT_EXE_COMMAND = $(MT_EXE_COMMAND$(shell $(PERL) $(TOOLS)/useManifestTool.pl))
|
||||
|
||||
9
configure/os/CONFIG.windows-x64-clang.Common
Normal file
9
configure/os/CONFIG.windows-x64-clang.Common
Normal file
@@ -0,0 +1,9 @@
|
||||
# CONFIG.windows-x64-clang.Common
|
||||
#
|
||||
# Definitions for windows-x64-clang host arch
|
||||
# Override these definitions in CONFIG_SITE.windows-x64-clang.Common
|
||||
#-------------------------------------------------------
|
||||
|
||||
#Include definitions common to windows-x64 hosts
|
||||
include $(CONFIG)/os/CONFIG.windows-x64.Common
|
||||
|
||||
@@ -4,9 +4,10 @@
|
||||
# Override these definitions in CONFIG_SITE.windows-x64.windows-x64
|
||||
#-------------------------------------------------------
|
||||
|
||||
#Include definitions common to win32-x86 builds
|
||||
include $(CONFIG)/os/CONFIG.win32-x86.win32-x86
|
||||
-include $(CONFIG)/os/CONFIG_SITE.win32-x86.win32-x86
|
||||
# Include common msvc compiler definitions
|
||||
include $(CONFIG)/CONFIG.msvcCommon
|
||||
|
||||
VALID_BUILDS = Host Ioc Command
|
||||
|
||||
OPT_LDFLAGS += -MACHINE:X64
|
||||
# -MACHINE:X64
|
||||
|
||||
@@ -24,6 +24,9 @@
|
||||
#RTEMS_VERSION = 5
|
||||
#RTEMS_BASE = /usr/local/vw/rtems/rtems-5.1
|
||||
|
||||
# PSI:
|
||||
RTEMS_BASE = /opt/rtems/$(RTEMS_VERSION)
|
||||
|
||||
# Cross-compile toolchain in $(RTEMS_TOOLS)/bin
|
||||
#
|
||||
RTEMS_TOOLS = $(RTEMS_BASE)
|
||||
|
||||
2
configure/os/CONFIG_SITE.Common.deb10-x86_64
Normal file
2
configure/os/CONFIG_SITE.Common.deb10-x86_64
Normal file
@@ -0,0 +1,2 @@
|
||||
# Debian 10
|
||||
COMMANDLINE_LIBRARY=READLINE_NCURSES
|
||||
2
configure/os/CONFIG_SITE.Common.deb12-x86_64
Normal file
2
configure/os/CONFIG_SITE.Common.deb12-x86_64
Normal file
@@ -0,0 +1,2 @@
|
||||
# Debian 10
|
||||
COMMANDLINE_LIBRARY=READLINE
|
||||
2
configure/os/CONFIG_SITE.Common.gcc8-ppc4xxFP
Normal file
2
configure/os/CONFIG_SITE.Common.gcc8-ppc4xxFP
Normal file
@@ -0,0 +1,2 @@
|
||||
# DeltaTau PowerPMAC with gcc
|
||||
COMMANDLINE_LIBRARY=READLINE
|
||||
@@ -8,3 +8,18 @@
|
||||
# They must be set in the host+target specific file instead:
|
||||
# CONFIG_SITE.<linux-arch>.<linux-arch>
|
||||
|
||||
COMMANDLINE_LIBRARY = READLINE
|
||||
|
||||
USR_CXXFLAGS += $(STD_CXXFLAGS)
|
||||
STD_CXXFLAGS = -std=c++11
|
||||
|
||||
TOOLSET_DIR = $(TOOLSET:%=$(TOOLSET_LOCATION)/%/root)
|
||||
GNU_DIR = $(SYSROOT)$(TOOLSET_DIR)
|
||||
CPPFLAGS += $(SYSROOT:%=--sysroot=%)
|
||||
LDFLAGS += $(SYSROOT:%=--sysroot=%)
|
||||
|
||||
# backward compatibility: Keep unversioned libs
|
||||
# in order to prevent dynamic linking problems
|
||||
# when minor changes increment *_MAINTENANCE_VERSION
|
||||
SHRLIB_SUFFIX = $(SHRLIB_SUFFIX_BASE)
|
||||
LOADABLE_SHRLIB_SUFFIX = $(SHRLIB_SUFFIX_BASE)
|
||||
|
||||
@@ -21,5 +21,12 @@ VXWORKS_VERSION = 6.9
|
||||
# WIND_BASE is where you installed the Wind River software.
|
||||
|
||||
#WIND_BASE = /usr/local/vw/tornado22-$(ARCH_CLASS)
|
||||
WIND_BASE = /usr/local/vw/vxWorks-$(VXWORKS_VERSION)
|
||||
#WIND_BASE = /usr/local/vw/vxWorks-$(VXWORKS_VERSION)
|
||||
#WIND_BASE = /ade/vxWorks/$(VXWORKS_VERSION)
|
||||
WIND_BASE = /opt/VxWorks/VxWorks$(VXWORKS_VERSION)
|
||||
|
||||
# For the license counter
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH:%=%:)$(WIND_BASE)/lmapi-5.0/$(WIND_HOST_TYPE)/lib
|
||||
|
||||
softIoc_LDFLAGS += -whole-archive
|
||||
softIocPVA_LDFLAGS += -whole-archive
|
||||
|
||||
5
configure/os/CONFIG_SITE.RHEL7-x86_64.Common
Normal file
5
configure/os/CONFIG_SITE.RHEL7-x86_64.Common
Normal file
@@ -0,0 +1,5 @@
|
||||
include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.Common
|
||||
|
||||
# Improved error checking with clang
|
||||
CROSS_COMPILER_TARGET_ARCHS += RHEL7-x86_64-clang
|
||||
CROSS_COMPILER_RUNTEST_ARCHS += RHEL7-x86_64-clang
|
||||
9
configure/os/CONFIG_SITE.RHEL8-x86_64.Common
Normal file
9
configure/os/CONFIG_SITE.RHEL8-x86_64.Common
Normal file
@@ -0,0 +1,9 @@
|
||||
include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.Common
|
||||
|
||||
# Improved error checking with clang
|
||||
CROSS_COMPILER_TARGET_ARCHS += RHEL8-x86_64-clang
|
||||
CROSS_COMPILER_RUNTEST_ARCHS += RHEL8-x86_64-clang
|
||||
|
||||
# Build for old RHEL7 64 bit
|
||||
#CROSS_COMPILER_TARGET_ARCHS += RHEL7-x86_64
|
||||
#CROSS_COMPILER_RUNTEST_ARCHS += RHEL7-x86_64
|
||||
1
configure/os/CONFIG_SITE.RHEL8-x86_64.win32-x86-mingw
Normal file
1
configure/os/CONFIG_SITE.RHEL8-x86_64.win32-x86-mingw
Normal file
@@ -0,0 +1 @@
|
||||
include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.win32-x86-mingw
|
||||
1
configure/os/CONFIG_SITE.RHEL8-x86_64.windows-x64-mingw
Normal file
1
configure/os/CONFIG_SITE.RHEL8-x86_64.windows-x64-mingw
Normal file
@@ -0,0 +1 @@
|
||||
include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.windows-x64-mingw
|
||||
13
configure/os/CONFIG_SITE.RHEL9-x86_64.Common
Normal file
13
configure/os/CONFIG_SITE.RHEL9-x86_64.Common
Normal file
@@ -0,0 +1,13 @@
|
||||
include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.Common
|
||||
|
||||
# Improved error checking with clang
|
||||
CROSS_COMPILER_TARGET_ARCHS += RHEL9-x86_64-clang
|
||||
CROSS_COMPILER_RUNTEST_ARCHS += RHEL9-x86_64-clang
|
||||
|
||||
# Build for old RHEL8 64 bit
|
||||
CROSS_COMPILER_TARGET_ARCHS += RHEL8-x86_64
|
||||
CROSS_COMPILER_RUNTEST_ARCHS += RHEL8-x86_64
|
||||
|
||||
# Build for even older RHEL7 64 bit
|
||||
#CROSS_COMPILER_TARGET_ARCHS += RHEL7-x86_64
|
||||
#CROSS_COMPILER_RUNTEST_ARCHS += RHEL7-x86_64
|
||||
1
configure/os/CONFIG_SITE.RHEL9-x86_64.win32-x86-mingw
Normal file
1
configure/os/CONFIG_SITE.RHEL9-x86_64.win32-x86-mingw
Normal file
@@ -0,0 +1 @@
|
||||
include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.win32-x86-mingw
|
||||
1
configure/os/CONFIG_SITE.RHEL9-x86_64.windows-x64-mingw
Normal file
1
configure/os/CONFIG_SITE.RHEL9-x86_64.windows-x64-mingw
Normal file
@@ -0,0 +1 @@
|
||||
include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.windows-x64-mingw
|
||||
5
configure/os/CONFIG_SITE.UnixCommon.Common
Normal file
5
configure/os/CONFIG_SITE.UnixCommon.Common
Normal file
@@ -0,0 +1,5 @@
|
||||
# Make sure hosts tools find their libraries during build
|
||||
# even if FINAL_LOCATION differs from INSTALL_LOCATION
|
||||
ifneq ($(FINAL_LOCATION:$(INSTALL_LOCATION)=),)
|
||||
export LD_LIBRARY_PATH:=$(LD_LIBRARY_PATH:%=%:)$(INSTALL_HOST_LIB)
|
||||
endif
|
||||
@@ -6,24 +6,17 @@
|
||||
# These settings are designed for users of Homebrew.
|
||||
# Users of other third-party package managers are welcome to
|
||||
# provide patches appropriate for their manager.
|
||||
ifneq (,$(wildcard /opt/homebrew))
|
||||
# Default location on aarch64
|
||||
HOMEBREW_DIR = /opt/homebrew
|
||||
else ifneq (,$(wildcard /usr/local/Homebrew))
|
||||
# Default location on x86_64
|
||||
HOMEBREW_DIR = /usr/local
|
||||
else ifneq (,$(wildcard /opt/local/include/readline))
|
||||
# MacPorts
|
||||
READLINE_DIR = /opt/local
|
||||
endif
|
||||
HOMEBREW_DIR := $(shell brew --prefix 2>/dev/null)
|
||||
INCLUDES += $(HOMEBREW_DIR:%=-I%/include)
|
||||
LDFLAGS += $(HOMEBREW_DIR:%=-L%/lib)
|
||||
|
||||
# Look for Homebrew's readline
|
||||
ifneq (,$(wildcard $(HOMEBREW_DIR)/opt/readline))
|
||||
READLINE_DIR = $(HOMEBREW_DIR)/opt/readline
|
||||
INCLUDES_READLINE += -I$(HOMEBREW_DIR)/opt/readline/include
|
||||
LDFLAGS_READLINE += -L$(HOMEBREW_DIR)/opt/readline/lib
|
||||
endif
|
||||
|
||||
# Use GNU readline if it's avaiilable
|
||||
ifneq (,$(wildcard $(READLINE_DIR)/include/readline/readline.h))
|
||||
INCLUDES_READLINE = -I$(READLINE_DIR)/include
|
||||
LDFLAGS_READLINE = -L$(READLINE_DIR)/lib
|
||||
endif
|
||||
# Look for MacPorts
|
||||
MACPORT_DIR := $(patsubst %/bin/port,%,$(shell which port))
|
||||
INCLUDES += $(MACPORT_DIR:%=-I%/include)
|
||||
LDFLAGS += $(MACPORT_DIR:%=-L%/lib)
|
||||
|
||||
@@ -5,3 +5,46 @@
|
||||
|
||||
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32
|
||||
#CROSS_COMPILER_TARGET_ARCHS = RTEMS-mvme2100 RTEMS-pc386-qemu
|
||||
|
||||
INSTALL_LOCATION=/usr/local/epics/base-$(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)
|
||||
|
||||
GNU_HOST_ARCH=i686
|
||||
GNU_HOST_OS=linux
|
||||
|
||||
# vxWorks for MVxxxx boards
|
||||
#CROSS_COMPILER_TARGET_ARCHS += T2-ppc604
|
||||
#CROSS_COMPILER_TARGET_ARCHS += V67-ppc604
|
||||
CROSS_COMPILER_TARGET_ARCHS += V69-ppc604
|
||||
#CROSS_COMPILER_TARGET_ARCHS += V69-ppc32
|
||||
|
||||
# NI compact RIO
|
||||
#CROSS_COMPILER_TARGET_ARCHS += V63-ppc603
|
||||
|
||||
# MOXA montavista linux (No PVA because of missing boost support)
|
||||
CROSS_COMPILER_TARGET_ARCHS += mvl40-xscale_be
|
||||
|
||||
# MOXA SDK 4.2
|
||||
CROSS_COMPILER_TARGET_ARCHS += moxa42-armv6l
|
||||
|
||||
# Virtex embedded PPC
|
||||
CROSS_COMPILER_TARGET_ARCHS += eldk51-ppc4xxSF
|
||||
|
||||
# IOxOS IFC1210
|
||||
CROSS_COMPILER_TARGET_ARCHS += eldk52-e500v2
|
||||
|
||||
# DeltaTau PowerPMAC
|
||||
CROSS_COMPILER_TARGET_ARCHS += eldk42-ppc4xxFP
|
||||
CROSS_COMPILER_TARGET_ARCHS += eldk53-ppc4xxFP
|
||||
|
||||
# Test other vxWorks versions
|
||||
#CROSS_COMPILER_TARGET_ARCHS += V66-ppc603
|
||||
#CROSS_COMPILER_TARGET_ARCHS += V66-ppc604
|
||||
#CROSS_COMPILER_TARGET_ARCHS += V63-ppc604
|
||||
#CROSS_COMPILER_TARGET_ARCHS += V64-ppc604
|
||||
# (No PVA because of old compiler)
|
||||
#CROSS_COMPILER_TARGET_ARCHS += V62-ppc604
|
||||
|
||||
# RTEMS (Can only have 1 RTEMS major version in 1 EPICS installation
|
||||
# because they overwrite their header files.)
|
||||
#CROSS_COMPILER_TARGET_ARCHS += RTEMS49-pc386
|
||||
CROSS_COMPILER_TARGET_ARCHS += RTEMS51-pc686
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Needed by gcc
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):$(RTEMS_BASE)/lib
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH:%=%:)$(RTEMS_BASE)/lib
|
||||
|
||||
|
||||
@@ -7,3 +7,34 @@
|
||||
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040
|
||||
#CROSS_COMPILER_TARGET_ARCHS = RTEMS-mvme2100
|
||||
|
||||
include $(CONFIG)/os/CONFIG_SITE.linux-x86.Common
|
||||
|
||||
GNU_HOST_ARCH_64=x86_64
|
||||
|
||||
# Windows cross builds using Wine
|
||||
CROSS_COMPILER_TARGET_ARCHS += windows-x64
|
||||
CROSS_COMPILER_RUNTEST_ARCHS += windows-x64
|
||||
|
||||
# Windows cross builds using mingw
|
||||
CROSS_COMPILER_TARGET_ARCHS += windows-x64-mingw
|
||||
CROSS_COMPILER_RUNTEST_ARCHS += windows-x64-mingw
|
||||
|
||||
# IOxOS IFC1211
|
||||
#CROSS_COMPILER_TARGET_ARCHS += fslqoriq20-e6500_64
|
||||
|
||||
# Zynq
|
||||
#CROSS_COMPILER_TARGET_ARCHS += yocto21-aarch64
|
||||
CROSS_COMPILER_TARGET_ARCHS += yocto40-aarch64
|
||||
|
||||
# Debian
|
||||
CROSS_COMPILER_TARGET_ARCHS += deb10-x86_64
|
||||
CROSS_COMPILER_TARGET_ARCHS += deb12-x86_64
|
||||
|
||||
# Newer DeltaTau PowerPMAC
|
||||
CROSS_COMPILER_TARGET_ARCHS += gcc8-ppc4xxFP
|
||||
|
||||
# Raspberry Pi
|
||||
CROSS_COMPILER_TARGET_ARCHS += raspbian-arm
|
||||
|
||||
# NI Linux Real-Time 7.x
|
||||
CROSS_COMPILER_TARGET_ARCHS += nilrt7-armv7a
|
||||
|
||||
@@ -6,3 +6,9 @@
|
||||
# Inherit from the linux-x86 host architecture
|
||||
include $(CONFIG)/os/CONFIG_SITE.linux-x86.win32-x86-mingw
|
||||
|
||||
MINGWLIBS ?= /usr/i686-w64-mingw32/sys-root/mingw/bin
|
||||
export WINE ?= wine
|
||||
export WINEPREFIX = $(HOME)/.wine32-$(EPICS_HOST_ARCH)
|
||||
export WINEDEBUG := err-all,warn-all,fixme-all$(WINEDEBUG:%=,%)
|
||||
export WINEDLLOVERRIDES := mscoree,mshtml=$(WINEDLLOVERRIDES:%=,%)
|
||||
export WINEPATH := $(WINEPATH:%=%;)$(MINGWLIBS);$(abspath $(INSTALL_BIN))
|
||||
|
||||
@@ -6,3 +6,9 @@
|
||||
# Inherit from the linux-x86 host architecture
|
||||
include $(CONFIG)/os/CONFIG_SITE.linux-x86.windows-x64-mingw
|
||||
|
||||
MINGWLIBS ?= /usr/x86_64-w64-mingw32/sys-root/mingw/bin
|
||||
export WINE ?= wine64
|
||||
export WINEPREFIX = $(HOME)/.wine-$(EPICS_HOST_ARCH)
|
||||
export WINEDEBUG := err-all,warn-all,fixme-all$(WINEDEBUG:%=,%)
|
||||
export WINEDLLOVERRIDES := mscoree,mshtml=$(WINEDLLOVERRIDES:%=,%)
|
||||
export WINEPATH := $(WINEPATH:%=%;)$(MINGWLIBS);$(abspath $(INSTALL_BIN))
|
||||
|
||||
@@ -1992,6 +1992,9 @@ PREDEFINED = __cplusplus \
|
||||
LIBCA_API \
|
||||
DBRECSTD_API \
|
||||
EPICS_ALWAYS_INLINE \
|
||||
EPICS_NORETURN \
|
||||
EPICS_PRINTF_FMT(x)=x \
|
||||
EPICS_PRINTF_STYLE(a,b)= \
|
||||
epicsShareExtern \
|
||||
epicsShareClass \
|
||||
epicsShareFunc \
|
||||
|
||||
@@ -11,124 +11,7 @@ EXPAND_ME += RTD_SRC
|
||||
|
||||
DOXYGEN ?= doxygen
|
||||
|
||||
libcom_HEADERS += adjustment
|
||||
libcom_HEADERS += alarm
|
||||
libcom_HEADERS += alarmString
|
||||
libcom_HEADERS += asTrapWrite
|
||||
libcom_HEADERS += bucketLib
|
||||
libcom_HEADERS += cantProceed
|
||||
libcom_HEADERS += compilerDependencies
|
||||
libcom_HEADERS += cvtFast
|
||||
libcom_HEADERS += dbmf
|
||||
libcom_HEADERS += devLibVME
|
||||
libcom_HEADERS += devLibVMEImpl
|
||||
libcom_HEADERS += ellLib
|
||||
libcom_HEADERS += envDefs
|
||||
libcom_HEADERS += epicsAlgorithm
|
||||
libcom_HEADERS += epicsAssert
|
||||
libcom_HEADERS += epicsAtomic
|
||||
libcom_HEADERS += epicsEvent
|
||||
libcom_HEADERS += epicsExit
|
||||
libcom_HEADERS += epicsExport
|
||||
libcom_HEADERS += epicsGeneralTime
|
||||
libcom_HEADERS += epicsGuard
|
||||
libcom_HEADERS += epicsMessageQueue
|
||||
libcom_HEADERS += epicsMutex
|
||||
libcom_HEADERS += epicsReadline
|
||||
libcom_HEADERS += epicsRingBytes
|
||||
libcom_HEADERS += epicsRingPointer
|
||||
libcom_HEADERS += epicsSignal
|
||||
libcom_HEADERS += epicsSpin
|
||||
libcom_HEADERS += epicsStackTrace
|
||||
libcom_HEADERS += epicsStdio
|
||||
libcom_HEADERS += epicsStdlib
|
||||
libcom_HEADERS += epicsString
|
||||
libcom_HEADERS += epicsTempFile
|
||||
libcom_HEADERS += epicsThread
|
||||
libcom_HEADERS += epicsTime
|
||||
libcom_HEADERS += epicsTypes
|
||||
libcom_HEADERS += epicsUnitTest
|
||||
libcom_HEADERS += errlog
|
||||
libcom_HEADERS += freeList
|
||||
libcom_HEADERS += iocsh
|
||||
libcom_HEADERS += ipAddrToAsciiAsynchronous
|
||||
libcom_HEADERS += logClient
|
||||
libcom_HEADERS += macLib
|
||||
libcom_HEADERS += osiPoolStatus
|
||||
libcom_HEADERS += osiProcess
|
||||
libcom_HEADERS += osiSock
|
||||
libcom_HEADERS += postfix
|
||||
libcom_HEADERS += shareLib
|
||||
libcom_HEADERS += testMain
|
||||
libcom_HEADERS += yajl_alloc
|
||||
libcom_HEADERS += yajl_common
|
||||
libcom_HEADERS += yajl_gen
|
||||
libcom_HEADERS += yajl_parse
|
||||
|
||||
database_HEADERS += chfPlugin
|
||||
database_HEADERS += dbChannel
|
||||
database_HEADERS += dbCommon
|
||||
database_HEADERS += dbDefs
|
||||
database_HEADERS += dbExtractArray
|
||||
database_HEADERS += dbLink
|
||||
database_HEADERS += dbServer
|
||||
database_HEADERS += dbState
|
||||
database_HEADERS += dbStaticLib
|
||||
database_HEADERS += dbUnitTest
|
||||
database_HEADERS += devLib
|
||||
database_HEADERS += devSup
|
||||
database_HEADERS += drvSup
|
||||
database_HEADERS += initHooks
|
||||
|
||||
record_HEADERS += aaiRecord
|
||||
record_HEADERS += aaoRecord
|
||||
record_HEADERS += aiRecord
|
||||
record_HEADERS += aoRecord
|
||||
record_HEADERS += aSubRecord
|
||||
record_HEADERS += biRecord
|
||||
record_HEADERS += boRecord
|
||||
record_HEADERS += calcRecord
|
||||
record_HEADERS += calcoutRecord
|
||||
record_HEADERS += compressRecord
|
||||
record_HEADERS += dfanoutRecord
|
||||
record_HEADERS += eventRecord
|
||||
record_HEADERS += fanoutRecord
|
||||
record_HEADERS += histogramRecord
|
||||
record_HEADERS += int64inRecord
|
||||
record_HEADERS += int64outRecord
|
||||
record_HEADERS += longinRecord
|
||||
record_HEADERS += longoutRecord
|
||||
record_HEADERS += lsiRecord
|
||||
record_HEADERS += lsoRecord
|
||||
record_HEADERS += mbbiRecord
|
||||
record_HEADERS += mbbiDirectRecord
|
||||
record_HEADERS += mbboRecord
|
||||
record_HEADERS += mbboDirectRecord
|
||||
record_HEADERS += permissiveRecord
|
||||
record_HEADERS += printfRecord
|
||||
record_HEADERS += selRecord
|
||||
record_HEADERS += seqRecord
|
||||
record_HEADERS += stateRecord
|
||||
record_HEADERS += stringinRecord
|
||||
record_HEADERS += stringoutRecord
|
||||
record_HEADERS += subRecord
|
||||
record_HEADERS += subArrayRecord
|
||||
record_HEADERS += waveformRecord
|
||||
|
||||
menu_HEADERS += menuAlarmSevr
|
||||
menu_HEADERS += menuAlarmStat
|
||||
menu_HEADERS += menuConvert
|
||||
menu_HEADERS += menuFtype
|
||||
menu_HEADERS += menuIvoa
|
||||
menu_HEADERS += menuOmsl
|
||||
menu_HEADERS += menuPini
|
||||
menu_HEADERS += menuPost
|
||||
menu_HEADERS += menuPriority
|
||||
menu_HEADERS += menuScan
|
||||
menu_HEADERS += menuSimm
|
||||
menu_HEADERS += menuYesNo
|
||||
|
||||
HEADER_TYPES = libcom database record menu
|
||||
include $(TOP)/documentation/Makefile.headers
|
||||
|
||||
HEADER_MD_FILES = $(foreach t, $(HEADER_TYPES), \
|
||||
$(addsuffix _h.md, $($t_HEADERS)))
|
||||
@@ -137,10 +20,80 @@ API_RST_FILES = $(addsuffix -api.rst, $(HEADER_TYPES))
|
||||
RTD_SRC = $(COMMON_DIR)/rtd-src
|
||||
|
||||
DOCS += README.md
|
||||
DOCS += RELEASE_NOTES.md
|
||||
DOCS += ca-cli.md
|
||||
|
||||
OLD_NOTES = $(wildcard ../RELEASE-*.md)
|
||||
DOCS += $(OLD_NOTES:../%=%)
|
||||
|
||||
ifneq ($(EPICS_DEV_SNAPSHOT),)
|
||||
# Between releases the release target is disabled
|
||||
DOCS += RELEASE_NOTES.md
|
||||
REASON = EPICS_DEV_SNAPSHOT not empty
|
||||
else
|
||||
# Not a snapshot, user may be creating a new release
|
||||
ifdef T_A
|
||||
DOC = ../
|
||||
endif
|
||||
# Could we be in the middle of anything?
|
||||
NOTES_FILE = RELEASE-$(EPICS_SHORT_VERSION).md
|
||||
NOTES_PATH = $(DOC)$(NOTES_FILE)
|
||||
NOTES_GIT := $(firstword $(shell git status --porcelain $(NOTES_PATH)))
|
||||
ifeq ($(NOTES_GIT),A)
|
||||
# New file was added to the Git index; allow unrelease
|
||||
else ifeq ($(NOTES_GIT),AD)
|
||||
# File was added to the Git index but deleted; allow unrelease
|
||||
else ifeq ($(wildcard $(NOTES_PATH)),)
|
||||
# No file yet, allow release
|
||||
else
|
||||
# File exists but isn't in Git
|
||||
REASON := $(NOTES_FILE) exists but isn't in Git
|
||||
NOTES_FILE =
|
||||
NOTES_PATH =
|
||||
endif
|
||||
endif
|
||||
|
||||
NEW_DIR = ../new-notes
|
||||
NEW_NOTES = $(wildcard $(NEW_DIR)/*.md)
|
||||
|
||||
include $(TOP)/configure/RULES
|
||||
|
||||
ifndef T_A
|
||||
release unrelease doxygen rtd sphinx: inc
|
||||
$(MAKE) -C O.$(EPICS_HOST_ARCH) $@
|
||||
else
|
||||
|
||||
MAKENOTES = ../make-notes.pl
|
||||
|
||||
ifneq ($(NOTES_PATH),)
|
||||
$(NOTES_PATH): $(NEW_NOTES) $(MAKENOTES)
|
||||
@$(RM) $@
|
||||
$(PERL) $(MAKENOTES) -o $@ -V $(EPICS_SHORT_VERSION) \
|
||||
-d $(abspath $(NEW_DIR))
|
||||
release-git: $(NOTES_PATH)
|
||||
$(if $(NEW_NOTES), \
|
||||
git rm -q $(NEW_NOTES))
|
||||
git add $<
|
||||
release: $(INSTALL_DOC)/RELEASE_NOTES.md $(INSTALL_DOC)/$(NOTES_FILE)
|
||||
|
||||
unrelease:
|
||||
$(if $(wildcard $(NOTES_PATH)), \
|
||||
git restore --staged $(NOTES_PATH); \
|
||||
$(RM) $(NOTES_PATH))
|
||||
git restore --staged $(NEW_DIR)
|
||||
git restore $(NEW_DIR)
|
||||
|
||||
REL_DEP = release-git $(NOTES_PATH)
|
||||
else
|
||||
REL_DEV = -D
|
||||
release unrelease:
|
||||
$(error "make $@" not available, $(REASON))
|
||||
endif
|
||||
|
||||
$(COMMON_DIR)/RELEASE_NOTES.md: $(REL_DEP) $(NEW_NOTES) $(MAKENOTES)
|
||||
@$(RM) $@
|
||||
$(PERL) $(MAKENOTES) -o $@ -V $(EPICS_SHORT_VERSION) $(REL_DEV) \
|
||||
-d $(abspath $(NEW_DIR)) $(OLD_NOTES) $(NOTES_PATH)
|
||||
|
||||
$(HEADER_MD_FILES): %_h.md: ../HEADER_h.md
|
||||
$(EXPAND_TOOL) -t $(INSTALL_LOCATION) -DHEADER=$* $< $@
|
||||
|
||||
@@ -151,24 +104,23 @@ $(API_RST_FILES): %-api.rst: ../%-API.rst
|
||||
@$(foreach h, $($*_HEADERS), \
|
||||
echo " $h_h.rst" >> $@;)
|
||||
|
||||
ifndef T_A
|
||||
doxygen rtd sphinx: inc
|
||||
$(MAKE) -C O.$(EPICS_HOST_ARCH) $@
|
||||
else
|
||||
|
||||
doxygen: Doxyfile
|
||||
@$(MKDIR) $(RTD_SRC)
|
||||
$(DOXYGEN)
|
||||
DOX = doxygen
|
||||
|
||||
rtd: doxygen $(API_RST_FILES) $(HEADER_MD_FILES)
|
||||
rsync -av $(INSTALL_DOC)/ $(RTD_SRC)/
|
||||
# Use "make sphinx DOX=" to skip running doxygen
|
||||
rtd: $(DOX) $(API_RST_FILES) $(HEADER_MD_FILES)
|
||||
rsync -av --exclude=RELEASE-*.md $(INSTALL_DOC)/ $(RTD_SRC)/
|
||||
rsync -av $(HEADER_MD_FILES) $(RTD_SRC)/
|
||||
rsync -av $(API_RST_FILES) $(RTD_SRC)/
|
||||
rsync -av ../index.rst ../conf.py $(RTD_SRC)/
|
||||
RTD = rtd
|
||||
|
||||
sphinx: rtd
|
||||
# Use "make sphinx RTD=" to skip earlier steps
|
||||
sphinx: $(RTD)
|
||||
cd $(COMMON_DIR); $(PYTHON) -m sphinx rtd-src readthedocs
|
||||
rsync -av $(COMMON_DIR)/readthedocs $(INSTALL_HTML)/
|
||||
endif
|
||||
|
||||
.PHONY: doxygen rtd sphinx
|
||||
.PHONY: release release-git unrelease doxygen rtd sphinx
|
||||
|
||||
129
documentation/Makefile.headers
Normal file
129
documentation/Makefile.headers
Normal file
@@ -0,0 +1,129 @@
|
||||
# Makefile.headers
|
||||
#
|
||||
# Lists of C/C++ header files to include in each
|
||||
# section of the documentation
|
||||
|
||||
HEADER_TYPES = libcom ca database record menu
|
||||
|
||||
libcom_HEADERS += adjustment
|
||||
libcom_HEADERS += alarm
|
||||
libcom_HEADERS += alarmString
|
||||
libcom_HEADERS += asTrapWrite
|
||||
libcom_HEADERS += bucketLib
|
||||
libcom_HEADERS += cantProceed
|
||||
libcom_HEADERS += compilerDependencies
|
||||
libcom_HEADERS += cvtFast
|
||||
libcom_HEADERS += dbmf
|
||||
libcom_HEADERS += devLibVME
|
||||
libcom_HEADERS += devLibVMEImpl
|
||||
libcom_HEADERS += ellLib
|
||||
libcom_HEADERS += envDefs
|
||||
libcom_HEADERS += epicsAlgorithm
|
||||
libcom_HEADERS += epicsAssert
|
||||
libcom_HEADERS += epicsAtomic
|
||||
libcom_HEADERS += epicsEvent
|
||||
libcom_HEADERS += epicsExit
|
||||
libcom_HEADERS += epicsExport
|
||||
libcom_HEADERS += epicsGeneralTime
|
||||
libcom_HEADERS += epicsGuard
|
||||
libcom_HEADERS += epicsMessageQueue
|
||||
libcom_HEADERS += epicsMutex
|
||||
libcom_HEADERS += epicsReadline
|
||||
libcom_HEADERS += epicsRingBytes
|
||||
libcom_HEADERS += epicsRingPointer
|
||||
libcom_HEADERS += epicsSignal
|
||||
libcom_HEADERS += epicsSpin
|
||||
libcom_HEADERS += epicsStackTrace
|
||||
libcom_HEADERS += epicsStdio
|
||||
libcom_HEADERS += epicsStdlib
|
||||
libcom_HEADERS += epicsString
|
||||
libcom_HEADERS += epicsTempFile
|
||||
libcom_HEADERS += epicsThread
|
||||
libcom_HEADERS += epicsTime
|
||||
libcom_HEADERS += epicsTypes
|
||||
libcom_HEADERS += epicsUnitTest
|
||||
libcom_HEADERS += errlog
|
||||
libcom_HEADERS += freeList
|
||||
libcom_HEADERS += iocsh
|
||||
libcom_HEADERS += ipAddrToAsciiAsynchronous
|
||||
libcom_HEADERS += logClient
|
||||
libcom_HEADERS += macLib
|
||||
libcom_HEADERS += osiPoolStatus
|
||||
libcom_HEADERS += osiProcess
|
||||
libcom_HEADERS += osiSock
|
||||
libcom_HEADERS += postfix
|
||||
libcom_HEADERS += shareLib
|
||||
libcom_HEADERS += testMain
|
||||
libcom_HEADERS += yajl_alloc
|
||||
libcom_HEADERS += yajl_common
|
||||
libcom_HEADERS += yajl_gen
|
||||
libcom_HEADERS += yajl_parse
|
||||
|
||||
ca_HEADERS += cadef
|
||||
ca_HEADERS += caerr
|
||||
ca_HEADERS += caeventmask
|
||||
ca_HEADERS += db_access
|
||||
|
||||
database_HEADERS += chfPlugin
|
||||
database_HEADERS += dbChannel
|
||||
database_HEADERS += dbCommon
|
||||
database_HEADERS += dbDefs
|
||||
database_HEADERS += dbExtractArray
|
||||
database_HEADERS += dbLink
|
||||
database_HEADERS += dbServer
|
||||
database_HEADERS += dbState
|
||||
database_HEADERS += dbStaticLib
|
||||
database_HEADERS += dbUnitTest
|
||||
database_HEADERS += devLib
|
||||
database_HEADERS += devSup
|
||||
database_HEADERS += drvSup
|
||||
database_HEADERS += initHooks
|
||||
|
||||
record_HEADERS += aaiRecord
|
||||
record_HEADERS += aaoRecord
|
||||
record_HEADERS += aiRecord
|
||||
record_HEADERS += aoRecord
|
||||
record_HEADERS += aSubRecord
|
||||
record_HEADERS += biRecord
|
||||
record_HEADERS += boRecord
|
||||
record_HEADERS += calcRecord
|
||||
record_HEADERS += calcoutRecord
|
||||
record_HEADERS += compressRecord
|
||||
record_HEADERS += dfanoutRecord
|
||||
record_HEADERS += eventRecord
|
||||
record_HEADERS += fanoutRecord
|
||||
record_HEADERS += histogramRecord
|
||||
record_HEADERS += int64inRecord
|
||||
record_HEADERS += int64outRecord
|
||||
record_HEADERS += longinRecord
|
||||
record_HEADERS += longoutRecord
|
||||
record_HEADERS += lsiRecord
|
||||
record_HEADERS += lsoRecord
|
||||
record_HEADERS += mbbiRecord
|
||||
record_HEADERS += mbbiDirectRecord
|
||||
record_HEADERS += mbboRecord
|
||||
record_HEADERS += mbboDirectRecord
|
||||
record_HEADERS += permissiveRecord
|
||||
record_HEADERS += printfRecord
|
||||
record_HEADERS += selRecord
|
||||
record_HEADERS += seqRecord
|
||||
record_HEADERS += stateRecord
|
||||
record_HEADERS += stringinRecord
|
||||
record_HEADERS += stringoutRecord
|
||||
record_HEADERS += subRecord
|
||||
record_HEADERS += subArrayRecord
|
||||
record_HEADERS += waveformRecord
|
||||
|
||||
menu_HEADERS += menuAlarmSevr
|
||||
menu_HEADERS += menuAlarmStat
|
||||
menu_HEADERS += menuConvert
|
||||
menu_HEADERS += menuFtype
|
||||
menu_HEADERS += menuIvoa
|
||||
menu_HEADERS += menuOmsl
|
||||
menu_HEADERS += menuPini
|
||||
menu_HEADERS += menuPost
|
||||
menu_HEADERS += menuPriority
|
||||
menu_HEADERS += menuScan
|
||||
menu_HEADERS += menuSimm
|
||||
menu_HEADERS += menuYesNo
|
||||
|
||||
@@ -232,14 +232,16 @@ required path and other environment variables.
|
||||
* **`EPICS_HOST_ARCH`**
|
||||
|
||||
Some host builds of EPICS require that the environment variable
|
||||
`EPICS_HOST_ARCH` be defined. The perl script `EpicsHostArch.pl` in the
|
||||
`base/startup` directory prints the value which the build will use if
|
||||
the variable is not set before the build starts. Architecture names
|
||||
start with the operating system followed by a dash and the host CPU
|
||||
architecture, e.g. `linux-x86_64`. Some architecture names have another
|
||||
dash followed by another keyword, for example when building for Windows
|
||||
but using the MinGW compiler the name must be `windows-x64-mingw`. See
|
||||
`configure/CONFIG_SITE` for a list of supported host architecture names.
|
||||
`EPICS_HOST_ARCH` be defined. The shell script `EpicsHostArch` in the
|
||||
`base/startup` directory (which finds and calls the perl script
|
||||
`EpicsHostArch.pl` in the `base/src/tools` directory) prints the
|
||||
value which the build will use if the variable is not set before
|
||||
the build starts. Architecture names start with the operating system
|
||||
followed by a dash and the host CPU architecture, e.g. `linux-x86_64`.
|
||||
Some architecture names have another dash followed by another keyword,
|
||||
for example when building for Windows but using the MinGW compiler the
|
||||
name must be `windows-x64-mingw`. See `configure/CONFIG_SITE` for a
|
||||
list of supported host architecture names.
|
||||
|
||||
* **`PATH`**
|
||||
As already mentioned, you must have the `perl` executable and you may
|
||||
|
||||
890
documentation/RELEASE-3.15.md
Normal file
890
documentation/RELEASE-3.15.md
Normal file
@@ -0,0 +1,890 @@
|
||||
# Changes incorporated from the 3.15 branch
|
||||
|
||||
## Changes from the 3.15 branch since 3.15.9
|
||||
|
||||
### Support for Apple M1/M2 (arm64) Processors
|
||||
|
||||
Thanks to Jeong Han Lee this release comes with build support for Apple's new
|
||||
M1/M2 CPUs running macOS, using the target name `darwin-aarch64`.
|
||||
|
||||
### Set thread names on Windows
|
||||
|
||||
On MS Windows, epicsThread names are made available to the OS and debugger
|
||||
using `SetThreadDescription()` if available as well as using the older
|
||||
exception mechanism.
|
||||
|
||||
### Fix timers on MS Windows for non-EPICS threads
|
||||
|
||||
The waitable timer changes in 3.15.9 broke calls to `epicsThreadSleep()` and
|
||||
similar routines that used timers (including `ca_pend_event()`) when made from
|
||||
threads that were not started using the epicsThread APIs.
|
||||
[This problem](https://github.com/epics-base/epics-base/pull/200)
|
||||
[has now been fixed](https://github.com/epics-base/epics-base/pull/201).
|
||||
|
||||
## Changes made between 3.15.8 and 3.15.9
|
||||
|
||||
### Use waitable timers on Microsoft Windows
|
||||
|
||||
The `epicsEventWaitWithTimeout()` and `epicsThreadSleep()` functions have
|
||||
been changed to use waitable timers. On Windows 10 version 1803 or higher
|
||||
they will use high resolution timers for more consistent timing.
|
||||
|
||||
See [this Google Groups thread](https://groups.google.com/a/chromium.org/g/scheduler-dev/c/0GlSPYreJeY)
|
||||
for a comparison of the performance of different timers.
|
||||
|
||||
### Build target for documentation
|
||||
|
||||
The build target `inc` now works again after a very long hiatus. It now
|
||||
generates and installs just the dbd, header and html files, without compiling
|
||||
any C/C++ code. This can be used to speed up CI jobs that only generate
|
||||
documentation.
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- The error status returned by a record support's `special()` method is now propagated out of the `dbPut()` routine again (broken since 3.15.0).
|
||||
- [gh: #80](https://github.com/epics-base/epics-base/issues/80), VS-2015 and
|
||||
later have working strtod()
|
||||
- [lp: #1776141](https://bugs.launchpad.net/epics-base/+bug/1776141), Catch
|
||||
buffer overflow from long link strings
|
||||
- [lp: #1899697](https://bugs.launchpad.net/epics-base/+bug/1899697), Records
|
||||
in wrong PHAS order
|
||||
|
||||
### Change to the `junitfiles` self-test build target
|
||||
|
||||
The names of the generated junit xml test output files have been changed
|
||||
from `<testname>.xml` to `<testname>-results.xml`, to allow better
|
||||
distinction from other xml files. (I.e., for easy wildcard matching.)
|
||||
|
||||
### Fixes and code cleanups
|
||||
|
||||
Issues reported by various static code checkers.
|
||||
|
||||
## Changes made between 3.15.7 and 3.15.8
|
||||
|
||||
### Bug fixes
|
||||
|
||||
The following launchpad bugs have fixes included in this release:
|
||||
|
||||
- [lp: 1812084](https://bugs.launchpad.net/epics-base/+bug/1812084), Build
|
||||
failure on RTEMS 4.10.2
|
||||
- [lp: 1829770](https://bugs.launchpad.net/epics-base/+bug/1829770), event
|
||||
record device support broken with constant INP
|
||||
- [lp: 1829919](https://bugs.launchpad.net/epics-base/+bug/1829919), IOC
|
||||
segfaults when calling dbLoadRecords after iocInit
|
||||
- [lp: 1838792](https://bugs.launchpad.net/epics-base/+bug/1838792), epicsCalc
|
||||
bit-wise operators on aarch64
|
||||
- [lp: 1841608](https://bugs.launchpad.net/epics-base/+bug/1841608), logClient
|
||||
falsely sends error logs on all connections
|
||||
- [lp: 1853168](https://bugs.launchpad.net/epics-base/+bug/1853168), undefined
|
||||
reference to `clock_gettime()`
|
||||
- [lp: 1862328](https://bugs.launchpad.net/epics-base/+bug/1862328), Race
|
||||
condition on IOC start leaves rsrv unresponsive
|
||||
- [lp: 1868486](https://bugs.launchpad.net/epics-base/+bug/1868486),
|
||||
epicsMessageQueue lost messages
|
||||
|
||||
### Improvements to the self-test build targets
|
||||
|
||||
This release contains changes that make it possible to integrate another test
|
||||
running and reporting system (such as Google's gtest) into the EPICS build
|
||||
system. The built-in test-runner and reporting system will continue to be used
|
||||
by the test programs inside Base however.
|
||||
|
||||
These GNUmake `tapfiles` and `test-results` build targets now collect a list of
|
||||
the directories that experienced test failures and display those at the end of
|
||||
running and/or reporting all of the tests. The GNUmake process will also only
|
||||
exit with an error status after running and/or reporting all of the test
|
||||
results; previously the `-k` flag to make was needed and even that didn't always
|
||||
work.
|
||||
|
||||
Continuous Integration systems are recommended to run `make tapfiles` (or if
|
||||
they can read junittest output instead of TAP `make junitfiles`) followed by
|
||||
`make -s test-results` to display the results of the tests. If multiple CPUs are
|
||||
available the `-j` flag can be used to run tests in parallel, giving the maximum
|
||||
jobs that should be allowed so `make -j4 tapfiles` for a system with 4 CPUs say.
|
||||
Running many more jobs than you have CPUs is likely to be slower and is not
|
||||
recommended.
|
||||
|
||||
### Calc Engine Fixes and Enhancements
|
||||
|
||||
The code that implements bit operations for Calc expressions has been reworked
|
||||
to better handle some CPU architectures and compilers. As part of this work a
|
||||
new operator has been added: `>>>` performs a logical right-shift, inserting
|
||||
zero bits into the most significant bits (the operator `>>` is an arithmetic
|
||||
right-shift which copies the sign bit as it shifts the value rightwards).
|
||||
|
||||
### IOC logClient Changes
|
||||
|
||||
The IOC's error logging system has been updated significantly to fix a number
|
||||
of issues including:
|
||||
|
||||
- Only send errlog messages to iocLogClient listeners
|
||||
- Try to minimize lost messages while the log server is down:
|
||||
+ Detect disconnects sooner
|
||||
+ Don't discard the buffer on disconnect
|
||||
+ Flush the buffer immediately after a server reconnects
|
||||
|
||||
### epicsThread: Main thread defaults to allow blocking I/O
|
||||
|
||||
VxWorks IOCs (and potentially RTEMS IOCs running GeSys) have had problems with
|
||||
garbled error messages from dbStaticLib routines for some time — messages
|
||||
printed before `iocInit` were being queued through the errlog thread instead of
|
||||
being output immediately. This has been fixed by initializing the main thread
|
||||
with its `OkToBlock` flag set instead of cleared. IOCs running on other
|
||||
operating systems that use iocsh to execute the startup script previously had
|
||||
that set anyway in iocsh so were not affected, but this change might cause other
|
||||
programs that don't use iocsh to change their behavior slightly if they use
|
||||
`errlogPrintf()`, `epicsPrintf()` or `errPrintf()`.
|
||||
|
||||
### catools: Handle data type changes in camonitor
|
||||
|
||||
The camonitor program didn't properly cope if subscribed to a channel whose data
|
||||
type changed when its IOC was rebooted without restarting the camonitor program.
|
||||
This has now been fixed.
|
||||
|
||||
### More Record Reference Documentation
|
||||
|
||||
The remaining record types have had their reference pages moved from the Wiki,
|
||||
and some new reference pages have been written to cover the analog array and
|
||||
long string input and output record types plus the printf record type, none of
|
||||
which were previously documented. The wiki reference pages covering the fields
|
||||
common to all, input, and output record types have also been added, thanks to
|
||||
Rolf Keitel. The POD conversion scripts have also been improved and they now
|
||||
properly support linking to subsections in a different document, although the
|
||||
POD changes to add the cross-links that appeared in the original wiki pages
|
||||
still needs to be done in most cases.
|
||||
|
||||
### Fix build issues with newer MinGW versions
|
||||
|
||||
The `clock_gettime()` routine is no longer used under MinGW since newer versions
|
||||
don't provide it any more.
|
||||
|
||||
### Fix race for port in RSRV when multiple IOCs start simultaneously
|
||||
|
||||
If multiple IOCs were started at the same time, by systemd say, they could race
|
||||
to obtain the Channel Access TCP port number 5064. This issue has been fixed.
|
||||
|
||||
-----
|
||||
|
||||
## Changes made between 3.15.6 and 3.15.7
|
||||
|
||||
### GNU Readline detection on Linux
|
||||
|
||||
Most Linux architectures should now configure themselves automatically to use
|
||||
the GNU Readline library if its main header file can be found in the expected
|
||||
place, and not try to use Readline if the header file isn't present. For older
|
||||
Linux architectures where libncurses or libcurses must also be linked with, the
|
||||
manual configuration of the `COMMANDLINE_LIBRARY` variable in the appropriate
|
||||
`configure/os/CONFIG_SITE.Common.<arch>` file will still be necessary.
|
||||
|
||||
### Replace `EPICS_TIMEZONE` with `EPICS_TZ`
|
||||
|
||||
The `EPICS_TIMEZONE` environment parameter provided time-zone information for
|
||||
the IOC's locale in the old ANSI format expected by VxWorks for its `TIMEZONE`
|
||||
environment variable, and can also used by RTEMS to set its `TZ` environment
|
||||
variable. However the `TIMEZONE` value has to be updated every year since it
|
||||
contains the exact dates of the daylight-savings time changes. The Posix TZ
|
||||
format that RTEMS uses contains rules that for calculating those dates, thus its
|
||||
value would only need updating if the rules (or the locale) are changed.
|
||||
|
||||
This release contains changes that replace the `EPICS_TIMEZONE` environment
|
||||
parameter with one called `EPICS_TZ` and a routine for VxWorks that calculates
|
||||
the `TIMEZONE` environment variable from the current `TZ` value. This routine
|
||||
will be run once at start-up, when the EPICS clock has synchronized to its NTP
|
||||
server. The calculations it contains were worked out and donated to EPICS by
|
||||
Larry Hoff in 2009; it is unforunate that it has taken 10 years for them to be
|
||||
integrated into Base.
|
||||
|
||||
The default value for the `EPICS_TZ` environment parameter is set in the Base
|
||||
`configure/CONFIG_SITE_ENV` file, which contains example settings for most EPICS
|
||||
sites that use VxWorks, and a link to a page describing the Posix TZ format for
|
||||
any locations that I missed.
|
||||
|
||||
If a VxWorks IOC runs continuously without being rebooted from December 31st to
|
||||
the start of daylight savings time the following year, its `TIMEZONE` value will
|
||||
be wrong as it was calculated for the previous year. This only affects times
|
||||
that are converted to a string on the IOC however and is easily fixed; just run
|
||||
the command `tz2timezone()` on the VxWorks shell and the calculation will be
|
||||
redone for the current year. IOCs that get rebooted at least once before the
|
||||
start of summer time will not need this to be done.
|
||||
|
||||
### Added new decimation channel filter
|
||||
|
||||
A new server-side filter has been added to the IOC for reducing the number
|
||||
and frequency of monitor updates from a channel by a client-specified factor.
|
||||
The filter's behaviour is quite simplistic, it passes the first monitor event it
|
||||
sees to the client and then drops the next N-1 events before passing another
|
||||
event. For example to sample a 60Hz channel at 1Hz, a 10Hz channel every 6
|
||||
seconds, or a 1Hz channel once every minute:
|
||||
|
||||
```
|
||||
Hal$ camonitor 'test:channel.{"dec":{"n":60}}'
|
||||
...
|
||||
```
|
||||
|
||||
More information is included in the filters documentation, which can be found
|
||||
in the `html/filters.html` document that is generated during the build.
|
||||
|
||||
### Imported Record Reference Documentation from Wiki
|
||||
|
||||
The remaining record types that had 3.14 reference documentation in the EPICS
|
||||
Wiki have had that documentation converted and imported into their DBD files.
|
||||
The preferred form for future updates to the record type descriptions is now an
|
||||
emailed patch file, a Pull Request through GitHub, or a Merge Request through
|
||||
Launchpad. Note that in some cases the behavior of a record type in a 7.0.x
|
||||
release may differ from that of the same record type in a 3.15 release, although
|
||||
this would be unusual, so it may be important to indicate the branch that your
|
||||
changes apply to.
|
||||
|
||||
**NOTE:** *These documentation changes have modified the order of the fields in
|
||||
some record definitions. As a result this release is not compatible with record
|
||||
or device support binaries that were compiled against earlier releases.*
|
||||
|
||||
### `make test-results` for Windows
|
||||
|
||||
The make target `test-results` should now work properly on Windows. Some Perl
|
||||
installations used versions of `prove.bat` that would only display the results of
|
||||
up to 3 tests or didn't return an error status in the event of tests failing. The
|
||||
build system now calls its own perl script to summarize the results instead of
|
||||
passing a list of TAP filenames to `prove`.
|
||||
|
||||
### Add option to avoid CALLBACK conflict
|
||||
|
||||
If a macro `EPICS_NO_CALLBACK` is defined, then callback.h will no longer
|
||||
(re)define CALLBACK. The name `CALLBACK` is used by the WIN32 API, and
|
||||
redefinition in callback.h cause errors if some windows headers are later
|
||||
included.
|
||||
|
||||
Code which defines `EPICS_NO_CALLBACK`, but still wishes to use callbacks,
|
||||
should use the alternate name `epicsCallback` introduced in 3.15.6, 3.16.2, and
|
||||
7.0.2. It is also possible, though not encouraged, to use `struct callbackPvt`
|
||||
which has been present since the callback API was introduced.
|
||||
|
||||
### Cleaning up with Multiple CA contexts in a Process
|
||||
|
||||
Bruno Martins reported a problem with the CA client library at shutdown in a
|
||||
process that uses multiple CA client contexts. The first context that triggers
|
||||
the CA client exit handler prevents any others from being able to clean up
|
||||
because it resets the ID of an internal epicsThreadPrivate variable which is
|
||||
shared by all clients. This action has been removed from the client library,
|
||||
which makes cleanup of clients like this possible.
|
||||
|
||||
### Perl CA bindings fixed for macOS Mojave
|
||||
|
||||
Apple removed some Perl header files from macOS Mojave that were available
|
||||
in their SDK, requiring a change to the include paths used when compiling the
|
||||
CA bindings. The new version should build on new and older macOS versions, and
|
||||
these changes may also help other targets that have an incomplete installation
|
||||
of Perl (the build will continue after printing a warning that the Perl CA
|
||||
bindings could not be built).
|
||||
|
||||
### Routine `epicsTempName()` removed from libCom
|
||||
|
||||
This routine was a simple wrapper around the C89 function `tmpnam()`
|
||||
which is now seen as unsafe and causes warning messages to be generated by
|
||||
most modern compilers. The two internal uses of this function have been
|
||||
modified to call `epicsTempFile()` instead. We were unable to find any
|
||||
published code that used this function, so it was removed immediately instead
|
||||
of being deprecated.
|
||||
|
||||
### DBD Parsing of Record Types
|
||||
|
||||
The Perl DBD file parser has been made slightly more liberal; the order in
|
||||
which DBD files must be parsed is now more flexible, so that a record type
|
||||
definition can now be parsed after a device support that referred to that
|
||||
record type. A warning message will be displayed when the device support is
|
||||
seen, but the subsequent loading of the record type will be accepted without
|
||||
triggering an error. See
|
||||
[Launchpad bug 1801145](https://bugs.launchpad.net/epics-base/+bug/1801145).
|
||||
|
||||
### menuScan and several record types documented with POD
|
||||
|
||||
The EPICS Wiki pages describing a number of standard record types has been
|
||||
converted into the Perl POD documentation format and added to the DBD files,
|
||||
so at build-time an HTML version of these documents is generated and installed
|
||||
into the htmls directory. Thanks to Tony Pietryla.
|
||||
|
||||
### CA client tools learned `-V` option
|
||||
|
||||
This displays the version numbers of EPICS Base and the CA protocol.
|
||||
|
||||
-----
|
||||
|
||||
## Changes made between 3.15.5 and 3.15.6
|
||||
|
||||
### Unsetting environment variables
|
||||
|
||||
The new command `epicsEnvUnset varname` can be used to
|
||||
unset an environment variable.
|
||||
|
||||
### Warning indicators in msi (and macLib) output
|
||||
|
||||
The libCom macro expansion library has been modified so that when the
|
||||
`SUPPRESS_WARNINGS` flag is set it will no longer include any `,undefined`
|
||||
or `,recursive` indicators in its output when undefined or recursive
|
||||
macros are encountered. These indicators were harmless when the output was fed
|
||||
into an IOC along with a definition for the macro, but when the `msi`
|
||||
tool was used to generate other kinds of files they caused problems. If the
|
||||
`msi -V` flag is used the markers will still be present in the output
|
||||
whenever the appropriate condition is seen.
|
||||
|
||||
### Improvements to msi
|
||||
|
||||
In addition to fixing its response to discovering parsing errors in its
|
||||
substitution input file (reported as Launchpad
|
||||
[bug 1503661](https://bugs.launchpad.net/epics-base/+bug/1503661))
|
||||
so it now deletes the incomplete output file, the msi program has been cleaned
|
||||
up a little bit internally.
|
||||
|
||||
### All array records now post monitors on their array-length fields
|
||||
|
||||
The waveform record has been posting monitors on its NORD field since Base
|
||||
3.15.0.1; we finally got around to doing the equivalent in all the other
|
||||
built-in record types, which even required modifying device support in some
|
||||
cases. This fixes
|
||||
[Launchpad bug 1730727](https://bugs.launchpad.net/epics-base/+bug/1730727).
|
||||
|
||||
### HOWTO: Converting Wiki Record Reference to POD
|
||||
|
||||
Some documentation has been added to the `dbdToHtml.pl` script
|
||||
explaining how Perl POD (Plain Old Documentation) markup can be added to
|
||||
`.dbd` files to generate HTML documentation for the record types. To see
|
||||
these instructions, run `perl bin/<host>/dbdToHtml.pl -H`
|
||||
or `perldoc bin/<host>/dbdToHtml.pl`.
|
||||
|
||||
### Fix problem with numeric soft events
|
||||
|
||||
Changing from numeric to named soft events introduced an incompatibility
|
||||
when a numeric event 1-255 is converted from a DOUBLE, e.g. from a calc record.
|
||||
The `post_event()` API is not marked deprecated any more.
|
||||
|
||||
Also `scanpel` has been modified to accept a glob pattern for
|
||||
event name filtering and to show events with no connected records as well.
|
||||
|
||||
### Add `osiSockOptMcastLoop_t` and osiSockTest
|
||||
|
||||
Added a new OS-independent typedef for multicast socket options, and a test
|
||||
file to check their correct operation.
|
||||
|
||||
### Support for `CONFIG_SITE.local` in Base
|
||||
|
||||
This feature is mostly meant for use by developers; configuration
|
||||
settings that would normally appear in `base/configure/CONFIG_SITE` can now
|
||||
be put in a locally created `base/configure/CONFIG_SITE.local` file instead
|
||||
of having go modify or replace the original. A new `.gitignore` pattern
|
||||
tells git to ignore all `configure/*.local` files.
|
||||
|
||||
### Fix broken `EPICS_IOC_LOG_FILE_LIMIT=0` setting
|
||||
|
||||
The Application Developers' Guide says this is allowed and disables the
|
||||
limit on the log-file, but it hasn't actually worked for some time (if ever).
|
||||
Note that the iocLogServer will be removed from newer Base release sometime
|
||||
soon as its functionality can be implemented by other dedicated log servers
|
||||
such as logstash or syslog-ng.
|
||||
|
||||
Fixes [lp:1786858](https://bugs.launchpad.net/bugs/1786858)
|
||||
and part of [lp:1786966](https://bugs.launchpad.net/bugs/1786966).
|
||||
|
||||
### Cleanup of startup directory
|
||||
|
||||
The files in the startup directory have not been maintained in recent years
|
||||
and have grown crufty (technical term). This release includes the following
|
||||
updates to these files:
|
||||
|
||||
- The Perl `EpicsHostArch.pl` script has been rewritten, and support
|
||||
for a few previously missing host architectures has been added to it.
|
||||
- The `EpicsHostArch.pl` script has also been moved into the standard
|
||||
`src/tools` directory, from where it will be installed into
|
||||
`lib/perl`. In this new location it is no longer executable, so it must
|
||||
be run by the `perl` executable.
|
||||
- The build system has been adjusted to look for `EpicsHostArch.pl` in
|
||||
both places if the `EPICS_HOST_ARCH` environment variable has not been
|
||||
set at build-time.
|
||||
- Sites that used the original Perl script to set `EPICS_HOST_ARCH` as part of
|
||||
their standard environment will need to adjust their scripts when they
|
||||
upgrade to this release.
|
||||
- The `EpicsHostArch` shell script has been replaced with a wrapper
|
||||
routine that calls the Perl `EpicsHostArch.pl` script. Sites that rely on
|
||||
this script to set `EPICS_HOST_ARCH` should consider switching to the
|
||||
Perl script instead.
|
||||
- The `Site.cshrc` and `Site.profile` files have been renamed to
|
||||
`unix.csh` and `unix.sh`, respectively.
|
||||
- The existing `win32.bat` file has been cleaned up and a new
|
||||
`windows.bat` file added for 64-bit targets. The contents of these files
|
||||
should be seen as examples, don't uncomment or install parts for software
|
||||
that you don't explicitly know that you need.
|
||||
|
||||
### Recent Apple XCode Build Issues
|
||||
|
||||
The latest version of XCode will not compile calls to `system()` or
|
||||
`clock_settime()` for iOS targets. There were several places in Base
|
||||
where these were being compiled, although there were probably never called. The
|
||||
code has now been modified to permit iOS builds to complete again.
|
||||
|
||||
### Prevent illegal alarm severities
|
||||
|
||||
A check has been added to `recGblResetAlarms()` that prevents records
|
||||
from getting an alarm severity higher than `INVALID_ALARM`. It is still possible
|
||||
for a field like HSV to get set to a value that is not a legal alarm severity,
|
||||
but the core IOC code should never copy such a value into a record's SEVR or
|
||||
ACKS fields. With this fix the record's alarm severity will be limited to
|
||||
`INVALID_ALARM`.
|
||||
|
||||
### Fixes for Launchpad bugs
|
||||
|
||||
The following launchpad bugs have fixes included:
|
||||
|
||||
- [lp: 1786320](https://bugs.launchpad.net/epics-base/+bug/1786320), dbCa
|
||||
subscribes twice to ENUM
|
||||
- [lp: 541221](https://bugs.launchpad.net/epics-base/+bug/541221),
|
||||
`assert (pca->pgetNative)` failed in ../dbCa.c
|
||||
- [lp: 1747091](https://bugs.launchpad.net/epics-base/+bug/1747091),
|
||||
epicsTimeGetEvent() / generalTime bug
|
||||
- [lp: 1743076](https://bugs.launchpad.net/epics-base/+bug/1743076), Segfault
|
||||
in `ca_attach_context()` during exits
|
||||
- [lp: 1751380](https://bugs.launchpad.net/epics-base/+bug/1751380), Deadlock
|
||||
in `ca_clear_subscription()`
|
||||
- [lp: 1597809](https://bugs.launchpad.net/epics-base/+bug/1597809), Setting
|
||||
NAME field in DB file may break IOC
|
||||
- [lp: 1770292](https://bugs.launchpad.net/epics-base/+bug/1770292),
|
||||
`get_alarm_double()` inconsistent across record types
|
||||
- [lp: 1771298](https://bugs.launchpad.net/epics-base/+bug/1771298),
|
||||
Conversion of NaN to integer relies on undefined behavior
|
||||
|
||||
### Updated VxWorks Timezone settings
|
||||
|
||||
Removed the settings for 2017; fixed the hour of the change for MET.
|
||||
|
||||
### Fixed camonitor server side relative timestamps bug
|
||||
|
||||
Initialize the first time-stamp from the first monitor, not the client-side
|
||||
current time in this configuration.
|
||||
|
||||
### Build changes for MSVC
|
||||
|
||||
Windows builds using Visual Studio 2015 and later now use the `-FS`
|
||||
compiler option to allow parallel builds to work properly.
|
||||
|
||||
We now give the `-FC` option to tell the compiler to print absolute
|
||||
paths for source files in diagnostic messages.
|
||||
|
||||
### Extend maximum Posix epicsEventWaitWithTimeout() delay
|
||||
|
||||
The Posix implementation of epicsEventWaitWithTimeout() was limiting the
|
||||
timeout delay to at most 60 minutes (3600.0 seconds). This has been changed to
|
||||
10 years; significantly longer maximum delays cause problems on systems where
|
||||
`time_t` is still a signed 32-bit integer so cannot represent absolute
|
||||
time-stamps after 2038-01-19. Our assumption is that such 32-bit systems will
|
||||
have been retired before the year 2028, but some additional tests have been
|
||||
added to the epicsTimeTest program to detect and fail if this assumption is
|
||||
violated.
|
||||
|
||||
### New test-related make targets
|
||||
|
||||
This release adds several new make targets intended for use by developers
|
||||
and Continuous Integration systems which simplify the task of running the
|
||||
built-in self-test programs and viewing the results. Since these targets are
|
||||
intended for limited use they can have requirements for the build host which
|
||||
go beyond the standard minimum set needed to build and run Base.
|
||||
|
||||
#### `test-results` - Summarize test results
|
||||
|
||||
The new make target `test-results` will run the self-tests if
|
||||
necessary to generate a TAP file for each test, then summarizes the TAP output
|
||||
files in each test directory in turn, displaying the details of any failures.
|
||||
This step uses the program `prove` which comes with Perl, but also needs
|
||||
`cat` to be provided in the default search path so will not work on most
|
||||
Windows systems.
|
||||
|
||||
#### `junitfiles` - Convert test results to JUnit XML Format
|
||||
|
||||
The new make target `junitfiles` will run the self-tests if necessary
|
||||
and then convert the TAP output files into the more commonly-supported JUnit
|
||||
XML format. The program that performs this conversion needs the Perl module
|
||||
`XML::Generator` to have been installed.
|
||||
|
||||
#### `clean-tests` - Delete test result files
|
||||
|
||||
The new make target `clean-tests` removes any test result files from
|
||||
previous test runs. It cleans both TAP and JUnit XML files.
|
||||
|
||||
### Fix DNS related crash on exit
|
||||
|
||||
The attempt to fix DNS related delays for short lived CLI programs (eg. caget)
|
||||
in [lp:1527636](https://bugs.launchpad.net/epics-base/+bug/1527636) introduced a
|
||||
bug which cased these short lived clients to crash on exit. This bug should now
|
||||
be fixed.
|
||||
|
||||
### Server bind issue on Windows
|
||||
|
||||
When a National Instruments network variables CA server is already running on
|
||||
a Windows system and an IOC or PCAS server is started, the IOC's attempt to
|
||||
bind a TCP socket to the CA server port number fails, but Windows returns a
|
||||
different error status value than the IOC is expecting in that circumstance
|
||||
(because the National Instruments code requests exclusive use of that port,
|
||||
unlike the EPICS code) so the IOC fails to start properly. The relevent EPICS
|
||||
bind() checks have now been updated so the IOC will request that a dynamic port
|
||||
number be allocated for this TCP socket instead when this happens.
|
||||
|
||||
### Checking Periodic Scan Rates
|
||||
|
||||
Code has been added to the IOC startup to better protect it against bad
|
||||
periodic scan rates, including against locales where `.` is not
|
||||
accepted as a decimal separator character. If the scan period in a menuScan
|
||||
choice string cannot be parsed, the associated periodic scan thread will no
|
||||
longer be started by the IOC and a warning message will be displayed at iocInit
|
||||
time. The `scanppl` command will also flag the faulty menuScan value.
|
||||
|
||||
-----
|
||||
|
||||
## Changes made between 3.15.4 and 3.15.5
|
||||
|
||||
### dbStatic Library Speedup and Cleanup
|
||||
|
||||
Loading of database files has been optimized to avoid over-proportionally
|
||||
long loading times for large databases. As a part of this, the alphabetical
|
||||
ordering of records instances (within a record type) has been dropped. In the
|
||||
unexpected case that applications were relying on the alphabetic order, setting
|
||||
`dbRecordsAbcSorted = 1` before loading the databases will retain the
|
||||
old behavior.
|
||||
|
||||
The routine `dbRenameRecord()` has been removed, as it was intended
|
||||
to be used by database configuration tools linked against a host side version
|
||||
of the dbStatic library that is not being built anymore.
|
||||
|
||||
### Launchpad Bug-fixes
|
||||
|
||||
In addition to the more detailed change descriptions below, the following
|
||||
Launchpad bugs have also been fixed in this release:
|
||||
|
||||
- [lp:1440186](https://bugs.launchpad.net/epics-base/+bug/1440186) Crash due
|
||||
to a too small buffer being provided in `dbContextReadNotifyCache()`
|
||||
- [lp:1479316](https://bugs.launchpad.net/epics-base/+bug/1479316) Some data
|
||||
races found using Helgrind
|
||||
- [lp:1495833](https://bugs.launchpad.net/epics-base/+bug/1495833) biRecord
|
||||
prompt groups are nonsensical
|
||||
- [lp:1606848](https://bugs.launchpad.net/epics-base/+bug/1606848) WSAIoctl
|
||||
`SIO_GET_INTERFACE_LIST` failed in Windows
|
||||
|
||||
### Whole-Program Optimization for MS Visual Studio Targets
|
||||
|
||||
When using the Microsoft compilers a new build system variable is provided that
|
||||
controls whether whole program optimization is used or not. For static builds
|
||||
using Visual Studio 2010 this optimization must be disabled. This is controlled
|
||||
in the files `configure/os/CONFIG_SITE.Common.windows-x64-static` and
|
||||
`configure/os/CONFIG_SITE.Common.win32-x86-static` by setting the variable
|
||||
`OPT_WHOLE_PROGRAM=NO` to override the default value `YES` that would otherwise
|
||||
be used.
|
||||
|
||||
Note that enabling this optimization slows down the build process. It is not
|
||||
possible to selectively disable this optimization, when building a particular
|
||||
module say; Microsoft's linker will restart itself automatically with the
|
||||
`-LTCG` flag set and display a warning if it is asked to link any object
|
||||
files that were compiled with the `-GL` flag.
|
||||
|
||||
### Add dynamic (variable length) array support to PCAS
|
||||
|
||||
Dynamic array sizing support was added to the IOC server (RSRV) in the
|
||||
Base-3.14.12 release, but has not until now been supported in the Portable
|
||||
Channel Access Server (PCAS). Channel Access server applications using the
|
||||
PCAS may not need to be modified at all; if they already push monitors with
|
||||
different gdd array lengths, those variable sizes will be forwarded to any CA
|
||||
clients who have requested variable length updates. The example CAS server
|
||||
application has been modified to demonstrate this feature.
|
||||
|
||||
In implementing the above, the gdd method `gdd::put(const gdd *)` now
|
||||
copies the full-sized array from the source gdd if the destination gdd is of
|
||||
type array, has no allocated memory and a boundary size of 0.
|
||||
|
||||
### Additional epicsTime conversion
|
||||
|
||||
The EPICS timestamp library (epicsTime) inside libCom's OSI layer has
|
||||
been extended by routines that convert from `struct tm` to the EPICS
|
||||
internal `epicsTime` type, assuming UTC - i.e. without going through
|
||||
the timezone mechanism. This solves issues with converting from the structured
|
||||
type to the EPICS timestamp at driver level from multiple threads at a high
|
||||
repetition rate, where the timezone mechanism was blocking on file access.
|
||||
|
||||
### MinGW Cross-builds from Linux
|
||||
|
||||
The build configuration files that allow cross-building of the 32-bit
|
||||
win32-x86-mingw cross-target have been adjusted to default to building shared
|
||||
libraries (DLLs) as this is now supported by recent MinGW compilers. The 64-bit
|
||||
windows-x64-mingw cross-target was already being built that way by default. The
|
||||
configuration options to tell the minGW cross-compiler to link programs with
|
||||
static versions of the compiler support libraries have now been moved into the
|
||||
`CONFIG_SITE.linux-x86.<target>` files.
|
||||
|
||||
### General Time updates
|
||||
|
||||
The `iocInit` code now performs a sanity check of the current time
|
||||
returned by the generalTime subsystem and will print a warning if the wall-clock
|
||||
time returned has not been initialized yet. This is just a warning message; when
|
||||
a time provider does synchonize the IOC will subsequently pick up and use the
|
||||
correct time. This check code also primes the registered event system provider
|
||||
if there is one so the `epicsTimeGetEventInt()` routine will work on IOCs
|
||||
that ask for event time within an interrupt service routine.
|
||||
|
||||
The osiClockTime provider's synchronization thread (which is only used on
|
||||
some embedded targets) will now poll the other time providers at 1Hz until the
|
||||
first time it manages to get a successful timestamp, after which it will poll
|
||||
for updates every 60 seconds as before.
|
||||
|
||||
The routine `generalTimeGetExceptPriority()` was designed for use by
|
||||
backup (lower priority) time providers like the osiClockTime provider which do
|
||||
not have their own absolute time reference and rely on other providers for an
|
||||
absolute time source. This routine no longer implements the ratchet mechanism
|
||||
that prevented the time it returned from going backwards. If the backup clock's
|
||||
tick-timer runs fast the synchronization of the backup time provider would never
|
||||
allow it to be corrected backwards when the ratchet was in place. The regular
|
||||
`epicsTimeGetCurrent()` API still uses the ratchet mechanism, so this
|
||||
change will not cause the IOC to see time going backwards.
|
||||
|
||||
### Microsoft Visual Studio builds
|
||||
|
||||
The build configuration files for builds using the Microsoft compilers have been
|
||||
updated, although there should be no noticable difference at most sites. One
|
||||
extra compiler warning is now being suppressed for C++ code, `C4344: behavior
|
||||
change: use of explicit template arguments results in ...` which is gratuitous
|
||||
and was appearing frequently in builds of the EPICS V4 modules.
|
||||
|
||||
Cross-builds of the windows-x64 target from a win32-x86 host have been
|
||||
removed as they don't actually work within the context of a single `make`
|
||||
run. Significant changes to the build configuration files would be necessary for
|
||||
these kinds of cross-builds to work properly, which could be done if someone
|
||||
needs them (email Andrew Johnson before working on this, and see
|
||||
[this stack-overflow answer](http://stackoverflow.com/questions/5807647/how-do-you-compile-32-bit-and-64-bit-applications-at-the-same-time-in-visual-stu) for a starting point).
|
||||
|
||||
### Bazaar keywords such as 'Revision-Id' removed
|
||||
|
||||
In preparation for moving to git in place of the Bazaar revision control
|
||||
system we have removed all the keywords from the Base source code.
|
||||
|
||||
### Linux systemd service file for CA Repeater
|
||||
|
||||
Building this version of Base on a Linux system creates a systemd service
|
||||
file suitable for starting the Channel Access Repeater under systemd. The file
|
||||
will be installed into the target bin directory, from where it can be copied
|
||||
into the appropriate systemd location and modified as necessary. Installation
|
||||
instructions are included as comments in the file.
|
||||
|
||||
-----
|
||||
|
||||
## Changes made between 3.15.3 and 3.15.4
|
||||
|
||||
### New string input device support "getenv"
|
||||
|
||||
A new "getenv" device support for both the stringin and lsi (long string
|
||||
input) record types can be used to read the value of an environment variable
|
||||
from the IOC at runtime. See base/db/softIocExit.db for sample usage.
|
||||
|
||||
### Build rules and `DELAY_INSTALL_LIBS`
|
||||
|
||||
A new order-only prerequisite build rule has been added to ensure that
|
||||
library files (and DLL stubs on Windows) get installed before linking any
|
||||
executables, which resolves parallel build problems on high-powered CPUs. There
|
||||
are some (rare) cases though where a Makefile has to build an executable and run
|
||||
it to be able to compile code for a library built by the same Makefile. With
|
||||
this new build rule GNUmake will complain about a circular dependency and the
|
||||
build will probably fail in those cases. To avoid this problem the failing
|
||||
Makefile should set `DELAY_INSTALL_LIBS = YES` before including the
|
||||
`$(TOP)/configure/RULES` file, disabling the new build rule.
|
||||
|
||||
### IOC environment variables and build parameters
|
||||
|
||||
The IOC now sets a number of environment variables at startup that provide the
|
||||
version of EPICS Base it was built against (`EPICS_VERSION_...`) and its build
|
||||
architecture (ARCH). In some cases this allows a single iocBoot/ioc directory to
|
||||
be used to run the same IOC on several different architectures without any
|
||||
changes.
|
||||
|
||||
There are also 3 new environment parameters (`EPICS_BUILD_...`) available that
|
||||
C/C++ code can use to find out the target architecture, OS class and compiler
|
||||
class it was built with. These may be useful when writing interfaces to other
|
||||
languages.
|
||||
|
||||
### New implementation of `promptgroup`/`gui_group` field property
|
||||
|
||||
The mechanism behind the `promptgroup()` field property inside a record type
|
||||
definition has been changed. Instead of using a fixed set of choices,
|
||||
the static database access library now collects the used gui group names
|
||||
while parsing DBD information. Group names should start with a two-digit number
|
||||
plus space-dash-space to allow proper sorting of groups.
|
||||
|
||||
The include file `guigroup.h` that defined the fixed set of choices
|
||||
has been deprecated. Instead, use the conversion functions between index number
|
||||
and group string that have been added to dbStaticLib.
|
||||
|
||||
When a DBD file containing record-type descriptions is expanded, any
|
||||
old-style `GUI_xxx` group names will be replaced by a new-style
|
||||
string for use by the IOC. This permits an older record type to be used with
|
||||
the 3.15.4 release, although eventually record types should be converted by
|
||||
hand with better group names used.
|
||||
|
||||
### CA server configuration changes
|
||||
|
||||
RSRV now honors `EPICS_CAS_INTF_ADDR_LIST` and binds only to the provided list
|
||||
of network interfaces. Name searches (UDP and TCP) on other network interfaces
|
||||
are ignored. For example on a computer with interfaces 10.5.1.1/24, 10.5.2.1/24,
|
||||
and 10.5.3.1/24, setting `EPICS_CAS_INTF_ADDR_LIST='10.5.1.1 10.5.2.1'` will
|
||||
accept traffic on the .1.1 and .2.1, but ignore from .3.1
|
||||
|
||||
RSRV now honors `EPICS_CAS_IGNORE_ADDR_LIST` and ignores UDP messages received
|
||||
from addresses in this list.
|
||||
|
||||
Previously, CA servers (RSRV and PCAS) would build the beacon address list using
|
||||
`EPICS_CA_ADDR_LIST` if `EPICS_CAS_BEACON_ADDR_LIST` was no set. This is no
|
||||
longer done. Sites depending on this should set both environment variables to
|
||||
the same value.
|
||||
|
||||
### IPv4 multicast for name search and beacons
|
||||
|
||||
libca, RSRV, and PCAS may now use IPv4 multicasting for UDP traffic (name search
|
||||
and beacons). This is disabled by default. To enable multicast address(s) must
|
||||
be listed in `EPICS_CA_ADDR_LIST` for clients and `EPICS_CAS_INTF_ADDR_LIST` for
|
||||
servers (IOCs should set both). For example:
|
||||
|
||||
EPICS_CAS_INTF_ADDR_LIST='224.0.2.9' EPICS_CA_ADDR_LIST=224.0.2.9
|
||||
|
||||
Please note that no IPv4 multicast address is officially assigned for Channel
|
||||
Access by IANA. The example 224.0.2.9 is taken from the AD-HOC Block I range.
|
||||
|
||||
### Moved `mlockall()` into its own epicsThread routine
|
||||
|
||||
Since EPICS Base 3.15.0.2 on Posix OSs the initialization of the epicsThread
|
||||
subsystem has called `mlockall()` when the OS supports it and thread
|
||||
priority scheduling is enabled. Doing so has caused problems in third-party
|
||||
applications that call the CA client library, so the functionality has been
|
||||
moved to a separate routine `epicsThreadRealtimeLock()` which will be
|
||||
called by the IOC at iocInit (unless disabled by setting the global variable
|
||||
`dbThreadRealtimeLock` to zero).
|
||||
|
||||
### Added dbQuietMacroWarnings control
|
||||
|
||||
When loading database files, macros get expanded even on comment lines. If a
|
||||
comment contains an undefined macro, the load still continues but an error
|
||||
message gets printed. For this release the error message has been changed to a
|
||||
warning, but even this warning can be made less verbose by setting this new
|
||||
variable to a non-zero value before loading the file, like this:
|
||||
|
||||
```
|
||||
var dbQuietMacroWarnings 1 iocsh
|
||||
dbQuietMacroWarnings=1 VxWorks
|
||||
```
|
||||
|
||||
This was [Launchpad bug
|
||||
541119](https://bugs.launchpad.net/bugs/541119).
|
||||
|
||||
-----
|
||||
|
||||
## Changes from the 3.14 branch between 3.15.3 and 3.15.4
|
||||
|
||||
### NTP Time Provider adjusts to OS tick rate changes
|
||||
|
||||
Dirk Zimoch provided code that allows the NTP Time provider (used on VxWorks
|
||||
and RTEMS only) to adapt to changes in the OS clock tick rate after the provider
|
||||
has been initialized. Note that changing the tick rate after iocInit() is not
|
||||
advisable, and that other software might still misbehave if initialized before
|
||||
an OS tick rate change. This change was back-ported from the 3.15 branch.
|
||||
|
||||
### Making IOC `ca_get` operations atomic
|
||||
|
||||
When a CA client gets data from an IOC record using a compound data type such
|
||||
as `DBR_TIME_DOUBLE` the value field is fetched from the database in a
|
||||
separate call than the other metadata, without keeping the record locked. This
|
||||
allows some other thread such as a periodic scan thread a chance to interrupt
|
||||
the get operation and process the record in between. CA monitors have always
|
||||
been atomic as long as the value data isn't a string or an array, but this race
|
||||
condition in the CA get path has now been fixed so the record will stay locked
|
||||
between the two fetch operations.
|
||||
|
||||
This fixes
|
||||
[Launchpad bug 1581212](https://bugs.launchpad.net/epics-base/+bug/1581212),
|
||||
thanks to Till Strauman and Dehong Zhang.
|
||||
|
||||
### New `CONFIG_SITE` variable for running self-tests
|
||||
|
||||
The 'make runtests' and 'make tapfiles' build targets normally only run the
|
||||
self-tests for the main `EPICS_HOST_ARCH` architecture. If the host is
|
||||
able to execute self-test programs for other target architectures that are being
|
||||
built by the host, such as when building a `-debug` version of the host
|
||||
architecture for example, the names of those other architectures can be added to
|
||||
the new `CROSS_COMPILER_RUNTEST_ARCHS` variable in either the
|
||||
`configure/CONFIG_SITE` file or in an appropriate
|
||||
`configure/os/CONFIG_SITE.<host>.Common` file to have the test
|
||||
programs for those targets be run as well.
|
||||
|
||||
### Additional RELEASE file checks
|
||||
|
||||
An additional check has been added at build-time for the contents of the
|
||||
`configure/RELEASE` file(s), which will mostly only affect users of the Debian
|
||||
EPICS packages published by NSLS-2. Support modules may share an install path,
|
||||
but all such modules must be listed adjacent to each other in any `RELEASE`
|
||||
files that point to them. For example the following will fail the new checks:
|
||||
|
||||
```
|
||||
AUTOSAVE = /usr/lib/epics
|
||||
ASYN = /home/mdavidsaver/asyn
|
||||
EPICS_BASE = /usr/lib/epics
|
||||
```
|
||||
|
||||
giving the compile-time error
|
||||
|
||||
```
|
||||
This application's RELEASE file(s) define
|
||||
EPICS_BASE = /usr/lib/epics
|
||||
after but not adjacent to
|
||||
AUTOSAVE = /usr/lib/epics
|
||||
Module definitions that share paths must be grouped together.
|
||||
Either remove a definition, or move it to a line immediately
|
||||
above or below the other(s).
|
||||
Any non-module definitions belong in configure/CONFIG_SITE.
|
||||
```
|
||||
|
||||
In many cases such as the one above the order of the `AUTOSAVE` and
|
||||
`ASYN` lines can be swapped to let the checks pass, but if the
|
||||
`AUTOSAVE` module depended on `ASYN` and hence had to appear
|
||||
before it in the list this error indicates that `AUTOSAVE` should also be
|
||||
built in its own private area; a shared copy would likely be incompatible with
|
||||
the version of `ASYN` built in the home directory.
|
||||
|
||||
### String field buffer overflows
|
||||
|
||||
Two buffer overflow bugs that can crash the IOC have been fixed, caused by
|
||||
initializing a string field with a value larger than the field size
|
||||
([Launchpad bug 1563191](https://bugs.launchpad.net/bugs/1563191)).
|
||||
|
||||
### Fixed stack corruption bug in epicsThread C++ API
|
||||
|
||||
The C++ interface to the epicsThread API could corrupt the stack on thread
|
||||
exit in some rare circumstances, usually at program exit. This bug has been
|
||||
fixed ([Launchpad bug 1558206](https://bugs.launchpad.net/bugs/1558206)).
|
||||
|
||||
### RTEMS NTP Support Issue
|
||||
|
||||
On RTEMS the NTP Time Provider could in some circumstances get out of sync
|
||||
with the server because the `osdNTPGet()` code wasn't clearing its input socket
|
||||
before sending out a new request. This
|
||||
([Launchpad bug 1549908](https://bugs.launchpad.net/bugs/1549908))
|
||||
has now been fixed.
|
||||
|
||||
### CALC engine bitwise operator fixes
|
||||
|
||||
The bitwise operators in the CALC engine have been modified to work properly
|
||||
with values that have bit 31 (0x80000000) set. This modification involved
|
||||
back-porting some earlier changes from the 3.15 branch, and fixes
|
||||
[Launchpad bug 1514520](https://code.launchpad.net/bugs/1514520).
|
||||
|
||||
### Fix `ipAddrToAsciiAsync()`: Don't try to join the daemon thread
|
||||
|
||||
On process exit, don't try to stop the worker thread that makes DNS lookups
|
||||
asynchronous. Previously this would wait for any lookups still in progress,
|
||||
delaying the exit unnecessarily. This was most obvious with catools (eg.
|
||||
cainfo).
|
||||
[lp:1527636](https://bugs.launchpad.net/bugs/1527636)
|
||||
|
||||
### Fix `epicsTime_localtime()` on Windows
|
||||
|
||||
Simpler versions of the `epicsTime_gmtime()` and `epicsTime_localtime()`
|
||||
routines have been included in the Windows implementations, and a new test
|
||||
program added. The original versions do not report DST status properly. Fixes
|
||||
[Launchpad bug 1528284](https://bugs.launchpad.net/bugs/1528284).
|
||||
756
documentation/RELEASE-3.16.md
Normal file
756
documentation/RELEASE-3.16.md
Normal file
@@ -0,0 +1,756 @@
|
||||
# Changes incorporated from the 3.16 branch
|
||||
|
||||
## Changes made between 3.16.1 and 3.16.2
|
||||
|
||||
### Launchpad Bugs
|
||||
|
||||
The list of tracked bugs fixed in this release can be found on the
|
||||
[Launchpad Milestone page for EPICS Base 3.16.2](https://launchpad.net/epics-base/+milestone/3.16.2).
|
||||
|
||||
### Status reporting for the callback and scanOnce task queues
|
||||
|
||||
Two new iocsh commands and some associated underlying APIs have been added to
|
||||
show the state of the queues that feed the three callback tasks and the
|
||||
scanOnce task, including a high-water mark which can optionally be reset. The
|
||||
new iocsh commands are `callbackQueueShow` and `scanOnceQueueShow`; both take
|
||||
an optional integer argument which must be non-zero to reset the high-water
|
||||
mark.
|
||||
|
||||
### Support for event codes greater than or equal to `NUM_TIME_EVENTS`
|
||||
|
||||
Event numbers greater than or equal to `NUM_TIME_EVENTS` are now allowed if
|
||||
supported by the registered event time provider, which must provide its own
|
||||
advancing timestamp validation for such events.
|
||||
|
||||
Time events numbered 0 through `(NUM_TIME_EVENTS-1)` are still validated by code
|
||||
in epicsGeneralTime.c that checks for advancing timestamps and enforces that
|
||||
restriction.
|
||||
|
||||
### Type-safe Device and Driver Support Tables
|
||||
|
||||
Type-safe versions of the device and driver support structures `dset` and
|
||||
`drvet` have been added to the devSup.h and drvSup.h headers respectively. The
|
||||
original structure definitions have not been changed so existing support
|
||||
modules will still build normally, but older modules can be modified and new
|
||||
code written to be compatible with both.
|
||||
|
||||
The old structure definitions will be replaced by the new ones if the macros
|
||||
`USE_TYPED_DSET` and/or `USE_TYPED_DRVET` are defined when the appropriate
|
||||
header is included. The best place to define these is in the Makefile, as with
|
||||
the `USE_TYPED_RSET` macro that was introduced in Base-3.16.1 and described
|
||||
below. See the comments in devSup.h for a brief usage example, or look at
|
||||
[this commit](https://github.com/epics-modules/ipac/commit/a7e0ff4089b9aa39108bc8569e95ba7fcf07cee9)
|
||||
to the ipac module to see a module conversion.
|
||||
|
||||
A helper function `DBLINK* dbGetDevLink(dbCommon *prec)` has also been added
|
||||
to devSup.h which fetches a pointer to the INP or OUT field of the record.
|
||||
|
||||
### RTEMS build configuration update, running tests under QEMU
|
||||
|
||||
This release includes the ability to run the EPICS unit tests built for a
|
||||
special version of the RTEMS-pc386 target architecture on systems that have an
|
||||
appropriate QEMU emulator installed (`qemu-system-i386`). It is also now
|
||||
possible to create sub-architectures of RTEMS targets, whereas previously the
|
||||
EPICS target architecture name had to be `RTEMS-$(RTEMS_BSP)`.
|
||||
|
||||
The new target `RTEMS-pc386-qemu` builds binaries that can be run in the
|
||||
`qemu-system-i386` PC System emulator. This target is a derivative of the
|
||||
original `RTEMS-pc386` target but with additional software to build an in-
|
||||
memory file-system, and some minor modifications to allow the unit tests to
|
||||
work properly under QEMU. When this target is enabled, building any of the
|
||||
make targets that cause the built-in self-tests to be run (such as `make
|
||||
runtests`) will also run the tests for RTEMS using QEMU.
|
||||
|
||||
To allow the new 3-component RTEMS target name, the EPICS build system for
|
||||
RTEMS was modified to allow a `configure/os/CONFIG.Common.<arch>` file to set
|
||||
the `RTEMS_BSP` variable to inform the build what RTEMS BSP to use. Previously
|
||||
this was inferred from the value of the `T_A` make variable, but that prevents
|
||||
having multiple EPICS targets that build against the same BSP. All the
|
||||
included RTEMS target configuration files have been updated; build
|
||||
configuration files for out-of-tree RTEMS targets will continue to work as the
|
||||
original rules are used to set `RTEMS_BSP` if it hasn't been set when needed.
|
||||
|
||||
### Link type enhancements
|
||||
|
||||
This release adds three new link types: "state", "debug" and "trace". The
|
||||
"state" link type gets and puts boolean values from/to the dbState library
|
||||
that was added in the 3.15.1 release. The "debug" link type sets the
|
||||
`jlink::debug` flag in its child link, while the "trace" link type also causes
|
||||
the arguments and return values for all calls to the child link's jlif and
|
||||
lset routines to be printed on stdout. The debug flag can no longer be set
|
||||
using an info tag. The addition of the "trace" link type has allowed over 200
|
||||
lines of conditional diagnostic printf() calls to be removed from the other
|
||||
link types.
|
||||
|
||||
The "calc" link type can now be used for output links as well as input links.
|
||||
This allows modification of the output value and even combining it with values
|
||||
from other input links. See the separate JSON Link types document for details.
|
||||
|
||||
A new `start_child()` method was added to the end of the jlif interface table.
|
||||
|
||||
The `lset` methods have now been properly documented in the dbLink.h header
|
||||
file using Doxygen annotations, although we do not run Doxygen on the source
|
||||
tree yet to generate API documentation.
|
||||
|
||||
Link types that utilize child links must now indicate whether the child will
|
||||
be used for input, output or forward linking by the return value from its
|
||||
`parse_start_map()` method. The `jlif_key_result` enum now contains 3 values
|
||||
`jlif_key_child_inlink`, `jlif_key_child_outlink` and `jlif_key_child_fwdlink`
|
||||
instead of the single `jlif_key_child_link` that was previously used for this.
|
||||
|
||||
### GNUmake targets for debugging
|
||||
|
||||
Some additional build rules have been added to help debug configuration
|
||||
problems with the build system. Run `make show-makefiles` to get a sorted list
|
||||
of all the files that the build system includes when building in the current
|
||||
directory.
|
||||
|
||||
A new pattern rule for `PRINT.%` can be used to show the value of any GNUmake
|
||||
variable for the current build directory (make sure you are in the right
|
||||
directory though, many variables are only set when inside the `O.<arch>` build
|
||||
directory). For example `make PRINT.T_A` will display the build target
|
||||
architecture name from inside a `O.<arch>` directory but the variable will be
|
||||
empty from an application top or src directory. `make PRINT.EPICS_BASE` will
|
||||
show the path to Base from any EPICS application directory though.
|
||||
|
||||
### Propagate PUTF across Asynchronous record processing
|
||||
|
||||
The IOC contains a mechanism involving the PUTF and RPRO fields of each record
|
||||
to ensure that if a record is busy when it receives a put to one of its
|
||||
fields, the record will be processed again to ensure that the new field value
|
||||
has been correctly acted on. Until now that mechanism only worked if the put
|
||||
was to the asynchronous record itself, so puts that were chained from some
|
||||
other record via a DB link did not cause reprocessing.
|
||||
|
||||
In this release the mechanism has been extended to propagate the PUTF state
|
||||
across DB links until all downstream records have been reprocessed. Some
|
||||
additional information about the record state can be shown by setting the TPRO
|
||||
field of an upstream record, and even more trace data is displayed if the
|
||||
debugging variable `dbAccessDebugPUTF` is set in addition to TPRO.
|
||||
|
||||
### Finding info fields
|
||||
|
||||
A new iocsh command `dbli` lists the info fields defined in the database, and
|
||||
can take a glob pattern to limit output to specific info names. The newly
|
||||
added dbStaticLib function `dbNextMatchingInfo()` iterates through the info
|
||||
fields defined in the current record, and is used to implement the new
|
||||
command.
|
||||
|
||||
### Output from `dbpr` command enhanced
|
||||
|
||||
The "DataBase Print Record" command `dbpr` now generates slightly better
|
||||
output, with more field types having their own display methods. This release
|
||||
also includes additional protection against buffer overflows while printing
|
||||
long links in `dbpr`, and corrects the output of long strings from the `dbgf`
|
||||
command.
|
||||
|
||||
### Record types mbbiDirect and mbboDirect upgraded to 32 bit
|
||||
|
||||
The VAL fields and related fields of these records are now `DBF_LONG`. (Not
|
||||
`DBF_ULONG` in order to prevent Channel Access from promoting them to
|
||||
`DBF_DOUBLE`.) Additional bit fields `B10`...`B1F` have been added.
|
||||
|
||||
Device support that accesses `VAL` or the bit fields directly (most don't) and
|
||||
aims for compatibility with old and new versions of these records should use
|
||||
at least 32 bit integer types to avoid bit loss. The number of bit fields can
|
||||
be calculated using `8 * sizeof(prec->val)` which is correct in both versions.
|
||||
|
||||
### Restore use of ledlib for VxWorks command editing
|
||||
|
||||
The epicsReadline refactoring work described below unfortunately disabled the
|
||||
VxWorks implementation of the osdReadline.c API that uses ledlib for command
|
||||
editing and history. This functionality has now been restored, see Launchpad
|
||||
[bug #1741578](https://bugs.launchpad.net/bugs/1741578).
|
||||
|
||||
### Constant link types
|
||||
|
||||
Constant links can now hold 64-bit integer values, either as scalars or
|
||||
arrays. Only base 10 is supported by the JSON parser though, the JSON standard
|
||||
doesn't allow for hexadecimal numbers.
|
||||
|
||||
### Upgraded the YAJL JSON Library
|
||||
|
||||
The third-party YAJL library that has been included in libCom for several
|
||||
years has been upgraded to version 2.1.0 and several bugs fixed. This has an
|
||||
updated API, requiring any code that uses it to parse its own JSON files to be
|
||||
modified to match. The changes are mainly that it uses `size_t` instead
|
||||
`unsigned int` for string lengths, but it also uses `long long` instead of
|
||||
`long` for JSON integer values, which was the main motivation for the upgrade.
|
||||
|
||||
The self-tests that YAJL comes with have been imported and are now run as an
|
||||
EPICS Unit Test program, and the JSON syntax accepted by the parser was
|
||||
extended to permit trailing commas in both arrays and maps. The difference
|
||||
between the old and new YAJL APIs can be detected at compile time by looking
|
||||
for the macro `EPICS_YAJL_VERSION` which is defined in the `yajl_common.h`
|
||||
header file along with a brief description of the API changes.
|
||||
|
||||
### Timestamp support for the calc link type
|
||||
|
||||
A new optional parameter can be given when specifying a calc JSON link. The
|
||||
`time` parameter is a string containing a single letter `A..L` that selects
|
||||
one of the input links to be used for the timestamp of calculation if
|
||||
requested. The timestamp will be fetched atomically with the value from the
|
||||
chosen input link (providing that input link type supports the readLocked()
|
||||
method).
|
||||
|
||||
### Silence errors from puts to constant link types
|
||||
|
||||
A soft channel output record with the OUT link unset uses the CONSTANT link
|
||||
type. The new link type code was causing some soft channel device supports to
|
||||
return an error status from the write method of that link type, which would
|
||||
cause a `ca_put()` operation to such a record to generate an exception. This has
|
||||
been silenced by giving the constant link types a dummy putValue method. A new
|
||||
test program has been added to prevent regressions of this behaviour.
|
||||
|
||||
### RSRV expanding large buffer causes crash
|
||||
|
||||
In the 3.16.1 release a crash can occur in the IOC's RSRV server when a large
|
||||
array is made even larger; the previous array buffer was not being released
|
||||
correctly. See Launchpad
|
||||
[bug #1706703](https://bugs.launchpad.net/epics-base/+bug/1706703).
|
||||
|
||||
-----
|
||||
|
||||
## Changes made between 3.16.0.1 and 3.16.1
|
||||
|
||||
### IOC Database Support for 64-bit integers
|
||||
|
||||
The IOC now supports the 64-bit integer field types `DBF_INT64` and
|
||||
`DBF_UINT64`, and there are new record types `int64in` and `int64out` derived
|
||||
from the `longin` and `longout` types respectively that use the `DBF_INT64`
|
||||
data type for their VAL and related fields. The usual range of Soft Channel
|
||||
device support are included for these new record types.
|
||||
|
||||
All internal IOC APIs such as dbAccess can handle the new field types and
|
||||
their associated request values `DBR_INT64` and `DBR_UINT64`, which are
|
||||
implemented using the `epicsInt64` and `epicsUInt64` typedef's from the
|
||||
`epicsTypes.h` header.
|
||||
|
||||
The waveform record type has been updated to support these new field types.
|
||||
**All waveform device support layers must be updated to recognize the new type
|
||||
enumeration values**, which had to be inserted before the `FLOAT` value in the
|
||||
enum `dbfType` and in `menuFtype`. C or C++ code can detect at compile-time
|
||||
whether this version of base provides 64-bit support by checking for the
|
||||
presence of the `DBR_INT64` macro as follows (Note that `DBF_INT64` is an
|
||||
enum tag and not a preprocessor macro):
|
||||
|
||||
```
|
||||
#ifdef DBR_INT64
|
||||
/* Code where Base has INT64 support */
|
||||
#else
|
||||
/* Code for older versions */
|
||||
#endif
|
||||
```
|
||||
|
||||
If the code uses the old `db_access.h` types (probably because it's calling
|
||||
Channel Access APIs) then it will have to test against the EPICS version
|
||||
number instead, like this:
|
||||
|
||||
```
|
||||
#include <epicsVersion.h>
|
||||
|
||||
#ifndef VERSION_INT
|
||||
# define VERSION_INT(V,R,M,P) ( ((V)<<24) | ((R)<<16) | ((M)<<8) | (P))
|
||||
#endif
|
||||
#ifndef EPICS_VERSION_INT
|
||||
# define EPICS_VERSION_INT VERSION_INT(EPICS_VERSION, EPICS_REVISION, EPICS_MODIFICATION, EPICS_PATCH_LEVEL)
|
||||
#endif
|
||||
|
||||
#if EPICS_VERSION_INT >= VERSION_INT(3,16,1,0)
|
||||
/* Code where Base has INT64 support */
|
||||
#else
|
||||
/* Code for older versions */
|
||||
#endif
|
||||
```
|
||||
|
||||
Channel Access does not (and probably never will) directly support 64-bit
|
||||
integer types, so the new field types are presented to the CA server as
|
||||
`DBF_DOUBLE` values. This means that field values larger than 2^52
|
||||
(0x10\_0000\_0000\_0000 = 4503599627370496) cannot be transported over Channel
|
||||
Access without their least significant bits being truncated. The EPICS V4
|
||||
pvAccess network protocol _can_ transport 64-bit data types however, and a
|
||||
future release of the pvaSrv module will connect this ability to the fields of
|
||||
the IOC.
|
||||
|
||||
Additional 64-bit support will be provided in later release. For instance the
|
||||
JSON parser for the new Link Support feature only handles integers up to 32
|
||||
bits wide, so constant array initializer values cannot hold larger values in
|
||||
this release.
|
||||
|
||||
### Add `EPICS_CA_MCAST_TTL`
|
||||
|
||||
A new environment parameter `EPICS_CA_MCAST_TTL` is used to set the Time To Live
|
||||
(TTL) value of any IP multi-cast CA search or beacon packets sent.
|
||||
|
||||
### `EPICS_CA_MAX_ARRAY_BYTES` is optional
|
||||
|
||||
A new environment parameter `EPICS_CA_AUTO_ARRAY_BYTES` is now used by libca and
|
||||
RSRV (CA clients and the IOC CA server). The default is equivalent to setting
|
||||
`EPICS_CA_AUTO_ARRAY_BYTES=YES` which removes the need to set
|
||||
`EPICS_CA_MAX_ARRAY_BYTES` and always attempts to allocate sufficiently large
|
||||
network buffers to transfer large arrays properly over the network. In this case
|
||||
the value of the `EPICS_CA_MAX_ARRAY_BYTES` parameter is ignored.
|
||||
|
||||
Explicitly setting `EPICS_CA_AUTO_ARRAY_BYTES=NO` will continue to honor the
|
||||
buffer setting in `EPICS_CA_AUTO_ARRAY_BYTES` as in previous releases.
|
||||
|
||||
The default setting for `EPICS_CA_AUTO_ARRAY_BYTES` can be changed by adding the
|
||||
line
|
||||
|
||||
```makefile
|
||||
EPICS_CA_AUTO_ARRAY_BYTES=NO
|
||||
```
|
||||
|
||||
to the `configure/CONFIG_SITE_ENV` file before building Base. Sites that wish to
|
||||
override this only for specific IOC architectures can create new files for each
|
||||
architecture named `configure/os/CONFIG_SITE_ENV.<target-arch>` with the above
|
||||
setting in before building Base. The configuration can also be explicitly
|
||||
changed by setting the environment variable in the IOC's startup script,
|
||||
anywhere above the `iocInit` line.
|
||||
|
||||
The PCAS server (used by the PV Gateway and other CA servers) now always behaves
|
||||
as if `EPICS_CA_AUTO_ARRAY_BYTES` is set to `YES` (it ignores the configuration
|
||||
parameter and environment variable).
|
||||
|
||||
### Channel Access "modernization"
|
||||
|
||||
Drop support for CA clients advertising protocol versions less than 4.
|
||||
|
||||
This effects clients from Base older than 3.12.0-beta1. Newer clients will
|
||||
continue to be able to connect to older servers. Older clients will be ignored
|
||||
by newer servers.
|
||||
|
||||
This allows removal of UDP echo and similar protocol features which are not
|
||||
compatible with secure protocol design practice.
|
||||
|
||||
### Lookup-tables using the subArrray record
|
||||
|
||||
The subArray record can now be used as a lookup-table from a constant array
|
||||
specified in its INP field. For example:
|
||||
|
||||
```
|
||||
record(subArray, "powers-of-2") {
|
||||
field(FTVL, "LONG")
|
||||
field(MALM, 12)
|
||||
field(INP, [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048])
|
||||
field(INDX, 0)
|
||||
field(NELM, 1)
|
||||
}
|
||||
```
|
||||
|
||||
The INDX field selects which power of 2 to set the VAL field to. In previous
|
||||
releases the INP field would have to have been pointed to a separate waveform
|
||||
record that was initialized with the array values somehow at initialization
|
||||
time.
|
||||
|
||||
### Synchronized Timestamps with TSEL=-2
|
||||
|
||||
Most Soft Channel input device support routines have supported fetching the
|
||||
timestamp through the INP link along with the input data. However before now
|
||||
there was no guarantee that the timestamp provided by a CA link came from the
|
||||
same update as the data, since the two were read from the CA input buffer at
|
||||
separate times without maintaining a lock on that buffer in between. This
|
||||
shortcoming could be fixed as a result of the new link support code, which
|
||||
allows code using a link to pass a subroutine to the link type which will be
|
||||
run with the link locked. The subroutine may make multiple requests for
|
||||
metadata from the link, but must not block.
|
||||
|
||||
### Extensible Link Types
|
||||
|
||||
A major new feature introduced with this release of EPICS Base is an
|
||||
Extensible Link Type mechanism, also known as Link Support or JSON Link Types.
|
||||
This addition permits new kinds of link I/O to be added to an IOC in a similar
|
||||
manner to the other extension points already supported (e.g. record, device
|
||||
and driver support).
|
||||
|
||||
A new link type must implement two related APIs, one for parsing the JSON
|
||||
string which provides the link address and the other which implements the link
|
||||
operations that get called at run-time to perform I/O. The link type is built
|
||||
into the IOC by providing a new `link` entry in a DBD file.
|
||||
|
||||
#### New Link Types Added
|
||||
|
||||
This release contains two new JSON link types, `const` and `calc`:
|
||||
|
||||
* The `const` link type is almost equivalent to the old CONSTANT link type
|
||||
with the updates described below to accept arrays and strings, except that
|
||||
there is no need to wrap a scalar string constant inside array brackets since
|
||||
a constant string will never be confused with a PV name.
|
||||
|
||||
* The `calc` link type allows CALC expressions to be used to combine
|
||||
values from other JSON links to produce its value. Until additional JSON link
|
||||
types are created though, the `calc` link type has little practical utility as
|
||||
it can currently only fetch inputs from other `calc` links or from `const`
|
||||
links.
|
||||
|
||||
```
|
||||
field(INP, {calc:{expr:"A+B+1",
|
||||
args:[5, # A
|
||||
{const:6}] # B
|
||||
}
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
The new link types are documented in a separate document that gets generated at build time and installed as `html/links.html`.
|
||||
|
||||
#### Device Support Addressing using `JSON_LINK`
|
||||
|
||||
The API to allow device support to use JSON addresses is currently
|
||||
incomplete; developers are advised not to try creating device support that
|
||||
specifies a `JSON_LINK` address type.
|
||||
|
||||
#### Support Routine Modifications for Extensible Link Types
|
||||
|
||||
For link fields in external record types and soft device support to be able
|
||||
to use the new link types properly, various changes are required to utilize
|
||||
the new Link Support API as defined in the dbLink.h header file and outlined
|
||||
below. The existing built-in Database and Channel Access link types have been
|
||||
altered to implement the link APIs, so will work properly after these
|
||||
conversions:
|
||||
|
||||
* Make all calls to `recGblInitConstantLink()` unconditional on the link
|
||||
type, i.e. change this code:
|
||||
|
||||
```C
|
||||
if (prec->siml.type == CONSTANT) {
|
||||
recGblInitConstantLink(&prec->siml, DBF_USHORT, &prec->simm);
|
||||
}
|
||||
```
|
||||
|
||||
into this:
|
||||
|
||||
```C
|
||||
recGblInitConstantLink(&prec->siml, DBF_USHORT, &prec->simm);
|
||||
```
|
||||
|
||||
Note that `recGblInitConstantLink()` still returns TRUE if the field was
|
||||
successfully initialized from the link (implying the link is constant).
|
||||
This change will work properly with all Base releases currently in use.
|
||||
|
||||
* Code that needs to identify a constant link should be modified to use
|
||||
the new routine `dbLinkIsConstant()` instead, which returns TRUE for constant
|
||||
or undefined links, FALSE for links whose `dbGetLink()` routine may return
|
||||
different values on different calls. For example this:
|
||||
|
||||
```C
|
||||
if (prec->dol.type != CONSTANT)
|
||||
```
|
||||
|
||||
should become this:
|
||||
|
||||
```C
|
||||
if (!dbLinkIsConstant(&prec->dol))
|
||||
```
|
||||
|
||||
When the converted software is also required to build against older versions
|
||||
of Base, this macro definition may be useful:
|
||||
|
||||
```C
|
||||
#define dbLinkIsConstant(lnk) ((lnk)->type == CONSTANT)
|
||||
```
|
||||
|
||||
* Any code that calls dbCa routines directly, or that explicitly checks if
|
||||
a link has been resolved as a CA link using code such as
|
||||
|
||||
```C
|
||||
if (prec->inp.type == CA_LINK)
|
||||
```
|
||||
|
||||
will still compile and run, but will only work properly with the old CA link
|
||||
type. To operate with the new extensible link types such code must be
|
||||
modified to use the new generic routines defined in dbLink.h and should
|
||||
never attempt to examine or modify data inside the link. After conversion
|
||||
the above line would probably become:
|
||||
|
||||
```C
|
||||
if (dbLinkIsVolatile(&prec->inp))
|
||||
```
|
||||
|
||||
A volatile link is one like a Channel Access link which may disconnect and
|
||||
reconnect without notice at runtime. Database links and constant links are
|
||||
not volatile; unless their link address is changed they will always remain
|
||||
in the same state they started in. For compatibility when building against
|
||||
older versions of Base, this macro definition may be useful:
|
||||
|
||||
```C
|
||||
#define dbLinkIsVolatile(lnk) ((lnk)->type == CA_LINK)
|
||||
```
|
||||
|
||||
* The current connection state of a volatile link can be found using the
|
||||
routine `dbIsLinkConnected()` which will only return TRUE for a volatile link
|
||||
that is currently connected. Code using the older dbCa API returning this
|
||||
information used to look like this:
|
||||
|
||||
```C
|
||||
stat = dbCaIsLinkConnected(plink);
|
||||
```
|
||||
|
||||
which should become:
|
||||
|
||||
```C
|
||||
stat = dbIsLinkConnected(plink);
|
||||
```
|
||||
|
||||
Similar changes should be made for calls to the other dbCa routines.
|
||||
|
||||
* A full example can be found by looking at the changes to the calcout
|
||||
record type, which has been modified in this release to use the new dbLink
|
||||
generic API.
|
||||
|
||||
### Constant Link Values
|
||||
|
||||
Previously a constant link (i.e. a link that did not point to another PV,
|
||||
either locally or over Channel Access) was only able to provide a single
|
||||
numeric value to a record initialization; any string given in a link field
|
||||
that was not recognized as a number was treated as a PV name. In this release,
|
||||
constant links can be expressed using JSON array syntax and may provide array
|
||||
initialization of values containing integers, doubles or strings. An array
|
||||
containing a single string value can also be used to initialize scalar
|
||||
strings, so the stringin, stringout, lsi (long string input), lso (long string
|
||||
output), printf, waveform, subArray and aai (analog array input) record types
|
||||
and/or their soft device supports have been modified to support this.
|
||||
|
||||
Some examples of constant array and string initialized records are:
|
||||
|
||||
```
|
||||
record(stringin, "const:string") {
|
||||
field(INP, ["Not-a-PV-name"])
|
||||
}
|
||||
record(waveform, "const:longs") {
|
||||
field(FTVL, LONG)
|
||||
field(NELM, 10)
|
||||
field(INP, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
|
||||
}
|
||||
record(aai, "const:doubles") {
|
||||
field(FTVL, DOUBLE)
|
||||
field(NELM, 10)
|
||||
field(INP, [0, 1, 1.6e-19, 2.718, 3.141593])
|
||||
}
|
||||
record(aSub, "select") {
|
||||
field(FTA, STRING)
|
||||
field(NOA, 4)
|
||||
field(INPA, ["Zero", "One", "Two", "Three"])
|
||||
field(FTB, SHORT)
|
||||
field(NOB, 1)
|
||||
field(FTVA, STRING)
|
||||
field(NOVA, 1)
|
||||
field(SNAM, "select_asub")
|
||||
}
|
||||
```
|
||||
|
||||
Reminder: Link initialization with constant values normally only occurs at
|
||||
record initialization time. The calcout and printf record types are the only
|
||||
exceptions in the Base record types to this rule, so it is generally not
|
||||
useful to change a const link value after iocInit.
|
||||
|
||||
### Database Parsing of "Relaxed JSON" Values
|
||||
|
||||
A database file can now provide a "relaxed JSON" value for a database field
|
||||
value or an info tag. Only a few field types can currently accept such values,
|
||||
but the capability is now available for use in other places in the future.
|
||||
When writing to a JSON-capable field at run-time however, only strictly
|
||||
compliant JSON may be used (the dbStaticLib parser rewrites relaxed JSON
|
||||
values into strict JSON before passing them to the datase for interpretation,
|
||||
where the strict rules must be followed).
|
||||
|
||||
"Relaxed JSON" was developed to maximize compatibility with the previous
|
||||
database parser rules and reduce the number of double-quotes that would be
|
||||
needed for strict JSON syntax. The parser does accept strict JSON too though,
|
||||
which should be used when machine-generating database files. The differences
|
||||
are:
|
||||
|
||||
* Strings containing only the characters `a-z A-Z 0-9 _ - + .` do not have to
|
||||
be enclosed in double-quote characters.
|
||||
|
||||
* The above rule applies to map keys as well as to regular string values.
|
||||
|
||||
* The JSON keywords `null`, `true` and `false` (all lower-case) will be
|
||||
recognized as keywords, so they must be quoted to use any of these single words
|
||||
as a string.
|
||||
|
||||
* Comments may be used, introduced as usual by the `#` character and extending
|
||||
to the end of the line.
|
||||
|
||||
A JSON field or info value is only enclosed in quotes when the value being
|
||||
provided is a single string, and even here the quotes can be omitted in some
|
||||
cases as described above. The following shows both correct and incorrect
|
||||
excerpts from a database file:
|
||||
|
||||
```
|
||||
record(ai, math:pi) {
|
||||
field(INP, {const: 3.14159265358979}) # Correct
|
||||
field(SIOL, "{const: 3.142857}") # Wrong
|
||||
|
||||
info(autosave, { # White-space and comments are allowed
|
||||
fields:[DESC, SIMM],
|
||||
pass0:[VAL]
|
||||
}) # Correct
|
||||
}
|
||||
```
|
||||
|
||||
Note that the record, field and info-tag names do *not* accept JSON values, so
|
||||
they follows the older bareword rules for quoting where the colon `:` and
|
||||
several additional characters are legal in a bareword string. Only the value
|
||||
(after the comma) is parsed as JSON. The autosave module has not been modified
|
||||
to accept JSON syntax, the above is only an example of how JSON might be used.
|
||||
|
||||
### Echoless comments in iocsh
|
||||
|
||||
The way comments are parsed by the iocsh interpreter has changed. The
|
||||
interpreter can be selectively disabled from echoing comments coming from a
|
||||
script by starting those lines with `#-` rather than just `#`.
|
||||
|
||||
### Typed record support methods
|
||||
|
||||
The table of record support functions (rset methods for short) no longer has
|
||||
entries of type `RECSUPFUN` (which says: any number and type of arguments).
|
||||
Instead, rset methods are now typed by default. The `RECSUPFUN` typedef has
|
||||
been deprecated and casts to it as well as using the untyped `struct rset`
|
||||
will create compilation warnings.
|
||||
|
||||
Existing code (e.g. external record supports) will generate such warnings when
|
||||
compiled against this version of Base, but it will work without changes.
|
||||
|
||||
For a conversion period, the new typed rset definitions are activated by
|
||||
defining `USE_TYPED_RSET`, preferably by setting `USR_CPPFLAGS +=
|
||||
-DUSE_TYPED_RSET` inside a Makefile. After activating the new typed rset in
|
||||
this way and making the following changes, the result should still compile and
|
||||
work properly against older versions of Base.
|
||||
|
||||
The first parameter of `init_record` and `process` has been changed to `struct
|
||||
dbCommon *`. Record types that use `void*` here should be changed to use
|
||||
`struct dbCommon*`, and cast the argument to their own `xxxRecord *`.
|
||||
|
||||
When compiled against this release, compiler warnings about incompatible types
|
||||
for the method pointers should be taken seriously. When compiled against older
|
||||
versions of base, such warnings are unavoidable.
|
||||
|
||||
Record types written in C++ need to take more drastic measures because of the
|
||||
stricter type checking in C++. To remain compatible with older versions of
|
||||
base you will need to use something like:
|
||||
|
||||
```
|
||||
#include "epicsVersion.h"
|
||||
#ifdef VERSION_INT
|
||||
# if EPICS_VERSION_INT < VERSION_INT(3,16,0,2)
|
||||
# define RECSUPFUN_CAST (RECSUPFUN)
|
||||
# else
|
||||
# define RECSUPFUN_CAST
|
||||
# endif
|
||||
#else
|
||||
# define RECSUPFUN_CAST (RECSUPFUN)
|
||||
#endif
|
||||
```
|
||||
|
||||
and then replace `(RECSUPFUN)` with `RECSUPFUN_CAST` when initializing the
|
||||
rset. Further changes might also be needed, e.g. to adapt `const`-ness of
|
||||
method parameters.
|
||||
|
||||
-----
|
||||
|
||||
## Changes made between 3.15.3 and 3.16.0.1
|
||||
|
||||
### Build support for CapFast and dbst removed
|
||||
|
||||
The build rules associated with the CapFast-related tools `sch2edif` and
|
||||
`e2db` and the database optimization tool `dbst` have been removed, along with
|
||||
the `DB_OPT` build configuration variable.
|
||||
|
||||
### compressRecord buffering order
|
||||
|
||||
The compressRecord has a new field `BALG` which can select between FIFO
|
||||
(append) and LIFO (prepend) ordering for insertion of new elements. FIFO
|
||||
ordering is the default, matching the behviour of previous versions.
|
||||
|
||||
### Valgrind Instrumentation
|
||||
|
||||
Valgrind is a software debugging suite provided by many Linux distributions.
|
||||
The header valgrind/valgrind.h is now included in, and installed by, Base.
|
||||
When included by a C or C++ source file this header defines some macros which
|
||||
expand to provide hints to the Valgrind runtime. These have no effect on
|
||||
normal operation of the software, but when run using the valgrind tool they
|
||||
can help to find memory leaks and buffer overflows. Suitable hints have been
|
||||
added to several free-lists within libCom, including freeListLib, allowing
|
||||
valgrind to provide more accurate information about the source of potential
|
||||
leaks.
|
||||
|
||||
valgrind.h automatically disables itself when the build target is not
|
||||
supported by the valgrind tool. It can also explicitly be disabled by defining
|
||||
the macro `NVALGRIND`. See `src/libCom/Makefile` for a commented-out example.
|
||||
|
||||
As a matter of policy valgrind.h will never be included by any header file
|
||||
installed by Base, so its use will remain purely an implementation detail
|
||||
hidden from application software. Support modules which choose to use
|
||||
valgrind.h are advised to do likewise.
|
||||
|
||||
### Database Multi-locking
|
||||
|
||||
The IOC record locking code has been re-written with an expanded API; global
|
||||
locks are no longer required by the IOC database implementation.
|
||||
|
||||
The new API functions center around `dbScanLockMany()`, which behaves like
|
||||
`dbScanLock()` applied to an arbitrary group of records. `dbLockerAlloc()` is
|
||||
used to prepare a list or record pointers, then `dbScanLockMany()` is called.
|
||||
When it returns, all of the records listed may be accessed (in any order) until
|
||||
`dbScanUnlockMany()` is called.
|
||||
|
||||
The Application Developer's Guide has been updated to describe the API and
|
||||
implementation is more detail.
|
||||
|
||||
Previously a global mutex `lockSetModifyLock` was locked and unlocked during
|
||||
`dbScanLock()`, acting as a sequencing point for otherwise unrelated calls. The
|
||||
new dbLock.c implementation does not include any global mutex in `dbScanLock()`
|
||||
or `dbScanLockMany()`. Locking and unlocking of unrelated lock sets is now
|
||||
completely concurrent.
|
||||
|
||||
### Generate Version Header
|
||||
|
||||
A Perl script and Makefile rules have been added to allow modules to generate
|
||||
a C header file with a macro defined with an automatically updated identifier.
|
||||
This is a VCS revision ID (Darcs, Git, Mercurial, Subversion, and Bazaar are
|
||||
supported) or the date/time of the build if no VCS system is in use.
|
||||
|
||||
The makeBaseApp example template has been updated with a new device support
|
||||
which makes this identifier visible via a lsi (long string input) record.
|
||||
|
||||
### epicsTime API return status
|
||||
|
||||
The epicsTime routines that used to return epicsTimeERROR now return a
|
||||
specific `S_time_` status value, allowing the caller to discover the reason for
|
||||
any failure. The identifier `epicsTimeERROR` is no longer defined, so any
|
||||
references to it in source code will no longer compile. The identifier
|
||||
epicsTimeOK still exists and has the value 0 as before, so most code that uses
|
||||
these APIs can be changed in a way that is backwards-compatible with the
|
||||
previous return status.
|
||||
|
||||
Time providers that have to return a status value and still need to be built
|
||||
with earlier versions of Base can define the necessary status symbols like
|
||||
this:
|
||||
|
||||
```
|
||||
#include "epicsTime.h"
|
||||
|
||||
#ifndef M_time
|
||||
/* S_time_... status values were not provided before Base 3.16 */
|
||||
#define S_time_unsynchronized epicsTimeERROR
|
||||
#define S_time_...whatever... epicsTimeERROR
|
||||
#endif
|
||||
```
|
||||
|
||||
### Refactoring of epicsReadline
|
||||
|
||||
The epicsReadline code has been reorganized to allow the commandline history
|
||||
editor to be disabled at runtime. The `EPICS_COMMANDLINE_LIBRARY` build setting
|
||||
still selects the preferred editor, but the new `IOCSH_HISTEDIT_DISABLE`
|
||||
environment variable can be set at runtime to disable history editing and make
|
||||
the IOC or other program use the basic editor instead. This is useful when
|
||||
starting and controlling an IOC from another program through its stdin and
|
||||
stdout streams since history editors often insert invisible escape codes into
|
||||
the stdout stream, making it hard to parse.
|
||||
|
||||
### Callback subsystem API
|
||||
|
||||
Added a new macro `callbackGetPriority(prio, callback)` to the callback.h
|
||||
header and removed the need for dbScan.c to reach into the internals of its
|
||||
`CALLBACK` objects.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user