Compare commits
1309 Commits
R3.13.0-be
...
R3.13.1.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
56fee671fe | ||
|
|
4c7cfd7b2f | ||
|
|
28cdb2b5e1 | ||
|
|
f006ec6a8e | ||
|
|
f468f0e33c | ||
|
|
3cfd9a79f5 | ||
|
|
0c0b5d44ba | ||
|
|
95a399e4a2 | ||
|
|
4daf75e295 | ||
|
|
0ef60ec09a | ||
|
|
42bd805108 | ||
|
|
5e7ec2be6c | ||
|
|
2c1609e2ed | ||
|
|
4d0785b899 | ||
|
|
1fc97eb429 | ||
|
|
54f3de4b0d | ||
|
|
4907dfd43d | ||
|
|
14414ab86f | ||
|
|
08761bebff | ||
|
|
6619c06109 | ||
|
|
5ba5209891 | ||
|
|
5d4eddf424 | ||
|
|
1982c777be | ||
|
|
842f9e33cf | ||
|
|
d4f44b9bc9 | ||
|
|
d2acbb21b5 | ||
|
|
4ab910abd1 | ||
|
|
6f8e2cd675 | ||
|
|
9658302528 | ||
|
|
1b8da9848e | ||
|
|
4f983714c7 | ||
|
|
31d5dee317 | ||
|
|
e1bc747104 | ||
|
|
82d119fcef | ||
|
|
2ef8e387e0 | ||
|
|
baedd6deb2 | ||
|
|
7debd1da9d | ||
|
|
2ab3555c08 | ||
|
|
bf5f43d8f0 | ||
|
|
30c1e46737 | ||
|
|
e919e85aab | ||
|
|
94f7436672 | ||
|
|
6d5074138f | ||
|
|
a79d5fa471 | ||
|
|
12a36129a9 | ||
|
|
d2392d1bfa | ||
|
|
aafad7cc01 | ||
|
|
6e548431a6 | ||
|
|
ebdc30a5a3 | ||
|
|
35d18ac92c | ||
|
|
475b8a66be | ||
|
|
80545b9431 | ||
|
|
46be0d449a | ||
|
|
1e262417be | ||
|
|
1fea4b4097 | ||
|
|
a1af039631 | ||
|
|
c266df258b | ||
|
|
d1d589da72 | ||
|
|
7977848096 | ||
|
|
7a7bd7a6b9 | ||
|
|
12d767c98a | ||
|
|
2ce2fc4c86 | ||
|
|
7bf6530254 | ||
|
|
7c947639a5 | ||
|
|
03fb90cee8 | ||
|
|
6f47cbbe03 | ||
|
|
5c9baa5d00 | ||
|
|
c425cea48d | ||
|
|
041a9ad82b | ||
|
|
c598b8fbad | ||
|
|
eec3ca68ef | ||
|
|
93745fa03c | ||
|
|
3c43b78e77 | ||
|
|
0562cf545b | ||
|
|
ef02f8224e | ||
|
|
1c214dc407 | ||
|
|
f91bfc1e1c | ||
|
|
409d2c2aaf | ||
|
|
18c24640c7 | ||
|
|
a80f223736 | ||
|
|
36b70e243f | ||
|
|
624f3e2284 | ||
|
|
4ae1a330bd | ||
|
|
5eab74508e | ||
|
|
1d5bb33527 | ||
|
|
1ba75e94e8 | ||
|
|
2bd9693676 | ||
|
|
a175ac0518 | ||
|
|
e334526dec | ||
|
|
23f88290b1 | ||
|
|
c3cfcd6f7a | ||
|
|
cd8da10fa8 | ||
|
|
c9ca2a362d | ||
|
|
5dc5113919 | ||
|
|
61e74ab5bb | ||
|
|
163853f5bc | ||
|
|
f9fdb88d73 | ||
|
|
ae43db8152 | ||
|
|
444f4c0bcc | ||
|
|
c0fc5c1860 | ||
|
|
486d616af1 | ||
|
|
8d76efbb30 | ||
|
|
d7df83132c | ||
|
|
85629b8908 | ||
|
|
58cb660fd8 | ||
|
|
161e66adc4 | ||
|
|
aefa82520a | ||
|
|
20773a6037 | ||
|
|
acf112999a | ||
|
|
429b7ae7a2 | ||
|
|
7eca88fcf8 | ||
|
|
b2dcaf3113 | ||
|
|
e189a30222 | ||
|
|
ef42291613 | ||
|
|
3801cf0b81 | ||
|
|
75b61caa96 | ||
|
|
b40864bf6d | ||
|
|
fe16f5bd01 | ||
|
|
16f6f6e39e | ||
|
|
fd088bfa83 | ||
|
|
607157e99a | ||
|
|
2b21b5608d | ||
|
|
851b153afa | ||
|
|
c36de7d61d | ||
|
|
461e1f3844 | ||
|
|
69ae776409 | ||
|
|
b5e4de9cff | ||
|
|
857a19ddef | ||
|
|
608228b328 | ||
|
|
421ad0d456 | ||
|
|
a2bb878d29 | ||
|
|
2e7a0f1922 | ||
|
|
42ea5f2413 | ||
|
|
c0ed618531 | ||
|
|
fd67b63b75 | ||
|
|
9162b6c404 | ||
|
|
8500db7307 | ||
|
|
3a58071733 | ||
|
|
46d989507f | ||
|
|
71112a41df | ||
|
|
cffb3ce69e | ||
|
|
6dacae6103 | ||
|
|
df5f2235f1 | ||
|
|
f903d29c73 | ||
|
|
8c4e600953 | ||
|
|
652a8b289e | ||
|
|
b48235c925 | ||
|
|
3ac0769562 | ||
|
|
4207b67727 | ||
|
|
a3a8bae82f | ||
|
|
660db2e523 | ||
|
|
8808b28571 | ||
|
|
e7af37a2a1 | ||
|
|
239061a09c | ||
|
|
17d233c2d7 | ||
|
|
a8dfe7b4f4 | ||
|
|
ffc026ca61 | ||
|
|
597d2209ff | ||
|
|
8b6eaf6a0f | ||
|
|
eca09fb129 | ||
|
|
d331954168 | ||
|
|
90f9be472c | ||
|
|
94fdaba021 | ||
|
|
3c5875c821 | ||
|
|
25a4b6a96c | ||
|
|
f505578397 | ||
|
|
f0a76674af | ||
|
|
4626994388 | ||
|
|
82b2cbc4f0 | ||
|
|
d8c4ebda03 | ||
|
|
0f2fb17864 | ||
|
|
b719362755 | ||
|
|
c5cd953aba | ||
|
|
be88672134 | ||
|
|
84efd88c45 | ||
|
|
081769088a | ||
|
|
5c0775883e | ||
|
|
5e0bfbc9f7 | ||
|
|
c39be663e2 | ||
|
|
e3b1b2fa59 | ||
|
|
eebf5ef09d | ||
|
|
529c35ff73 | ||
|
|
3c675f2565 | ||
|
|
c2cbd31fc0 | ||
|
|
7d81061b60 | ||
|
|
4dac09744e | ||
|
|
beaab56d90 | ||
|
|
98644b2ac8 | ||
|
|
5e3d212189 | ||
|
|
420dc30a5c | ||
|
|
485da02820 | ||
|
|
c8be1c9e5e | ||
|
|
0fe034cf64 | ||
|
|
3fc95f0542 | ||
|
|
65d95867a9 | ||
|
|
5c201c73d0 | ||
|
|
40f415f5c3 | ||
|
|
4935efd6b1 | ||
|
|
e2b7a442d8 | ||
|
|
436be2d448 | ||
|
|
9100c5dd7e | ||
|
|
3733b9bd40 | ||
|
|
261479ad0a | ||
|
|
75d4d73f57 | ||
|
|
6aa6cdd606 | ||
|
|
a9b8a161f4 | ||
|
|
65e1e8203e | ||
|
|
233dc670a3 | ||
|
|
78fc9f07f0 | ||
|
|
bf73514dd9 | ||
|
|
5658c714d0 | ||
|
|
5e5c4e20cd | ||
|
|
d42468dd1e | ||
|
|
f14e74c6b6 | ||
|
|
38bacaa84a | ||
|
|
f9e6130f17 | ||
|
|
644320cbc3 | ||
|
|
4aad75a87b | ||
|
|
6bd5b857e7 | ||
|
|
1acfbc1f00 | ||
|
|
a1f2ed3e5f | ||
|
|
076140f20d | ||
|
|
b3c6e4371e | ||
|
|
6f8bc78233 | ||
|
|
fc231af5ed | ||
|
|
29c90caa54 | ||
|
|
8968c33bdb | ||
|
|
b439063760 | ||
|
|
a0be9a16b3 | ||
|
|
625ffa65cb | ||
|
|
220f428e42 | ||
|
|
e3ad99226e | ||
|
|
e134af5b80 | ||
|
|
4183105e2e | ||
|
|
3dfea10337 | ||
|
|
aa06b8a593 | ||
|
|
0967370546 | ||
|
|
2cbfb7e787 | ||
|
|
5c48817b29 | ||
|
|
2a7ac18626 | ||
|
|
1b00ec96fb | ||
|
|
0f45593c6d | ||
|
|
ca1f46765a | ||
|
|
742c4fd425 | ||
|
|
00cc1caf40 | ||
|
|
fc660b3027 | ||
|
|
b610c8b3fe | ||
|
|
7e68daea68 | ||
|
|
f4ca56523f | ||
|
|
02b4de9715 | ||
|
|
469f1b29c2 | ||
|
|
728220c0cf | ||
|
|
d71f35e88e | ||
|
|
43978efcf1 | ||
|
|
a17ec624c6 | ||
|
|
dcc8fe5ed2 | ||
|
|
6054d34f16 | ||
|
|
045aca1db0 | ||
|
|
443cf5af58 | ||
|
|
52a6c09b7d | ||
|
|
c60822d5e7 | ||
|
|
fdfbab644f | ||
|
|
e20247ec11 | ||
|
|
c1999c0cbd | ||
|
|
1a78b3eeb6 | ||
|
|
da0800af39 | ||
|
|
7107a2031b | ||
|
|
cd16fbc3f2 | ||
|
|
53fab670ea | ||
|
|
aea3386205 | ||
|
|
ee6a29d3a3 | ||
|
|
3711d3ad06 | ||
|
|
aecd94eb41 | ||
|
|
e5cc6ad87c | ||
|
|
682656a794 | ||
|
|
4f41a4dd60 | ||
|
|
1eb01cd0f8 | ||
|
|
392e749476 | ||
|
|
ce878ffdd8 | ||
|
|
3995dbafdb | ||
|
|
fdb0b29c0a | ||
|
|
69e0ffe36f | ||
|
|
52e35dde60 | ||
|
|
cb73e1f672 | ||
|
|
7f3b0f64b0 | ||
|
|
142aa9571a | ||
|
|
d4cf4cdaf7 | ||
|
|
25fe26e168 | ||
|
|
92fcba48f2 | ||
|
|
e642dbe685 | ||
|
|
e41c83d2de | ||
|
|
937c7ff4f0 | ||
|
|
fb88316392 | ||
|
|
68b9fe501e | ||
|
|
df0653ee53 | ||
|
|
6d1ecdeb96 | ||
|
|
b5d3aaa231 | ||
|
|
f54959c473 | ||
|
|
56e607be7e | ||
|
|
0d51d99642 | ||
|
|
2c9cf0f8cd | ||
|
|
4b42bb7db9 | ||
|
|
55c2134ef7 | ||
|
|
71d5c73977 | ||
|
|
83163779c1 | ||
|
|
3258b789dc | ||
|
|
92e7023880 | ||
|
|
06f35bf4db | ||
|
|
47c5e55831 | ||
|
|
2ff9c8ca94 | ||
|
|
b4f37d7eca | ||
|
|
10551ddcb8 | ||
|
|
a5a8b8d263 | ||
|
|
4d8587a382 | ||
|
|
f30571ed6d | ||
|
|
8f2a7b538c | ||
|
|
ec3df62672 | ||
|
|
3ccf720f96 | ||
|
|
f844b2c5af | ||
|
|
ad68af66f9 | ||
|
|
1eb7d4f45b | ||
|
|
67648998e6 | ||
|
|
eb3b8d8834 | ||
|
|
a2698c7828 | ||
|
|
3437531581 | ||
|
|
7dae2cd25b | ||
|
|
134fe51682 | ||
|
|
085895a0e3 | ||
|
|
e262507653 | ||
|
|
c94ddfe13f | ||
|
|
4ebc71c349 | ||
|
|
8fe0f0dbef | ||
|
|
258633fbaa | ||
|
|
cce25a0f8a | ||
|
|
c1cfc9f31d | ||
|
|
6cce35a1c2 | ||
|
|
11681240b6 | ||
|
|
b0c667db4b | ||
|
|
47837552b0 | ||
|
|
5e83b24f01 | ||
|
|
96f5e6984d | ||
|
|
d96af74f38 | ||
|
|
13b7753cf4 | ||
|
|
30d9bf6dfe | ||
|
|
abb249e574 | ||
|
|
fce25316dd | ||
|
|
b6f4b661cd | ||
|
|
c8308d51b7 | ||
|
|
d47b64445c | ||
|
|
a1c5820561 | ||
|
|
601de8c5e5 | ||
|
|
07362375e4 | ||
|
|
79e96213e0 | ||
|
|
69fadca2bb | ||
|
|
a7045a039e | ||
|
|
35f054e17f | ||
|
|
7a01eaff4c | ||
|
|
c71c933f98 | ||
|
|
467ad6a5a5 | ||
|
|
09f66ce08a | ||
|
|
5452422689 | ||
|
|
9806688d97 | ||
|
|
51a907fbc6 | ||
|
|
ccf7bf9ebc | ||
|
|
13133ba9c9 | ||
|
|
7424bcfeda | ||
|
|
d65fce5b3f | ||
|
|
5dfa5ca37d | ||
|
|
0fd0552bb7 | ||
|
|
e6888bdf2b | ||
|
|
2444ab3036 | ||
|
|
4b1237cda7 | ||
|
|
c9d031f75e | ||
|
|
82974bbadb | ||
|
|
a6d64486d1 | ||
|
|
6d545abe33 | ||
|
|
291146fd4e | ||
|
|
266a038484 | ||
|
|
525a506801 | ||
|
|
15b6c1db6d | ||
|
|
1fc6f092bd | ||
|
|
d6e1aed936 | ||
|
|
8dca7ebe56 | ||
|
|
946c3c7886 | ||
|
|
0a0b6d7880 | ||
|
|
073c5a48ae | ||
|
|
4d20d420f6 | ||
|
|
f0ed7be469 | ||
|
|
ec619b727c | ||
|
|
e24a712347 | ||
|
|
bcf1d37465 | ||
|
|
197b185351 | ||
|
|
13345373bc | ||
|
|
b5927401bc | ||
|
|
5f2780f773 | ||
|
|
41b32088a6 | ||
|
|
18184eb1ba | ||
|
|
e68a326277 | ||
|
|
69c5f8749c | ||
|
|
b5290a8f11 | ||
|
|
049944e51e | ||
|
|
33980c5cc3 | ||
|
|
1d4fae8d0a | ||
|
|
3b479b2028 | ||
|
|
9be74199ab | ||
|
|
933bd23a67 | ||
|
|
b40d56badf | ||
|
|
8c495183cf | ||
|
|
31ecd3c0db | ||
|
|
64a267df1a | ||
|
|
601cbcfb0b | ||
|
|
3ec4a67b82 | ||
|
|
d496c9dee6 | ||
|
|
f0b0319778 | ||
|
|
18c023cc9c | ||
|
|
a08022db51 | ||
|
|
bd388eb50e | ||
|
|
8964b27ee1 | ||
|
|
3006dd8d9f | ||
|
|
d4dbaec3c5 | ||
|
|
52712bf7b7 | ||
|
|
9febbc8247 | ||
|
|
363115921d | ||
|
|
fbba753e9e | ||
|
|
287f2777a3 | ||
|
|
ec2732b058 | ||
|
|
e0944b7e39 | ||
|
|
b5f7ea85b4 | ||
|
|
9e10969c81 | ||
|
|
f47bf2c9e0 | ||
|
|
d11f4d1cdf | ||
|
|
2d4b230a83 | ||
|
|
1ba094353f | ||
|
|
7f6d8e2822 | ||
|
|
23a184261a | ||
|
|
7ac76c980c | ||
|
|
cea6ad4710 | ||
|
|
0079f71bce | ||
|
|
3da421560b | ||
|
|
2e52bb9c1e | ||
|
|
eb74e8d5cc | ||
|
|
6a50e1835a | ||
|
|
e91bd4e018 | ||
|
|
e4ea112d5a | ||
|
|
f76ae5019b | ||
|
|
83f6dc4f25 | ||
|
|
97191cfb50 | ||
|
|
b79a25c249 | ||
|
|
eb254da63b | ||
|
|
4486982ee6 | ||
|
|
54cd86e819 | ||
|
|
94d36a5f4f | ||
|
|
f9aecdd7fb | ||
|
|
2163b7e60e | ||
|
|
49f9a3b462 | ||
|
|
f67a5108d7 | ||
|
|
0fabbd1e33 | ||
|
|
2e7e64db55 | ||
|
|
00c0d5218a | ||
|
|
8bad8eebff | ||
|
|
d462fea5fb | ||
|
|
844d2d8293 | ||
|
|
2fe41fa67f | ||
|
|
ae3538ae43 | ||
|
|
011804166b | ||
|
|
ae6110465b | ||
|
|
9a938f9626 | ||
|
|
e4f000b3cf | ||
|
|
f91fa643ba | ||
|
|
e795e4edbd | ||
|
|
713d7fd361 | ||
|
|
c6304512eb | ||
|
|
e0144c5776 | ||
|
|
9cb14b5f13 | ||
|
|
c62b683f13 | ||
|
|
b9dc729011 | ||
|
|
769c340d64 | ||
|
|
55a206cb47 | ||
|
|
2a075c0353 | ||
|
|
fac1096850 | ||
|
|
7385472689 | ||
|
|
c301129071 | ||
|
|
67679b3ac4 | ||
|
|
82ec39512d | ||
|
|
5276e19d59 | ||
|
|
7fb514e73e | ||
|
|
f546858d47 | ||
|
|
58e3e8cc9d | ||
|
|
329445119c | ||
|
|
29a0eb0210 | ||
|
|
17f92394b6 | ||
|
|
c1a37d518a | ||
|
|
2faf339f99 | ||
|
|
267247a5ce | ||
|
|
986d451fab | ||
|
|
5bd1407214 | ||
|
|
ae1a1dc7b8 | ||
|
|
41655d995b | ||
|
|
87bad70571 | ||
|
|
53ff524e67 | ||
|
|
7c6af324ec | ||
|
|
bc48b09009 | ||
|
|
3dc326d89a | ||
|
|
fa690a7776 | ||
|
|
6baa5568a8 | ||
|
|
27c4d0574f | ||
|
|
ee11ef0c1b | ||
|
|
82a24516fb | ||
|
|
5fea5bc173 | ||
|
|
c67f0cdfde | ||
|
|
5874c2d808 | ||
|
|
101ae89e5f | ||
|
|
5e4780164f | ||
|
|
9fb8f58040 | ||
|
|
147ccecd00 | ||
|
|
98cd03c75a | ||
|
|
a50d7ad1da | ||
|
|
2a53e1fcfe | ||
|
|
66aa22f9eb | ||
|
|
88d36c7db3 | ||
|
|
cb3be0edd7 | ||
|
|
d7e1d16536 | ||
|
|
b3f706af3b | ||
|
|
9a49eab8f8 | ||
|
|
2bddbfeedc | ||
|
|
6b1be2ea5c | ||
|
|
45291dbb90 | ||
|
|
828ac6ef19 | ||
|
|
7434d3315d | ||
|
|
b1051b3c53 | ||
|
|
a6cc071443 | ||
|
|
91006b6f79 | ||
|
|
7a5abd5635 | ||
|
|
98d91076aa | ||
|
|
f923e83ab5 | ||
|
|
08c394a384 | ||
|
|
76d0ec6e75 | ||
|
|
c4bc7b07c4 | ||
|
|
9b5fbcae9e | ||
|
|
381c7db9bb | ||
|
|
9edc539d43 | ||
|
|
294a1fb43d | ||
|
|
5aa2aee0ea | ||
|
|
3dd76200fc | ||
|
|
2bcd1ad238 | ||
|
|
f9aae0438f | ||
|
|
a4754b7774 | ||
|
|
b08073064e | ||
|
|
2a491c9c63 | ||
|
|
c0cdc975d9 | ||
|
|
8af4189f4a | ||
|
|
ff8445b094 | ||
|
|
59f6f20366 | ||
|
|
f7aff12384 | ||
|
|
1ea5f73986 | ||
|
|
edb0d0a879 | ||
|
|
1de8dc42f6 | ||
|
|
b891975e81 | ||
|
|
e472b2de05 | ||
|
|
41d8e66609 | ||
|
|
54835f8b55 | ||
|
|
a6bda8fe0c | ||
|
|
33435fb5d1 | ||
|
|
e9b961bf28 | ||
|
|
59c65644df | ||
|
|
1ee791571f | ||
|
|
d477a67750 | ||
|
|
45f6f2da71 | ||
|
|
7eb0757790 | ||
|
|
8fb78fd187 | ||
|
|
459e9fa1c1 | ||
|
|
c3503f6541 | ||
|
|
173f39b6fa | ||
|
|
ee812ff899 | ||
|
|
6957237fa1 | ||
|
|
66e5942b5c | ||
|
|
5bf27c9d79 | ||
|
|
79375295b8 | ||
|
|
8c968bb0fa | ||
|
|
1c805b073c | ||
|
|
39edab9046 | ||
|
|
e8856b480e | ||
|
|
104c5960ab | ||
|
|
2fac2b68b1 | ||
|
|
7a560d4795 | ||
|
|
cba017d4c9 | ||
|
|
887059f618 | ||
|
|
1507c97f34 | ||
|
|
935d7f3146 | ||
|
|
da17a3cf81 | ||
|
|
b06272fbf4 | ||
|
|
55210b7a7f | ||
|
|
df1d467188 | ||
|
|
94b3a7f5f9 | ||
|
|
d99f23e050 | ||
|
|
77ca6d0df1 | ||
|
|
f3eb906bf3 | ||
|
|
fe2d8d5564 | ||
|
|
6b43dc7a84 | ||
|
|
909c0bb190 | ||
|
|
a2033259b3 | ||
|
|
f51f395d82 | ||
|
|
c57c4b562a | ||
|
|
8df9f0bbb8 | ||
|
|
6257cdd29c | ||
|
|
c618ea173e | ||
|
|
276d661ce4 | ||
|
|
75be8d5de3 | ||
|
|
0f7623ad77 | ||
|
|
fe4649e044 | ||
|
|
06325e34bb | ||
|
|
bec2b11d04 | ||
|
|
2f3a295d5d | ||
|
|
7563f566ca | ||
|
|
529703ef54 | ||
|
|
5415d39249 | ||
|
|
30d8a2d528 | ||
|
|
9c8779c150 | ||
|
|
10bad1d091 | ||
|
|
d892d7cba5 | ||
|
|
290eeda605 | ||
|
|
47477269bf | ||
|
|
34f56a6c66 | ||
|
|
c773d20bca | ||
|
|
730f0e7b2e | ||
|
|
8a81103901 | ||
|
|
4bfe2bf8ee | ||
|
|
fa408da672 | ||
|
|
af15099122 | ||
|
|
126c9da8ba | ||
|
|
ef53dd7069 | ||
|
|
9a6af026a5 | ||
|
|
b736f540cf | ||
|
|
3febbc8791 | ||
|
|
899fe2ff7b | ||
|
|
07ab4e3d5d | ||
|
|
18000fb9f6 | ||
|
|
dc274bb8f6 | ||
|
|
35096c4d5a | ||
|
|
eda286d572 | ||
|
|
6fbbef45d1 | ||
|
|
68fb4bbf96 | ||
|
|
024544a7fd | ||
|
|
d677d61d81 | ||
|
|
5008542e01 | ||
|
|
5d1fb04d46 | ||
|
|
44918762d5 | ||
|
|
68522430b3 | ||
|
|
457851b7ae | ||
|
|
ff122e6a06 | ||
|
|
3b4bde6b7f | ||
|
|
eb4b867ea4 | ||
|
|
bc8ea3d567 | ||
|
|
d450236074 | ||
|
|
499b4271cf | ||
|
|
f2518ff9d4 | ||
|
|
ed18159b0a | ||
|
|
204c8b9fb3 | ||
|
|
6c32c9833f | ||
|
|
5031b294b2 | ||
|
|
d0a8812231 | ||
|
|
61f1e8b12f | ||
|
|
2d8de8ae0f | ||
|
|
0514607df6 | ||
|
|
7096b5d0c3 | ||
|
|
e655b37cbd | ||
|
|
1601030b7d | ||
|
|
0aa8e9fee0 | ||
|
|
3786da9b05 | ||
|
|
14e196ad40 | ||
|
|
41bcd2cff5 | ||
|
|
425aa806bb | ||
|
|
f1e6a5e07c | ||
|
|
d69f6169ae | ||
|
|
96d696085a | ||
|
|
86305c8680 | ||
|
|
8b97305072 | ||
|
|
1e8abfda04 | ||
|
|
8944d5ac55 | ||
|
|
0ecc5418bd | ||
|
|
86f23791fe | ||
|
|
ecdd53438e | ||
|
|
d024459140 | ||
|
|
42e4a0f668 | ||
|
|
4f77b1966a | ||
|
|
49eff8ad41 | ||
|
|
38e3cd15a3 | ||
|
|
4563d3e0a2 | ||
|
|
4022ae6480 | ||
|
|
fda59fe268 | ||
|
|
9c2e2a9d9b | ||
|
|
2e9dd7b93b | ||
|
|
b832b8822e | ||
|
|
28f9bcce32 | ||
|
|
4d6068e62b | ||
|
|
24ecb97b5b | ||
|
|
a97f9903eb | ||
|
|
2a90bef451 | ||
|
|
628f555a55 | ||
|
|
29ba0655a9 | ||
|
|
0ef23d7ff7 | ||
|
|
4ffa56b43f | ||
|
|
972707174a | ||
|
|
993c285456 | ||
|
|
f55d861f40 | ||
|
|
1166ced8dd | ||
|
|
fa08892c57 | ||
|
|
f9f501eaae | ||
|
|
818ca7a335 | ||
|
|
ec662b2888 | ||
|
|
18a36406b4 | ||
|
|
a983d85e4d | ||
|
|
eea6343b41 | ||
|
|
ed3cefacef | ||
|
|
b9f80350e0 | ||
|
|
8dafadc276 | ||
|
|
9879337178 | ||
|
|
0e12d558f8 | ||
|
|
51ea2db4bc | ||
|
|
495a981971 | ||
|
|
f5733cd3af | ||
|
|
5101067bcc | ||
|
|
5e90bc7d9c | ||
|
|
773ed271e1 | ||
|
|
402695bd97 | ||
|
|
0e89c83296 | ||
|
|
10c615951a | ||
|
|
49da0a0217 | ||
|
|
6f4962853b | ||
|
|
00da316456 | ||
|
|
cd20d8d662 | ||
|
|
9ae05dc580 | ||
|
|
bdc4e828ef | ||
|
|
f95b8bf7d9 | ||
|
|
cd6204a63d | ||
|
|
9135cf7cce | ||
|
|
cd3e9a7baa | ||
|
|
32f895bde5 | ||
|
|
71617fdcf7 | ||
|
|
f230abdb8e | ||
|
|
b8e27a117f | ||
|
|
7bcedb00c0 | ||
|
|
030ddafd68 | ||
|
|
e22074d616 | ||
|
|
50f65a1709 | ||
|
|
7811995c84 | ||
|
|
579d974d9e | ||
|
|
0679667891 | ||
|
|
78e9f3592c | ||
|
|
d840379e05 | ||
|
|
52c292f13a | ||
|
|
c8ec70de08 | ||
|
|
d5476089b1 | ||
|
|
3d1fdefe34 | ||
|
|
43468a04d8 | ||
|
|
b67fb3c48a | ||
|
|
017ba5731f | ||
|
|
1f63baf549 | ||
|
|
13a13ed914 | ||
|
|
8fdfb8738a | ||
|
|
50a059f6a4 | ||
|
|
a461022100 | ||
|
|
bab390ddab | ||
|
|
7a0890fb97 | ||
|
|
e84d7f342f | ||
|
|
24e2120e7c | ||
|
|
c633b4fd70 | ||
|
|
3179fc2211 | ||
|
|
b28a06a474 | ||
|
|
d5048d7237 | ||
|
|
4b66e7e181 | ||
|
|
d7868a20f1 | ||
|
|
c5fc3bb8de | ||
|
|
4457eb453f | ||
|
|
24b582bf0f | ||
|
|
d52b7fadd4 | ||
|
|
49d2c6e784 | ||
|
|
ba437ba591 | ||
|
|
0db241b85b | ||
|
|
e6f97007ad | ||
|
|
3fd93fc6f4 | ||
|
|
bfa29ec02b | ||
|
|
c1a16243db | ||
|
|
9bf8c54adf | ||
|
|
ca3f51269d | ||
|
|
510b32ccfc | ||
|
|
5c430b24a4 | ||
|
|
c8a8f4c0e1 | ||
|
|
7a809e2e1e | ||
|
|
fdbfab2da2 | ||
|
|
50e53c3b60 | ||
|
|
6c974f9cf5 | ||
|
|
a48efbd861 | ||
|
|
2752749f5e | ||
|
|
d3bce294c3 | ||
|
|
6a51de27e5 | ||
|
|
779eea486e | ||
|
|
2b67d03514 | ||
|
|
830d2ff061 | ||
|
|
84b35b89ef | ||
|
|
6d0f7e878a | ||
|
|
951d97e7ff | ||
|
|
ccb8a554ab | ||
|
|
2cc65e1912 | ||
|
|
84544919cf | ||
|
|
f29a18fb06 | ||
|
|
373963601e | ||
|
|
03225a337e | ||
|
|
009ec62aab | ||
|
|
5f79145db6 | ||
|
|
592eb7a0d5 | ||
|
|
8d33c7127c | ||
|
|
19a8c56a69 | ||
|
|
daeb1247d8 | ||
|
|
fce5bb7398 | ||
|
|
e0122a1f18 | ||
|
|
fe782e3e4e | ||
|
|
5824a6096c | ||
|
|
4908e28d31 | ||
|
|
423e24fe8b | ||
|
|
db49a2babb | ||
|
|
e11c120f6b | ||
|
|
9155de5b30 | ||
|
|
599b22b70b | ||
|
|
6509cf77bf | ||
|
|
3c6ac06cff | ||
|
|
eba09bd6af | ||
|
|
b95644e9d7 | ||
|
|
6b415ddb49 | ||
|
|
88f27261f0 | ||
|
|
de29d6868d | ||
|
|
6e143c1b3c | ||
|
|
ffe28c21d6 | ||
|
|
4abdee5635 | ||
|
|
ae42cd5dfd | ||
|
|
dbd9309810 | ||
|
|
5d78536ad5 | ||
|
|
c41f2e9514 | ||
|
|
757be61d57 | ||
|
|
df10654f77 | ||
|
|
e7773db7a7 | ||
|
|
9f6dc20fd8 | ||
|
|
f654800370 | ||
|
|
f810436bb1 | ||
|
|
5593db0caf | ||
|
|
e9a04e688f | ||
|
|
b8fe2ed007 | ||
|
|
115f2b8a1e | ||
|
|
fefb8454c7 | ||
|
|
e4cf1df857 | ||
|
|
f3bd38caca | ||
|
|
c104460654 | ||
|
|
fc3db2c3bf | ||
|
|
41e02220d1 | ||
|
|
8f5061b28e | ||
|
|
5898d94c4c | ||
|
|
b2ced4889b | ||
|
|
a65e5f1f73 | ||
|
|
839b8bdb5f | ||
|
|
421d98a936 | ||
|
|
95b6d4a998 | ||
|
|
cc2ea961d7 | ||
|
|
3a0de109a3 | ||
|
|
41aad467a6 | ||
|
|
ebf6c4932a | ||
|
|
b587d3639f | ||
|
|
7408f7f29f | ||
|
|
e2baae4281 | ||
|
|
b61b816c49 | ||
|
|
5257374a73 | ||
|
|
f732ff2505 | ||
|
|
8e2e15194a | ||
|
|
4a3993c4e5 | ||
|
|
f11dadd032 | ||
|
|
881cbd60e3 | ||
|
|
598e87d598 | ||
|
|
6e8fc4f9c1 | ||
|
|
1be3c39e50 | ||
|
|
fc48d2dd1d | ||
|
|
11084a5dfc | ||
|
|
7946e9b921 | ||
|
|
2a1f06cd2a | ||
|
|
ccf3271fe1 | ||
|
|
c99ee0317c | ||
|
|
5bf13da02c | ||
|
|
cbd5d9a36e | ||
|
|
bb8e8f46cb | ||
|
|
6b6e5e7515 | ||
|
|
0b0b23c6d6 | ||
|
|
1ed2559cc3 | ||
|
|
9a068b824d | ||
|
|
32a847087d | ||
|
|
67fbf5b746 | ||
|
|
a0e8290c50 | ||
|
|
7cde4f8f2b | ||
|
|
437142b5bb | ||
|
|
42adbd20c8 | ||
|
|
85a2ef6e4d | ||
|
|
62ce79e147 | ||
|
|
3a840f6e2f | ||
|
|
69c62573b0 | ||
|
|
e1e8a34b2f | ||
|
|
13c9ae5fe3 | ||
|
|
6912ff4929 | ||
|
|
0e387c8936 | ||
|
|
e8e3b5226e | ||
|
|
b87f049c2d | ||
|
|
0d7698e0d4 | ||
|
|
ebbaee5ed2 | ||
|
|
bff266bef3 | ||
|
|
1d6f9f80f6 | ||
|
|
8a298ab07c | ||
|
|
7f317f4d55 | ||
|
|
50b19bc74f | ||
|
|
9f35f8043e | ||
|
|
19091f245b | ||
|
|
0bc395108d | ||
|
|
2b6367e1d4 | ||
|
|
6fb8477b3a | ||
|
|
39c22d2ee0 | ||
|
|
721840498c | ||
|
|
56e35d8305 | ||
|
|
a42a244aed | ||
|
|
b8dba0a4ad | ||
|
|
fe9f9b91fb | ||
|
|
206a04e15f | ||
|
|
db11fd957d | ||
|
|
2517d52437 | ||
|
|
f85aba61ed | ||
|
|
147403b0e5 | ||
|
|
afa84f396b | ||
|
|
9888b965d8 | ||
|
|
c3e2f58d96 | ||
|
|
697200e942 | ||
|
|
33b940562e | ||
|
|
08f2298215 | ||
|
|
8c992ed466 | ||
|
|
c442950e5f | ||
|
|
0a5dffc069 | ||
|
|
744a0de15d | ||
|
|
7c42f005db | ||
|
|
652cb0d66c | ||
|
|
9f77fbccd1 | ||
|
|
de2864a5a5 | ||
|
|
2caf1628ca | ||
|
|
f1865a507c | ||
|
|
8013fecb61 | ||
|
|
8d6deea83d | ||
|
|
da3eed2a6f | ||
|
|
5de817b531 | ||
|
|
a173792b1f | ||
|
|
6af690f524 | ||
|
|
1891940018 | ||
|
|
6adb68d7d6 | ||
|
|
c1225d880e | ||
|
|
017686e0f6 | ||
|
|
f61f401683 | ||
|
|
3a5e5fc5d7 | ||
|
|
8d0712bea4 | ||
|
|
0804f7fb08 | ||
|
|
7a8878dec6 | ||
|
|
92ae7b14c4 | ||
|
|
eda3aae608 | ||
|
|
8e363122b3 | ||
|
|
ff378e17c9 | ||
|
|
5e1157d363 | ||
|
|
d3c6310bb1 | ||
|
|
5c4d82cacc | ||
|
|
414c8ed603 | ||
|
|
603c598e14 | ||
|
|
a3cad9563f | ||
|
|
cb95ba41ac | ||
|
|
8e000eb634 | ||
|
|
b00f152456 | ||
|
|
566d70bf9c | ||
|
|
bc6bf59bda | ||
|
|
6fcbfa15b3 | ||
|
|
121a2dc9ae | ||
|
|
35f9a872f7 | ||
|
|
0efb9a0c8c | ||
|
|
63da245439 | ||
|
|
8b83afc1bb | ||
|
|
54e6f9aed1 | ||
|
|
4c99a53852 | ||
|
|
b95f7afd3c | ||
|
|
a2db2d88ca | ||
|
|
cbe00bb737 | ||
|
|
7efb007b53 | ||
|
|
4e7917d9fe | ||
|
|
ee8fad1e7a | ||
|
|
0fa8b1e62d | ||
|
|
117f75eac4 | ||
|
|
85432e6307 | ||
|
|
cdbbf69a1e | ||
|
|
fb8e026551 | ||
|
|
5f1b0c19a8 | ||
|
|
bbef91c39e | ||
|
|
f0120adba4 | ||
|
|
457d64640e | ||
|
|
eae68a0872 | ||
|
|
48bbe65f60 | ||
|
|
6e04d47209 | ||
|
|
02dc1c300c | ||
|
|
2d1c1d3e09 | ||
|
|
5e9ebd8b9b | ||
|
|
c5bc89f11b | ||
|
|
bd2407153c | ||
|
|
2b42b3eab0 | ||
|
|
77146706a6 | ||
|
|
b6d0f183de | ||
|
|
4f649964de | ||
|
|
f565901231 | ||
|
|
9821aaa612 | ||
|
|
a364fbe125 | ||
|
|
0500ccb4da | ||
|
|
3db726ddac | ||
|
|
edff0569b6 | ||
|
|
cbbeb7ea25 | ||
|
|
ccb055cf78 | ||
|
|
4ddd63d141 | ||
|
|
fdd89be534 | ||
|
|
ed77e687a3 | ||
|
|
f5e2c72b18 | ||
|
|
1e4e78d6bc | ||
|
|
3ede2a2512 | ||
|
|
1995c735a1 | ||
|
|
79a2ef7ad1 | ||
|
|
11b9be6dfd | ||
|
|
d21c4ba0ab | ||
|
|
a23b0be5a5 | ||
|
|
199fdff643 | ||
|
|
d762ed7af6 | ||
|
|
85e3a6e0a1 | ||
|
|
74f253820a | ||
|
|
3c73143f3a | ||
|
|
18cafc2d06 | ||
|
|
6f6e34dced | ||
|
|
a16f99b8d0 | ||
|
|
46a180f755 | ||
|
|
cebd5f3cf8 | ||
|
|
2ced0242bd | ||
|
|
7edc0cd149 | ||
|
|
417411ab62 | ||
|
|
ea589a75a9 | ||
|
|
d00b72f3e8 | ||
|
|
56cf313613 | ||
|
|
98498419c0 | ||
|
|
653d8f1dae | ||
|
|
8405cf7323 | ||
|
|
80a8d9c37f | ||
|
|
ce87cee840 | ||
|
|
0ca6bf3ecc | ||
|
|
8e0a2c9e0f | ||
|
|
fad67f380d | ||
|
|
4dc12e992d | ||
|
|
bf6f69065c | ||
|
|
be09fad901 | ||
|
|
0b07bf8094 | ||
|
|
d2c38b8db5 | ||
|
|
7f1249ae45 | ||
|
|
617b4dd26f | ||
|
|
ef7b658bc0 | ||
|
|
ef6adf90fc | ||
|
|
ca2a66514f | ||
|
|
ce3095d1fc | ||
|
|
2869b388dd | ||
|
|
dc03deead7 | ||
|
|
99a0613092 | ||
|
|
38044917f4 | ||
|
|
2092f9faee | ||
|
|
f0ea531cc4 | ||
|
|
54de9067ee | ||
|
|
dcbf2a6331 | ||
|
|
63d0339d05 | ||
|
|
8d88cf2277 | ||
|
|
450f76d205 | ||
|
|
890de43c91 | ||
|
|
a8879d0f41 | ||
|
|
cdab5000bc | ||
|
|
fd0daa0b92 | ||
|
|
86219510c6 | ||
|
|
471a5a71e6 | ||
|
|
ae1b395a87 | ||
|
|
fecf4de0d1 | ||
|
|
378cc22c07 | ||
|
|
6f3b75b485 | ||
|
|
2b1aab904e | ||
|
|
8afabaf4e1 | ||
|
|
ff02a0fe6e | ||
|
|
8b9b9c0bf6 | ||
|
|
b134b99686 | ||
|
|
61f0440de5 | ||
|
|
c68ace1542 | ||
|
|
2207e20627 | ||
|
|
0a4d1f26d1 | ||
|
|
1114813608 | ||
|
|
0b09d90b12 | ||
|
|
219324f304 | ||
|
|
f0e00aacc8 | ||
|
|
02e5131522 | ||
|
|
194784d781 | ||
|
|
a0a5198a2f | ||
|
|
e41619eea3 | ||
|
|
93deef330a | ||
|
|
5507e033d8 | ||
|
|
d0c26b575e | ||
|
|
66c844cebf | ||
|
|
fc449a487e | ||
|
|
4be53cd0fa | ||
|
|
2adb49b93e | ||
|
|
d7bb945cc0 | ||
|
|
752fbcc6dc | ||
|
|
d1e1a5f249 | ||
|
|
a13d49cf81 | ||
|
|
2fc75ca08e | ||
|
|
7f3c5e6cbb | ||
|
|
355fe461e7 | ||
|
|
b87c59eab2 | ||
|
|
e2edfb470f | ||
|
|
8f642dfe1e | ||
|
|
ad533e7c35 | ||
|
|
5937eb099e | ||
|
|
9ca456bfb3 | ||
|
|
52854cd1ed | ||
|
|
7a92120974 | ||
|
|
9b1cf4a467 | ||
|
|
62ae22ef7a | ||
|
|
9e7f4020c2 | ||
|
|
17aa8609b0 | ||
|
|
4b83df7f01 | ||
|
|
a1acb62b58 | ||
|
|
71144f3c20 | ||
|
|
7c89b7850f | ||
|
|
cdb42f3c11 | ||
|
|
22cf3b4935 | ||
|
|
d584853a94 | ||
|
|
94ce85b538 | ||
|
|
1427caaee9 | ||
|
|
3846165645 | ||
|
|
fdddf61b06 | ||
|
|
07e07db9c7 | ||
|
|
1c091779a8 | ||
|
|
88140f9116 | ||
|
|
e9b078491b | ||
|
|
218ae4569a | ||
|
|
03188d0eec | ||
|
|
88c99148b2 | ||
|
|
261067b0f5 | ||
|
|
89b90296ec | ||
|
|
dff79f6bea | ||
|
|
fa64c5bdd2 | ||
|
|
a9acb01482 | ||
|
|
de4c463956 | ||
|
|
07857588f0 | ||
|
|
f9346a7eca | ||
|
|
e332794a4a | ||
|
|
ab4c4baa52 | ||
|
|
b372a53bbb | ||
|
|
e031341af1 | ||
|
|
ce5adaa037 | ||
|
|
b578f783e2 | ||
|
|
2c0a4561bd | ||
|
|
f14ac97ee2 | ||
|
|
8431539f23 | ||
|
|
7f8be4b3a1 | ||
|
|
59304ffd99 | ||
|
|
7c124f6e93 | ||
|
|
7543005120 | ||
|
|
f4784cafb5 | ||
|
|
c80e584dfa | ||
|
|
4820f93b6a | ||
|
|
eff915d837 | ||
|
|
a7e61ddeb8 | ||
|
|
fb624a76d2 | ||
|
|
33d5b78b5b | ||
|
|
e6a68089c6 | ||
|
|
4d1875e738 | ||
|
|
737f4b83e6 | ||
|
|
a4362b3b3f | ||
|
|
96f6b17458 | ||
|
|
e5df8aef5b | ||
|
|
f8f7240e12 | ||
|
|
7bab56dcb7 | ||
|
|
37c4bead67 | ||
|
|
3b934ac775 | ||
|
|
d34ad2d0ff | ||
|
|
ff0e52d4b4 | ||
|
|
4961e0c799 | ||
|
|
c41ea11302 | ||
|
|
8215339e79 | ||
|
|
49d0571e4a | ||
|
|
a93baf6214 | ||
|
|
8dcf6e1a5f | ||
|
|
687770d207 | ||
|
|
a897ba6ac9 | ||
|
|
87efbf9a7c | ||
|
|
7aa17be09c | ||
|
|
292bbca26b | ||
|
|
ede722c5da | ||
|
|
6844074eac | ||
|
|
26385135f4 | ||
|
|
079e377937 | ||
|
|
369841f425 | ||
|
|
3f7bfda8d8 | ||
|
|
cfc470d480 | ||
|
|
ff7a84bbb1 | ||
|
|
485817d819 | ||
|
|
bf4738a2b3 | ||
|
|
4449495196 | ||
|
|
d89ceac446 | ||
|
|
a9a77b8a9c | ||
|
|
d8fdf046d1 | ||
|
|
5f2999d9c4 | ||
|
|
0a943103f2 | ||
|
|
8e34d8cc43 | ||
|
|
e05ed3ebae | ||
|
|
da7f5837ec | ||
|
|
d8fc7ff7bd | ||
|
|
66d2971efb | ||
|
|
16e9a2dbc0 | ||
|
|
77cf658c05 | ||
|
|
a1e16b72b7 | ||
|
|
f48578f681 | ||
|
|
cbc3f74479 | ||
|
|
569d7e7879 | ||
|
|
2d6ac57834 | ||
|
|
44aae92786 | ||
|
|
9976984eb8 | ||
|
|
452d3d68ca | ||
|
|
a609cfaa02 | ||
|
|
c12f73e2b3 | ||
|
|
fd72915fae | ||
|
|
8d5cfe739f | ||
|
|
d40253a1b5 | ||
|
|
55589cb65a | ||
|
|
14127052f1 | ||
|
|
5201df3dbc | ||
|
|
3263a885a3 | ||
|
|
4dbb3d18de | ||
|
|
31b046e108 | ||
|
|
c25f195f08 | ||
|
|
f8910ba651 | ||
|
|
9b05ce2169 | ||
|
|
6bbc5576f9 | ||
|
|
52b5b08b62 | ||
|
|
c83ef56154 | ||
|
|
77c34614a2 | ||
|
|
0f925b7264 | ||
|
|
17ff2420b4 | ||
|
|
1f722b453d | ||
|
|
5bcd8e3fe7 | ||
|
|
cacdbe8a7e | ||
|
|
8397c013f0 | ||
|
|
40f6521d20 | ||
|
|
183386fc02 | ||
|
|
ee83524e6b | ||
|
|
58b02d04cb | ||
|
|
68006545e1 | ||
|
|
9a0e885a2e | ||
|
|
4013ea544b | ||
|
|
9258159419 | ||
|
|
ecc19506ef | ||
|
|
6373069d52 | ||
|
|
2a8ec06437 | ||
|
|
603519ae1c | ||
|
|
f7433d8e93 | ||
|
|
5ca50b7ce7 | ||
|
|
7287113d58 | ||
|
|
179c9f6df0 | ||
|
|
a160ebf5ba | ||
|
|
b52605705b | ||
|
|
3ef7c191db | ||
|
|
73dc2a91e4 | ||
|
|
ad76c5efab | ||
|
|
5981891ee0 | ||
|
|
884737e82e | ||
|
|
e301e1b359 | ||
|
|
a3b1033015 | ||
|
|
ac5e26f132 | ||
|
|
19cc8098dc | ||
|
|
49da47700d | ||
|
|
3d22feedd8 | ||
|
|
bab66fe7cc | ||
|
|
4de3accb61 | ||
|
|
ba2b082abd | ||
|
|
086f5999aa | ||
|
|
96f51f2b99 | ||
|
|
a93773ae77 | ||
|
|
d997adeb16 | ||
|
|
299c22ff0f | ||
|
|
71e83671aa | ||
|
|
1b66a4c204 | ||
|
|
0c8f41a6a0 | ||
|
|
5268e13e74 | ||
|
|
a0d4d84622 | ||
|
|
9427acb0a1 | ||
|
|
41d5c292f9 | ||
|
|
f2ceaba174 | ||
|
|
0faa5d56cc | ||
|
|
072c850568 | ||
|
|
0f4b4deb80 | ||
|
|
e22ae5f857 | ||
|
|
926298ac6d | ||
|
|
e135b2a4c0 | ||
|
|
69a07d8807 | ||
|
|
5c341931d0 | ||
|
|
f78d291850 | ||
|
|
89e5f59610 | ||
|
|
09ce70661a |
44
MakeRelease
44
MakeRelease
@@ -10,6 +10,15 @@
|
||||
# [-b] - For fully built release
|
||||
#
|
||||
# $Log$
|
||||
# Revision 1.11 1997/07/01 18:29:17 jba
|
||||
# Changed Tar to tar in output filename.
|
||||
#
|
||||
# Revision 1.10 1997/01/17 19:59:37 jba
|
||||
# Use config/CONFIG_BASE_VERSION to get version info.
|
||||
#
|
||||
# Revision 1.9 1996/09/04 21:41:36 jba
|
||||
# Top level dir no longer passed to MakeRelease
|
||||
#
|
||||
# Revision 1.8 1996/07/02 13:45:09 jba
|
||||
# Added dbd and base/config dirs. Removed epics/config and base/rec.
|
||||
#
|
||||
@@ -87,48 +96,37 @@ if [ "${1}" = "-b" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# Retrieve EPICS release string from src/include/epicsVersion.h
|
||||
grep EPICS_VERSION_STRING src/include/epicsVersion.h > /dev/null 2>&1 || ERR=1;
|
||||
# Retrieve EPICS release string from config/CONFIG_BASE_VERSION
|
||||
. config/CONFIG_BASE_VERSION
|
||||
|
||||
if [ "$ERR" = "1" ];
|
||||
if [ -z "${EPICS_VERSION}" ];
|
||||
then
|
||||
echo "TOP: Cannot retrieve release number from include/epicsVersion.h";
|
||||
echo "TOP: Cannot retrieve release number from config/CONFIG_BASE_VERSION";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
RELS=`grep "EPICS_VERSION_STRING" src/include/epicsVersion.h \
|
||||
| sed -e 's-.*Version--' \
|
||||
-e 's-[ ][ ]*--g' \
|
||||
-e 's-".*--' \
|
||||
-e 's-\.0$--'`;
|
||||
|
||||
if [ -z "${RELS}" ];
|
||||
then
|
||||
echo "TOP: Cannot retrieve release number from src/include/epicsVersion.h";
|
||||
exit 1;
|
||||
fi
|
||||
RELS="R${EPICS_VERSION}.${EPICS_REVISION}.${EPICS_MODIFICATION}.${EPICS_UPDATE_NAME}${EPICS_UPDATE_LEVEL}";
|
||||
|
||||
RELS="R${RELS}";
|
||||
echo TOP: Creating ../${RELS}.tar;
|
||||
|
||||
echo TOP: Creating ../${RELS}.Tar;
|
||||
|
||||
if [ -f ${RELS}.Tar* ];
|
||||
if [ -f ${RELS}.tar* ];
|
||||
then
|
||||
echo "TOP: This release has already been created.";
|
||||
echo "TOP: Remove Tar file or edit src/include/epicsVersion.h.";
|
||||
echo "TOP: Remove tar file or edit config/CONFIG_BASE_VERSION.";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
# Create list of files and dirs to include in Tar file
|
||||
# Create list of files and dirs to include in tar file
|
||||
|
||||
cd ..
|
||||
|
||||
ls base/README* | xargs tar cvf ${RELS}.Tar
|
||||
ls base/README* base/*.bat | xargs tar cvf ${RELS}.tar
|
||||
|
||||
ls base/Make* > /tmp/make_release.out.$$;
|
||||
|
||||
ls base/*COPYRIGHT* >> /tmp/make_release.out.$$;
|
||||
|
||||
|
||||
if [ -d startup ];
|
||||
then
|
||||
find startup -name CVS -prune -o ! -type d -print \
|
||||
@@ -161,7 +159,7 @@ find base/config -name CVS -prune -o -name SCCS -prune -o ! -type d -print \
|
||||
find base/src -name CVS -prune -o -name SCCS -prune -o ! -type d -print \
|
||||
| grep -v '/O\..*$' >> /tmp/make_release.out.$$
|
||||
|
||||
cat /tmp/make_release.out.$$ | xargs tar rvf ${RELS}.Tar
|
||||
cat /tmp/make_release.out.$$ | xargs tar rvf ${RELS}.tar
|
||||
|
||||
rm /tmp/make_release.out.$$
|
||||
|
||||
|
||||
15
Makefile
15
Makefile
@@ -18,6 +18,16 @@ include $(TOP)/config/CONFIG_BASE
|
||||
|
||||
DIRS = src config
|
||||
|
||||
INSTALL_BIN = $(INSTALL_LOCATION)/bin/$(HOST_ARCH)
|
||||
|
||||
#
|
||||
# this bootstraps in makeMakefile.pl (and others) so that it can
|
||||
# be used to create the first O.xxxx/Makefile
|
||||
#
|
||||
PERL_BOOTSTRAP_SCRIPTS = $(notdir $(wildcard $(TOP)/src/tools/*.pl))
|
||||
PERL_BOOTSTRAP_SCRIPTS_INSTALL = $(PERL_BOOTSTRAP_SCRIPTS:%=$(INSTALL_BIN)/%)
|
||||
all host cross inc rebuild uninstall clean depends buildInstall :: $(PERL_BOOTSTRAP_SCRIPTS_INSTALL)
|
||||
|
||||
include $(TOP)/config/RULES_TOP
|
||||
|
||||
release:
|
||||
@@ -28,7 +38,6 @@ built_release:
|
||||
@echo TOP: Creating Fully Built Release...
|
||||
@./MakeRelease -b $(INSTALL_LOCATION)
|
||||
|
||||
uninstall::
|
||||
@DIR1=`pwd`;cd $(INSTALL_LOCATION);DIR2=`pwd`;cd $$DIR1;\
|
||||
if [ "$$DIR1" != "$$DIR2" ]; then rm -fr $(INSTALL_LOCATION)/config; fi
|
||||
$(INSTALL_BIN)/%.pl: $(TOP)/src/tools/%.pl
|
||||
$(PERL) $(TOP)/src/tools/installEpics.pl -d -m 555 $< $(INSTALL_BIN)
|
||||
|
||||
|
||||
191
README
191
README
@@ -7,36 +7,53 @@ $Id$
|
||||
|
||||
Notes:
|
||||
|
||||
1. Before you can build or really use EPICS, you must properly set the
|
||||
environemnt variable HOST_ARCH. The epics/startup/HostArch script file
|
||||
has been provided to set HOST_ARCH.
|
||||
1. Before you can build or use EPICS, the environemnt variable HOST_ARCH
|
||||
must be set. The epics/startup/HostArch script file has been provided
|
||||
to set HOST_ARCH.
|
||||
|
||||
2. You must use GNU make (which is now THE supported make utility) for
|
||||
the build, gnumake. Set your path so that a recent version (e.g.
|
||||
V3.70) of gnumake is available.
|
||||
|
||||
3. You must have perl installed. See the README.Perl in this directory. The
|
||||
config files specify the perl full pathname as /usr/bin/perl for
|
||||
unix builds and C:\Perl\bin\perl for WIN95/NT builds. You can override
|
||||
these specifications with a CONFIG_SITE_HOST_ARCH.<host_arch> file.
|
||||
|
||||
4. You may need vendors C and C++ compilers in your search path. (Check
|
||||
the definitions of ACC and CCC in CONFIG.Host.<host_arch> or gnu GCC
|
||||
and G++ if ANSI=GCC and CPLUSPLUS=GCC are specified in CONFIG_SITE).
|
||||
|
||||
4. For building base you must have echo in your search path. For unix host
|
||||
builds you must also have ar, cp, rm, mv, ranlib, and mkdir in your search
|
||||
path and /bin/chmod must exist.
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
Part 1 - Configuring and Building EPICS Base
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
1.1 To configure EPICS, edit the following files:
|
||||
1.1 To configure EPICS, edit the following file:
|
||||
|
||||
config/CONFIG_SITE - Build choices/HOST_ARCH/Vx location.
|
||||
config/CONFIG_SITE.* - Location of X, etc.
|
||||
config/CONFIG - For overriding specific variables.
|
||||
config/CONFIG_SITE_ENV - For site-specific environment settings
|
||||
|
||||
For a specific host architecture you may want to edit the following file
|
||||
config/CONFIG_SITE.Host.<arch> - Override Host build settings for a host arch
|
||||
config/CONFIG_SITE.Vx.<arch> - Override Vx build settings for a host arch
|
||||
config/CONFIG_SITE_HOST_ARCH.<arch> - Override build settings for a host arch
|
||||
|
||||
Optionally you may want to edit the following files
|
||||
config/CONFIG_SITE.Host - Override Host build settings for all host archs.
|
||||
config/CONFIG_SITE.Vx - Override Vx build settings for all host archs.
|
||||
config/CONFIG - Override build settings for all host archs.
|
||||
|
||||
1.2 To add a target architecture to EPICS:
|
||||
|
||||
cd base/config
|
||||
cp CONFIG.mv167 CONFIG.YOUR_ARCH
|
||||
edit CONFIG.YOUR_ARCH - For compiler flags / etc.
|
||||
cp CONFIG.Vx.mv167 CONFIG.Vx.YOUR_ARCH
|
||||
edit CONFIG.Vx.YOUR_ARCH - For compiler flags / etc.
|
||||
|
||||
cp CONFIG.Vx.68k CONFIG.Vx.YOUR_ARCH_CLASS
|
||||
cp CONFIG_SITE.Vx.68k CONFIG_SITE.Vx.YOUR_ARCH_CLASS
|
||||
- ONLY IF you are adding a new architecture class,
|
||||
see note in Appendix A.
|
||||
|
||||
edit CONFIG_BASE - Add architecture to list.
|
||||
edit CONFIG_SITE - Add architecture to CROSS_COMPILER_TARGET_ARCHS list.
|
||||
|
||||
1.3 To build EPICS:
|
||||
|
||||
@@ -45,11 +62,11 @@ Notes:
|
||||
(Same as "gnumake inc install")
|
||||
gnumake all - Same as "gnumake"
|
||||
gnumake clean - To clean temporary object files. Top level
|
||||
clean will remove all the O.ARCH dirs, not
|
||||
only those specified in BUILD_ARCHS.
|
||||
clean will remove the O.ARCH dirs specified
|
||||
in BUILD_ARCHS.
|
||||
gnumake uninstall - Only available at the top level directory.
|
||||
Cleans directories created by the install.
|
||||
gnumake rebuild - Same as "gnumake clean uninstall all"
|
||||
gnumake rebuild - Same as "gnumake clean all"
|
||||
|
||||
1.4 "Partial" build commands:
|
||||
|
||||
@@ -123,26 +140,48 @@ manager. It specifies:
|
||||
etc.
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
CONFIG.ARCH - This file defines a particular architecture. It
|
||||
CONFIG.Host.ARCH - This file defines a particular host architecture. It
|
||||
contains the following variables:
|
||||
|
||||
BUILD_TYPE: Unix / Vx
|
||||
ARCH_CLASS: 68k / sun4 / hp700 / etc.
|
||||
ARCH_CLASS: solaris / sun4 / hp700 / etc.
|
||||
Host architecture OS vendor C and C++ complier variables.
|
||||
Architecture dependent build flags. The flag names / contents
|
||||
depend on your architecture class.
|
||||
----------------------------------------------------------------------------
|
||||
CONFIG_HOST_ARCH.ARCH - This file contains the following variable:
|
||||
|
||||
WIND_HOST_TYPE: sun4-solaris2 / sun4-sunos4 / x86-win32 / etc.
|
||||
----------------------------------------------------------------------------
|
||||
CONFIG_SITE.ARCH - Contains site specific definitions pertaining to a
|
||||
particular architecture. This file's primary usefulness is to
|
||||
----------------------------------------------------------------------------
|
||||
CONFIG.Vx.ARCH - This file defines a particular target architecture. It
|
||||
contains the following variables:
|
||||
|
||||
ARCH_CLASS: 68k / sun4 / hp700 / etc.
|
||||
Architecture dependent build flags. The flag names / contents
|
||||
depend on your architecture class.
|
||||
CMPLR_SUFFIX: Vx GNU cross compiler suffix definition.
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
CONFIG_SITE.BUILD_TYPE.ARCH - Contains site specific definitions pertaining to a
|
||||
particular architecture and build type. This file's primary usefulness is to
|
||||
define site specific compile and link flags.
|
||||
----------------------------------------------------------------------------
|
||||
CONFIG_COMMON - Contains definitions describing the layout of base.
|
||||
CONFIG_COMMON - Contains definitions describing the layout of base
|
||||
and definitions common to all builds.
|
||||
----------------------------------------------------------------------------
|
||||
CONFIG.Host.UnixCommon - Contains host definitions common to all Unix archs.
|
||||
----------------------------------------------------------------------------
|
||||
CONFIG_BASE - Defines what subdirectories get built by default under base.
|
||||
----------------------------------------------------------------------------
|
||||
RULES.Vx - Rules for building with VxWorks makefiles.
|
||||
CONFIG_BASE_VERSION - Defines the version of base.
|
||||
----------------------------------------------------------------------------
|
||||
RULES.Unix - Rules for building with Unix makefiles.
|
||||
CONFIG_ENV - EPICS Environment Parameter configuration file.
|
||||
----------------------------------------------------------------------------
|
||||
CONFIG_SITE_ENV - EPICS Environment Parameter Site configuration file
|
||||
----------------------------------------------------------------------------
|
||||
RULES.Vx - Rules for building with Makefile.Vx makefiles.
|
||||
----------------------------------------------------------------------------
|
||||
RULES.Host - Rules for building with Makefile.Host makefiles.
|
||||
----------------------------------------------------------------------------
|
||||
RULES_TOP - Top level rules for building.
|
||||
----------------------------------------------------------------------------
|
||||
@@ -158,12 +197,16 @@ Filename SYS_MGR ADD_VX_ARCH ADD_UNIX_ARCH DEVELOPER
|
||||
CONFIG m - - m
|
||||
CONFIG_SITE m m m -
|
||||
CONFIG_SITE_ENV m - - -
|
||||
CONFIG.ARCH - c c -
|
||||
CONFIG.Host.ARCH - c c -
|
||||
CONFIG_HOST_ARCH.ARCH - c c -
|
||||
CONFIG_SITE.Host.ARCH - - - -
|
||||
CONFIG.Vx.ARCH - c c -
|
||||
CONFIG_SITE.ARCH - c c -
|
||||
CONFIG.Vx.ARCH_CLASS - c* - -
|
||||
RULES.Vx - - - -
|
||||
RULES.Unix - - - -
|
||||
RULES.Host - - - -
|
||||
CONFIG_BASE - - - -
|
||||
CONFIG_BASE_VERSION - - - -
|
||||
CONFIG_COMMON - - - -
|
||||
CONFIG_ENV - - - -
|
||||
RULES_ARCHS - - - -
|
||||
@@ -187,59 +230,61 @@ RULES_TOP - - - -
|
||||
|
||||
src/db/Makefile.Vx (An example EPICS makefile)
|
||||
^ ^
|
||||
| +--- 3. RULES.Vx
|
||||
| +--- 2. RULES.Vx
|
||||
| Default rules.
|
||||
+------- 2. CONFIG
|
||||
^ ^ ^ ^
|
||||
| | | |
|
||||
| | | +- 1. CONFIG_SITE
|
||||
| | | HOST_ARCH = sun4
|
||||
| | | BUILD_ARCHS = $(HOST_ARCH) mv167 hkv2f
|
||||
| | | VX_DIR = /vxworks
|
||||
| | | More.
|
||||
| | +--- 2. CONFIG_COMMON
|
||||
| | General info about base.
|
||||
| +----- 3. CONFIG.hkv2f
|
||||
| ^ BUILD_TYPE = Vx
|
||||
| | ARCH_CLASS = 68k
|
||||
| | Arch Specific Compiler Flag Setup
|
||||
| +--- a. CONFIG.Vx.68k
|
||||
| Compiler/utility setup for ARCH_CLASS
|
||||
+------- 4. CONFIG_SITE.hkv2f
|
||||
Site Specific setup
|
||||
+----1. CONFIG_BASE
|
||||
^
|
||||
|
|
||||
+ 1. CONFIG
|
||||
^^^^^^^
|
||||
||||||+- 1. CONFIG_COMMON
|
||||
|||||| General info about base.
|
||||
|||||+-- 2. CONFIG_BASE_VERSION
|
||||
||||| Base version.
|
||||
||||+--- 3. CONFIG_SITE
|
||||
|||| HOST_ARCH = sun4
|
||||
|||| CROSS_COMPILER_TARGET_ARCHS = mv167 hkv2f
|
||||
|||| VX_DIR = /vxworks
|
||||
|||| More.
|
||||
|||+---- 4. CONFIG_HOST_ARCH.sun4
|
||||
||| WIND_HOST_TYPE = sun4-sunos4
|
||||
||+----- 5. CONFIG.Vx
|
||||
|| Definitions for Vx builds
|
||||
|+------ 6. CONFIG.Vx.hkv2f
|
||||
| ARCH_CLASS = 68k
|
||||
| Arch Specific Compiler Flag Setup
|
||||
| Vx GNU cross compiler suffix
|
||||
+------- 7. CONFIG_SITE.Vx.hkv2f
|
||||
Site Specific setup
|
||||
|
||||
---------------------------- sun4 example --------------------------------
|
||||
(files are numbered in the order of their inclusion)
|
||||
|
||||
src/db/Makefile.Unix (An example EPICS makefile)
|
||||
^ ^
|
||||
| +--- 3. RULES.Unix
|
||||
| +--- 2. RULES.Vx
|
||||
| Default rules.
|
||||
+------- 2. CONFIG
|
||||
^ ^ ^ ^
|
||||
| | | |
|
||||
| | | +- 1. CONFIG_SITE
|
||||
| | | HOST_ARCH = sun4
|
||||
| | | BUILD_ARCHS = $(HOST_ARCH) mv167 hkv2f
|
||||
| | | VX_DIR = /vxworks
|
||||
| | | More.
|
||||
| | +--- 2. CONFIG_COMMON
|
||||
| | General info about base.
|
||||
| +----- 3. CONFIG.sun4
|
||||
| BUILD_TYPE = Unix
|
||||
| ARCH_CLASS = sun4
|
||||
| Arch Specific Compiler Flag Setup
|
||||
+------- 4. CONFIG_SITE.sun4
|
||||
Directory locations
|
||||
+----1. CONFIG_BASE
|
||||
^
|
||||
|
|
||||
+ 1. CONFIG
|
||||
^^^^^
|
||||
|||||+- 1. CONFIG_COMMON
|
||||
||||| General info about base.
|
||||
||||+-- 2. CONFIG_BASE_VERSION
|
||||
|||| Base version.
|
||||
|||+--- 3. CONFIG_SITE
|
||||
||| HOST_ARCH = sun4
|
||||
||| CROSS_COMPILER_TARGET_ARCHS = mv167 hkv2f
|
||||
||| VX_DIR = /vxworks
|
||||
||| More.
|
||||
||+---- 4. CONFIG_HOST_ARCH.sun4
|
||||
|| WIND_HOST_TYPE = sun4-sunos4
|
||||
|+----- 5. CONFIG.Host.sun4
|
||||
| ARCH_CLASS = sun4
|
||||
| Arch Specific Compiler Flag Setup
|
||||
| Vx GNU cross compiler suffix
|
||||
+------ 6. CONFIG_SITE.Host.sun4
|
||||
Site Specific setup
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
Part 4 --- EPICS makefile rules
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
Rules supported by lower level Makefiles:
|
||||
|
||||
depends - Generate include dependencies
|
||||
build - Builds objects, using libraries from "build_libs"
|
||||
install - Installs executables in bin/ARCH
|
||||
clean - Cleans objects
|
||||
|
||||
|
||||
14
README.Linux
14
README.Linux
@@ -1,16 +1,10 @@
|
||||
Special Notes on Linux
|
||||
1) The epics makefiles use GNU make which is the make that comes
|
||||
with Linux. You need to make a link from make to gnumake and
|
||||
have it in your path. After you have defined the EPICS environement
|
||||
variable, you can use:
|
||||
|
||||
ln -s /usr/bin/make $EPICS/base/tools/gnumake
|
||||
At this point, support for Linux only involves channel access
|
||||
clients. Since Vxworks is not available for Linux, you must
|
||||
use other platforms for developing server side code.
|
||||
|
||||
2) At this point, support for Linux only involves channel access
|
||||
clients. Since Vxworks is not available for Linux, you must
|
||||
use other platforms for developing server side code.
|
||||
|
||||
3) You MUST start caRepeater by hand before running a client.
|
||||
You MUST start caRepeater by hand before running a client.
|
||||
Prior to running a client, you must run:
|
||||
|
||||
caRepeater &
|
||||
|
||||
44
README.Perl
Normal file
44
README.Perl
Normal file
@@ -0,0 +1,44 @@
|
||||
Perl
|
||||
====
|
||||
|
||||
A number of shell scripts are now Perl scripts,
|
||||
most important:
|
||||
|
||||
tools/installEpics.pl
|
||||
include/makeEpicsVersion.pl
|
||||
libCom/bldEnvData.pl
|
||||
libCom/makeStatSymTbl.pl
|
||||
sequencer/makeVersion.pl
|
||||
|
||||
WIN32 also uses
|
||||
tools/cp.pl, mv.pl, rm.pl, mkdir.pl
|
||||
which should behave like the UNIX cp, mv, rm, rmdir.
|
||||
All systems could use the Perl versions but that seems
|
||||
to be overkill for UNIX.
|
||||
|
||||
Advantages:
|
||||
* no need for ls, date, basename, grep, awk, sed, ...,
|
||||
which made the make UNIX-specific.
|
||||
* Perl is currently available for Unix, OS/2, WIN32, VMS
|
||||
and the scripts should work on all those systems
|
||||
|
||||
Disadvantage:
|
||||
* You have to get Perl, look e.g. at http://www.perl.com
|
||||
* Perl version 5.003_02 works, we don't know about earlier versions.
|
||||
|
||||
|
||||
Compile Perl:
|
||||
No big deal,
|
||||
* on UNIX say 'configure' and 'gnumake',
|
||||
* on Windows use MX Visual C++,
|
||||
use File/Open Workspace to open the Makefile {PERL}/perl5i.mak,
|
||||
use Build/Batch build to select eiher the Release or Debug targets.
|
||||
|
||||
You can do the same with the Makefile {Perl}/Ext/WIN32/win32.mak
|
||||
- nice tools but not necessary for EPICS.
|
||||
|
||||
Then call {PERL}/bin/perlw32-install.bat
|
||||
|
||||
In any case, read the texts that come with perl!
|
||||
|
||||
|
||||
181
README.WIN32
Normal file
181
README.WIN32
Normal file
@@ -0,0 +1,181 @@
|
||||
|
||||
Compiling EPICS and Building IOC Applications on WIN32 (Windows95/NT)
|
||||
---------------------------------------------------------------------
|
||||
|
||||
Original port of EPICS base to WIN32 (Windows95/NT)
|
||||
was done by Kay-Uwe Kasemir 11/96
|
||||
|
||||
please mail questions, comments, corrections, additional examples, etc
|
||||
to johill@lanl.gov
|
||||
|
||||
0) what you will get
|
||||
--------------------
|
||||
|
||||
Right now this port of EPICS to WIN32 should allow you to
|
||||
|
||||
* compile almost all of EPICS base using {Tornado, MS Visual C, perl,
|
||||
GNU make} (only {MS Visual C, perl, GNU make} if you prefer
|
||||
to compile only the host portions of EPICS base).
|
||||
* load EPICS on an IOC (486, pentium, 68k, ...),
|
||||
load databases
|
||||
(no drivers/devices for real I/O available, yet.
|
||||
Some Greenspring IP support [Relay, Dig, ADC, DAC] is in progress)
|
||||
* build and use ca.dll on NT or Win95 to access all IOCs,
|
||||
as well as the Com-library, gdd-library, cas-library,
|
||||
and all other EPICS base libraries as DLLs.
|
||||
* build gdd, cas and a demo of the new portable CA server on WIN32.
|
||||
|
||||
1) see what you have
|
||||
--------------------
|
||||
|
||||
To compile EPICS on WIN32, we need
|
||||
|
||||
WindRiver System's Tornado (used: 1.0) (not required if host only build)
|
||||
Microsoft's Visual C/C++ (used: 4.0) (borland C++ rumored to work also)
|
||||
|
||||
and some tools:
|
||||
|
||||
gnu make - www.gnu.org (we used 3.76)
|
||||
perl - www.perl.org (we used 5.003)
|
||||
|
||||
The perl interpreter and gnu make are available 'on the net'
|
||||
as sources which compile with MS Visual C++.
|
||||
If you cannot/don't want to find them, contact me, please!
|
||||
|
||||
2) set environment variables
|
||||
|
||||
(Setting env. vars. is different: for NT, use Settings/System,
|
||||
for Win95 use autoexec.bat)
|
||||
|
||||
When setting paths in the EPICS CONFIG files for WIN32:
|
||||
|
||||
** Note that that each "\" in any path variables
|
||||
must be replaced with a "\\" (this is because GNU make treats
|
||||
all "\" characters as line continuation)
|
||||
|
||||
** Note that that each space in any file name or
|
||||
path name variable must be replaced with
|
||||
a "\ " (this is because GNU make treats all " " separated
|
||||
input as independent tokens in the input stream.
|
||||
|
||||
** WIN32 will generally allow "/" and "\" interchangeably in file paths,
|
||||
but the DOS shell appears to only accept "\".
|
||||
|
||||
Your path should include:
|
||||
- The EPICS-binaries that we are about to build in <EPICS>base/bin/WIN32
|
||||
- The System (for me it's in NT40...)
|
||||
- The MS Visual C compiler binaries
|
||||
|
||||
Check with e.g.:
|
||||
|
||||
>echo %Path%
|
||||
C:\WINNT35.0\system32;
|
||||
C:\WINNT35.0;
|
||||
c:\msdev\bin;
|
||||
c:\perl5\bin;
|
||||
c:\make-3.75\WinRel;
|
||||
c:\epics\base\bin\win32 (really where INSTALL_LOCATION specifies)
|
||||
|
||||
On NT, "Path" is defined by the operating system, on Win95, it's "PATH" instead.
|
||||
|
||||
MS Visual C and Tornado should be installed properly with
|
||||
these env. variables set:
|
||||
|
||||
WIND_BASE=c:\Tornado (required for cross development only)
|
||||
WIND_HOST_TYPE=x86-win32 (required for cross development only)
|
||||
|
||||
This way the EPICS makesystem can locate Tornado
|
||||
without any changes to the files in base/config.
|
||||
So for pc486 the settings in CONFIG_SITE where
|
||||
you specify the location of VxWorks are ignored,
|
||||
this information is taken from WIND_BASE and _HOST_TYPE!!
|
||||
|
||||
MSDevDir=C:\MSDEV
|
||||
include=c:\msdev\include;c:\msdev\mfc\include
|
||||
lib=c:\msdev\lib;c:\msdev\mfc\lib
|
||||
|
||||
Select host arch to build:
|
||||
HOST_ARCH=WIN32 (used by the make system)
|
||||
|
||||
Set the "TMP" environment variable if you need to specify where
|
||||
temporary files are created.
|
||||
|
||||
Directory Used For Temporary Files Conditions
|
||||
---------------------------------- ----------
|
||||
Directory specified by TMP TMP environment variable is set,
|
||||
and directory specified by TMP exists.
|
||||
dir argument to _tempnam TMP environment variable is not set, or
|
||||
directory specified by TMP does not exist.
|
||||
P_tmpdir in STDIO.H dir argument is NULL, or dir is name of
|
||||
nonexistent directory.
|
||||
Current working directory P_tmpdir does not exist.
|
||||
|
||||
On my system I see in stdio.h that _P_tmpdir is "/". Here is a common
|
||||
setting for "TMP" (the C:\TEMP directory must exist).
|
||||
|
||||
TMP=C:\TEMP
|
||||
|
||||
3) building EPICS
|
||||
-----------------
|
||||
|
||||
Prepare apx. 2 ltr. Tee and type:
|
||||
|
||||
cd <epics>/base
|
||||
make (use gnu make)
|
||||
|
||||
Watch for errors and send them to me.
|
||||
|
||||
Known problems:
|
||||
* gnumake seems to be faster than WIN32 sometimes
|
||||
which results in warnings/errors like
|
||||
"file has modification date in the future"
|
||||
for newly created things.
|
||||
Very seldom this is fatal, so you have to
|
||||
stop gnumake and restart it.
|
||||
* This is strange because Windows95/NT doesn't care
|
||||
about upper/lower case:
|
||||
WIN32 is WIN32, not win32. Gnumake fails
|
||||
if e.g. base/src/include/os/WIN32 is ...win32.
|
||||
|
||||
4) Creating EPICS IOC applications under WIN32
|
||||
|
||||
o create application development folder
|
||||
|
||||
o start a DOS window and change your working directory to the folder
|
||||
created above (with the DOS "cd" command)
|
||||
|
||||
o to create an example application type:
|
||||
"perl c:\epics\bin\win32\makeBaseApp.pl -b c:\\epics -e
|
||||
|
||||
** Note that that each "\" above in any path arguments to makeBaseApp.pl
|
||||
must be replaced with a "\\" (this is because GNU make treats
|
||||
all "\" characters as line continuation)
|
||||
|
||||
** Note that that each space in any file name or
|
||||
path name argument to makeBaseApp.pl must be replaced with
|
||||
a "\ " (this is because GNU make treats all " " separated
|
||||
input as independent tokens in the input stream.
|
||||
|
||||
** Note that c:\epics above must be replaced by the path
|
||||
to your epics source installation (or where INSTALL_LOCATION
|
||||
specifies)
|
||||
|
||||
o General information on EPICS IOC application development can be found in
|
||||
the "EPICS IOC Application Developers Guide". To see all of the options
|
||||
supported by makeBaseApp.pl type "perl c:\epics\bin\win32\makeBaseApp.pl"
|
||||
|
||||
5) EPICS GNU make makefiles can be executed from within a Visual C++ "makefile"
|
||||
style project. This allows EPICS programs to be developed directly inside of
|
||||
the visual C++ environment. To do this create a "makefile" project and place your
|
||||
gnu make command in the build configuration (accessed from the project/settings menu).
|
||||
You will also need to add GNU make and <EPICS>/bin/win32 into the Visual C++
|
||||
executable search path (from the tools/options menu). I have not so far determined
|
||||
how to configure visual C++ so that it is possible to double click on the compiler
|
||||
error messages generated within an EPICS "makefile" style project and have visual
|
||||
C++ immediately position the cursor on the corresponding line in the source (as is
|
||||
normally the case in the visual C++ environment). If you solve this problem please
|
||||
forward the details to johill@lanl.gov.
|
||||
|
||||
Good luck !
|
||||
|
||||
-Kay
|
||||
46
README.cxxTemplates
Normal file
46
README.cxxTemplates
Normal file
@@ -0,0 +1,46 @@
|
||||
|
||||
The C++ templates supplied with EPICS base are in
|
||||
"$(EPICS)/base/src/cxxTemplates".
|
||||
|
||||
In Stroustrups's "The C++ Programming Language" Appendix A: r.14.9
|
||||
(ANSI/ISO resolutions) a mechanism is described for the explicit
|
||||
instantiation of template member functions (that are not inline).
|
||||
At this time some compilers do not support this mechanism (and use
|
||||
a template database snd/or smart linker instead). Other compilers
|
||||
(such as g++) provide only limited support for other forms of
|
||||
instantiation (g++ does not yet provide a template database or
|
||||
a smart linker for templates).
|
||||
|
||||
Since there is no defacto standard mechanism for instatiating
|
||||
templates at this time we are defining the preprocessor flag
|
||||
EXPL_TEMPL in the build system when the compiler supports
|
||||
explicit instantiation and the compiler does not support
|
||||
automatic instantiation via a smart linker and/or template
|
||||
database (currently this is only g++).
|
||||
|
||||
EPICS codes that use templates may need to include a code block
|
||||
as follow that instantiates the template only once into each
|
||||
program.
|
||||
|
||||
#include <classXYZ.h>
|
||||
#include <templXXX.h>
|
||||
|
||||
//
|
||||
// if the compiler supports explicit instantiation of
|
||||
// template member functions
|
||||
//
|
||||
#if defined(EXPL_TEMPL)
|
||||
//
|
||||
// From Stroustrups's "The C++ Programming Language"
|
||||
// Appendix A: r.14.9
|
||||
//
|
||||
// This explicitly instantiates the template class's member
|
||||
// functions into "templInst.o"
|
||||
//
|
||||
template class templXXX <classXYZ>;
|
||||
#endif
|
||||
|
||||
Jeff Hill 3-6-97
|
||||
johill@lanl.gov
|
||||
|
||||
|
||||
87
README.cygwin32
Normal file
87
README.cygwin32
Normal file
@@ -0,0 +1,87 @@
|
||||
Compiling EPICS on cygwin32 (Windows95/NT)
|
||||
------------------------------------------
|
||||
|
||||
Right now this port of EPICS to cygwin32 it is possible to
|
||||
compile the EPICS base for the cygwin32 Host using Cygnus' beta19
|
||||
release of the GNU-win32 tools.
|
||||
|
||||
To build EPICS on Win95 or NT using cygwin32, we need
|
||||
|
||||
EPICS base distribution, R3.12.0.beta12 or later, available
|
||||
from http://aps.anl.gov/...
|
||||
Cygnus's latest gnu-win32 distribution, available from
|
||||
http://www.cygnus.com/misc/gnu-win32/ (release b19 or later)
|
||||
Perl,version 5.003 or later, available from
|
||||
http://www.perl.org/CPAN/ports/win32/
|
||||
|
||||
Optional items
|
||||
CVS, version 1.9 or later, available from
|
||||
http:/download.cyclic.com
|
||||
windows-nt - cvs-1.9.10.tar.gz
|
||||
patch.exe
|
||||
win32gnu.dll
|
||||
vim ( Vi IMproved), version 4.5 or later, available from
|
||||
http://www.cygnus.com/misc/gnu-win32/
|
||||
|
||||
|
||||
BUILD INSTRUCTIONS
|
||||
------------------
|
||||
|
||||
|
||||
1) Install the gnu-win32 binary release
|
||||
---------------------------------------
|
||||
Download the whole release, cdk.exe, to get the developemnt tools
|
||||
|
||||
First move out of the way any older versions of gnuwin32
|
||||
|
||||
Run cdk.exe and follow the install instructions.
|
||||
|
||||
Don't forget to create a \tmp dir and setup the \bin dir.
|
||||
(Create a \temp dir if you install cvs.)
|
||||
mkdir \tmp
|
||||
mkdir \temp
|
||||
mkdir \bin
|
||||
cd \bin
|
||||
copy C:\cygnus\b19\H-i386-cygwin32\bin\sh.exe sh.exe
|
||||
|
||||
Install the b19.1 bug fix update to the Cygwin32 library.
|
||||
|
||||
(Optional: Install the GNU-WIN32 compiler replacement from
|
||||
the ECGS project)
|
||||
|
||||
2) Install the perl distribution
|
||||
--------------------------------
|
||||
pw32i316.exe (Execute and follow instructions)
|
||||
|
||||
3) Install the epics base distribution
|
||||
--------------------------------------
|
||||
mkdir <epicsBaseReleaseDir>
|
||||
chdir <epicsBaseReleaseDir>
|
||||
cp <dirname>\<basereleasename>.gz .
|
||||
gunzip -d <basereleasename>.gz
|
||||
chmod +w -R *
|
||||
|
||||
4) Set environment variables and path using cygwin32.bat
|
||||
-------------------------------------------------------------
|
||||
<edit cygwin32.bat changing paths if necessary>
|
||||
cd <epicsBaseReleaseDir>\startup
|
||||
cygwin32.bat
|
||||
|
||||
5) Set site specific parms in epics base\config files
|
||||
-----------------------------------------------------
|
||||
cd <epicsBaseReleaseDir>\base\config
|
||||
<edit CONFIG_SITE* files>
|
||||
|
||||
6) Build epics base
|
||||
-------------------
|
||||
cd <epicsBaseReleaseDir>\base
|
||||
make
|
||||
|
||||
7) Create an EPICS application area (note forward slashes on perl cmd)
|
||||
---------------------------------------------------------------------
|
||||
mkdir <epicsappdir>
|
||||
cd <epicsappdir>
|
||||
perl <epicsBaseReleaseDir>/bin/cygwin32/makeBaseApp.pl -l
|
||||
perl <epicsBaseReleaseDir>/bin/cygwin32/makeBaseApp.pl -t example example
|
||||
|
||||
|
||||
@@ -1,12 +1,28 @@
|
||||
#
|
||||
# supplement README for HP700 and Alpha OSF/1 builds
|
||||
# supplement README for HP700
|
||||
#
|
||||
# Johnny Tang 5-29-97
|
||||
#
|
||||
# M. Anderson and J. Tang
|
||||
|
||||
1. VxWorks 5.2 for HP-UX
|
||||
|
||||
- Directory permissions may not be correct across multiple machines, so a
|
||||
- Make sure that you have set VX_DIR and VX_GNU to your
|
||||
VxWorks root directory.
|
||||
|
||||
% chmod -R ugo+rw base extensions
|
||||
- Under $(VX_DIR), create a soft link:
|
||||
hp700.68k -> hp9700.68k
|
||||
|
||||
might be necessary.
|
||||
2. Modify base/config/CONFIG_SITE file
|
||||
|
||||
- ANSI=HPACC
|
||||
- STANDARD=HPCC
|
||||
- CPLUSPLUS=G++
|
||||
|
||||
3. HP native c++ compiler has problem to handle the head files
|
||||
in which a inline function is used in conjuction with template
|
||||
|
||||
base/src/cas, the portable CA server can't be compiled successfully
|
||||
because of the above limitation.
|
||||
|
||||
This problem can be resolved by spliting the function declarations
|
||||
from the inline code in the files in base/src/cxxTemplates.
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
----------------------------------------------------------------------------
|
||||
EPICS R3.12.2 Notes for Solaris
|
||||
EPICS Notes for Solaris
|
||||
- By Andrew Johnson
|
||||
|
||||
updated 12-16-96 by Jeff Hill
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
Notes:
|
||||
@@ -8,8 +11,10 @@ Notes:
|
||||
1. In order to build EPICS under Solaris 2, you must ensure that the
|
||||
solaris directory /usr/ccs/bin is in your search path.
|
||||
|
||||
2. It is not possible to compile EPICS under Solaris 2 using only the
|
||||
GNU gcc compiler -- you must have the Sun SPARCworks ANSI C compiler.
|
||||
2. It is now possible to compile EPICS under Solaris 2 using either the
|
||||
GNU gcc compiler or the Sun SPARCworks ANSI C compiler. The g++/
|
||||
Sun SPARCworks ANSI C compiler combination has compiled and linked
|
||||
without errors but has not been extensively tested.
|
||||
|
||||
3. EPICS under Solaris 2 no longer uses the UCB compatability libraries.
|
||||
In order to ensure that the /usr/ucblib files are not inherited, you
|
||||
|
||||
1399
RELEASE_NOTES.html
Normal file
1399
RELEASE_NOTES.html
Normal file
File diff suppressed because it is too large
Load Diff
@@ -2,29 +2,60 @@
|
||||
# $Id$
|
||||
#
|
||||
# The developer may edit this file.
|
||||
# assume T_A is the host arch if not specified
|
||||
|
||||
# Site-specific build options
|
||||
#
|
||||
include $(EPICS_BASE)/config/CONFIG_SITE
|
||||
|
||||
# EPICS base definitions
|
||||
#
|
||||
include $(EPICS_BASE)/config/CONFIG_COMMON
|
||||
|
||||
# assume T_A is the host arch if not specified
|
||||
ifndef T_A
|
||||
T_A = $(HOST_ARCH)
|
||||
endif
|
||||
#
|
||||
# EPICS version definitions
|
||||
#
|
||||
include $(EPICS_BASE)/config/CONFIG_BASE_VERSION
|
||||
|
||||
# Site-specific build options
|
||||
#
|
||||
include $(EPICS_BASE)/config/CONFIG_SITE
|
||||
|
||||
# Host architecture specific definitions
|
||||
#
|
||||
include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.$(HOST_ARCH)
|
||||
#
|
||||
-include $(EPICS_BASE)/config/CONFIG_SITE_HOST_ARCH.$(HOST_ARCH)
|
||||
|
||||
ifdef T_A
|
||||
|
||||
# Build type specific definitions
|
||||
#
|
||||
-include $(EPICS_BASE)/config/CONFIG.$(BUILD_TYPE)
|
||||
#
|
||||
-include $(EPICS_BASE)/config/CONFIG_SITE.$(BUILD_TYPE)
|
||||
|
||||
# Architecture specific definitions
|
||||
#
|
||||
include $(EPICS_BASE)/config/CONFIG.$(T_A)
|
||||
include $(EPICS_BASE)/config/CONFIG.$(BUILD_TYPE).$(T_A)
|
||||
#
|
||||
-include $(EPICS_BASE)/config/CONFIG_SITE.$(T_A)
|
||||
ifneq ($(HOST_ARCH),$(T_A))
|
||||
-include $(EPICS_BASE)/config/CONFIG_SITE.$(BUILD_TYPE).$(HOST_ARCH)
|
||||
endif
|
||||
#
|
||||
-include $(EPICS_BASE)/config/CONFIG_SITE.$(BUILD_TYPE).$(T_A)
|
||||
|
||||
endif
|
||||
|
||||
# User specific definitions
|
||||
#
|
||||
-include $(HOME)/.EPICS_CONFIG
|
||||
-include $(HOME)/EPICS_CONFIG
|
||||
-include $(HOME)/EPICS_CONFIG.$(HOST_ARCH)
|
||||
-include $(HOME)/EPICS_CONFIG_HOST_ARCH.$(HOST_ARCH)
|
||||
ifdef T_A
|
||||
-include $(HOME)/EPICS_CONFIG.$(BUILD_TYPE)
|
||||
ifneq ($(HOST_ARCH),$(T_A))
|
||||
-include $(HOME)/EPICS_CONFIG.$(BUILD_TYPE).$(HOST_ARCH)
|
||||
endif
|
||||
-include $(HOME)/EPICS_CONFIG.$(BUILD_TYPE).$(T_A)
|
||||
endif
|
||||
|
||||
# All EPICS options other than BUILD_TYPE
|
||||
# may be overridden here.
|
||||
@@ -34,7 +65,7 @@ include $(EPICS_BASE)/config/CONFIG.$(T_A)
|
||||
# Build client objects statically ? must be either YES or NO
|
||||
#STATIC_BUILD=NO
|
||||
# Unix Optimization, must be either YES or NO
|
||||
#UNIX_OPT=YES
|
||||
#HOST_OPT=YES
|
||||
# VxWorks Optimization, must be either YES or NO
|
||||
#VX_OPT=YES
|
||||
# Generate Verbose Compiler Warnings for Unix, must be either YES or NO
|
||||
@@ -42,4 +73,10 @@ include $(EPICS_BASE)/config/CONFIG.$(T_A)
|
||||
# Generate Verbose Compiler Warnings for VxWorks, must be either YES or NO
|
||||
#VX_WARN=YES
|
||||
#etc.
|
||||
#
|
||||
|
||||
#CROSS_COMPILER_TARGET_ARCHS=mv167
|
||||
#ANSI=GCC
|
||||
#CPLUSPLUS=G++
|
||||
#CMPLR=STRICT
|
||||
#CXXCMPLR=STRICT
|
||||
|
||||
|
||||
77
config/CONFIG.Host.Linux
Normal file
77
config/CONFIG.Host.Linux
Normal file
@@ -0,0 +1,77 @@
|
||||
# CONFIG.Host.Linux
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.Host.Linux
|
||||
|
||||
ARCH_CLASS = Linux
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
|
||||
|
||||
AR = ar -rc
|
||||
ARCMD = $(AR) $@
|
||||
RANLIB = ranlib -t
|
||||
|
||||
#OP_SYS_FLAGS = -D_BSD_SOURCE -D_POSIX_SOURCE
|
||||
|
||||
# Configure OS vendor C compiler
|
||||
ACC = gcc
|
||||
ACC_ANSI = $(ACC)
|
||||
#ACC_ANSI = $(ACC) -ansi -D_SVID_SOURCE
|
||||
#ACC_STRICT = $(ACC) -Xc
|
||||
ACC_STRICT = $(ACC) -pedantic
|
||||
#ACC_STRICT = $(ACC) -ansi -pedantic -D_SVID_SOURCE
|
||||
ACC_TRAD = $(ACC)
|
||||
ACC_WARN_YES =
|
||||
ACC_WARN_NO = -w
|
||||
ACC_OPT_YES = -O
|
||||
ACC_OPT_NO = -g
|
||||
ACC_SFLAGS_YES = -Bstatic
|
||||
ACC_SFLAGS_NO=
|
||||
ACC_SLIBS_YES =
|
||||
ACC_SLIBS_NO=
|
||||
ACC_SHRLIB_CFLAGS_YES = -fPIC
|
||||
#ACC_SHRLIB_CFLAGS_YES = -fPIC -D_BSD_SOURCE
|
||||
ACC_SHRLIB_LDFLAGS_YES = -shared -Wl,-soname,$@
|
||||
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
CCC = g++
|
||||
CCC_NORMAL = $(CCC)
|
||||
CCC_STRICT = $(CCC)
|
||||
CCC_TEMPL_INST_FLAG = -DEXPL_TEMPL
|
||||
CCC_WARN_YES =
|
||||
CCC_WARN_NO =
|
||||
CCC_OPT_YES = -O
|
||||
CCC_OPT_NO = -g
|
||||
CCC_SFLAGS_YES = -Bstatic
|
||||
CCC_SFLAGS_NO=
|
||||
CCC_SLIBS_YES =
|
||||
CCC_SLIBS_NO=
|
||||
CCC_DEPENDS_FLAG = -MM
|
||||
|
||||
# added smh 6/5/98 : when building fdmgr - seems to use this not ACC
|
||||
# in effect this overides orig def in CONFIG_COMMON :
|
||||
# which is GCC_STRICT = $(GCC) -ansi -pedantic
|
||||
GCC_STRICT = $(GCC)
|
||||
G++_STRICT = $(G++) -Wtraditional
|
||||
|
||||
|
||||
ARCH_DEP_CFLAGS = -D_X86_ -Dlinux -D_USE_BSD
|
||||
ARCH_DEP_CFLAGS = -D_X86_ -Dlinux
|
||||
ARCH_DEP_LDFLAGS =
|
||||
|
||||
#glibc FAQ
|
||||
# "_GNU_SOURCE: glibc does not make the GNU extensions available
|
||||
# automatically. If a program depends on the GNU extensions or some other
|
||||
# non-standard functionality, it is necessary to compile it with the C
|
||||
# compiler option -D_GNU_SOURCE, or better to put #define _GNU_SOURCE at
|
||||
# the beginning of your source files, before any C library header files
|
||||
# are included. This difference normally manifests itself in the form
|
||||
# of missing prototypes and/or data type definitions. Thus, if you get
|
||||
# such errors, the first thing you should do is try defining _GNU_SOURCE
|
||||
# and see if that makes the problem go away."
|
||||
#ARCH_DEP_CFLAGS += -D_GNU_SOURCE
|
||||
|
||||
|
||||
|
||||
58
config/CONFIG.Host.LynxOS
Normal file
58
config/CONFIG.Host.LynxOS
Normal file
@@ -0,0 +1,58 @@
|
||||
# CONFIG.Host.LynxOS
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.Host.LynxOS
|
||||
|
||||
ARCH_CLASS = LynxOS
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
|
||||
|
||||
AR = ar -rc
|
||||
ARCMD = $(AR) $@
|
||||
RANLIB = ranlib -t
|
||||
|
||||
|
||||
|
||||
# Configure OS vendor C compiler
|
||||
ACC_ANSI = $(ACC) -ansi -mposix -D_X86_
|
||||
ACC_STRICT = $(ACC) -ansi -mposix -D_X86_ -pedantic
|
||||
ACC_TRAD = $(ACC)
|
||||
ACC_WARN_YES = -Wall
|
||||
ACC_WARN_NO = -w
|
||||
ACC_OPT_YES = -O
|
||||
ACC_OPT_NO = -g
|
||||
ACC_SFLAGS_YES = -Bstatic
|
||||
ACC_SFLAGS_NO=
|
||||
ACC_SLIBS_YES =
|
||||
ACC_SLIBS_NO=
|
||||
ACC_SHRLIB_CFLAGS_YES =
|
||||
ACC_SHRLIB_LDFLAGS_YES =
|
||||
|
||||
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
CCC_NORMAL = $(CCC)
|
||||
CCC_STRICT = $(CCC)
|
||||
CCC_TEMPL_INST_FLAG = -pedantic -mposix -D_X86_ -DEXPL_TEMP
|
||||
CCC_WARN_YES = -Wall
|
||||
CCC_WARN_NO = -w
|
||||
CCC_OPT_YES = -O
|
||||
CCC_OPT_NO = -g
|
||||
CCC_SFLAGS_YES = -Bstatic
|
||||
CCC_SFLAGS_NO=
|
||||
CCC_SLIBS_YES =
|
||||
CCC_SLIBS_NO=
|
||||
CCC_DEPENDS_FLAG = -pedantic -mposix -D_X86_
|
||||
|
||||
|
||||
# added smh 6/5/98 : when building fdmgr - seems to use this not ACC
|
||||
# in effect this overides orig def in CONFIG_COMMON :
|
||||
# which is GCC_STRICT = $(GCC) -ansi -pedantic
|
||||
GCC_STRICT = $(GCC)
|
||||
G++_STRICT = $(G++) -Wtraditional -mposix -D_X86_ -DEXPL_TEMP
|
||||
|
||||
|
||||
|
||||
ARCH_DEP_CFLAGS = -DLynxOS -mposix -D_X86_
|
||||
ARCH_DEP_LDFLAGS = -lc -lbsd -lnsl -lm -lposix4d9 -llynx
|
||||
80
config/CONFIG.Host.UnixCommon
Normal file
80
config/CONFIG.Host.UnixCommon
Normal file
@@ -0,0 +1,80 @@
|
||||
# CONFIG.Host.UnixCommon
|
||||
#
|
||||
# Contains definitions common to all Unix archs
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.Host.UnixCommon
|
||||
|
||||
|
||||
#-------------------------------------------------------
|
||||
# adjust names of libraries to build
|
||||
#
|
||||
# <lib> -> lib<lib>.a
|
||||
LIBNAME = $(LIBRARY:%=lib%.a)
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Shared library definitions
|
||||
|
||||
# CONFIG.Host.<arch> files may override
|
||||
SHRLIB_SUFFIX = .so
|
||||
|
||||
SHRLIBNAME = lib$(LIBRARY)$(SHRLIB_SUFFIX)$(SHRLIB_VERSION:%=.%)
|
||||
SHRLIB_LDFLAGS = $($(ANSI)_SHRLIB_LDFLAGS_$(strip $(SHARED_LIBRARIES)))
|
||||
|
||||
DLL_LDLIBS = $(PRODNAME_LIBS:%=-l%) $(PROD_LIBS:%=-l%) $(USR_LIBS:%=-l%)
|
||||
|
||||
INSTALL_SHRLIB = $(INSTALL_LIB)
|
||||
|
||||
LINK.shrlib= $(SHRLIB_LINKER) -o $@ $(CFLAGS) $(CPPFLAGS) $(SHRLIB_LDFLAGS) $(LDFLAGS)
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Unix command definitions
|
||||
|
||||
CPP = cpp
|
||||
RANLIB = ranlib
|
||||
|
||||
# GNU compilers
|
||||
GCC = gcc
|
||||
G++ = g++
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Unix suffix definitions
|
||||
EXE =
|
||||
OBJ = .o
|
||||
|
||||
#--------------------------------------------------
|
||||
# Dependancy definitions
|
||||
COND_PROD_DEPLIBS = $(foreach prod,$(PROD), $(foreach lib, $($(basename $(prod))_LIBS),$(firstword $($(lib)_DIR) $(EPICS_BASE_LIB))/lib$(lib).a))
|
||||
PRODNAME_DEPLIBS = $(foreach lib,$(PRODNAME_LIBS),$(firstword $($(lib)_DIR) $(EPICS_BASE_LIB))/lib$(lib).a)
|
||||
PROD_DEPLIBS = $(foreach lib,$(PROD_LIBS),$(firstword $($(lib)_DIR) $(EPICS_BASE_LIB))/lib$(lib).a)
|
||||
|
||||
USR_DEPLIBS = $(foreach lib,$(USR_LIBS),$(firstword $($(lib)_DIR) $(EPICS_BASE_LIB))/lib$(lib).a)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Determine ld flags
|
||||
USR_DIRS = $(dir $(PRODNAME_DEPLIBS)) $(dir $(PROD_DEPLIBS))\
|
||||
$(dir $(USR_DEPLIBS))
|
||||
USR_LDFLAGS += $(sort $(USR_DIRS:%=-L%))
|
||||
|
||||
# Determine ld libs
|
||||
USR_LDLIBS = $(PRODNAME_LIBS:%=-l%) $(PROD_LIBS:%=-l%) $(USR_LIBS:%=-l%)\
|
||||
$(SYS_PROD_LIBS:%=-l%)
|
||||
|
||||
#USR_LDLIBS = $(PRODNAME_DEPLIBS:%=-L%) $(PROD_DEPLIBS:%=-L%) $(USR_DEPLIBS)\
|
||||
# $(USR_XLDLIBS)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Operating system definitions
|
||||
OP_SYS_INCLUDES =
|
||||
OP_SYS_CFLAGS = -DUNIX
|
||||
OP_SYS_LDFLAGS =
|
||||
OP_SYS_LDLIBS = -lm
|
||||
|
||||
#--------------------------------------------------
|
||||
# Link definitions
|
||||
LINK.c = $(CC) -o $@ $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
LINK.cc = $(CXX) -o $@ $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Allow site overrides
|
||||
-include $(EPICS_BASE)/config/CONFIG_SITE.Host.UnixCommon
|
||||
258
config/CONFIG.Host.WIN32
Normal file
258
config/CONFIG.Host.WIN32
Normal file
@@ -0,0 +1,258 @@
|
||||
# CONFIG.Host.WIN32
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.WIN32
|
||||
|
||||
# Use std path variables from ms
|
||||
HOME = $(HOMEDRIVE)$(HOMEPATH)
|
||||
|
||||
#
|
||||
# You currently get Visual C++ even if you ask for GNU.
|
||||
#
|
||||
# !! borlund support needed here !!
|
||||
#
|
||||
ANSI = ACC
|
||||
CPLUSPLUS = CCC
|
||||
|
||||
#
|
||||
# "\ " forces gnu make to keep this as one token
|
||||
#
|
||||
MSVISC = c:\\Program\ Files\\DevStudio\\Vc
|
||||
WINLINK = link
|
||||
|
||||
RCCMD = rc -l 0x409 -fo $@ $<
|
||||
|
||||
ARCMD = lib /nologo /verbose /out:$@
|
||||
|
||||
#
|
||||
# Configure OS vendor C compiler
|
||||
ACC = cl
|
||||
|
||||
#
|
||||
# __STDC__=0 is a real great idea of Jeff that gives us both:
|
||||
# 1) define STDC for EPICS 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
|
||||
#
|
||||
# Use of /Za would dissable DLL import/export keywords which
|
||||
# EPICS include/excludes using architecture neutral macros
|
||||
ACC_ANSI = $(ACC) /nologo /D__STDC__=0
|
||||
ACC_STRICT = $(ACC) /nologo /D__STDC__=0
|
||||
ACC_TRAD = $(ACC) /nologo
|
||||
|
||||
#
|
||||
# /W<N> use warning level N
|
||||
# (maximum (lint type) warnings at level 4)
|
||||
ACC_WARN_YES = /W3
|
||||
ACC_WARN_NO = /W1
|
||||
|
||||
#
|
||||
# /Ox maximum optimizations
|
||||
# /MD use MSVCRT (run-time as DLL, multi-thread support)
|
||||
ACC_OPT_YES = /Ox
|
||||
|
||||
#
|
||||
# /Zi include debugging info in object files
|
||||
# /Fr create source browser file
|
||||
ACC_OPT_NO = /Zi /Fr
|
||||
|
||||
#
|
||||
# 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)
|
||||
VISC_EPICS_DLL_NO = -DEPICS_DLL_NO
|
||||
VISC_EPICS_DLL_YES =
|
||||
VISC_EPICS_DLL = $(VISC_EPICS_DLL_$(SHARED_LIBRARIES))
|
||||
VISC_SFLAGS_DEBUG_NO = d
|
||||
VISC_SFLAGS_DEBUG_YES =
|
||||
VISC_SFLAGS_DEBUG = $(VISC_SFLAGS_DEBUG_$(HOST_OPT))
|
||||
ACC_SFLAGS_YES= /MT$(VISC_SFLAGS_DEBUG) $(VISC_EPICS_DLL)
|
||||
ACC_SFLAGS_NO= /MD$(VISC_SFLAGS_DEBUG) $(VISC_EPICS_DLL)
|
||||
|
||||
#
|
||||
# no special libs for static link
|
||||
#
|
||||
ACC_SLIBS_YES=
|
||||
ACC_SLIBS_NO=
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
#
|
||||
# __STDC__=0 is a real great idea of Jeff that gives us both:
|
||||
# 1) define STDC for EPICS 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
|
||||
#
|
||||
# Use of /Za would dissable DLL import/export keywords which
|
||||
# EPICS include/excludes using architecture neutral macros
|
||||
CCC = cl
|
||||
CCC_NORMAL = $(CCC) /nologo /D__STDC__=0
|
||||
CCC_STRICT = $(CCC) /nologo /D__STDC__=0
|
||||
CCC_TEMPL_INST_FLAG =
|
||||
|
||||
#
|
||||
# /W<N> use warning level N
|
||||
# (maximum lint level warnings at level 4)
|
||||
CCC_WARN_YES = /W3
|
||||
CCC_WARN_NO = /W1
|
||||
|
||||
#
|
||||
# /Ox maximum optimizations
|
||||
CCC_OPT_YES = /Ox
|
||||
|
||||
#
|
||||
# /Zi include debugging info in object files
|
||||
# /Fr create source browser file
|
||||
CCC_OPT_NO = /Zi /Fr
|
||||
|
||||
#
|
||||
# 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)
|
||||
CCC_SFLAGS_YES= /MT$(VISC_SFLAGS_DEBUG) $(VISC_EPICS_DLL)
|
||||
CCC_SFLAGS_NO= /MD$(VISC_SFLAGS_DEBUG) $(VISC_EPICS_DLL)
|
||||
|
||||
#
|
||||
# no special libs for static link
|
||||
#
|
||||
CCC_SLIBS_YES=
|
||||
CCC_SLIBS_NO=
|
||||
|
||||
LINK_OPT_FLAGS_YES = /WARN:3 /incremental:no /opt:ref\
|
||||
/release $(PROD_VERSION:%=/version:%)
|
||||
LINK_OPT_FLAGS_NO = /WARN:3 /debug
|
||||
OPT_LDFLAGS = $(LINK_OPT_FLAGS_$(HOST_OPT))
|
||||
|
||||
ARCH_DEP_CFLAGS=
|
||||
|
||||
# to identify the general architecture class:
|
||||
# should be BSD, SYSV, WIN32, ...
|
||||
# is: WIN32, sun4, hpux, linux, ...
|
||||
#
|
||||
ARCH_CLASS=WIN32
|
||||
|
||||
# ifdef WIN32 looks better that ifeq ($(ARCH_CLASS),WIN32) ??
|
||||
WIN32=1
|
||||
|
||||
EXE=.exe
|
||||
OBJ=.obj
|
||||
RES=.res
|
||||
|
||||
# Problem: MS Visual C++ does not recognize *.cc as C++ source,
|
||||
# we have to compile xx.cc using the flag -Tp xx.cc,
|
||||
# i.e. -Tp has to be immediately before the source file name
|
||||
SOURCE_CXXFLAG = /Tp
|
||||
|
||||
# Operating system flags
|
||||
OP_SYS_CFLAGS =
|
||||
|
||||
#
|
||||
# WIN32 specific include files
|
||||
#
|
||||
OP_SYS_INCLUDES = -I$(EPICS_BASE_INCLUDE)\\os\\WIN32
|
||||
|
||||
#
|
||||
# These are now added to the individual makefiles that use them in order to
|
||||
# speed up the build
|
||||
#
|
||||
#OP_SYS_LDLIBS = user32.lib kernel32.lib advapi32.lib winmm.lib
|
||||
OP_SYS_LDLIBS =
|
||||
|
||||
# Files and flags needed to link DLLs (used in RULES.Host)
|
||||
#
|
||||
# Strange but seems to work without: WIN32_DLLFLAGS should contain
|
||||
# an entry point:
|
||||
# '-entry:_DllMainCRTStartup$(DLLENTRY)'
|
||||
DLLENTRY = @12
|
||||
|
||||
WIN32_DLLFLAGS = /subsystem:windows /dll $(OPT_LDFLAGS)
|
||||
|
||||
#
|
||||
# specify dll .def file only if it exists
|
||||
#
|
||||
DLL_DEF_FLAG = $(addprefix /def:,$(wildcard ../$(LIBRARY).def))
|
||||
|
||||
# HOST_OPT_FLAGS is part of CFLAGS/CXXFLAGS,
|
||||
# which in turn are used in COMPILE.c[c]
|
||||
#
|
||||
# If we compile a .c, .cc into an $(OBJ),
|
||||
# we test if this object is part of the
|
||||
# library objects LIBOBJS.
|
||||
# If so, we define _WINDLL so that
|
||||
# e.g. include/shareLib.h works correctly.
|
||||
#
|
||||
HOST_OPT_FLAGS += $(subst $@, /_WINDLL, $(findstring $@,$(LIBOBJS)))
|
||||
|
||||
#
|
||||
# A WIN32 dll has three parts:
|
||||
# x.dll: the real dll (SHRLIBNAME)
|
||||
# x.lib: what you link to progs that use the dll (LIBNAME)
|
||||
# x.exp: what you need to build the dll (in no variable)
|
||||
#
|
||||
LINK.shrlib = $(WINLINK) /nologo $(WIN32_DLLFLAGS) /implib:$(DLL_LINK_LIBNAME) /out:$(SHRLIBNAME) $(DLL_DEF_FLAG)
|
||||
|
||||
# adjust names of libraries to build
|
||||
#
|
||||
# But: if there are no objects LIBOBJS to include
|
||||
# in this library (may be for e.g. base/src/libCompat
|
||||
# on some archs), don't define (and build) any library!
|
||||
SHRLIBNAME = $(LIBRARY).dll
|
||||
|
||||
#
|
||||
# Under WIN32 we have the unique situation where the DLL link creates the
|
||||
# DLL link library xxx.lib and we need to be very careful to avoid replacing
|
||||
# the xxx.lib created by the dll link with an xxx.lib created by $(AR).
|
||||
# Therefore, the object library is named xxxObj.lib
|
||||
#
|
||||
# SHARED_LIBRARIES is YES if we are building a DLL and NO if we aren't
|
||||
#
|
||||
DLL_LINK_LIBNAME_YES = $(LIBRARY).lib
|
||||
DLL_LINK_LIBNAME = $(DLL_LINK_LIBNAME_$(SHARED_LIBRARIES))
|
||||
LIBNAME = $(LIBRARY)Obj.lib
|
||||
|
||||
# dll install location
|
||||
INSTALL_SHRLIB = $(INSTALL_BIN)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Dependancy definitions
|
||||
OBJECT_LIB_EXT_YES = Obj.lib # object library extension for static build
|
||||
OBJECT_LIB_EXT_NO = .lib # object library extension for dynamic build
|
||||
OBJECT_LIB_EXT = $(OBJECT_LIB_EXT_$(STATIC_BUILD))
|
||||
COND_PROD_DEPLIBS = $(foreach prod,$(PROD), $(foreach lib, $($(basename $(prod))_LIBS),\
|
||||
$(firstword $($(lib)_DIR) $(EPICS_BASE_LIB))/$(lib)$(OBJECT_LIB_EXT)))
|
||||
PRODNAME_DEPLIBS = $(foreach lib,$(PRODNAME_LIBS),$(firstword $($(lib)_DIR) $(EPICS_BASE_LIB))/$(lib)$(OBJECT_LIB_EXT))
|
||||
PROD_DEPLIBS = $(foreach lib,$(PROD_LIBS),$(firstword $($(lib)_DIR) $(EPICS_BASE_LIB))/$(lib)$(OBJECT_LIB_EXT))
|
||||
|
||||
USR_DEPLIBS = $(foreach lib,$(USR_LIBS),$(firstword $($(lib)_DIR) $(EPICS_BASE_LIB))/$(lib)$(OBJECT_LIB_EXT))
|
||||
|
||||
# by default the libraries used when linking the DLL are just
|
||||
# PROD_LIBS ans SYS_PROD_LIBS minus the DLL name
|
||||
DLL_LIBS = $(subst $(LIBRARY),, $(PROD_LIBS))
|
||||
|
||||
#
|
||||
# EPICS libs that we need to link the DLL with
|
||||
# (it isnt necessary to rebuild the dll if these change)
|
||||
DLL_DEPLIBS = $(foreach lib,$(DLL_LIBS),$(firstword $($(lib)_DIR) $(EPICS_BASE_LIB))/$(lib).lib)
|
||||
|
||||
USR_LDLIBS = $(PRODNAME_DEPLIBS) $(PROD_DEPLIBS) $(USR_DEPLIBS) $(SYS_PROD_LIBS:%=%.lib)
|
||||
|
||||
DLL_LDLIBS = $(DLL_DEPLIBS) $(SYS_PROD_LIBS:%=%.lib) $(OP_SYS_LDLIBS)
|
||||
|
||||
LINK.c = $(WINLINK) -nologo $(LDFLAGS) -out:$@
|
||||
LINK.cc = $(WINLINK) -nologo $(LDFLAGS) -out:$@
|
||||
|
||||
#--------------------------------------------------
|
||||
# Determine ld flags
|
||||
#USR_DIRS = $(dir $(PRODNAME_DEPLIBS)) $(dir $(PROD_DEPLIBS))\
|
||||
# $(dir $(USR_DEPLIBS))
|
||||
#USR_LDFLAGS += $(sort $(USR_DIRS:%=-L%))
|
||||
|
||||
46
config/CONFIG.Host.alpha
Normal file
46
config/CONFIG.Host.alpha
Normal file
@@ -0,0 +1,46 @@
|
||||
# CONFIG.Host.alpha
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.Host.alpha
|
||||
|
||||
ARCH_CLASS = alpha
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
|
||||
|
||||
AR = ar
|
||||
|
||||
# Configure OS vendor C compiler
|
||||
ACC = cc
|
||||
ACC_ANSI = $(ACC) -std
|
||||
ACC_STRICT = $(ACC) -std1
|
||||
ACC_TRAD = $(ACC) -std0
|
||||
ACC_WARN_YES =
|
||||
ACC_WARN_NO = -w
|
||||
ACC_OPT_YES = -O
|
||||
ACC_OPT_NO = -g
|
||||
ACC_SFLAGS_YES= -non_shared
|
||||
ACC_SFLAGS_NO= -call_shared
|
||||
ACC_SLIBS_YES =
|
||||
ACC_SLIBS_NO=
|
||||
ACC_SHRLIB_CFLAGS_YES =
|
||||
ACC_SHRLIB_LDFLAGS_YES = -shared
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
CCC = cxx
|
||||
CCC_NORMAL = $(CCC)
|
||||
CCC_STRICT = $(CCC)
|
||||
CCC_TEMPL_INST_FLAG = -DEXPL_TEMPL
|
||||
CCC_WARN_YES =
|
||||
CCC_WARN_NO =
|
||||
CCC_OPT_YES = -O
|
||||
CCC_OPT_NO = -g
|
||||
CCC_SFLAGS_YES=
|
||||
CCC_SFLAGS_NO=
|
||||
CCC_SLIBS_YES =
|
||||
CCC_SLIBS_NO=
|
||||
CCC_DEPENDS_FLAG =
|
||||
|
||||
ARCH_DEP_CFLAGS = -D_OSF_SOURCE
|
||||
ARCH_DEP_LDLIBS =
|
||||
|
||||
28
config/CONFIG.Host.cygwin32
Normal file
28
config/CONFIG.Host.cygwin32
Normal file
@@ -0,0 +1,28 @@
|
||||
# CONFIG.Host.cygwin32
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.Host.cygwin32
|
||||
|
||||
ARCH_CLASS = cygwin32
|
||||
|
||||
# cygwin32 is a unix-like arch
|
||||
# include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
|
||||
|
||||
EXE=.exe
|
||||
|
||||
#==========================
|
||||
# These are overrides of ANSI and CPLUSPLUS values in CONFIG_SITE
|
||||
# since OS vendor compilers ACC and CCC are not defined here for cygwin32
|
||||
ANSI=GCC
|
||||
CPLUSPLUS=G++
|
||||
# Shared libraries not implemented yet
|
||||
SHARED_LIBRARIES=NO
|
||||
#==========================
|
||||
# Fix for cygwin32 beta17.1 includes
|
||||
#OP_SYS_INCLUDES += /usr/local/include/g++
|
||||
#==========================
|
||||
|
||||
ARCH_DEP_CFLAGS = -DCYGWIN32 -U_WIN32
|
||||
ARCH_DEP_LDLIBS = -lm
|
||||
|
||||
63
config/CONFIG.Host.hp700
Normal file
63
config/CONFIG.Host.hp700
Normal file
@@ -0,0 +1,63 @@
|
||||
# CONFIG.Host.hp700
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.Host.hp700
|
||||
|
||||
ARCH_CLASS = hp700
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
|
||||
|
||||
SHRLIB_SUFFIX = .sl
|
||||
|
||||
AR = ar
|
||||
|
||||
# Configure OS vendor C compiler
|
||||
ACC = cc
|
||||
ACC_ANSI = $(ACC) -Aa
|
||||
ACC_STRICT = $(ACC) -Aa
|
||||
ACC_TRAD = $(ACC)
|
||||
ACC_WARN_YES =
|
||||
ACC_WARN_NO = -w
|
||||
ACC_OPT_YES = -O
|
||||
ACC_OPT_NO = -g
|
||||
ACC_SFLAGS_YES= -Wl,-a,archive
|
||||
ACC_SFLAGS_NO=
|
||||
ACC_SLIBS_YES =
|
||||
ACC_SLIBS_NO=
|
||||
ACC_SHRLIB_CFLAGS_YES = +Z
|
||||
ACC_SHRLIB_LDFLAGS_YES = -b
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
HPCC = cc
|
||||
HPCC_ANSI = $(HPCC) -Aa
|
||||
HPCC_STRICT = $(HPCC) -Aa
|
||||
HPCC_TRAD = $(HPCC) -Ac
|
||||
HPCC_WARN_YES =
|
||||
HPCC_WARN_NO = -w
|
||||
HPCC_OPT_YES = -O
|
||||
HPCC_OPT_NO = -g
|
||||
HPCC_SFLAGS_YES= -Wl,-a,archive
|
||||
HPCC_SFLAGS_NO=
|
||||
HPCC_SLIBS_YES =
|
||||
HPCC_SLIBS_NO=
|
||||
HPCC_SHRLIB_CFLAGS_YES = +Z
|
||||
HPCC_SHRLIB_LDFLAGS_YES = -b
|
||||
|
||||
CCC = CC
|
||||
CCC_NORMAL = $(CCC) +p
|
||||
CCC_STRICT = $(CCC) +p
|
||||
CCC_TEMPL_INST_FLAG =
|
||||
CCC_WARN_YES = +w
|
||||
CCC_WARN_NO =
|
||||
CCC_OPT_YES = -O
|
||||
CCC_OPT_NO = -g
|
||||
CCC_SFLAGS_YES= -Wl,-a,archive
|
||||
CCC_SFLAGS_NO=
|
||||
CCC_SLIBS_YES =
|
||||
CCC_SLIBS_NO=
|
||||
CCC_DEPENDS_FLAG =
|
||||
|
||||
ARCH_DEP_CFLAGS = -D_HPUX_SOURCE -DHP_UX
|
||||
ARCH_DEP_LDLIBS =
|
||||
|
||||
48
config/CONFIG.Host.sgi
Normal file
48
config/CONFIG.Host.sgi
Normal file
@@ -0,0 +1,48 @@
|
||||
# CONFIG.Host.sgi
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.Host.sgi
|
||||
|
||||
ARCH_CLASS = sgi
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
|
||||
|
||||
AR = ar
|
||||
|
||||
# Configure OS vendor C compiler
|
||||
ACC = cc
|
||||
ACC_ANSI = $(ACC) -xansi
|
||||
ACC_STRICT = $(ACC) -xansi
|
||||
ACC_TRAD = $(ACC) -cckr -Xs
|
||||
ACC_WARN_YES =
|
||||
ACC_WARN_NO = -w
|
||||
ACC_OPT_YES = -O
|
||||
ACC_OPT_NO = -g
|
||||
ACC_SFLAGS_YES= -Bstatic
|
||||
ACC_SFLAGS_NO=
|
||||
ACC_SLIBS_YES =
|
||||
ACC_SLIBS_NO=
|
||||
ACC_SHRLIB_CFLAGS_YES = -KPIC
|
||||
ACC_SHRLIB_LDFLAGS_YES = -shared
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
CCC = CC
|
||||
CCC_NORMAL = $(CCC)
|
||||
CCC_STRICT = $(CCC)
|
||||
CCC_TEMPL_INST_FLAG =
|
||||
CCC_WARN_YES =
|
||||
CCC_WARN_NO =
|
||||
CCC_OPT_YES = -O
|
||||
CCC_OPT_NO = -g
|
||||
CCC_SFLAGS_YES= -Bstatic
|
||||
CCC_SFLAGS_NO=
|
||||
CCC_SLIBS_YES =
|
||||
CCC_SLIBS_NO=
|
||||
CCC_DEPENDS_FLAG =
|
||||
|
||||
####KRCC = ??
|
||||
|
||||
ARCH_DEP_CFLAGS = -DSGI
|
||||
ARCH_DEP_LDFLAGS =
|
||||
|
||||
61
config/CONFIG.Host.solaris
Normal file
61
config/CONFIG.Host.solaris
Normal file
@@ -0,0 +1,61 @@
|
||||
# CONFIG.Host.solaris
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.Host.solaris
|
||||
|
||||
ARCH_CLASS = solaris
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
|
||||
|
||||
#
|
||||
# required by sun's C++ compiler
|
||||
#
|
||||
AR = ar
|
||||
_AR = $(AR) $(ARFLAGS)
|
||||
G++_AR = $(_AR)
|
||||
CCC_AR = $(CCC) -xar -o
|
||||
ARCMD = $($(CPLUSPLUS)_AR) $@
|
||||
|
||||
RANLIB =
|
||||
|
||||
SPARCWORKS = /opt/SUNWspro
|
||||
|
||||
# Configure OS vendor C compiler
|
||||
ACC = $(SPARCWORKS)/bin/cc
|
||||
ACC_ANSI = $(ACC) -Xa
|
||||
ACC_STRICT = $(ACC) -Xc -v
|
||||
ACC_TRAD = $(ACC) -Xs
|
||||
ACC_DEP_CFLAGS = -KPIC -D_REENTRANT
|
||||
ACC_WARN_YES =
|
||||
ACC_WARN_NO = -w
|
||||
ACC_OPT_YES = -O
|
||||
ACC_OPT_NO = -g
|
||||
ACC_SFLAGS_YES= -Bstatic
|
||||
ACC_SFLAGS_NO=
|
||||
ACC_SLIBS_YES= -lw -lintl -Bdynamic -ldl -Bstatic -lXext -lX
|
||||
ACC_SLIBS_NO=
|
||||
ACC_SHRLIB_CFLAGS_YES =
|
||||
ACC_SHRLIB_LDFLAGS_YES = -G -h $@
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
CCC = $(SPARCWORKS)/bin/CC
|
||||
CCC_NORMAL = $(CCC) +p
|
||||
CCC_STRICT = $(CCC) +p
|
||||
CCC_DEP_CFLAGS = -KPIC -D_REENTRANT
|
||||
CCC_TEMPL_INST_FLAG =
|
||||
CCC_WARN_YES = +w
|
||||
CCC_WARN_NO =
|
||||
CCC_OPT_YES = -O
|
||||
CCC_OPT_NO = -g
|
||||
CCC_SFLAGS_YES= -Bstatic
|
||||
CCC_SFLAGS_NO=
|
||||
CCC_SLIBS_YES= -lw -lintl -Bdynamic -ldl -Bstatic -lXext -lX
|
||||
CCC_SLIBS_NO=
|
||||
CCC_DEPENDS_FLAG = -xM1
|
||||
|
||||
|
||||
ARCH_DEP_CFLAGS = -DSOLARIS
|
||||
# socket and nsl needed by libca.a
|
||||
ARCH_DEP_LDLIBS = -lsocket -lnsl
|
||||
|
||||
84
config/CONFIG.Host.sun4
Normal file
84
config/CONFIG.Host.sun4
Normal file
@@ -0,0 +1,84 @@
|
||||
# CONFIG.Host.sun4
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.Host.sun4
|
||||
|
||||
ARCH_CLASS = sun4
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
|
||||
|
||||
#
|
||||
# required by sun's C++ compiler
|
||||
#
|
||||
AR = ar
|
||||
_AR = $(AR) $(ARFLAGS)
|
||||
G++_AR = $(_AR)
|
||||
CCC_AR = $(CCC) -xar -o
|
||||
ARCMD = $($(CPLUSPLUS)_AR) $@
|
||||
|
||||
RANLIB = ranlib
|
||||
RANLIBFLAGS = -t
|
||||
|
||||
# Configure OS vendor C compilers
|
||||
ACC = /usr/lang/acc
|
||||
ACC_ANSI = $(ACC) -Xa
|
||||
ACC_STRICT = $(ACC) -Xc
|
||||
ACC_TRAD = $(ACC) -Xs
|
||||
ACC_WARN_YES = -vc
|
||||
ACC_WARN_NO = -w
|
||||
ACC_OPT_YES = -O
|
||||
ACC_OPT_NO = -g
|
||||
ACC_SFLAGS_YES= -Bstatic
|
||||
ACC_SFLAGS_NO=
|
||||
ACC_SLIBS_YES=
|
||||
ACC_SLIBS_NO=
|
||||
#ACC_OP_SYS_LDFLAGS = -L$(SPECIAL_LANG)
|
||||
ACC_SHRLIB_CFLAGS_YES = -pic
|
||||
ACC_SHRLIB_LDFLAGS_YES = -assert pure-text -h $@
|
||||
|
||||
SUNCC = cc
|
||||
SUNCC_ANSI = echo SUNCC_ANSI not defined
|
||||
SUNCC_STRICT = echo SUNCC_STRICT not defined
|
||||
SUNCC_TRAD = $(SUNCC)
|
||||
SUNCC_WARN_YES =
|
||||
SUNCC_WARN_NO = -w
|
||||
SUNCC_OPT_YES = -O
|
||||
SUNCC_OPT_NO = -g
|
||||
SUNCC_SFLAGS_YES= -Bstatic
|
||||
SUNCC_SFLAGS_NO=
|
||||
SUNCC_SLIBS_YES=
|
||||
SUNCC_SLIBS_NO=
|
||||
SUNCC_SHRLIB_CFLAGS_YES = -pic
|
||||
SUNCC_SHRLIB_LDFLAGS_YES = -assert pure-text -h $@
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
CCC = /usr/lang/CC
|
||||
CCC_NORMAL = $(CCC)
|
||||
CCC_STRICT = $(CCC)
|
||||
CCC_TEMPL_INST_FLAG =
|
||||
CCC_WARN_YES =
|
||||
CCC_WARN_NO =
|
||||
CCC_TEMPL_INST_FLAG =
|
||||
CCC_WARN_YES = +w
|
||||
CCC_WARN_NO =
|
||||
CCC_OPT_YES = -O
|
||||
CCC_OPT_NO = -g
|
||||
CCC_SFLAGS_YES= -Bstatic
|
||||
CCC_SFLAGS_NO=
|
||||
CCC_SLIBS_YES=
|
||||
CCC_SLIBS_NO=
|
||||
CCC_DEPENDS_FLAG = -xM1
|
||||
|
||||
GCC_ANSI += -D__USE_FIXED_PROTOTYPES__
|
||||
GCC_STRICT += -D__USE_FIXED_PROTOTYPES__
|
||||
|
||||
ACC_ARCH_DEP_LDLIBS =
|
||||
GCC_ARCH_DEP_LDLIBS = -liberty
|
||||
ARCH_DEP_LDLIBS = $($(ANSI)_ARCH_DEP_LDLIBS)
|
||||
|
||||
ARCH_DEP_CFLAGS = -DSUNOS4
|
||||
|
||||
#SPECIAL_LANG = /usr/lang/SC3.0.1
|
||||
#SPECIAL_LANG = /usr/lang/lib
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# Compiler and utility invocation (supply path to compiler here)
|
||||
# (with warning flags built in)
|
||||
# Paths to compilers
|
||||
|
||||
# BUILD_TYPE
|
||||
# Currently either Vx or Unix
|
||||
BUILD_TYPE = Unix
|
||||
|
||||
GCC = gcc
|
||||
ACC = acc
|
||||
SUNCC = cc
|
||||
AR = ar
|
||||
ARFLAGS = r
|
||||
RANLIB = ranlib
|
||||
RANLIBFLAGS = -t
|
||||
YACC = $(EYACC)
|
||||
LEX = $(ELEX)
|
||||
G++ = g++
|
||||
CCC = CC
|
||||
MV = mv
|
||||
RMDIR = rm -rf
|
||||
MKDIR = mkdir
|
||||
|
||||
ACC_ANSI_INVOKE_W_NO = $(ACC) -Xa -w
|
||||
ACC_ANSI_INVOKE_W_YES = $(ACC) -Xa
|
||||
ACC_TRAD_INVOKE_W_NO = $(ACC) -Xs -w
|
||||
ACC_TRAD_INVOKE_W_YES = $(ACC) -Xs
|
||||
ACC_STRICT_INVOKE_W_NO = $(ACC) -Xc -w
|
||||
ACC_STRICT_INVOKE_W_YES = $(ACC) -Xc
|
||||
SUNCC_TRAD_INVOKE_W_NO = $(SUNCC) -w
|
||||
SUNCC_TRAD_INVOKE_W_YES = $(SUNCC)
|
||||
GCC_ANSI_INVOKE_W_NO = $(GCC) -ansi -w
|
||||
GCC_ANSI_INVOKE_W_YES = $(GCC) -ansi
|
||||
GCC_STRICT_INVOKE_W_NO = $(GCC) -ansi -pedantic
|
||||
GCC_STRICT_INVOKE_W_YES = $(GCC) -ansi -Wall -pedantic
|
||||
GCC_TRAD_INVOKE_W_NO = $(GCC) -traditional -w
|
||||
GCC_TRAD_INVOKE_W_YES = $(GCC) -traditional
|
||||
|
||||
C_OLD = $($(STANDARD)_TRAD_INVOKE_W_$(UNIX_WARN))
|
||||
C_ANSI = $($(ANSI)_ANSI_INVOKE_W_$(UNIX_WARN))
|
||||
C_STRICT = $($(ANSI)_STRICT_INVOKE_W_YES)
|
||||
CC = $(C_$(CMPLR))
|
||||
|
||||
CCC_NORMAL_INVOKE_W_NO = $(CCC) +p
|
||||
CCC_NORMAL_INVOKE_W_YES = $(CCC) +p +w
|
||||
CCC_STRICT_INVOKE_W_YES = $(CCC) +p +w
|
||||
CCC_LD_FLAGS =
|
||||
CCC_LD_LIBS =
|
||||
G++_NORMAL_INVOKE_W_NO = $(G++) -ansi -pedantic -w
|
||||
G++_NORMAL_INVOKE_W_YES = $(G++) -ansi -pedantic -Wall
|
||||
G++_STRICT_INVOKE_W_YES = $(G++) -ansi -pedantic -Wtraditional -Wall \
|
||||
-Wmissing-prototypes -Woverloaded-virtual \
|
||||
-Wwrite-strings -Wconversion -Wstrict-prototypes\
|
||||
-Wpointer-arith -Winline
|
||||
|
||||
CXX_NORMAL = $($(CPLUSPLUS)_NORMAL_INVOKE_W_$(UNIX_WARN))
|
||||
CXX_STRICT = $($(CPLUSPLUS)_STRICT_INVOKE_W_YES)
|
||||
|
||||
# GNU make likes CXX instead of CCC
|
||||
CXX = $(CXX_$(CXXCMPLR))
|
||||
|
||||
# Static Build options
|
||||
ACC_SFLAGS_YES= -Bstatic
|
||||
ACC_SFLAGS_NO=
|
||||
CC_SFLAGS_YES= -Bstatic
|
||||
CC_SFLAGS_NO=
|
||||
GCC_SFLAGS_YES= -static
|
||||
GCC_SFLAGS_NO=
|
||||
|
||||
SF_OLD = $($(STANDARD)_SFLAGS_$(STATIC_BUILD))
|
||||
SF_ANSI = $($(ANSI)_SFLAGS_$(STATIC_BUILD))
|
||||
SF_STRICT = $(SF_ANSI)
|
||||
UNIX_SFLAGS = $(SF_$(CMPLR))
|
||||
|
||||
# Optimization
|
||||
OPTIM_YES = -O
|
||||
OPTIM_NO =
|
||||
UNIX_OPT_FLAGS = $(OPTIM_$(UNIX_OPT))
|
||||
|
||||
# Include files
|
||||
UNIX_INCLUDES = -I. -I.. -I$(EPICS_BASE_INCLUDE)
|
||||
|
||||
# Operating system flags
|
||||
OP_SYS_FLAGS = -DUNIX
|
||||
|
||||
UNIX_LDFLAGS = -L$(EPICS_BASE_LIB)
|
||||
UNIX_LDLIBS = -lm
|
||||
|
||||
ARCH_DEP_CFLAGS = -D_X86_ -Dlinux
|
||||
ARCH_DEP_CCFLAGS = $(ARCH_DEP_CFLAGS)
|
||||
|
||||
UNIX_CFLAGS = $(UNIX_SFLAGS) $(USR_INCLUDES) $(UNIX_INCLUDES) $(OP_SYS_FLAGS)
|
||||
|
||||
UNIX_CCFLAGS = $(UNIX_CFLAGS)
|
||||
|
||||
# Target specific flags
|
||||
TARGET_CFLAGS = $($(basename $@)_CFLAGS)
|
||||
TARGET_CCFLAGS = $($(basename $@)_CCFLAGS)
|
||||
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS)
|
||||
TARGET_LDFLAGS = $($(basename $@)_LDFLAGS)
|
||||
TARGET_LDLIBS = $($(basename $@)_LDLIBS)
|
||||
TARGET_SNCFLAGS = $($(basename $@)_SNCFLAGS)
|
||||
|
||||
CFLAGS = $(UNIX_OPT_FLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(UNIX_CFLAGS)
|
||||
CCFLAGS = $(UNIX_OPT_FLAGS) $(TARGET_CCFLAGS) $(USR_CCFLAGS) $(ARCH_DEP_CCFLAGS) $(UNIX_CCFLAGS)
|
||||
CPPFLAGS += $(TARGET_CPPFLAGS) $(USR_CPPFLAGS)
|
||||
|
||||
# GNU make likes CXX instead of CCC
|
||||
CXXFLAGS = $(CCFLAGS)
|
||||
|
||||
LDFLAGS = $(SPECIAL_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(ARCH_DEP_LDFLAGS) $(UNIX_LDFLAGS)
|
||||
LDLIBS = $(TARGET_LDLIBS) $(USR_LDLIBS) $(ARCH_DEP_LDLIBS) $(UNIX_LDLIBS)
|
||||
|
||||
# Override SUN defaults
|
||||
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
|
||||
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c
|
||||
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
LINK.cc = $(CXX) $(CCFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
|
||||
DEPENDS_RULE.c = -$(COMPILE.c) -M $(SRCS.c) > .DEPENDS
|
||||
DEPENDS_RULE.cc = @echo no DEPENDS_RULE.cc defined in CONFIG.Unix.Linux
|
||||
136
config/CONFIG.LynxOS
Normal file
136
config/CONFIG.LynxOS
Normal file
@@ -0,0 +1,136 @@
|
||||
# $Id$
|
||||
#
|
||||
# This file contains definitions for Vx builds
|
||||
|
||||
#--------------------------------------------------
|
||||
# operating system class (include/os/<os_class>)
|
||||
OS_CLASS = LynxOS
|
||||
|
||||
lynx_pc486 =YES
|
||||
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
|
||||
#--------------------------------------------------
|
||||
# vxWorks directory definitions
|
||||
|
||||
# The definitions VX_DIR, VX_GNU, GNU_DIR and GNU_LIB
|
||||
# can be overridden for specific host architectures
|
||||
# by creating a CONFIG_SITE.Vx.<host_arch> file with
|
||||
# the override definitions.
|
||||
|
||||
# Tornado directory definitions
|
||||
VX_CONFIG_DIR_YES =
|
||||
VX_INCLUDE_YES =
|
||||
VX_GNU_YES =
|
||||
VX_GNU_BIN_YES =
|
||||
VX_GNU_LIB_YES =
|
||||
|
||||
|
||||
# pre Torando directory definitions
|
||||
VX_CONFIG_DIR_NO =
|
||||
VX_INCLUDE_NO =
|
||||
VX_GNU_NO =
|
||||
VX_GNU_BIN_NO =
|
||||
|
||||
# directory definitions
|
||||
VX_DIR =
|
||||
VX_CONFIG_DIR =
|
||||
VX_INCLUDE =
|
||||
VX_GNU =
|
||||
|
||||
GNU_BIN = /usr/local/bin
|
||||
GNU_LIB = /usr/local/lib
|
||||
|
||||
#--------------------------------------------------
|
||||
# VxWorks command definitions
|
||||
|
||||
#GCC = $(GNU_BIN)/cc$(CMPLR_SUFFIX) -B$(GNU_LIB)/gcc-lib/ -nostdinc
|
||||
#AR = $(GNU_BIN)/ar$(CMPLR_SUFFIX)
|
||||
#CPP = $(GNU_BIN)/cpp$(CMPLR_SUFFIX) -nostdinc
|
||||
#RANLIB = $(GNU_BIN)/ranlib$(CMPLR_SUFFIX)
|
||||
#LD = $(GNU_BIN)/ld$(CMPLR_SUFFIX) -r
|
||||
|
||||
AR = ar -rc
|
||||
ARCMD = $(AR) $@
|
||||
RANLIB = ranlib -t
|
||||
GCC = gcc
|
||||
CPP = cpp
|
||||
LD = ld -r
|
||||
|
||||
|
||||
#--------------------------------------------------
|
||||
# Tornado C++ crosscompiler definitions
|
||||
|
||||
#CPLUSPLUS_YES = G++
|
||||
#G++ = $(GNU_BIN)/cc$(CMPLR_SUFFIX) -B$(GNU_LIB)/gcc-lib/ -nostdinc
|
||||
#LD_G++ = $(GNU_BIN)/ld$(CMPLR_SUFFIX) -r
|
||||
#NM = $(GNU_BIN)/nm$(CMPLR_SUFFIX)
|
||||
#MUNCH = $(GNU_BIN)/munch
|
||||
|
||||
CPLUSPLUS_YES = g++ -DLynxOS -DLynxOS_pc486 -mposix -D_X86_ -DEXPL_TEMP
|
||||
G++ = g++ -DLynxOS -DLynxOS_pc486 -mposix -D_X86_ -DEXPL_TEMP
|
||||
LD_G++ = ld -r
|
||||
NM = nm
|
||||
|
||||
#--------------------------------------------------
|
||||
# Pre Tornado C++ crosscompiler definitions
|
||||
# These are pre tornado definitions for Hideos builds (defined for 68k only)
|
||||
|
||||
#CPLUSPLUS_NO = CCC
|
||||
#CCC = $(GNU_DIR)/bin/sun3-g++ -B$(GNU_DIR)/lib/gcc-lib/ -nostdinc -DEXPL_TEMPL
|
||||
#LD_CCC = $(GNU_DIR)/bin/sun3-ld $(OLD_ARCH_DEP_LDFLAGS) -r
|
||||
|
||||
CPLUSPLUS_NO = g++ -DLynxOS -DLynxOS_pc486 -mposix -D_X86_ -DEXPL_TEMP
|
||||
CCC = g++ -DLynxOS -DLynxOS_pc486 -mposix -D_X86_ -DEXPL_TEMP
|
||||
LD_CCC = ld -r
|
||||
|
||||
CCC_NORMAL = $(CCC) $(OLD_ARCH_DEP_CFLAGS)
|
||||
CCC_STRICT = $(CCC) -ansi -pedantic -Wall -traditional $(OLD_ARCH_DEP_CFLAGS)
|
||||
CCC_TRAD = $(CCC) -traditional $(OLD_ARCH_DEP_CFLAGS)
|
||||
CCC_TEMPL_INST_FLAG = -DEXPL_TEMP
|
||||
CCC_WARN_YES = -Wall
|
||||
CCC_WARN_NO = -w
|
||||
CCC_OPT_YES = -O
|
||||
CCC_OPT_NO = -g
|
||||
CCC_DEPENDS_FLAG = -pedantic -DLynxOS -DLynxOS_pc486 -mposix -D_X86_
|
||||
CPU = i486
|
||||
OS = lynxos
|
||||
OLD_ARCH_DEP_CFLAGS = -DLynxOS -DLynxOS_pc486 -mposix -D_X86_
|
||||
# --no-builtin -Wa,"-m68040" -DOS_EQ_$(OS) \
|
||||
# -DBOARD_EQ_$(BOARD) -DCPU_EQ_$(CPU) -DBOARD=$(BOARD)
|
||||
OLD_ARCH_DEP_LDFLAGS = -mposix -lc -lbsd -lnsl -lm -lposix4d9 -llynx
|
||||
# -Ur -N -T$(EPICS_BASE_BIN)/vxldscript.MRI
|
||||
|
||||
#--------------------------------------------------
|
||||
# C compiler definitions
|
||||
ANSI = gcc -ansi
|
||||
|
||||
#--------------------------------------------------
|
||||
# Command definitions
|
||||
CPLUSPLUS = g++
|
||||
# $(CPLUSPLUS_$(TORNADO))
|
||||
LD_CXX = ld -r
|
||||
# $(LD_$(CPLUSPLUS))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Operating system flags
|
||||
OP_SYS_INCLUDES =
|
||||
# -I$(VX_INCLUDE)
|
||||
OP_SYS_CFLAGS = -DLynxOS -DLynxOS_pc486 -mposix -D_X86_
|
||||
# -DvxWorks -DV5_vxWorks -fno-builtin
|
||||
OP_SYS_LDFLAGS = -DLynxOS -DLynxOS_pc486 -mposix -D_X86_
|
||||
OP_SYS_LDLIBS = -lc -lbsd -lnsl -lm -lposix4d9 -llynx
|
||||
|
||||
#--------------------------------------------------
|
||||
# Optimization flag overrides
|
||||
GCC_OPT_YES = -O
|
||||
# 2 -fstrength-reduce
|
||||
G++_OPT_YES = -O
|
||||
# 2 -fstrength-reduce
|
||||
|
||||
#--------------------------------------------------
|
||||
# Link definitions
|
||||
LINK.c = $(LD) $(LDFLAGS) -o
|
||||
LINK.cc = $(LD_CXX) $(LDFLAGS) -o
|
||||
|
||||
119
config/CONFIG.Vx
Normal file
119
config/CONFIG.Vx
Normal file
@@ -0,0 +1,119 @@
|
||||
# $Id$
|
||||
#
|
||||
# This file contains definitions for Vx builds
|
||||
|
||||
#--------------------------------------------------
|
||||
# operating system class (include/os/<os_class>)
|
||||
OS_CLASS = vxWorks
|
||||
|
||||
#--------------------------------------------------
|
||||
# vxWorks directory definitions
|
||||
|
||||
# The definitions VX_DIR, VX_GNU, GNU_DIR and GNU_LIB
|
||||
# can be overridden for specific host architectures
|
||||
# by creating a CONFIG_SITE.Vx.<host_arch> file with
|
||||
# the override definitions.
|
||||
|
||||
# Tornado directory definitions
|
||||
VX_CONFIG_DIR_YES = $(VX_DIR)/target/config
|
||||
VX_INCLUDE_YES = $(VX_DIR)/target/h
|
||||
VX_GNU_YES = $(VX_DIR)/host/$(WIND_HOST_TYPE)
|
||||
VX_GNU_BIN_YES = $(VX_GNU)/bin
|
||||
VX_GNU_LIB_YES = $(VX_GNU)/lib
|
||||
|
||||
# pre Torando directory definitions
|
||||
VX_CONFIG_DIR_NO = $(VX_DIR)/config
|
||||
VX_INCLUDE_NO = $(VX_DIR)/h
|
||||
VX_GNU_BIN_NO = $(VX_GNU)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
VX_GNU_LIB_NO = $(VX_GNU)/$(HOST_ARCH).$(ARCH_CLASS)/lib
|
||||
|
||||
# directory definitions
|
||||
VX_DIR = $(VX_DIR_$(TORNADO))
|
||||
VX_CONFIG_DIR = $(VX_CONFIG_DIR_$(TORNADO))
|
||||
VX_INCLUDE = $(VX_INCLUDE_$(TORNADO))
|
||||
VX_GNU = $(VX_GNU_$(TORNADO))
|
||||
GNU_BIN = $(VX_GNU_BIN_$(TORNADO))
|
||||
GNU_LIB = $(VX_GNU_LIB_$(TORNADO))
|
||||
|
||||
#--------------------------------------------------
|
||||
# VxWorks command definitions
|
||||
|
||||
GCC = $(GNU_BIN)/cc$(CMPLR_SUFFIX) -B$(GNU_LIB)/gcc-lib/ -nostdinc
|
||||
AR = $(GNU_BIN)/ar$(CMPLR_SUFFIX)
|
||||
CPP = $(GNU_BIN)/cpp$(CMPLR_SUFFIX) -nostdinc
|
||||
RANLIB = $(GNU_BIN)/ranlib$(CMPLR_SUFFIX)
|
||||
LD = $(GNU_BIN)/ld$(CMPLR_SUFFIX) -r
|
||||
|
||||
#--------------------------------------------------
|
||||
# Tornado C++ crosscompiler definitions
|
||||
|
||||
CPLUSPLUS_YES = G++
|
||||
G++ = $(GNU_BIN)/cc$(CMPLR_SUFFIX) -B$(GNU_LIB)/gcc-lib/ -nostdinc
|
||||
LD_G++ = $(GNU_BIN)/ld$(CMPLR_SUFFIX) -r
|
||||
NM = $(GNU_BIN)/nm$(CMPLR_SUFFIX)
|
||||
MUNCH = $(GNU_BIN)/munch
|
||||
|
||||
#--------------------------------------------------
|
||||
# Pre Tornado C++ crosscompiler definitions
|
||||
# These are pre tornado definitions for Hideos builds (defined for 68k only)
|
||||
|
||||
CPLUSPLUS_NO = CCC
|
||||
CCC = $(GNU_DIR)/bin/sun3-g++ -B$(GNU_DIR)/lib/gcc-lib/ -nostdinc -DEXPL_TEMPL
|
||||
LD_CCC = $(GNU_DIR)/bin/sun3-ld $(OLD_ARCH_DEP_LDFLAGS) -r
|
||||
|
||||
CCC_NORMAL = $(CCC) $(OLD_ARCH_DEP_CFLAGS)
|
||||
CCC_STRICT = $(CCC) -ansi -pedantic -Wtraditional $(OLD_ARCH_DEP_CFLAGS)
|
||||
CCC_TRAD = $(CCC) -traditional $(OLD_ARCH_DEP_CFLAGS)
|
||||
CCC_TEMPL_INST_FLAG =
|
||||
CCC_WARN_YES = -Wall
|
||||
CCC_WARN_NO = -w
|
||||
CCC_OPT_YES = -O2 -fstrength-reduce
|
||||
CCC_OPT_NO =
|
||||
CCC_DEPENDS_FLAG = -MM
|
||||
CPU = 68000
|
||||
OS = VXWORKS
|
||||
OLD_ARCH_DEP_CFLAGS = --no-builtin -Wa,"-m68040" -DOS_EQ_$(OS) \
|
||||
-DBOARD_EQ_$(BOARD) -DCPU_EQ_$(CPU) -DBOARD=$(BOARD)
|
||||
OLD_ARCH_DEP_LDFLAGS = -Ur -N -T$(EPICS_BASE_BIN)/vxldscript.MRI
|
||||
|
||||
#--------------------------------------------------
|
||||
# C compiler definitions
|
||||
ANSI = GCC
|
||||
|
||||
#--------------------------------------------------
|
||||
# Command definitions
|
||||
CPLUSPLUS = $(CPLUSPLUS_$(TORNADO))
|
||||
LD_CXX = $(LD_$(CPLUSPLUS))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Operating system flags
|
||||
OP_SYS_INCLUDES = -I$(VX_INCLUDE)
|
||||
OP_SYS_CFLAGS = -DvxWorks -DV5_vxWorks -fno-builtin
|
||||
OP_SYS_LDFLAGS =
|
||||
OP_SYS_LDLIBS =
|
||||
|
||||
#--------------------------------------------------
|
||||
# Optimization flag overrides
|
||||
GCC_OPT_YES = -O2 -fstrength-reduce
|
||||
GCC_OPT_NO =
|
||||
G++_OPT_YES = -O2 -fstrength-reduce
|
||||
G++_OPT_NO =
|
||||
|
||||
OPT_CFLAGS = $($(ANSI)_OPT_$(VX_OPT))
|
||||
OPT_CXXFLAGS = $($(CPLUSPLUS)_OPT_$(VX_OPT))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Warning flag overrides
|
||||
GCC_WARN_YES = -Wall
|
||||
GCC_WARN_NO = -w
|
||||
G++_WARN_YES = -Wall
|
||||
G++_WARN_NO = -w
|
||||
|
||||
WARN_CFLAGS = $($(ANSI)_WARN_$(VX_WARN))
|
||||
WARN_CXXFLAGS = $($(CPLUSPLUS)_WARN_$(VX_WARN))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Link definitions
|
||||
LINK.c = $(LD) $(LDFLAGS) -o
|
||||
LINK.cc = $(LD_CXX) $(LDFLAGS) -o
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
AR = $(VX_GNU_BIN)/ar68k
|
||||
RANLIB = $(VX_GNU_BIN)/ranlib68k
|
||||
YACC = $(EYACC)
|
||||
LEX = $(ELEX)
|
||||
CC = $(VX_GNU_BIN)/cc68k -B$(VX_GNU_LIB)/gcc-lib/ -nostdinc
|
||||
CXX = $(VX_GNU_BIN)/cc68k -B$(VX_GNU_LIB)/gcc-lib/ -nostdinc
|
||||
CPP = $(VX_GNU_BIN)/cpp68k -nostdinc
|
||||
#CPP = $(CC) -E
|
||||
GCC = $(CC)
|
||||
LD = $(VX_GNU_BIN)/ld68k -r
|
||||
EPICS_LDLIBS =
|
||||
MV=mv
|
||||
RM=rm -f
|
||||
MKDIR=mkdir
|
||||
RMDIR=rm -rf
|
||||
|
||||
# special c library requirements
|
||||
SPECIAL_LANG =
|
||||
|
||||
# Compiler flags, don't mess with this
|
||||
# Optimization flags
|
||||
VX_OPT_YES = -O
|
||||
VX_OPT_NO =
|
||||
VX_OPT_FLAGS = $(VX_OPT_$(VX_OPT))
|
||||
|
||||
# Include files
|
||||
VX_INCLUDES = -I. -I.. -I$(EPICS_BASE_INCLUDE) -I$(VX_INCLUDE)
|
||||
|
||||
# Warnings
|
||||
#At some time we should turn on pedantic
|
||||
#VX_WARN_YES = -Wall -pedantic
|
||||
VX_WARN_YES = -W
|
||||
VX_WARN_NO =
|
||||
VX_WARN_FLAGS = $(VX_WARN_$(VX_WARN))
|
||||
|
||||
# Operating system flags
|
||||
VX_OP_SYS_FLAGS = -DvxWorks -DV5_vxWorks
|
||||
|
||||
# Arch dependent flags are set in CONFIG_ARCH.*
|
||||
VX_CFLAGS = $(VX_OPT_FLAGS) $(VX_WARN_FLAGS) $(USR_INCLUDES) \
|
||||
$(VX_INCLUDES) $(VX_OP_SYS_FLAGS)
|
||||
|
||||
VX_LDFLAGS = -o
|
||||
|
||||
TARGET_CFLAGS = $($(basename $@)_CFLAGS)
|
||||
TARGET_LDFLAGS = $($(basename $@)_LDFLAGS)
|
||||
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS)
|
||||
TARGET_SNCFLAGS = $($(basename $@)_SNCFLAGS)
|
||||
|
||||
CFLAGS = $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(VX_CFLAGS)
|
||||
CXXFLAGS = $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(VX_CFLAGS)
|
||||
LDFLAGS = $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(ARCH_DEP_LDFLAGS) $(VX_LDFLAGS)
|
||||
CPPFLAGS += $(TARGET_CPPFLAGS) $(USR_CPPFLAGS)
|
||||
|
||||
# Build compile line here
|
||||
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
|
||||
LINK.c = $(LD) $(LDFLAGS)
|
||||
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c
|
||||
LINK.cc = $(LD) $(LDFLAGS)
|
||||
|
||||
CPPSNCFLAGS = $(USR_INCLUDES) $(VX_INCLUDES)
|
||||
|
||||
DEPENDS_RULE.c = -$(COMPILE.c) -M $(SRCS.c) > .DEPENDS
|
||||
DEPENDS_RULE.cc = -$(COMPILE.cc) -M $(SRCS.cc) > .DEPENDS
|
||||
|
||||
15
config/CONFIG.Vx.frc40
Normal file
15
config/CONFIG.Vx.frc40
Normal file
@@ -0,0 +1,15 @@
|
||||
# $Id$
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = 68k
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68040
|
||||
|
||||
21
config/CONFIG.Vx.frc5ce
Normal file
21
config/CONFIG.Vx.frc5ce
Normal file
@@ -0,0 +1,21 @@
|
||||
# CONFIG.Vx.frc5ce
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = sparc
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = sparc
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=SPARC -DCPU_FAMILY=SPARC
|
||||
ARCH_DEP_CFLAGS =
|
||||
# Removed -O2 [24/12/96 PMM]
|
||||
OLD_ARCH_DEP_CXXFLAGS = -fno-builtin -ansi -pipe -nostdinc -DCPU=SPARC \
|
||||
-DVXWORKS -Dsigned= -Dvolatile= +V
|
||||
|
||||
# Definitions for pre Tornado c++ builds
|
||||
CCC = CENTERLINE
|
||||
CCC_NORMAL = $(VX_DIR)/bin/sun4/CCsparc
|
||||
CCC_STRICT = $(VX_DIR)/bin/sun4/CCsparc
|
||||
|
||||
20
config/CONFIG.Vx.hkbaja47
Normal file
20
config/CONFIG.Vx.hkbaja47
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = mips
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = mips
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=R4000
|
||||
ARCH_DEP_CFLAGS = -EB -mcpu=r4000 -mips3 -mgp32 -mfp32 -non_shared -G 0
|
||||
|
||||
# Arch specific flags
|
||||
GCC += -fsigned-char
|
||||
LD += -EB -X
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
BUILD_TYPE = Vx
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = 68k
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
include $(EPICS_BASE)/config/CONFIG.$(BUILD_TYPE).$(ARCH_CLASS)
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68030 -m68030 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68020 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68020
|
||||
|
||||
16
config/CONFIG.Vx.mv147
Normal file
16
config/CONFIG.Vx.mv147
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = 68k
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68030 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68030
|
||||
|
||||
15
config/CONFIG.Vx.mv1604
Normal file
15
config/CONFIG.Vx.mv1604
Normal file
@@ -0,0 +1,15 @@
|
||||
# $Id$
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = ppc
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
# Architecture specific build flags (TRUE=1 via LBL; needed in camessage.c)
|
||||
ARCH_DEP_CPPFLAGS = -DCPU_FAMILY=PPC -DCPU=PPC604 -D_GNU_TOOL -DTRUE=1
|
||||
ARCH_DEP_CFLAGS = -fno-for-scope
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
BUILD_TYPE = Vx
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = 68k
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
include $(EPICS_BASE)/config/CONFIG.$(BUILD_TYPE).$(ARCH_CLASS)
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68040 -m68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68040
|
||||
|
||||
15
config/CONFIG.Vx.mv162lc
Normal file
15
config/CONFIG.Vx.mv162lc
Normal file
@@ -0,0 +1,15 @@
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = 68k
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -msoft-float
|
||||
@@ -3,15 +3,14 @@
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# BUILD_TYPE
|
||||
BUILD_TYPE = Vx
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = 68k
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
include $(EPICS_BASE)/config/CONFIG.$(BUILD_TYPE).$(ARCH_CLASS)
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68040 -m68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68040 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68040
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# BUILD_TYPE
|
||||
BUILD_TYPE = Vx
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = 68k
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
include $(EPICS_BASE)/config/CONFIG.$(BUILD_TYPE).$(ARCH_CLASS)
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68020 -m68020 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68060 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68040
|
||||
|
||||
16
config/CONFIG.Vx.niCpu030
Normal file
16
config/CONFIG.Vx.niCpu030
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
# CONFIG.Vx.niCpu030
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = 68k
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68030 -DCPU_FAMILY=MC680X0
|
||||
ARCH_DEP_CFLAGS = -m68030
|
||||
|
||||
17
config/CONFIG.Vx.pc486
Normal file
17
config/CONFIG.Vx.pc486
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
# CONFIG.Vx.pc486
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = 386
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = pc486
|
||||
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=I80486 -DCPU_FAMILY=I80x86 -D_X86_
|
||||
ARCH_DEP_CFLAGS = -m486
|
||||
ARCH_DEP_CXXFLAGS += -x 'c++'
|
||||
ARCH_DEP_CFLAGS += -fno-builtin -fno-defer-pop
|
||||
|
||||
17
config/CONFIG.Vx.vxipc
Normal file
17
config/CONFIG.Vx.vxipc
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
# CONFIG.Vx.VXIpc
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = 386
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = pc486
|
||||
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=I80486 -DCPU_FAMILY=I80x86 -D_X86_
|
||||
ARCH_DEP_CFLAGS = -m486
|
||||
ARCH_DEP_CXXFLAGS += -x 'c++'
|
||||
ARCH_DEP_CFLAGS += -fno-builtin -fno-defer-pop
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
# CONFIG.Unix.alpha
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# BUILD_TYPE
|
||||
# Currently either Vx or Unix
|
||||
BUILD_TYPE = Unix
|
||||
|
||||
# Compiler and utility invocation (supply path to compiler here)
|
||||
# (with warning flags built in)
|
||||
# Paths to compilers
|
||||
GCC = gcc
|
||||
ACC = cc -std
|
||||
TRADCC = cc -traditional
|
||||
AR = ar
|
||||
RANLIB = ranlib
|
||||
YACC = $(EYACC)
|
||||
LEX = $(ELEX)
|
||||
G++ = g++
|
||||
CCC = CC
|
||||
MV = mv
|
||||
RMDIR = rm -rf
|
||||
MKDIR = mkdir
|
||||
|
||||
ACC_ANSI_INVOKE_W_NO = $(ACC) -w
|
||||
ACC_ANSI_INVOKE_W_YES = $(ACC)
|
||||
ACC_STRICT_INVOKE_W_YES = $(ACC) -stdl -w
|
||||
ACC_STRICT_INVOKE_W_NO = $(ACC) -stdl
|
||||
ACC_TRAD_INVOKE_W_NO = $(ACC) -w
|
||||
ACC_TRAD_INVOKE_W_YES = $(ACC)
|
||||
GCC_ANSI_INVOKE_W_NO = $(GCC) -ansi -w
|
||||
GCC_ANSI_INVOKE_W_YES = $(GCC) -ansi
|
||||
GCC_STRICT_INVOKE_W_NO = $(GCC) -ansi -pedantic
|
||||
GCC_STRICT_INVOKE_W_YES = $(GCC) -ansi -Wall -pedantic
|
||||
GCC_TRAD_INVOKE_W_NO = $(GCC) -traditional -w
|
||||
GCC_TRAD_INVOKE_W_YES = $(GCC) -traditional
|
||||
|
||||
C_OLD = $($(STANDARD)_TRAD_INVOKE_W_$(UNIX_WARN))
|
||||
C_ANSI = $($(ANSI)_ANSI_INVOKE_W_$(UNIX_WARN))
|
||||
C_STRICT = $($(ANSI)_STRICT_INVOKE_W_YES)
|
||||
CC = $(C_$(CMPLR))
|
||||
|
||||
CCC_NORMAL_INVOKE_W_NO = $(CCC) +p
|
||||
CCC_NORMAL_INVOKE_W_YES = $(CCC) +p +w
|
||||
CCC_STRICT_INVOKE_W_YES = $(CCC) +p +w
|
||||
CCC_LD_FLAGS =
|
||||
CCC_LD_LIBS =
|
||||
G++_NORMAL_INVOKE_W_NO = $(G++) -ansi -pedantic -w
|
||||
G++_NORMAL_INVOKE_W_YES = $(G++) -ansi -pedantic -Wall
|
||||
G++_STRICT_INVOKE_W_YES = $(G++) -ansi -pedantic -Wtraditional -Wall \
|
||||
-Wmissing-prototypes -Woverloaded-virtual \
|
||||
-Wwrite-strings -Wconversion -Wstrict-prototypes\
|
||||
-Wpointer-arith -Winline
|
||||
|
||||
CXX_NORMAL = $($(CPLUSPLUS)_NORMAL_INVOKE_W_$(UNIX_WARN))
|
||||
CXX_STRICT = $($(CPLUSPLUS)_STRICT_INVOKE_W_YES)
|
||||
|
||||
# GNU make likes CXX instead of CCC
|
||||
CXX = $(CXX_$(CXXCMPLR))
|
||||
|
||||
# Static Build options
|
||||
ACC_SFLAGS_YES= -non_shared
|
||||
ACC_SFLAGS_NO= -call_shared
|
||||
CC_SFLAGS_YES= -non_shared
|
||||
CC_SFLAGS_NO= -call_shared
|
||||
GCC_SFLAGS_YES= -static
|
||||
GCC_SFLAGS_NO=
|
||||
|
||||
SF_OLD = $($(STANDARD)_SFLAGS_$(STATIC_BUILD))
|
||||
SF_ANSI = $($(ANSI)_SFLAGS_$(STATIC_BUILD))
|
||||
SF_STRICT = $(SF_ANSI)
|
||||
UNIX_SFLAGS = $(SF_$(CMPLR))
|
||||
|
||||
# Optimization
|
||||
OPTIM_YES = -O
|
||||
OPTIM_NO =
|
||||
UNIX_OPT_FLAGS = $(OPTIM_$(UNIX_OPT))
|
||||
|
||||
# Include files
|
||||
UNIX_INCLUDES = -I. -I.. -I$(EPICS_BASE_INCLUDE)
|
||||
|
||||
# Operating system flags
|
||||
OP_SYS_FLAGS = -DUNIX
|
||||
|
||||
SPECIAL_LDFLAGS =
|
||||
UNIX_LDFLAGS = -L$(EPICS_BASE_LIB)
|
||||
UNIX_LDLIBS = -lm
|
||||
|
||||
ARCH_DEP_CFLAGS = -D_OSF_SOURCE -DLITTLE_ENDIAN
|
||||
ARCH_DEP_CCFLAGS = $(ARCH_DEP_CFLAGS)
|
||||
UNIX_CFLAGS = $(UNIX_SFLAGS) $(USR_INCLUDES) $(UNIX_INCLUDES) $(OP_SYS_FLAGS)
|
||||
|
||||
UNIX_CCFLAGS = $(UNIX_CFLAGS)
|
||||
|
||||
# Target specific flags
|
||||
TARGET_CFLAGS = $($(basename $@)_CFLAGS)
|
||||
TARGET_CCFLAGS = $($(basename $@)_CCFLAGS)
|
||||
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS)
|
||||
TARGET_LDFLAGS = $($(basename $@)_LDFLAGS)
|
||||
TARGET_LDLIBS = $($(basename $@)_LDLIBS)
|
||||
TARGET_SNCFLAGS = $($(basename $@)_SNCFLAGS)
|
||||
|
||||
CFLAGS = $(UNIX_OPT_FLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(UNIX_CFLAGS)
|
||||
CCFLAGS = $(UNIX_OPT_FLAGS) $(TARGET_CCFLAGS) $(USR_CCFLAGS) $(ARCH_DEP_CCFLAGS) $(UNIX_CCFLAGS)
|
||||
CPPFLAGS += $(TARGET_CPPFLAGS) $(USR_CPPFLAGS)
|
||||
CXXFLAGS = $(CCFLAGS)
|
||||
|
||||
LDFLAGS = $(SPECIAL_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(ARCH_DEP_LDFLAGS) $(UNIX_LDFLAGS)
|
||||
LDLIBS = $(TARGET_LDLIBS) $(USR_LDLIBS) $(ARCH_DEP_LDLIBS) $(UNIX_LDLIBS)
|
||||
|
||||
# Override defaults
|
||||
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
|
||||
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c
|
||||
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
LINK.cc = $(CXX) $(CCFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
|
||||
DEPEND_RULE.c = @echo echo no DEPENDS_RULE.c defined in CONFIG.Unix.alpha
|
||||
DEPEND_RULE.cc = @echo echo no DEPENDS_RULE.cc defined in CONFIG.Unix.alpha
|
||||
|
||||
@@ -1,128 +0,0 @@
|
||||
# CONFIG.Unix.hp700
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# BUILD_TYPE
|
||||
# Currently either Vx or Unix
|
||||
BUILD_TYPE = Unix
|
||||
|
||||
# Compiler and utility invocation (supply path to compiler here)
|
||||
# (with warning flags built in)
|
||||
# Paths to compilers
|
||||
GCC = gcc
|
||||
ACC = cc -Aa
|
||||
HPACC = cc -Aa
|
||||
HPCC = cc -Ac
|
||||
TRADCC = cc
|
||||
AR = ar
|
||||
RANLIB = ranlib
|
||||
YACC = $(EYACC)
|
||||
LEX = $(ELEX)
|
||||
G++ = g++
|
||||
CCC = CC
|
||||
MV = mv
|
||||
RMDIR = rm -rf
|
||||
MKDIR = mkdir
|
||||
|
||||
ACC_ANSI_INVOKE_W_NO = $(ACC) -w
|
||||
ACC_ANSI_INVOKE_W_YES = $(ACC)
|
||||
ACC_TRAD_INVOKE_W_NO = $(TRADCC) -w
|
||||
ACC_TRAD_INVOKE_W_YES = $(TRADCC)
|
||||
ACC_STRICT_INVOKE_W_NO = $(ACC) -w
|
||||
ACC_STRICT_INVOKE_W_YES = $(ACC)
|
||||
HPACC_ANSI_INVOKE_W_NO = $(HPACC) -w
|
||||
HPACC_ANSI_INVOKE_W_YES = $(HPACC)
|
||||
HPCC_TRAD_INVOKE_W_NO = $(HPCC) -w
|
||||
HPCC_TRAD_INVOKE_W_YES = $(HPCC)
|
||||
HPACC_STRICT_INVOKE_W_NO = $(HPACC) -w
|
||||
HPACC_STRICT_INVOKE_W_YES = $(HPACC)
|
||||
|
||||
GCC_ANSI_INVOKE_W_NO = $(GCC) -ansi -w
|
||||
GCC_ANSI_INVOKE_W_YES = $(GCC) -ansi
|
||||
GCC_STRICT_INVOKE_W_YES = $(GCC) -ansi -Wall -pedantic
|
||||
GCC_TRAD_INVOKE_W_NO = $(GCC) -traditional -w
|
||||
GCC_TRAD_INVOKE_W_YES = $(GCC) -traditional
|
||||
|
||||
CCC_NORMAL_INVOKE_W_NO = $(CCC) +p
|
||||
CCC_NORMAL_INVOKE_W_YES = $(CCC) +p +w
|
||||
CCC_STRICT_INVOKE_W_YES = $(CCC) +p +w
|
||||
CCC_LD_FLAGS =
|
||||
CCC_LD_LIBS =
|
||||
G++_NORMAL_INVOKE_W_NO = $(G++) -ansi -pedantic -w
|
||||
G++_NORMAL_INVOKE_W_YES = $(G++) -ansi -pedantic -Wall
|
||||
G++_STRICT_INVOKE_W_YES = $(G++) -ansi -pedantic -Wtraditional -Wall \
|
||||
-Wmissing-prototypes -Woverloaded-virtual \
|
||||
-Wwrite-strings -Wconversion -Wstrict-prototypes\
|
||||
-Wpointer-arith -Winline
|
||||
|
||||
CXX_NORMAL = $($(CPLUSPLUS)_NORMAL_INVOKE_W_$(UNIX_WARN))
|
||||
CXX_STRICT = $($(CPLUSPLUS)_STRICT_INVOKE_W_YES)
|
||||
|
||||
# GNU make likes CXX instead of CCC
|
||||
CXX = $(CXX_$(CXXCMPLR))
|
||||
|
||||
C_OLD = $($(STANDARD)_TRAD_INVOKE_W_$(UNIX_WARN))
|
||||
C_ANSI = $($(ANSI)_ANSI_INVOKE_W_$(UNIX_WARN))
|
||||
C_STRICT = $($(ANSI)_STRICT_INVOKE_W_YES)
|
||||
CC = $(C_$(CMPLR))
|
||||
|
||||
# Static Build options
|
||||
ACC_SFLAGS_YES= -Wl,-a,archive
|
||||
ACC_SFLAGS_NO=
|
||||
CC_SFLAGS_YES= -Wl,-a,archive
|
||||
CC_SFLAGS_NO=
|
||||
GCC_SFLAGS_YES= -static
|
||||
GCC_SFLAGS_NO=
|
||||
|
||||
SF_OLD = $($(STANDARD)_SFLAGS_$(STATIC_BUILD))
|
||||
SF_ANSI = $($(ANSI)_SFLAGS_$(STATIC_BUILD))
|
||||
SF_STRICT = $(SF_ANSI)
|
||||
UNIX_SFLAGS = $(SF_$(CMPLR))
|
||||
|
||||
# Optimization
|
||||
OPTIM_YES = -O
|
||||
OPTIM_NO =
|
||||
UNIX_OPT_FLAGS = $(OPTIM_$(UNIX_OPT))
|
||||
|
||||
# Include files
|
||||
UNIX_INCLUDES = -I. -I.. -I$(EPICS_BASE_INCLUDE)
|
||||
|
||||
# Operating system flags
|
||||
OP_SYS_FLAGS = -DUNIX
|
||||
|
||||
SPECIAL_LDFLAGS =
|
||||
UNIX_LDFLAGS = -L$(EPICS_BASE_LIB)
|
||||
UNIX_LDLIBS = -lm
|
||||
|
||||
ARCH_DEP_CFLAGS = -D_HPUX_SOURCE -DHP_UX
|
||||
ARCH_DEP_CCFLAGS = $(ARCH_DEP_CFLAGS)
|
||||
|
||||
UNIX_CFLAGS = $(UNIX_SFLAGS) $(USR_INCLUDES) $(UNIX_INCLUDES) $(OP_SYS_FLAGS)
|
||||
UNIX_CCFLAGS = $(UNIX_CFLAGS)
|
||||
|
||||
# Target specific flags
|
||||
TARGET_CFLAGS = $($(basename $@)_CFLAGS)
|
||||
TARGET_CCFLAGS = $($(basename $@)_CCFLAGS)
|
||||
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS)
|
||||
TARGET_LDFLAGS = $($(basename $@)_LDFLAGS)
|
||||
TARGET_LDLIBS = $($(basename $@)_LDLIBS)
|
||||
TARGET_SNCFLAGS = $($(basename $@)_SNCFLAGS)
|
||||
|
||||
CFLAGS = $(UNIX_OPT_FLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(UNIX_CFLAGS)
|
||||
CCFLAGS = $(UNIX_OPT_FLAGS) $(TARGET_CCFLAGS) $(USR_CCFLAGS) $(ARCH_DEP_CCFLAGS) $(UNIX_CCFLAGS)
|
||||
CPPFLAGS += $(TARGET_CPPFLAGS) $(USR_CPPFLAGS)
|
||||
CXXFLAGS = $(CCFLAGS)
|
||||
|
||||
ARFLAGS = rv
|
||||
|
||||
LDFLAGS = $(SPECIAL_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(ARCH_DEP_LDFLAGS) $(UNIX_LDFLAGS)
|
||||
LDLIBS = $(TARGET_LDLIBS) $(USR_LDLIBS) $(ARCH_DEP_LDLIBS) $(UNIX_LDLIBS)
|
||||
|
||||
# Override defaults
|
||||
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
|
||||
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c
|
||||
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
LINK.cc = $(CXX) $(CCFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
DEPEND_RULE.c = @echo echo no DEPENDS_RULE.c defined in CONFIG.Unix.hp700
|
||||
DEPEND_RULE.cc = @echo echo no DEPENDS_RULE.cc defined in CONFIG.Unix.hp700
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# BUILD_TYPE
|
||||
BUILD_TYPE = Vx
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
include $(EPICS_BASE)/config/CONFIG.$(BUILD_TYPE).$(ARCH_CLASS)
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68040 -msoft-float -DCPU_FAMILY=MC680X0
|
||||
@@ -1,16 +0,0 @@
|
||||
|
||||
# BUILD_TYPE
|
||||
# Currently either Vx or Unix
|
||||
BUILD_TYPE = Vx
|
||||
|
||||
# For Vx directories of form:
|
||||
#
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
#
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
include $(EPICS_BASE)/config/CONFIG.$(BUILD_TYPE).$(ARCH_CLASS)
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DCPU=MC68030 -m68030 -DCPU_FAMILY=MC680X0
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# BUILD_TYPE
|
||||
# Currently either Vx or Unix
|
||||
BUILD_TYPE = Unix
|
||||
|
||||
# Compiler and utility invocation (supply path to compiler here)
|
||||
# (with warning flags built in)
|
||||
# Paths to compilers
|
||||
GCC = cc
|
||||
ACC = cc
|
||||
KRCC = cc -cckr
|
||||
AR = ar
|
||||
ARFLAGS = r
|
||||
RANLIB = ls
|
||||
RANLIBFLAGS =
|
||||
YACC = $(EYACC)
|
||||
LEX = $(ELEX)
|
||||
G++ = g++
|
||||
CCC = CC
|
||||
MV = mv
|
||||
RMDIR = rm -rf
|
||||
MKDIR = mkdir
|
||||
|
||||
ACC_ANSI_INVOKE_W_NO = $(ACC) -xansi -w
|
||||
ACC_ANSI_INVOKE_W_YES = $(ACC) -xansi
|
||||
ACC_TRAD_INVOKE_W_NO = $(ACC) -Xs -xansi -w
|
||||
ACC_TRAD_INVOKE_W_YES = $(ACC) -Xs -xansi
|
||||
KRCC_TRAD_INVOKE_W_NO = $(KRCC) -w
|
||||
KRCC_TRAD_INVOKE_W_YES = $(KRCC)
|
||||
ACC_STRICT_INVOKE_W_NO = $(ACC) -ansi -w
|
||||
ACC_STRICT_INVOKE_W_YES = $(ACC) -ansi
|
||||
GCC_ANSI_INVOKE_W_NO = $(GCC) -ansi -w
|
||||
GCC_ANSI_INVOKE_W_YES = $(GCC) -ansi
|
||||
GCC_STRICT_INVOKE_W_NO = $(GCC) -ansi -pedantic
|
||||
GCC_STRICT_INVOKE_W_YES = $(GCC) -ansi -Wall -pedantic
|
||||
GCC_TRAD_INVOKE_W_NO = $(GCC) -traditional -w
|
||||
GCC_TRAD_INVOKE_W_YES = $(GCC) -traditional
|
||||
|
||||
C_OLD = $(KRCC_TRAD_INVOKE_W_$(UNIX_WARN))
|
||||
C_ANSI = $($(ANSI)_ANSI_INVOKE_W_$(UNIX_WARN))
|
||||
C_STRICT = $($(ANSI)_STRICT_INVOKE_W_YES)
|
||||
CC = $(C_$(CMPLR))
|
||||
|
||||
CCC_NORMAL_INVOKE_W_NO = $(CCC) +p
|
||||
CCC_NORMAL_INVOKE_W_YES = $(CCC) +p +w
|
||||
CCC_STRICT_INVOKE_W_YES = $(CCC) +p +w
|
||||
CCC_LD_FLAGS =
|
||||
CCC_LD_LIBS =
|
||||
G++_NORMAL_INVOKE_W_NO = $(G++) -ansi -pedantic -w
|
||||
G++_NORMAL_INVOKE_W_YES = $(G++) -ansi -pedantic -Wall
|
||||
G++_STRICT_INVOKE_W_YES = $(G++) -ansi -pedantic -Wtraditional -Wall \
|
||||
-Wmissing-prototypes -Woverloaded-virtual \
|
||||
-Wwrite-strings -Wconversion -Wstrict-prototypes\
|
||||
-Wpointer-arith -Winline
|
||||
|
||||
CXX_NORMAL = $($(CPLUSPLUS)_NORMAL_INVOKE_W_$(UNIX_WARN))
|
||||
CXX_STRICT = $($(CPLUSPLUS)_STRICT_INVOKE_W_YES)
|
||||
|
||||
# GNU make likes CXX instead of CCC
|
||||
CXX = $(CXX_$(CXXCMPLR))
|
||||
|
||||
|
||||
# Static Build options
|
||||
ACC_SFLAGS_YES= -Bstatic
|
||||
ACC_SFLAGS_NO=
|
||||
CC_SFLAGS_YES= -Bstatic
|
||||
CC_SFLAGS_NO=
|
||||
GCC_SFLAGS_YES= -static
|
||||
GCC_SFLAGS_NO=
|
||||
|
||||
SF_OLD = $($(STANDARD)_SFLAGS_$(STATIC_BUILD))
|
||||
SF_ANSI = $($(ANSI)_SFLAGS_$(STATIC_BUILD))
|
||||
SF_STRICT = $(SF_ANSI)
|
||||
UNIX_SFLAGS = $(SF_$(CMPLR))
|
||||
|
||||
# Optimization
|
||||
OPTIM_YES = -O
|
||||
OPTIM_NO =
|
||||
UNIX_OPT_FLAGS = $(OPTIM_$(UNIX_OPT))
|
||||
|
||||
# Include files
|
||||
UNIX_INCLUDES = -I. -I.. -I$(EPICS_BASE_INCLUDE)
|
||||
|
||||
# Operating system flags
|
||||
OP_SYS_FLAGS = -DUNIX
|
||||
|
||||
UNIX_LDFLAGS = -L$(EPICS_BASE_LIB)
|
||||
UNIX_LDLIBS = -lm
|
||||
|
||||
ARCH_DEP_CFLAGS = -DSGI
|
||||
ARCH_DEP_CCFLAGS = $(ARCH_DEP_CFLAGS)
|
||||
UNIX_CFLAGS = $(UNIX_SFLAGS) $(USR_INCLUDES) $(UNIX_INCLUDES) $(OP_SYS_FLAGS)
|
||||
|
||||
UNIX_CCFLAGS = $(UNIX_CFLAGS)
|
||||
|
||||
# Target specific flags
|
||||
TARGET_CFLAGS = $($(basename $@)_CFLAGS)
|
||||
TARGET_CCFLAGS = $($(basename $@)_CCFLAGS)
|
||||
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS)
|
||||
TARGET_LDFLAGS = $($(basename $@)_LDFLAGS)
|
||||
TARGET_LDLIBS = $($(basename $@)_LDLIBS)
|
||||
TARGET_SNCFLAGS = $($(basename $@)_SNCFLAGS)
|
||||
|
||||
CFLAGS = $(UNIX_OPT_FLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(UNIX_CFLAGS)
|
||||
CCFLAGS = $(UNIX_OPT_FLAGS) $(TARGET_CCFLAGS) $(USR_CCFLAGS) $(ARCH_DEP_CCFLAGS) $(UNIX_CCFLAGS)
|
||||
CPPFLAGS += $(TARGET_CPPFLAGS) $(USR_CPPFLAGS)
|
||||
|
||||
# GNU make likes CXX instead of CCC
|
||||
CXXFLAGS = $(CCFLAGS)
|
||||
|
||||
LDFLAGS = $(SPECIAL_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(ARCH_DEP_LDFLAGS) $(UNIX_LDFLAGS)
|
||||
LDLIBS = $(TARGET_LDLIBS) $(USR_LDLIBS) $(ARCH_DEP_LDLIBS) $(UNIX_LDLIBS)
|
||||
|
||||
# Override defaults
|
||||
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
|
||||
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c
|
||||
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
LINK.cc = $(CXX) $(CCFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
LOAD.c = ld -shared $(LDFLAGS)
|
||||
|
||||
DEPENDS_RULE.c = -$(COMPILE.c) -M $(SRCS.c) > .DEPENDS
|
||||
DEPENDS_RULE.cc = @echo no DEPENDS_RULE.cc defined in CONFIG.Unix.sgi
|
||||
@@ -1,147 +0,0 @@
|
||||
#
|
||||
# $Id$: CONFIG.Unix.solaris,v $
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# BUILD_TYPE
|
||||
# Currently either Vx or Unix
|
||||
BUILD_TYPE = Unix
|
||||
|
||||
# Compiler and utility invocation (supply path to compiler here)
|
||||
# (with warning flags built in)
|
||||
# Paths to compilers
|
||||
GCC = gcc
|
||||
ACC = $(SPARCWORKS)/bin/cc
|
||||
# SUNCC doesn't exist under Solaris
|
||||
|
||||
AR = ar
|
||||
RANLIB =
|
||||
YACC = $(EYACC)
|
||||
LEX = $(ELEX)
|
||||
G++ = /opt/gnu/bin/g++
|
||||
CCC = /opt/SUNWspro/bin/CC
|
||||
MV = mv
|
||||
RMDIR = rm -rf
|
||||
MKDIR = mkdir
|
||||
|
||||
ACC_ANSI_INVOKE_W_NO = $(ACC) -Xa -w
|
||||
ACC_ANSI_INVOKE_W_YES = $(ACC) -Xa
|
||||
ACC_STRICT_INVOKE_W_YES = $(ACC) -Xc -v
|
||||
ACC_TRAD_INVOKE_W_NO = $(ACC) -Xs -w
|
||||
ACC_TRAD_INVOKE_W_YES = $(ACC) -Xs
|
||||
ACC_LD_FLAGS =
|
||||
ACC_LD_LIBS =
|
||||
SUNCC_TRAD_INVOKE_W_NO = $(ACC_TRAD_INVOKE_W_NO)
|
||||
SUNCC_TRAD_INVOKE_W_YES = $(ACC_TRAD_INVOKE_W_YES)
|
||||
GCC_ANSI_INVOKE_W_NO = $(GCC) -ansi -w
|
||||
GCC_ANSI_INVOKE_W_YES = $(GCC) -ansi
|
||||
GCC_STRICT_INVOKE_W_YES = $(GCC) -ansi -Wall -pedantic
|
||||
GCC_TRAD_INVOKE_W_NO = $(GCC) -traditional -w
|
||||
GCC_TRAD_INVOKE_W_YES = $(GCC) -traditional
|
||||
GCC_LD_LIBS =
|
||||
GCC_LD_FLAGS =
|
||||
|
||||
C_OLD = $($(STANDARD)_TRAD_INVOKE_W_$(UNIX_WARN))
|
||||
C_ANSI = $($(ANSI)_ANSI_INVOKE_W_$(UNIX_WARN))
|
||||
C_STRICT = $($(ANSI)_STRICT_INVOKE_W_YES)
|
||||
CC = $(C_$(CMPLR))
|
||||
|
||||
LD_LIBS_OLD = $($(STANDARD)_LD_LIBS)
|
||||
LD_LIBS_ANSI = $($(ANSI)_LD_LIBS)
|
||||
LD_LIBS_STRICT = $($(ANSI)_LD_LIBS)
|
||||
CCOMPILER_LDLIBS = $(LD_LIBS_$(CMPLR))
|
||||
LD_FLAGS_OLD = $($(STANDARD)_LD_FLAGS)
|
||||
LD_FLAGS_ANSI = $($(ANSI)_LD_FLAGS)
|
||||
LD_FLAGS_STRICT = $($(ANSI)_LD_FLAGS)
|
||||
CCOMPILER_LDFLAGS = $(LD_FLAGS_$(CMPLR))
|
||||
|
||||
CCC_NORMAL_INVOKE_W_NO = $(CCC) +p
|
||||
CCC_NORMAL_INVOKE_W_YES = $(CCC) +p +w
|
||||
CCC_STRICT_INVOKE_W_YES = $(CCC) +p +w
|
||||
CCC_LD_FLAGS = -L$(SPECIAL_LANG)
|
||||
CCC_LD_LIBS =
|
||||
G++_NORMAL_INVOKE_W_NO = $(G++) -ansi -pedantic -w
|
||||
G++_NORMAL_INVOKE_W_YES = $(G++) -ansi -pedantic -Wall
|
||||
G++_STRICT_INVOKE_W_YES = $(G++) -ansi -pedantic -Wtraditional -Wall \
|
||||
-Wmissing-prototypes -Woverloaded-virtual \
|
||||
-Wwrite-strings -Wconversion -Wstrict-prototypes\
|
||||
-Wpointer-arith -Winline
|
||||
|
||||
CXX_NORMAL = $($(CPLUSPLUS)_NORMAL_INVOKE_W_$(UNIX_WARN))
|
||||
CXX_STRICT = $($(CPLUSPLUS)_STRICT_INVOKE_W_YES)
|
||||
|
||||
# GNU make likes CXX instead of CCC
|
||||
CXX = $(CXX_$(CXXCMPLR))
|
||||
|
||||
# Static Build options
|
||||
#ACC_SFLAGS_YES= -dn
|
||||
ACC_SFLAGS_YES= -Bstatic
|
||||
ACC_SLIBS_YES= -lw -lintl -Bdynamic -ldl -Bstatic -lXext -lX
|
||||
ACC_SLIBS_NO=
|
||||
ACC_SFLAGS_NO=
|
||||
CC_SFLAGS_YES= -dn
|
||||
CC_SFLAGS_NO=
|
||||
GCC_SFLAGS_YES= -static
|
||||
GCC_SFLAGS_NO=
|
||||
|
||||
SF_OLD = $($(STANDARD)_SFLAGS_$(STATIC_BUILD))
|
||||
SF_ANSI = $($(ANSI)_SFLAGS_$(STATIC_BUILD))
|
||||
SF_STRICT = $(SF_ANSI)
|
||||
UNIX_SFLAGS = $(SF_$(CMPLR))
|
||||
|
||||
SL_OLD = $($(STANDARD)_SLIBS_$(STATIC_BUILD))
|
||||
SL_ANSI = $($(ANSI)_SLIBS_$(STATIC_BUILD))
|
||||
SL_STRICT = $(SL_ANSI)
|
||||
UNIX_SLIBS = $(SL_$(CMPLR))
|
||||
|
||||
# Optimization
|
||||
OPTIM_YES = -O
|
||||
OPTIM_NO =
|
||||
UNIX_OPT_FLAGS = $(OPTIM_$(UNIX_OPT))
|
||||
|
||||
# Include files
|
||||
UNIX_INCLUDES = -I. -I.. -I$(EPICS_BASE_INCLUDE)
|
||||
|
||||
# Operating system flags
|
||||
OP_SYS_FLAGS = -DUNIX
|
||||
|
||||
UNIX_LDFLAGS = -L$(EPICS_BASE_LIB) $(CCOMPILER_LDFLAGS)
|
||||
UNIX_LDLIBS = $(UNIX_SLIBS) -lm $(CCOMPILER_LDLIBS)
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CFLAGS = -DSOLARIS
|
||||
ARCH_DEP_CCFLAGS = $(ARCH_DEP_CFLAGS)
|
||||
ARCH_DEP_LDLIBS = -lsocket -lnsl
|
||||
# -lsocket needed by libca.a
|
||||
# -lnsl needed by libca.a
|
||||
|
||||
UNIX_CFLAGS = $(UNIX_SFLAGS) $(UNIX_INCLUDES) $(USR_INCLUDES) $(OP_SYS_FLAGS)
|
||||
|
||||
UNIX_CCFLAGS = $(UNIX_CFLAGS)
|
||||
|
||||
# Target specific flags
|
||||
TARGET_CFLAGS = $($(basename $@)_CFLAGS)
|
||||
TARGET_CCFLAGS = $($(basename $@)_CCFLAGS)
|
||||
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS)
|
||||
TARGET_LDFLAGS = $($(basename $@)_LDFLAGS)
|
||||
TARGET_LDLIBS = $($(basename $@)_LDLIBS)
|
||||
TARGET_SNCFLAGS = $($(basename $@)_SNCFLAGS)
|
||||
|
||||
CFLAGS = $(UNIX_OPT_FLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(UNIX_CFLAGS)
|
||||
CCFLAGS = $(UNIX_OPT_FLAGS) $(TARGET_CCFLAGS) $(USR_CCFLAGS) $(ARCH_DEP_CCFLAGS) $(UNIX_CCFLAGS)
|
||||
CPPFLAGS += $(TARGET_CPPFLAGS) $(USR_CPPFLAGS)
|
||||
|
||||
# GNU make likes CXX instead of CCC
|
||||
CXXFLAGS = $(CCFLAGS)
|
||||
|
||||
LDFLAGS = $(SPECIAL_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(ARCH_DEP_LDFLAGS) $(UNIX_LDFLAGS)
|
||||
LDLIBS = $(TARGET_LDLIBS) $(USR_LDLIBS) $(ARCH_DEP_LDLIBS) $(UNIX_LDLIBS)
|
||||
|
||||
# Override SUN defaults
|
||||
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
|
||||
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c
|
||||
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
LINK.cc = $(CXX) $(CCFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
|
||||
DEPENDS_RULE.c = -$(COMPILE.c) -xM $(SRCS.c) > .DEPENDS
|
||||
DEPENDS_RULE.cc = @echo no DEPENDS_RULE.cc defined in CONFIG.Unix.solaris
|
||||
@@ -1,140 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# BUILD_TYPE
|
||||
# Currently either Vx or Unix
|
||||
BUILD_TYPE = Unix
|
||||
|
||||
# Compiler and utility invocation (supply path to compiler here)
|
||||
# (with warning flags built in)
|
||||
# Paths to compilers
|
||||
GCC = gcc
|
||||
ACC = /usr/lang/acc
|
||||
SUNCC = cc
|
||||
AR = ar
|
||||
ARFLAGS = r
|
||||
RANLIB = ranlib
|
||||
RANLIBFLAGS = -t
|
||||
YACC = $(EYACC)
|
||||
LEX = $(ELEX)
|
||||
G++ = g++
|
||||
CCC = /usr/lang/CC
|
||||
MV = mv
|
||||
RMDIR = rm -rf
|
||||
MKDIR = mkdir
|
||||
|
||||
ACC_ANSI_INVOKE_W_NO = $(ACC) -Xa -w
|
||||
ACC_ANSI_INVOKE_W_YES = $(ACC) -Xa
|
||||
ACC_TRAD_INVOKE_W_NO = $(ACC) -Xs -w
|
||||
ACC_TRAD_INVOKE_W_YES = $(ACC) -Xs
|
||||
ACC_STRICT_INVOKE_W_NO = $(ACC) -Xc -w
|
||||
ACC_STRICT_INVOKE_W_YES = $(ACC) -Xc -vc
|
||||
ACC_LD_FLAGS = -L$(SPECIAL_LANG)
|
||||
ACC_LD_LIBS =
|
||||
SUNCC_TRAD_INVOKE_W_NO = $(SUNCC) -w
|
||||
SUNCC_TRAD_INVOKE_W_YES = $(SUNCC)
|
||||
GCC_ANSI_INVOKE_W_NO = $(GCC) -ansi -w -D__USE_FIXED_PROTOTYPES__
|
||||
GCC_ANSI_INVOKE_W_YES = $(GCC) -ansi -D__USE_FIXED_PROTOTYPES__
|
||||
GCC_STRICT_INVOKE_W_NO = $(GCC) -ansi -pedantic -D__USE_FIXED_PROTOTYPES__
|
||||
GCC_STRICT_INVOKE_W_YES = $(GCC) -ansi -Wall -pedantic -D__USE_FIXED_PROTOTYPES__
|
||||
GCC_TRAD_INVOKE_W_NO = $(GCC) -traditional -w
|
||||
GCC_TRAD_INVOKE_W_YES = $(GCC) -traditional
|
||||
GCC_LD_LIBS = -liberty
|
||||
GCC_LD_FLAGS =
|
||||
|
||||
C_OLD = $($(STANDARD)_TRAD_INVOKE_W_$(UNIX_WARN))
|
||||
C_ANSI = $($(ANSI)_ANSI_INVOKE_W_$(UNIX_WARN))
|
||||
C_STRICT = $($(ANSI)_STRICT_INVOKE_W_YES)
|
||||
CC = $(C_$(CMPLR))
|
||||
|
||||
LD_LIBS_OLD = $($(STANDARD)_LD_LIBS)
|
||||
LD_LIBS_ANSI = $($(ANSI)_LD_LIBS)
|
||||
LD_LIBS_STRICT = $($(ANSI)_LD_LIBS)
|
||||
CCOMPILER_LDLIBS = $(LD_LIBS_$(CMPLR))
|
||||
LD_FLAGS_OLD = $($(STANDARD)_LD_FLAGS)
|
||||
LD_FLAGS_ANSI = $($(ANSI)_LD_FLAGS)
|
||||
LD_FLAGS_STRICT = $($(ANSI)_LD_FLAGS)
|
||||
CCOMPILER_LDFLAGS = $(LD_FLAGS_$(CMPLR))
|
||||
|
||||
CCC_NORMAL_INVOKE_W_NO = $(CCC) +p
|
||||
CCC_NORMAL_INVOKE_W_YES = $(CCC) +p +w
|
||||
CCC_STRICT_INVOKE_W_YES = $(CCC) +p +w
|
||||
CCC_LD_FLAGS = -L$(SPECIAL_LANG)
|
||||
CCC_LD_LIBS =
|
||||
G++_NORMAL_INVOKE_W_NO = $(G++) -ansi -pedantic -w
|
||||
G++_NORMAL_INVOKE_W_YES = $(G++) -ansi -pedantic -Wall
|
||||
G++_STRICT_INVOKE_W_YES = $(G++) -ansi -pedantic -Wtraditional -Wall \
|
||||
-Wmissing-prototypes -Woverloaded-virtual \
|
||||
-Wwrite-strings -Wconversion -Wstrict-prototypes\
|
||||
-Wpointer-arith -Winline
|
||||
|
||||
CXX_NORMAL = $($(CPLUSPLUS)_NORMAL_INVOKE_W_$(UNIX_WARN))
|
||||
CXX_STRICT = $($(CPLUSPLUS)_STRICT_INVOKE_W_YES)
|
||||
|
||||
# GNU make likes CXX instead of CCC
|
||||
CXX = $(CXX_$(CXXCMPLR))
|
||||
|
||||
|
||||
# Static Build options
|
||||
ACC_SFLAGS_YES= -Bstatic
|
||||
ACC_SFLAGS_NO=
|
||||
CC_SFLAGS_YES= -Bstatic
|
||||
CC_SFLAGS_NO=
|
||||
GCC_SFLAGS_YES= -static
|
||||
GCC_SFLAGS_NO=
|
||||
|
||||
SF_OLD = $($(STANDARD)_SFLAGS_$(STATIC_BUILD))
|
||||
SF_ANSI = $($(ANSI)_SFLAGS_$(STATIC_BUILD))
|
||||
SF_STRICT = $(SF_ANSI)
|
||||
UNIX_SFLAGS = $(SF_$(CMPLR))
|
||||
|
||||
# Optimization
|
||||
OPTIM_YES = -O
|
||||
OPTIM_NO =
|
||||
UNIX_OPT_FLAGS = $(OPTIM_$(UNIX_OPT))
|
||||
|
||||
# Include files
|
||||
UNIX_INCLUDES = -I. -I.. -I$(EPICS_BASE_INCLUDE)
|
||||
|
||||
# Operating system flags
|
||||
OP_SYS_FLAGS = -DUNIX
|
||||
|
||||
|
||||
UNIX_LDFLAGS = -L$(EPICS_BASE_LIB) $(CCOMPILER_LDFLAGS)
|
||||
|
||||
UNIX_LDLIBS = -lm $(CCOMPILER_LDLIBS)
|
||||
|
||||
ARCH_DEP_CFLAGS = -DSUNOS4
|
||||
ARCH_DEP_CCFLAGS = $(ARCH_DEP_CFLAGS)
|
||||
UNIX_CFLAGS = $(UNIX_SFLAGS) $(USR_INCLUDES) $(UNIX_INCLUDES) $(OP_SYS_FLAGS)
|
||||
|
||||
UNIX_CCFLAGS = $(UNIX_CFLAGS)
|
||||
|
||||
# Target specific flags
|
||||
TARGET_CFLAGS = $($(basename $@)_CFLAGS)
|
||||
TARGET_CCFLAGS = $($(basename $@)_CCFLAGS)
|
||||
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS)
|
||||
TARGET_LDFLAGS = $($(basename $@)_LDFLAGS)
|
||||
TARGET_LDLIBS = $($(basename $@)_LDLIBS)
|
||||
TARGET_SNCFLAGS = $($(basename $@)_SNCFLAGS)
|
||||
|
||||
CFLAGS = $(UNIX_OPT_FLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(UNIX_CFLAGS)
|
||||
CCFLAGS = $(UNIX_OPT_FLAGS) $(TARGET_CCFLAGS) $(USR_CCFLAGS) $(ARCH_DEP_CCFLAGS) $(UNIX_CCFLAGS)
|
||||
CPPFLAGS += $(TARGET_CPPFLAGS) $(USR_CPPFLAGS)
|
||||
|
||||
# GNU make likes CXX instead of CCC
|
||||
CXXFLAGS = $(CCFLAGS)
|
||||
|
||||
LDFLAGS = $(SPECIAL_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(ARCH_DEP_LDFLAGS) $(UNIX_LDFLAGS)
|
||||
LDLIBS = $(TARGET_LDLIBS) $(USR_LDLIBS) $(ARCH_DEP_LDLIBS) $(UNIX_LDLIBS)
|
||||
|
||||
# Override SUN defaults
|
||||
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
|
||||
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c
|
||||
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
LINK.cc = $(CXX) $(CCFLAGS) $(CPPFLAGS) $(LDFLAGS)
|
||||
|
||||
DEPENDS_RULE.c = -$(COMPILE.c) -M $(SRCS.c) > .DEPENDS
|
||||
DEPENDS_RULE.cc = @echo no DEPENDS_RULE.cc defined in CONFIG.Unix.sun4
|
||||
@@ -4,46 +4,58 @@
|
||||
|
||||
# the order of following list is important
|
||||
|
||||
#
|
||||
# for c++ build add the dirs gdd and cas after ca
|
||||
# (and uncomment the c++ files in src/lbCom/Makefile.Unix)
|
||||
#
|
||||
DIRS = tools
|
||||
DIRS += include
|
||||
DIRS += cxxTemplates
|
||||
DIRS += toolsComm
|
||||
DIRS += makeBaseApp
|
||||
DIRS += libCom
|
||||
DIRS += libvxWorks
|
||||
DIRS += cvtDctsdr
|
||||
DIRS += dbStatic
|
||||
DIRS += db
|
||||
DIRS += bpt
|
||||
DIRS += ca
|
||||
DIRS += util
|
||||
DIRS += misc
|
||||
DIRS += sequencer
|
||||
DIRS += dbtools
|
||||
DIRS += rsrv
|
||||
DIRS += rec
|
||||
DIRS += as
|
||||
DIRS += drv
|
||||
DIRS += dev
|
||||
DIRS += devOpt
|
||||
DIRS += iocCore
|
||||
|
||||
DIRS = \
|
||||
tools \
|
||||
include \
|
||||
cxxTemplates \
|
||||
toolsComm\
|
||||
libCom \
|
||||
libvxWorks\
|
||||
cvtDctsdr \
|
||||
dbStatic \
|
||||
db \
|
||||
bpt \
|
||||
ca \
|
||||
util \
|
||||
misc \
|
||||
sequencer \
|
||||
dbtools \
|
||||
rsrv\
|
||||
rec\
|
||||
as \
|
||||
drv\
|
||||
dev\
|
||||
devOpt\
|
||||
iocCore
|
||||
|
||||
#
|
||||
# if CPLUSPLUS isnt empty then include C++ src codes
|
||||
#
|
||||
DIRS += $(patsubst %,gdd,$(strip $(CPLUSPLUS)))
|
||||
DIRS += $(patsubst %,cas,$(strip $(CPLUSPLUS)))
|
||||
|
||||
EPICS_BASE = $(TOP)
|
||||
|
||||
# EPICS include config file
|
||||
include $(TOP)/config/CONFIG
|
||||
include $(EPICS_BASE)/config/CONFIG
|
||||
|
||||
ifdef INSTALL_LOCATION_BASE
|
||||
INSTALL_LOCATION = $(INSTALL_LOCATION_BASE)
|
||||
endif
|
||||
|
||||
EPICS_BASE = $(INSTALL_LOCATION)
|
||||
|
||||
#
|
||||
# this speeds up the build by turning off implicit rules search
|
||||
#
|
||||
.PHONY: $(TOP)/config/CONFIG
|
||||
.PHONY: $(TOP)/config/CONFIG.* $(TOP)/config/CONFIG_*
|
||||
.PHONY: $(TOP)/config/RULES.* $(TOP)/config/RULES_* .DEPENDS
|
||||
.PHONY: $(HOME)/.EPICS_CONFIG
|
||||
.PHONY: ../Makefile.Vx ../Makefile.Unix ../Makefile.Host Makefile
|
||||
# for EPICS Makefiles (which are not created from other files)
|
||||
.PHONY:: $(TOP)/config/CONFIG
|
||||
.PHONY:: $(TOP)/config/CONFIG.* $(TOP)/config/CONFIG_*
|
||||
.PHONY:: $(TOP)/config/RULES.* $(TOP)/config/RULES_* DEPENDS
|
||||
.PHONY:: $(HOME)/EPICS_CONFIG $(HOME)/EPICS_CONFIG.$(HOST_ARCH)
|
||||
.PHONY:: ../Makefile.Vx ../Makefile.Unix ../Makefile.Host Makefile
|
||||
|
||||
|
||||
|
||||
19
config/CONFIG_BASE_VERSION
Normal file
19
config/CONFIG_BASE_VERSION
Normal file
@@ -0,0 +1,19 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# EPICS Version information
|
||||
#
|
||||
# This file is interpreted by the Bourne Shell (MakeRelease), so spaces are
|
||||
# not allowed around the '=' signs or in unquoted values.
|
||||
#
|
||||
|
||||
EPICS_VERSION=3
|
||||
EPICS_REVISION=13
|
||||
EPICS_MODIFICATION=1
|
||||
EPICS_UPDATE_NAME=
|
||||
EPICS_UPDATE_LEVEL=1
|
||||
|
||||
EPICS_VERSION_STRING="EPICS Version ${EPICS_VERSION}.${EPICS_REVISION}.${EPICS_MODIFICATION}.${EPICS_UPDATE_NAME}${EPICS_UPDATE_LEVEL}"
|
||||
|
||||
CVS_DATE="\$$Date$$"
|
||||
|
||||
@@ -9,15 +9,15 @@
|
||||
|
||||
# Common Configuration Information
|
||||
|
||||
BUILD_ARCHS=$(HOST_ARCH)
|
||||
ifndef CROSS_COMPILER_HOST_ARCHS
|
||||
BUILD_ARCHS+=$(CROSS_COMPILER_TARGET_ARCHS)
|
||||
else
|
||||
ifeq ($(HOST_ARCH),$(findstring $(HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS)))
|
||||
BUILD_ARCHS+=$(CROSS_COMPILER_TARGET_ARCHS)
|
||||
endif
|
||||
endif
|
||||
|
||||
# CROSS1 will be defined only when CROSS_COMPILER_HOST_ARCHS is NOT defined
|
||||
CROSS1 = $(CROSS_COMPILER_TARGET_ARCHS$(word 1,$(CROSS_COMPILER_HOST_ARCHS)))
|
||||
|
||||
# CROSS2 will be defined only when CROSS_COMPILER_HOST_ARCHS is defined
|
||||
# and HOST_ARCH is one of it's words
|
||||
CROSS2 = $(CROSS_COMPILER_TARGET_ARCHS$(filter-out 1,$(words $(filter $(HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS)))))
|
||||
|
||||
BUILD_ARCHS = $(HOST_ARCH) $(CROSS1) $(CROSS2)
|
||||
|
||||
INSTALL_LOCATION = $(TOP)
|
||||
|
||||
INSTALL_LOCATION_LIB = $(INSTALL_LOCATION)/lib
|
||||
@@ -25,37 +25,39 @@ INSTALL_LOCATION_BIN = $(INSTALL_LOCATION)/bin
|
||||
|
||||
INSTALL_INCLUDE = $(INSTALL_LOCATION)/include
|
||||
INSTALL_DOC = $(INSTALL_LOCATION)/doc
|
||||
INSTALL_HTML = $(INSTALL_LOCATION)/html
|
||||
INSTALL_MAN = $(INSTALL_LOCATION)/man
|
||||
INSTALL_TEMPLATES = $(INSTALL_LOCATION)/templates
|
||||
INSTALL_DBD = $(INSTALL_LOCATION)/dbd
|
||||
INSTALL_CONFIG = $(INSTALL_LOCATION)/config
|
||||
|
||||
EPICS_BASE_INCLUDE = $(EPICS_BASE)/include
|
||||
EPICS_BASE_DBD = $(EPICS_BASE)/dbd
|
||||
|
||||
EPICS_EXTENSIONS_INCLUDE = $(EPICS_EXTENSIONS)/include
|
||||
EPICS_EXTENSIONS_TEMPLATES = $(EPICS_EXTENSIONS)/templates
|
||||
|
||||
DIVIDER = .
|
||||
OBJ = .
|
||||
RES = .
|
||||
|
||||
EPICS_BASE_HOST_BIN = $(EPICS_BASE)/bin/$(HOST_ARCH)
|
||||
|
||||
|
||||
# private versions of lex/yacc from EPICS
|
||||
EYACC = $(EPICS_BASE)/bin/$(HOST_ARCH)/antelope
|
||||
ELEX = $(EPICS_BASE)/bin/$(HOST_ARCH)/e_flex -S$(EPICS_BASE_INCLUDE)/flex.skel.static
|
||||
EYACC = $(EPICS_BASE_HOST_BIN)/antelope$(EXE)
|
||||
ELEX = $(EPICS_BASE_HOST_BIN)/e_flex$(EXE) -S$(EPICS_BASE_INCLUDE)/flex.skel.static
|
||||
YACC = $(EYACC)
|
||||
LEX = $(ELEX)
|
||||
|
||||
# Default for perl if it's on the PATH,
|
||||
# otherwise override this in CONFIG_SITE_HOST_ARCH.<host_arch>
|
||||
PERL=perl
|
||||
|
||||
# install from EPICS
|
||||
INSTALL = $(EPICS_BASE)/bin/$(HOST_ARCH)/installEpics
|
||||
INSTALL = $(PERL) $(EPICS_BASE_HOST_BIN)/installEpics.pl
|
||||
INSTALL_PRODUCT = $(INSTALL)
|
||||
|
||||
# dbtools from EPICS
|
||||
|
||||
# state notation language compiler (installed from base/src/sequencer)
|
||||
SNC = $(EPICS_BASE)/bin/$(HOST_ARCH)/snc
|
||||
|
||||
# vxWorks definitions
|
||||
VX_CONFIG_DIR = $(VX_DIR)/config
|
||||
VX_INCLUDE = $(VX_DIR)/h
|
||||
VX_GNU_BIN = $(VX_GNU)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
VX_GNU_LIB = $(VX_GNU)/$(HOST_ARCH).$(ARCH_CLASS)/lib
|
||||
SNC = $(EPICS_BASE_HOST_BIN)/snc$(EXE)
|
||||
|
||||
ifdef T_A
|
||||
|
||||
@@ -66,15 +68,161 @@ INSTALL_BIN = $(INSTALL_LOCATION_BIN)/$(T_A)
|
||||
EPICS_BASE_LIB = $(EPICS_BASE)/lib/$(T_A)
|
||||
EPICS_BASE_BIN = $(EPICS_BASE)/bin/$(T_A)
|
||||
|
||||
EPICS_EXTENSIONS_LIB = $(EPICS_EXTENSIONS)/lib/$(T_A)
|
||||
EPICS_EXTENSIONS_BIN = $(EPICS_EXTENSIONS)/bin/$(T_A)
|
||||
#--------------------------------------------------
|
||||
# GNU compiler defaults
|
||||
|
||||
VX_IMAGE = $(VX_CONFIG_DIR)/$(T_A)/vxWorks
|
||||
VX_IMAGE_SYM = $(VX_CONFIG_DIR)/$(T_A)/vxWorks.sym
|
||||
GCC_ANSI = $(GCC) -ansi
|
||||
GCC_STRICT = $(GCC) -ansi -pedantic
|
||||
GCC_TRAD = $(GCC) -traditional
|
||||
GCC_WARN_YES = -Wall
|
||||
GCC_WARN_NO = -w
|
||||
GCC_OPT_YES = -O
|
||||
GCC_OPT_NO = -g
|
||||
GCC_SFLAGS_YES = -static
|
||||
GCC_SFLAGS_NO =
|
||||
GCC_SLIBS_YES =
|
||||
GCC_SLIBS_NO =
|
||||
GCC_SHRLIB_CFLAGS_YES = -fPIC
|
||||
GCC_SHRLIB_LDFLAGS_YES = -shared
|
||||
|
||||
# location of installed vxWorks image
|
||||
EPICS_VX_IMAGE = $(EPICS_BASE_BIN)/vxWorks
|
||||
EPICS_VX_IMAGE_SYM = $(EPICS_BASE_BIN)/vxWorks.sym
|
||||
G++_NORMAL = $(G++) -ansi -pedantic
|
||||
G++_STRICT = $(G++) -ansi -pedantic -Wtraditional
|
||||
G++_TRAD = $(G++) -traditional
|
||||
G++_TEMPL_INST_FLAG = -DEXPL_TEMPL
|
||||
G++_WARN_YES = -Wall \
|
||||
-Wmissing-prototypes -Woverloaded-virtual \
|
||||
-Wwrite-strings -Wconversion -Wstrict-prototypes\
|
||||
-Wpointer-arith -Winline
|
||||
G++_WARN_NO = -w
|
||||
G++_OPT_YES = -O
|
||||
G++_OPT_NO = -g
|
||||
G++_SFLAGS_YES = -static
|
||||
G++_SFLAGS_NO =
|
||||
G++_SLIBS_YES =
|
||||
G++_SLIBS_NO =
|
||||
G++_DEPENDS_FLAG = -MM
|
||||
G++_SHRLIB_CFLAGS_YES = -fPIC
|
||||
G++_SHRLIB_LDFLAGS_YES = -shared
|
||||
|
||||
#--------------------------------------------------
|
||||
# C compiler
|
||||
|
||||
CC = $($(ANSI)_$(CMPLR))
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Vendor compiler dependent options
|
||||
VENDOR_DEP_CFLAGS = $($(ANSI)_DEP_CFLAGS)
|
||||
VENDOR_DEP_CXXFLAGS = $($(CPLUSPLUS)_DEP_CFLAGS)
|
||||
|
||||
#--------------------------------------------------
|
||||
# C++ compiler
|
||||
|
||||
CXX = $($(CPLUSPLUS)_$(CXXCMPLR))
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Architecture dependent options (solaris,sun4,mv167,...)
|
||||
ARCH_DEP_CFLAGS =
|
||||
ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS)
|
||||
ARCH_DEP_LDFLAGS =
|
||||
ARCH_DEP_LDLIBS =
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Operating system dependent options (Unix,Vx,WIN32...)
|
||||
OP_SYS_CFLAGS =
|
||||
OP_SYS_LDFLAGS =
|
||||
OP_SYS_INCLUDES =
|
||||
OP_SYS_LDLIBS =
|
||||
|
||||
#--------------------------------------------------
|
||||
# SOURCE* used by WIN32 only
|
||||
SOURCE_CFLAG =
|
||||
SOURCE_CXXCFLAG =
|
||||
|
||||
#--------------------------------------------------
|
||||
# Makefile specific options
|
||||
USR_INCLUDES =
|
||||
USR_CFLAGS =
|
||||
USR_CXXFLAGS =
|
||||
USR_LDFLAGS =
|
||||
USR_LDLIBS =
|
||||
USR_CPPFLAGS =
|
||||
|
||||
#--------------------------------------------------
|
||||
# Target specific options
|
||||
TARGET_INCLUDES = $($(basename $@)_INCLUDES)
|
||||
TARGET_CFLAGS = $($(basename $@)_CFLAGS)
|
||||
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS)
|
||||
TARGET_LDFLAGS = $($(basename $@)_LDFLAGS)
|
||||
TARGET_LDLIBS = $($(basename $@)_LDLIBS)
|
||||
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS)
|
||||
TARGET_SNCFLAGS = $($(basename $@)_SNCFLAGS)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Depends flag
|
||||
DEPENDS_FLAG = $($(CPLUSPLUS)_DEPENDS_FLAG)
|
||||
|
||||
#--------------------------------------------------
|
||||
# C++ template flag option
|
||||
TEMPL_INST_CXXFLAG = $($(CPLUSPLUS)_TEMPL_INST_FLAG)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Epics includes (CONFIG.Vx will override OS_CLASS)
|
||||
OS_CLASS = $(ARCH_CLASS)
|
||||
EPICS_INCLUDES = -I$(INSTALL_INCLUDE) -I$(INSTALL_INCLUDE)/os/$(OS_CLASS)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Warnings flags (CONFIG.Vx will override)
|
||||
WARN_CFLAGS = $($(ANSI)_WARN_$(HOST_WARN))
|
||||
WARN_CXXFLAGS = $($(CPLUSPLUS)_WARN_$(HOST_WARN))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Optimization flags (CONFIG.Vx will override)
|
||||
OPT_CFLAGS = $($(ANSI)_OPT_$(HOST_OPT))
|
||||
OPT_CXXFLAGS = $($(CPLUSPLUS)_OPT_$(HOST_OPT))
|
||||
OPT_LDFLAGS =
|
||||
|
||||
#--------------------------------------------------
|
||||
# Static build options
|
||||
STATIC_CFLAGS = $($(ANSI)_SFLAGS_$(STATIC_BUILD))
|
||||
STATIC_CXXCFLAGS = $($(CPLUSPLUS)_SFLAGS_$(STATIC_BUILD))
|
||||
STATIC_LDFLAGS = $($(ANSI)_SLDFLAGS_$(STATIC_BUILD))
|
||||
STATIC_LDLIBS = $($(ANSI)_SLIBS_$(STATIC_BUILD))
|
||||
|
||||
#--------------------------------------------------
|
||||
# ar definition default
|
||||
ARCMD = $(AR) $(ARFLAGS) $@
|
||||
|
||||
#--------------------------------------------------
|
||||
# depends definition
|
||||
DEPENDS_RULE = -$(COMPILE.cc) $(DEPENDS_FLAG) $^ > DEPENDS
|
||||
|
||||
#--------------------------------------------------
|
||||
|
||||
# Include files
|
||||
|
||||
INCLUDES = -I. -I.. $(USR_INCLUDES) $(TARGET_INCLUDES) $(EPICS_INCLUDES) $(OP_SYS_INCLUDES)
|
||||
|
||||
CFLAGS = $(OPT_CFLAGS) $(DEBUG_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS)\
|
||||
$(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(VENDOR_DEP_CFLAGS) $(STATIC_CFLAGS)\
|
||||
$(OP_SYS_CFLAGS) $(INCLUDES)
|
||||
|
||||
CXXFLAGS = $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS)\
|
||||
$(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS) $(VENDOR_DEP_CXXFLAGS) $(STATIC_CXXCFLAGS)\
|
||||
$(OP_SYS_CFLAGS) $(TEMPL_INST_CXXFLAG) $(INCLUDES)
|
||||
|
||||
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS)\
|
||||
$(ARCH_DEP_LDFLAGS) $(STATIC_LDFLAGS) $(OP_SYS_LDFLAGS)
|
||||
|
||||
LDLIBS = $(TARGET_LDLIBS) $(USR_LDLIBS) $(ARCH_DEP_LDLIBS)\
|
||||
$(STATIC_LDLIBS) $(OP_SYS_LDLIBS)
|
||||
|
||||
CPPFLAGS += $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)
|
||||
|
||||
CPPSNCFLAGS = $(INCLUDES)
|
||||
|
||||
# Build compile line here
|
||||
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c $(SOURCE_FLAG)
|
||||
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(SOURCE_CXXFLAG)
|
||||
|
||||
endif
|
||||
|
||||
|
||||
@@ -10,37 +10,117 @@
|
||||
# not allowed around the '=' signs or in unquoted values.
|
||||
# Makefile variables are not defined here.
|
||||
#
|
||||
# Note: This file is read by base/src/libCom/bldEnvdata.pl,
|
||||
# so the variable definitions in here should be kept 'simple':
|
||||
# VAR=VALUE
|
||||
# each one on a single line.
|
||||
#
|
||||
|
||||
|
||||
# Default environment settings
|
||||
|
||||
# Channel Access:
|
||||
# EPICS_CA_ADDR_LIST augment beacon/search dest ip addr list
|
||||
# EPICS_CA_ADDR_LIST
|
||||
# Augment beacon/search dest ip addr list
|
||||
# from white space separated ip addresses in this
|
||||
# environment variable. "Quote" if more than one addr.
|
||||
# EPICS_CA_AUTO_ADDR_LIST YES = augment beacon/search dest ip
|
||||
# addr list from interfaces found; NO = only use
|
||||
# EPICS_CA_AUTO_ADDR_LIST
|
||||
# YES = augment beacon/search dest ip
|
||||
# addr list from network interfaces found; NO = only use
|
||||
# EPICS_CA_ADDR_LIST to create this list.
|
||||
# EPICS_CA_CONN_TMO sec before sending echo request from client.
|
||||
# EPICS_CA_BEACON_PERIOD quiescent sec between server beacons.
|
||||
# EPICS_CA_CONN_TMO
|
||||
# after not seeing a server beacon for this number
|
||||
# of seconds the clients will send an echo request over
|
||||
# tcp/ip to verify the connection.
|
||||
# EPICS_CA_REPEATER_PORT CA repeater port number.
|
||||
# EPICS_CA_SERVER_PORT CA server port number.
|
||||
|
||||
EPICS_CA_ADDR_LIST=""
|
||||
EPICS_CA_AUTO_ADDR_LIST=YES
|
||||
EPICS_CA_CONN_TMO=30.0
|
||||
EPICS_CA_BEACON_PERIOD=15.0
|
||||
EPICS_CA_REPEATER_PORT=5065
|
||||
EPICS_CA_SERVER_PORT=5064
|
||||
|
||||
#
|
||||
# These parameters are only used by the CA server library
|
||||
#
|
||||
# EPICS_CA_BEACON_PERIOD
|
||||
# quiescent sec between server beacons.
|
||||
# EPICS_CAS_INTF_ADDR_LIST - list of IP addresses identifying
|
||||
# a limited set of network interfaces for server communication.
|
||||
# Specifically, this parameter specifies the interfaces from
|
||||
# which the server will accept TCP/IP connections. It also
|
||||
# specifies that UDP search messages addressed to both
|
||||
# the IP addresses in EPICS_CAS_INTF_ADDR_LIST and also
|
||||
# the broadcast addresses (or the destination addresses of
|
||||
# point to point interfaces) of the corresponding interfaces
|
||||
# will be accepted by the server. If this parameter is empty
|
||||
# then TCP/IP connections are accepted from any interface
|
||||
# (and any search messages addressed to the host are accepted).
|
||||
# Beacons are sent only to the broadcast address of each interface
|
||||
# in this list (or the destination address of point to point
|
||||
# interfaces) if EPICS_CA_AUTO_ADDR_LIST is YES.
|
||||
# Type "ifconfig -a" in order to determine which interfaces
|
||||
# are available.
|
||||
# EPICS_CAS_BEACON_ADDR_LIST - If this parameter is specified
|
||||
# or if EPICS_CAS_INTF_ADDR_LIST isnt empty then this parameter
|
||||
# is used instead of EPICS_CA_ADDR_LIST by the server library
|
||||
# to augment the list of addresses to send beacons to.
|
||||
# EPICS_CAS_SERVER_PORT - If this parameter is specified then it
|
||||
# and not EPICS_CA_SERVER_PORT is used to determine the server's
|
||||
# port number. It is possible to have multiple servers on the
|
||||
# same host on the same EPICS_CAS_SERVER_PORT port if the IP
|
||||
# kernel is modern (if it has multicast enhancements). In this
|
||||
# situation all servers will share the same user specified
|
||||
# UDP port number and will be assigned unique TCP port numbers.
|
||||
# The fact that the servers may not be using the user specified
|
||||
# port number for TCP will be completely transparent to EPICS
|
||||
# 3.13 or higher clients that will be locating the servers
|
||||
# using the user specified UDP port number, but will be connecting to
|
||||
# the servers using whatever TCP port has been assigned.
|
||||
#
|
||||
# If experiencing trouble getting clients to connect
|
||||
# --------------------------------------------------
|
||||
#
|
||||
# o Make sure that the broadcast addresses are identical on the
|
||||
# server's host and on the client's host. This can be checked with
|
||||
# "netstat -i" or "ifconfig -a".
|
||||
#
|
||||
# o Make sure that the client and server are using the same UDP
|
||||
# port. Check the server's port by running "netstat -a | grep nnn"
|
||||
# where nnn is the port number involved. If you do not set
|
||||
# EPICS_CA_SERVER_PORT or EPICS_CAS_SERVER_PORT
|
||||
# then the default port will be 5064.
|
||||
#
|
||||
# o Two servers can run on the same host with the same server port number
|
||||
# if the following restrictions are understood (good luck). If the host has a
|
||||
# modern IP kernel it is possible to have two servers on the same UDP port.
|
||||
# It is not possible for two servers to run on the same host using the same
|
||||
# TCP IP server port. If the CA server library detects that a 2nd server is attempting
|
||||
# to start on the same port as an existing CA server then both servers will use the
|
||||
# same UDP port if it is a modern IP kernel, and the 2nd server will
|
||||
# be allocated a new TCP port. In this situation the clients will still be
|
||||
# configured to use the same port number for both servers. The clients
|
||||
# will find the 2nd server via the shared UDP port, and transparently
|
||||
# connect to the 2nd server's allocated TCP port. Be aware that If there are
|
||||
# two server's running on the same host on the same UDP port then they will
|
||||
# both receive all UDP search requests sent as broadcasts, but will unfortunately (due to
|
||||
# what I consider to be a real weakness of most IP kernel implementations) only one
|
||||
# of the servers will typically receive UDP search requests sent to unicast addresses (i.e.
|
||||
# a specific host's ip address).
|
||||
#
|
||||
|
||||
|
||||
EPICS_CA_BEACON_PERIOD=15.0
|
||||
EPICS_CAS_INTF_ADDR_LIST=""
|
||||
EPICS_CAS_BEACON_ADDR_LIST=""
|
||||
EPICS_CAS_SERVER_PORT=
|
||||
|
||||
|
||||
# Log Server:
|
||||
# EPICS_IOC_LOG_PORT Log server port number.
|
||||
|
||||
# EPICS_IOC_LOG_PORT Log server port number etc.
|
||||
EPICS_IOC_LOG_PORT=7004
|
||||
|
||||
|
||||
# Other services:
|
||||
|
||||
EPICS_CMD_PROTO_PORT=
|
||||
|
||||
9
config/CONFIG_HOST_ARCH.Linux
Normal file
9
config/CONFIG_HOST_ARCH.Linux
Normal file
@@ -0,0 +1,9 @@
|
||||
# CONFIG_HOST_ARCH.Linux
|
||||
#
|
||||
# Override values in CONFIG.Vx
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.UnixCommon
|
||||
|
||||
WIND_HOST_TYPE = Linux
|
||||
|
||||
9
config/CONFIG_HOST_ARCH.LynxOS
Normal file
9
config/CONFIG_HOST_ARCH.LynxOS
Normal file
@@ -0,0 +1,9 @@
|
||||
# CONFIG_HOST_ARCH.LynxOS
|
||||
#
|
||||
# Override values in CONFIG.LynxOS
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.UnixCommon
|
||||
|
||||
WIND_HOST_TYPE = LynxOS
|
||||
|
||||
12
config/CONFIG_HOST_ARCH.UnixCommon
Normal file
12
config/CONFIG_HOST_ARCH.UnixCommon
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
# CONFIG_HOST_ARCH.UnixCommon
|
||||
#
|
||||
|
||||
# Unix command definitions
|
||||
CP = cp
|
||||
MV = mv
|
||||
RM = rm -f
|
||||
MKDIR = mkdir
|
||||
RMDIR = rm -rf
|
||||
CHMOD = "/bin/chmod"
|
||||
|
||||
18
config/CONFIG_HOST_ARCH.WIN32
Normal file
18
config/CONFIG_HOST_ARCH.WIN32
Normal file
@@ -0,0 +1,18 @@
|
||||
# CONFIG_HOST_ARCH.WIN32
|
||||
#
|
||||
|
||||
EXE=.exe
|
||||
|
||||
CP =$(PERL) $(EPICS_BASE_HOST_BIN)/cp.pl
|
||||
MV =$(PERL) $(EPICS_BASE_HOST_BIN)/mv.pl
|
||||
RM =$(PERL) $(EPICS_BASE_HOST_BIN)/rm.pl -f
|
||||
MKDIR=$(PERL) $(EPICS_BASE_HOST_BIN)/mkdir.pl
|
||||
RMDIR=$(PERL) $(EPICS_BASE_HOST_BIN)/rm.pl -rf
|
||||
CHMOD=echo
|
||||
ECHO=echo
|
||||
|
||||
WIND_HOST_TYPE = x86-win32
|
||||
|
||||
# Use std path variables from ms
|
||||
HOME = $(HOMEDRIVE)$(HOMEPATH)
|
||||
|
||||
9
config/CONFIG_HOST_ARCH.alpha
Normal file
9
config/CONFIG_HOST_ARCH.alpha
Normal file
@@ -0,0 +1,9 @@
|
||||
# CONFIG_HOST_ARCH.alpha
|
||||
#
|
||||
# Override values in CONFIG.Vx
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.UnixCommon
|
||||
|
||||
WIND_HOST_TYPE = alpha
|
||||
|
||||
13
config/CONFIG_HOST_ARCH.cygwin32
Normal file
13
config/CONFIG_HOST_ARCH.cygwin32
Normal file
@@ -0,0 +1,13 @@
|
||||
# CONFIG_HOST_ARCH.cygwin32
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.UnixCommon
|
||||
|
||||
EXE=.exe
|
||||
|
||||
TORNADO=YES
|
||||
|
||||
WIND_HOST_TYPE = cygwin32
|
||||
|
||||
9
config/CONFIG_HOST_ARCH.hp700
Normal file
9
config/CONFIG_HOST_ARCH.hp700
Normal file
@@ -0,0 +1,9 @@
|
||||
# CONFIG_HOST_ARCH.hp700
|
||||
#
|
||||
# Override values in CONFIG.Vx
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.UnixCommon
|
||||
|
||||
WIND_HOST_TYPE = hp700
|
||||
|
||||
9
config/CONFIG_HOST_ARCH.sgi
Normal file
9
config/CONFIG_HOST_ARCH.sgi
Normal file
@@ -0,0 +1,9 @@
|
||||
# CONFIG_HOST_ARCH.sgi
|
||||
#
|
||||
# Override values in CONFIG.Vx
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.UnixCommon
|
||||
|
||||
WIND_HOST_TYPE = sgi
|
||||
|
||||
9
config/CONFIG_HOST_ARCH.solaris
Normal file
9
config/CONFIG_HOST_ARCH.solaris
Normal file
@@ -0,0 +1,9 @@
|
||||
# CONFIG_HOST_ARCH.solaris
|
||||
#
|
||||
# Override values in CONFIG.Vx
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.UnixCommon
|
||||
|
||||
WIND_HOST_TYPE = sun4-solaris2
|
||||
|
||||
14
config/CONFIG_HOST_ARCH.sun4
Normal file
14
config/CONFIG_HOST_ARCH.sun4
Normal file
@@ -0,0 +1,14 @@
|
||||
# CONFIG_HOST_ARCH.sun4
|
||||
#
|
||||
# Override values in CONFIG.Vx
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.UnixCommon
|
||||
|
||||
WIND_HOST_TYPE = sun4-sunos4
|
||||
|
||||
##########################
|
||||
# added temporarily because gdd will not compile - 2/18/98
|
||||
CPLUSPLUS =
|
||||
##########################
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
# solaris
|
||||
# sgi
|
||||
# Linux
|
||||
# WIN32
|
||||
# LynxOS
|
||||
#
|
||||
# HOST_ARCH now an environment variable
|
||||
# HOST_ARCH=$(shell /usr/local/epics/startup/HostArch)
|
||||
@@ -35,8 +37,12 @@ endif
|
||||
# mv147
|
||||
# hkv2f
|
||||
# niCpu030
|
||||
# pc486
|
||||
# frc5ce
|
||||
# hkbaja47
|
||||
#
|
||||
CROSS_COMPILER_TARGET_ARCHS=mv167 mv162
|
||||
CROSS_COMPILER_TARGET_ARCHS=mv167
|
||||
|
||||
|
||||
# If only a subset of the host architectures perform
|
||||
# the build for the CROSS_COMPILER_TARGET_ARCHS
|
||||
@@ -44,44 +50,76 @@ CROSS_COMPILER_TARGET_ARCHS=mv167 mv162
|
||||
#
|
||||
#CROSS_COMPILER_HOST_ARCHS=sun4
|
||||
|
||||
# VxWorks directory
|
||||
#VX_DIR=/usr/csite/vw/5.1.1/vw
|
||||
#VX_DIR=/usr/local/vw/vxV51.mm
|
||||
#VX_DIR=/usr/local/vw/vxV52/vw
|
||||
VX_DIR=/usr/local/vw/vxV52p1/vw
|
||||
# Vx release Tornado?
|
||||
# must be either YES or NO
|
||||
TORNADO=YES
|
||||
#TORNADO=NO
|
||||
|
||||
# VxWorks directory for TORNADO=YES
|
||||
#VX_DIR_YES=c:\\Tornado
|
||||
VX_DIR_YES = /usr/local/vw/tornado101
|
||||
|
||||
#VX_GNU = $(VX_DIR)
|
||||
VX_GNU = $(VX_DIR)/../vxgccV2.2.3.1
|
||||
# VxWorks directory for TORNADO=NO
|
||||
#VX_DIR_NO=$(VW)
|
||||
#VX_DIR_NO=/usr/local/vw/vxV51.mm
|
||||
#VX_DIR_NO=/usr/local/vw/vxV52/vw
|
||||
#VX_DIR_NO=c:/Tornado/target
|
||||
VX_DIR_NO=/usr/local/vw/vxV52p1/vw
|
||||
|
||||
# Directory for TORNADO=NO gnu gcc crosscompiler
|
||||
VX_GNU_NO = $(VX_DIR_NO)/../vxgccV2.2.3.1
|
||||
|
||||
# Directory for TORNADO=NO gnu g++ crosscompiler
|
||||
# used by applications for hideos builds only
|
||||
#GNU_DIR = $(LOCAL_GNU)
|
||||
GNU_DIR = /usr/local/hideos/gnu_install-2.7.2
|
||||
|
||||
# Client ANSI Compiler
|
||||
# GCC (gcc -ansi)
|
||||
# ACC (acc)
|
||||
# HPACC (cc -Aa)
|
||||
#ANSI=HPACC
|
||||
# Client ANSI C Compiler (for Host builds)
|
||||
# GCC (gcc -ansi) GNU
|
||||
# ACC (acc) OS VENDOR
|
||||
# HPACC (cc -Aa) OTHER VENDOR
|
||||
ANSI=ACC
|
||||
|
||||
# Client Standard C Compiler choice
|
||||
# GCC (gcc -traditional)
|
||||
# ACC (acc -Xs)
|
||||
# SUNCC (cc)
|
||||
# HPCC (cc -Ac)
|
||||
#STANDARD=HPCC
|
||||
STANDARD=ACC
|
||||
|
||||
# Client C++ Compiler (Not supported yet)
|
||||
# C++ Compiler (for Host builds)
|
||||
# G++ (g++) GNU C++
|
||||
# CCC (CC) SUN C++
|
||||
#CPLUSPLUS=G++
|
||||
# CCC (CC) OS VENDOR C++
|
||||
#Note: if CPLUSPLUS is empty then C++ src codes are not built
|
||||
#CPLUSPLUS= # use this if site does not have C++ compiler
|
||||
CPLUSPLUS=CCC
|
||||
|
||||
# Default ANSI level, individual Makefiles will override
|
||||
# if they cannot support ANSI compilation.
|
||||
# STRICT - ANSI C - force warning flags
|
||||
# ANSI - ANSI C
|
||||
# OLD - Standard C - Not appropriate here.
|
||||
CMPLR=STRICT
|
||||
|
||||
# Default C++ compiler ANSI level
|
||||
# STRICT - ANSI C++ force strict warning flags
|
||||
# NORMAL - ANSI C++ optional warning flags
|
||||
# Individual Makefiles may override
|
||||
CXXCMPLR=STRICT
|
||||
|
||||
# Build shared libraries?
|
||||
# (archive libraries will also be built)
|
||||
# must be either YES or NO
|
||||
# NOTE: CONFIG_SITE.Host.$(HOST_ARCH) files may override
|
||||
#
|
||||
# NOTE WIN32: YES results in a DLL. CONFIG_SITE.Host.WIN32
|
||||
# distribution file contains YES override
|
||||
#
|
||||
# NOTE solaris and sun4: If YES then LD_LIBRARY_PATH must
|
||||
# include fullpathname $(INSTALL_LOCATION)/lib/$(HOST_ARCH)
|
||||
# for both the base build and when invoking base executables
|
||||
SHARED_LIBRARIES=NO
|
||||
|
||||
# Build client objects statically ?
|
||||
# must be either YES or NO
|
||||
STATIC_BUILD=NO
|
||||
|
||||
# Unix Optimization
|
||||
# must be either YES or NO
|
||||
UNIX_OPT=YES
|
||||
HOST_OPT=YES
|
||||
|
||||
# VxWorks Optimization
|
||||
# must be either YES or NO
|
||||
@@ -89,12 +127,15 @@ VX_OPT=YES
|
||||
|
||||
# Generate Verbose Compiler Warnings for Unix
|
||||
# must be either YES or NO
|
||||
UNIX_WARN=YES
|
||||
HOST_WARN=YES
|
||||
|
||||
# Generate Verbose Compiler Warnings for VxWorks
|
||||
# must be either YES or NO
|
||||
VX_WARN=YES
|
||||
|
||||
# adl2dl
|
||||
ADL2DL = $(EPICS_EXTENSIONS)/bin/$(HOST_ARCH)/adl2dl
|
||||
|
||||
# sch2edif compiler and flags
|
||||
SCH2EDIF = sch2edif
|
||||
SCH2EDIF_PATH =
|
||||
@@ -107,3 +148,6 @@ E2DB = $(EPICS_EXTENSIONS)/bin/$(HOST_ARCH)/e2db
|
||||
E2DB_SYSFLAGS = -ate -d $(EPICS_EXTENSIONS)/templates/capfast/edb.def
|
||||
E2DB_FLAGS =
|
||||
|
||||
#dbst
|
||||
DBST = $(EPICS_EXTENSIONS)/bin/$(HOST_ARCH)/dbst
|
||||
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# Epics defs
|
||||
|
||||
# APS overrides of definitions
|
||||
|
||||
GCC = gcc
|
||||
G++ = g++
|
||||
CC = gcc
|
||||
CCC = g++
|
||||
ACC = gcc
|
||||
PLUSPLUS = g++
|
||||
CXX = g++
|
||||
@@ -1,9 +1,8 @@
|
||||
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# Epics defs
|
||||
|
||||
|
||||
SHARED_LIBRARIES = YES
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# Epics defs
|
||||
# APS overrides of definitions
|
||||
|
||||
GCC = /opt/gnu/bin/gcc
|
||||
G++ = /opt/gnu/bin/g++
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# Default SUN compiler, individual Makefiles will override
|
||||
# if they cannot support ANSI compilation.
|
||||
# STRICT - ANSI C - force warning flags
|
||||
# ANSI - ANSI C
|
||||
# OLD - Standard C - Not appropriate here.
|
||||
CMPLR=ANSI
|
||||
|
||||
# Default SUN C++ compiler, individual Makefiles will override
|
||||
# if they are coded to a higher standard.
|
||||
# STRICT - ANSI C++ force strict warning flags
|
||||
# NORMAL - ANSI C++ optional warning flags
|
||||
CXXCMPLR=NORMAL
|
||||
#CXXCMPLR=STRICT
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
#
|
||||
# CONFIG_SITE.Unix.alpha
|
||||
#
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# Default compiler, individual Makefiles will override
|
||||
# if they cannot support ANSI compilation.
|
||||
# STRICT - ANSI C - force warning flags
|
||||
# ANSI - ANSI C
|
||||
# OLD - Standard C - Not appropriate here.
|
||||
CMPLR=ANSI
|
||||
|
||||
# Default SUN C++ compiler, individual Makefiles will override
|
||||
# if they are coded to a higher standard.
|
||||
# STRICT - ANSI C++ force strict warning flags
|
||||
# NORMAL - ANSI C++ optional warning flags
|
||||
CXXCMPLR=NORMAL
|
||||
#CXXCMPLR=STRICT
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
#
|
||||
# CONFIG_SITE.Unix.hp700
|
||||
#
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# Default compiler, individual Makefiles will override
|
||||
# if they cannot support ANSI compilation.
|
||||
# STRICT - ANSI C - force warning flags
|
||||
# ANSI - ANSI C
|
||||
# OLD - Standard C - Not appropriate here.
|
||||
CMPLR=ANSI
|
||||
|
||||
# Default SUN C++ compiler, individual Makefiles will override
|
||||
# if they are coded to a higher standard.
|
||||
# STRICT - ANSI C++ force strict warning flags
|
||||
# NORMAL - ANSI C++ optional warning flags
|
||||
CXXCMPLR=NORMAL
|
||||
#CXXCMPLR=STRICT
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# Epics defs
|
||||
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# Epics defs
|
||||
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# Epics defs
|
||||
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Revision 1.2 1994/06/28 00:02:32 bordua
|
||||
# First cut at the RULES and CONFIGS.
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# Default SUN compiler, individual Makefiles will override
|
||||
# if they cannot support ANSI compilation.
|
||||
# STRICT - ANSI C - force warning flags
|
||||
# ANSI - ANSI C
|
||||
# OLD - Standard C - Not appropriate here.
|
||||
CMPLR=ANSI
|
||||
|
||||
# Default SUN C++ compiler, individual Makefiles will override
|
||||
# if they are coded to a higher standard.
|
||||
# STRICT - ANSI C++ force strict warning flags
|
||||
# NORMAL - ANSI C++ optional warning flags
|
||||
CXXCMPLR=NORMAL
|
||||
#CXXCMPLR=STRICT
|
||||
|
||||
# Special C library requirements
|
||||
SPECIAL_LANG = /usr/lang/SC2.0.1patch
|
||||
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# Default SUN compiler, individual Makefiles will override
|
||||
# if they cannot support ANSI compilation.
|
||||
# STRICT - ANSI C - force warning flags
|
||||
# ANSI - ANSI C
|
||||
# OLD - Standard C - Not appropriate here.
|
||||
CMPLR=ANSI
|
||||
|
||||
# Default SUN C++ compiler, individual Makefiles will override
|
||||
# if they are coded to a higher standard.
|
||||
# STRICT - ANSI C++ force strict warning flags
|
||||
# NORMAL - ANSI C++ optional warning flags
|
||||
CXXCMPLR=NORMAL
|
||||
#CXXCMPLR=STRICT
|
||||
|
||||
# Unbundled C compiler stuff
|
||||
SPARCWORKS = /opt/SUNWspro
|
||||
#SPECIAL_LANG = $(SPARCWORKS)/lib
|
||||
SPECIAL_LANG = .
|
||||
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# Default SUN compiler, individual Makefiles will override
|
||||
# if they cannot support ANSI compilation.
|
||||
# STRICT - ANSI C - force warning flags
|
||||
# ANSI - ANSI C
|
||||
# OLD - Standard C - Not appropriate here.
|
||||
|
||||
CMPLR=ANSI
|
||||
|
||||
# Default SUN C++ compiler, individual Makefiles will override
|
||||
# if they are coded to a higher standard.
|
||||
# STRICT - ANSI C++ force strict warning flags
|
||||
# NORMAL - ANSI C++ optional warning flags
|
||||
CXXCMPLR=NORMAL
|
||||
#CXXCMPLR=STRICT
|
||||
|
||||
#CMPLR=STRICT
|
||||
#ANSI=GCC
|
||||
#STANDARD=GCC
|
||||
#CPLUSPLUS=G++
|
||||
|
||||
# Special C library requirements
|
||||
#SPECIAL_LANG = /usr/lang/SC3.0.1
|
||||
#SPECIAL_LANG = /usr/lang/lib
|
||||
SPECIAL_LANG = .
|
||||
|
||||
@@ -10,6 +10,11 @@
|
||||
# not allowed around the '=' signs or in unquoted values.
|
||||
# Makefile variables are not defined here.
|
||||
#
|
||||
# Note: This file is read by base/src/libCom/bldEnvdata.pl,
|
||||
# so the variable definitions in here should be kept 'simple':
|
||||
# VAR=VALUE
|
||||
# each one on a single line.
|
||||
#
|
||||
|
||||
# Site-specific environment settings
|
||||
|
||||
@@ -33,8 +38,8 @@ EPICS_TS_NTP_INET=
|
||||
# path name in response to SIGHUP - the new path name will
|
||||
# replace any path name supplied in EPICS_IOC_LOG_FILE_NAME
|
||||
|
||||
EPICS_IOC_LOG_INET=164.54.8.167
|
||||
EPICS_IOC_LOG_FILE_NAME=/home/phebos1/epics/apple/log/iocLog.text
|
||||
EPICS_IOC_LOG_INET=
|
||||
EPICS_IOC_LOG_FILE_NAME=
|
||||
EPICS_IOC_LOG_FILE_COMMAND=
|
||||
EPICS_IOC_LOG_FILE_LIMIT=1000000
|
||||
|
||||
|
||||
34
config/Makefile.Host
Normal file
34
config/Makefile.Host
Normal file
@@ -0,0 +1,34 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
TOP = ../..
|
||||
include $(TOP)/config/CONFIG_BASE
|
||||
|
||||
CONFIGS += CONFIG
|
||||
CONFIGS += CONFIG_BASE
|
||||
CONFIGS += CONFIG_BASE_VERSION
|
||||
CONFIGS += CONFIG_COMMON
|
||||
CONFIGS += CONFIG_ENV
|
||||
|
||||
CONFIGS += CONFIG.Host.$(HOST_ARCH)
|
||||
CONFIGS += CONFIG_HOST_ARCH.$(HOST_ARCH)
|
||||
CONFIGS += CONFIG.Host.UnixCommon
|
||||
CONFIGS += CONFIG_HOST_ARCH.UnixCommon
|
||||
|
||||
CONFIGS += CONFIG.Vx
|
||||
CONFIGS += $(CROSS_COMPILER_TARGET_ARCHS:%=CONFIG.Vx.%)
|
||||
|
||||
CONFIGS += CONFIG_SITE
|
||||
CONFIGS += CONFIG_SITE_ENV
|
||||
CONFIGS += $(subst ../,,$(wildcard ../CONFIG_SITE*))
|
||||
|
||||
CONFIGS += RULES.Host
|
||||
CONFIGS += RULES.Unix
|
||||
CONFIGS += RULES.Vx
|
||||
CONFIGS += RULES_ARCHS
|
||||
CONFIGS += RULES_DIRS
|
||||
CONFIGS += RULES_TOP
|
||||
|
||||
include $(TOP)/config/RULES.Host
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
TOP = ../..
|
||||
include $(TOP)/config/CONFIG_BASE
|
||||
|
||||
CONFIGS += CONFIG
|
||||
CONFIGS += CONFIG_BASE
|
||||
CONFIGS += CONFIG_COMMON
|
||||
CONFIGS += CONFIG_ENV
|
||||
|
||||
CONFIGS += CONFIG.Vx.68k
|
||||
|
||||
CONFIGS += CONFIG_SITE
|
||||
CONFIGS += CONFIG_SITE_ENV
|
||||
|
||||
CONFIGS += $(HOST_ARCH:%=CONFIG.%)
|
||||
CONFIGS += $(CROSS_COMPILER_TARGET_ARCHS:%=CONFIG.%)
|
||||
CONFIGS += $(HOST_ARCH:%=CONFIG_SITE.%)
|
||||
CONFIGS += $(CROSS_COMPILER_TARGET_ARCHS:%=CONFIG_SITE.%)
|
||||
|
||||
CONFIGS += RULES.Unix
|
||||
CONFIGS += RULES.Vx
|
||||
CONFIGS += RULES_ARCHS
|
||||
CONFIGS += RULES_DIRS
|
||||
CONFIGS += RULES_TOP
|
||||
|
||||
include $(TOP)/config/RULES.Unix
|
||||
|
||||
749
config/RULES.Host
Normal file
749
config/RULES.Host
Normal file
@@ -0,0 +1,749 @@
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# Rules for making things specified in Makefile.Host
|
||||
#
|
||||
# Some rules for filename-massage are system specific
|
||||
# and have "ifdefs" here instead of using definitions
|
||||
# from CONFIG.Host.$(ARCH_CLASS) - sorry about this,
|
||||
# but so far the rules are quite similar on all systems
|
||||
# except WIN32 has some specials.
|
||||
#
|
||||
# Maybe there is a way to use indentation to make it
|
||||
# easier to read this file?
|
||||
#
|
||||
# Most things may also work if you say e.g.
|
||||
# VAR+=ADD
|
||||
# even if ADD is not there, but this way "VAR" would
|
||||
# be defined in any case, that's why I try to use
|
||||
# ifdef ADD
|
||||
# VAR+=ADD
|
||||
# endif
|
||||
#
|
||||
# -kuk-
|
||||
|
||||
# we are in O.$(ARCH_CLASS), but most sources are one dir above:
|
||||
#
|
||||
# The use of VPATH (no suffix specification) caused everything
|
||||
# to break several times.
|
||||
# vpath, of course, has the disadvantage that we need explicit rules
|
||||
# for scripts or similar os-specific filed which have _no_ suffix...
|
||||
vpath %.h $(USER_VPATH)
|
||||
vpath %.c $(USER_VPATH) ../os/$(ARCH_CLASS) ../os/generic ..
|
||||
vpath %.cc $(USER_VPATH) ../os/$(ARCH_CLASS) ../os/generic ..
|
||||
vpath %.rc $(USER_VPATH) ../os/$(ARCH_CLASS) ../os/generic ..
|
||||
# This prevents base/src/include/*.h from being installed. Why??
|
||||
#vpath %.h ../os/$(ARCH_CLASS) ../os/generic ..
|
||||
vpath %.h $(USER_VPATH)
|
||||
|
||||
# check for add-on CFLAGS and CXXFLAGS
|
||||
#
|
||||
# Rules:
|
||||
# 1) USR_CFLAGS is used
|
||||
# 2) if there is a special USR_CFLAGS_$(ARCH_CLASS), it's
|
||||
# appended to 1)
|
||||
# 3) if there is no special defined, but a generic USR_CFLAGS_DEFAULT,
|
||||
# this one is appended
|
||||
# 4) if you have the special case that your USR_CFLAGS_$(ARCH_CLASS) is
|
||||
# empty but you don't want 3), you have to define it as '-nil-', e.g.:
|
||||
# USR_CFLAGS = <defines for all systems>
|
||||
# USR_CFLAGS_sun4 = -nil-
|
||||
# USR_CFLAGS_DEFAULT = <defines for most systems, not sun4>
|
||||
#
|
||||
# These rules apply to these Makefile-variables:
|
||||
# USR_CFLAGS C flags
|
||||
# USR_CXXFLAGS C++ flags
|
||||
# INC include-files to install
|
||||
# LIBSRCS source files for building library
|
||||
# PROD_LIBS EPICS libs needed by PROD and TESTPROD
|
||||
# USR_LIBS NONEPICS libs needed by PROD and TESTPROD
|
||||
# SYS_PROD_LIBS system libs needed by PROD and TESTPROD
|
||||
# PROD products to build and install
|
||||
# SCRIPTS scripts to install
|
||||
#
|
||||
# Remark:
|
||||
# If you define a special INC, e.g. INC_WIN32 = getopt.h,
|
||||
# the source (getopt.h) has to be in os/WIN32 (or os/<your ARCH_CLASS>)
|
||||
#
|
||||
# This makes INC_$(ARCH_CLASS) slightly different from OSINC:
|
||||
# OSINC = a_file.h
|
||||
# means that you have a special os/$(ARCH_CLASS)/a_file.h
|
||||
# for _every_ ARCH_CLASS.
|
||||
# If you use INC_$(ARCH_CLASS), you need the special include
|
||||
# only for the specified ARCH_CLASS!
|
||||
#
|
||||
ifneq ($(strip $(USR_CFLAGS_$(ARCH_CLASS))),)
|
||||
USR_CFLAGS+=$(subst -nil-,,$(USR_CFLAGS_$(ARCH_CLASS)))
|
||||
else
|
||||
ifdef USR_CFLAGS_DEFAULT
|
||||
USR_CFLAGS+=$(USR_CFLAGS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(USR_CXXFLAGS_$(ARCH_CLASS))),)
|
||||
USR_CXXFLAGS+=$(subst -nil-,,$(USR_CXXFLAGS_$(ARCH_CLASS)))
|
||||
else
|
||||
ifdef USR_CXXFLAGS_DEFAULT
|
||||
USR_CXXFLAGS+=$(USR_CXXFLAGS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(USR_CPPFLAGS_$(ARCH_CLASS))),)
|
||||
USR_CPPFLAGS+=$(subst -nil-,,$(USR_CPPFLAGS_$(ARCH_CLASS)))
|
||||
else
|
||||
ifdef USR_CPPFLAGS_DEFAULT
|
||||
USR_CPPFLAGS+=$(USR_CPPFLAGS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(USR_LDFLAGS_$(ARCH_CLASS))),)
|
||||
USR_LDFLAGS+=$(subst -nil-,,$(USR_LDFLAGS_$(ARCH_CLASS)))
|
||||
else
|
||||
ifdef USR_LDFLAGS_DEFAULT
|
||||
USR_LDFLAGS+=$(USR_LDFLAGS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
# check for special includes:
|
||||
#
|
||||
ifneq ($(strip $(INC_$(ARCH_CLASS))),)
|
||||
# os-specific includes go to the include/os-directory:
|
||||
OSINC += $(subst -nil-,,$(INC_$(ARCH_CLASS)))
|
||||
else
|
||||
ifdef INC_DEFAULT
|
||||
INC += $(INC_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
# concat specific library contents (if defined) to LIBCONTENS
|
||||
#
|
||||
ifneq ($(strip $(LIBSRCS_$(ARCH_CLASS))),)
|
||||
LIBSRCS += $(subst -nil-,,$(LIBSRCS_$(ARCH_CLASS)))
|
||||
else
|
||||
|
||||
ifdef LIBSRCS_DEFAULT
|
||||
LIBSRCS+=$(LIBSRCS_DEFAULT)
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
# adjust object names for library contents
|
||||
#
|
||||
ifdef LIBSRCS
|
||||
LIBOBJS=$(addsuffix $(OBJ), $(basename $(LIBSRCS)))
|
||||
endif
|
||||
|
||||
#
|
||||
# concat specific library contents (if defined) to PROD_LIBS
|
||||
#
|
||||
ifneq ($(strip $(PROD_LIBS_$(ARCH_CLASS))),)
|
||||
PROD_LIBS += $(subst -nil-,,$(PROD_LIBS_$(ARCH_CLASS)))
|
||||
|
||||
else
|
||||
|
||||
ifdef PROD_LIBS_DEFAULT
|
||||
PROD_LIBS += $(PROD_LIBS_DEFAULT)
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
#
|
||||
# concat specific library contents (if defined) to USR_LIBS
|
||||
#
|
||||
ifneq ($(strip $(USR_LIBS_$(ARCH_CLASS))),)
|
||||
USR_LIBS += $(subst -nil-,,$(USR_LIBS_$(ARCH_CLASS)))
|
||||
|
||||
else
|
||||
|
||||
ifdef USR_LIBS_DEFAULT
|
||||
USR_LIBS += $(USR_LIBS_DEFAULT)
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
#
|
||||
# concat specific library contents (if defined) to SYS_PROD_LIBS
|
||||
#
|
||||
ifneq ($(strip $(SYS_PROD_LIBS_$(ARCH_CLASS))),)
|
||||
SYS_PROD_LIBS += $(subst -nil-,,$(SYS_PROD_LIBS_$(ARCH_CLASS)))
|
||||
|
||||
else
|
||||
|
||||
ifdef SYS_PROD_LIBS_DEFAULT
|
||||
SYS_PROD_LIBS += $(SYS_PROD_LIBS_DEFAULT)
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
#
|
||||
# concat specific products
|
||||
#
|
||||
ifneq ($(strip $(PROD_$(ARCH_CLASS))),)
|
||||
PROD += $(subst -nil-,,$(PROD_$(ARCH_CLASS)))
|
||||
|
||||
else
|
||||
|
||||
ifdef PROD_DEFAULT
|
||||
PROD += $(PROD_DEFAULT)
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
#
|
||||
# concat specific scripts
|
||||
#
|
||||
ifneq ($(strip $(SCRIPTS_$(ARCH_CLASS))),)
|
||||
SCRIPTS += $(subst -nil-,,$(SCRIPTS_$(ARCH_CLASS)))
|
||||
|
||||
else
|
||||
|
||||
ifdef SCRIPTS_DEFAULT
|
||||
SCRIPTS += $(SCRIPTS_DEFAULT)
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
#
|
||||
# concat specific resource files
|
||||
#
|
||||
ifneq ($(strip $(RCS_$(ARCH_CLASS))),)
|
||||
RCS += $(subst -nil-,,$(RCS_$(ARCH_CLASS)))
|
||||
else
|
||||
ifdef RCS_DEFAULT
|
||||
RCS += $(RCS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
# adjust executables
|
||||
ifdef TESTPROD
|
||||
TESTPROD := $(addsuffix $(EXE), $(TESTPROD))
|
||||
endif
|
||||
|
||||
# adjust executables
|
||||
ifdef PROD
|
||||
PROD := $(addsuffix $(EXE), $(PROD))
|
||||
endif
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# if we are not building base add base includes and ld dirs
|
||||
# (convenience for extensions and applications)
|
||||
ifneq ($(EPICS_BASE),$(TOP))
|
||||
ifneq ($(EPICS_BASE),$(INSTALL_LOCATION))
|
||||
EPICS_INCLUDES += -I$(EPICS_BASE_INCLUDE) -I$(EPICS_BASE_INCLUDE)/os/$(OS_CLASS)
|
||||
endif
|
||||
endif
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# ----------------------------------------------------
|
||||
# create names (lists) for installed things
|
||||
# ----------------------------------------------------
|
||||
|
||||
# each list starts with the destination directory name(s)
|
||||
# to make sure it's there
|
||||
|
||||
|
||||
INCREC +=$(RECTYPES) $(MENUS)
|
||||
|
||||
INSTALL_PROD= $(PROD:%= $(INSTALL_BIN)/%)
|
||||
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)
|
||||
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)
|
||||
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)
|
||||
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)
|
||||
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)
|
||||
|
||||
INSTALL_INC= $(INC:%=$(INSTALL_INCLUDE)/%)
|
||||
INSTALL_OSINCLUDE=$(INSTALL_INCLUDE)/os/$(ARCH_CLASS)
|
||||
INSTALL_OSINC= $(OSINC:%= $(INSTALL_OSINCLUDE)/%)
|
||||
INSTALL_INCREC = $(INCREC:%= $(INSTALL_INCLUDE)/%)
|
||||
MANLIST = 1 2 3 4 5 6 7 8 9
|
||||
INSTALL_MANS = $(foreach n, \
|
||||
$(MANLIST), $(MAN$(n):%= $(INSTALL_MAN)/man$(n)/%))
|
||||
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)
|
||||
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)
|
||||
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)
|
||||
ifdef TEMPLATES_DIR
|
||||
INSTALL_TEMPLATES_SUBDIR = $(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)
|
||||
else
|
||||
INSTALL_TEMPLATES_SUBDIR = $(INSTALL_TEMPLATES)
|
||||
endif
|
||||
INSTALL_TEMPLATE = $(TEMPLATES:%= $(INSTALL_TEMPLATES_SUBDIR)/%)
|
||||
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)
|
||||
|
||||
INSTALL_BPTS = $(BPTS:%= $(INSTALL_DBD)/%)
|
||||
INSTALL_DBS = $(DBDINSTALL:%= $(INSTALL_DBD)/%)\
|
||||
$(RECTYPES:%.h= $(INSTALL_DBD)/%.dbd)\
|
||||
$(MENUS:%.h= $(INSTALL_DBD)/%.dbd)
|
||||
|
||||
INSTALL_DBDNAME = $(DBDNAME:%= $(INSTALL_DBD)/%)
|
||||
|
||||
MAN_DIRECTORY_TARGETS = $(foreach n, $(MANLIST),$(INSTALL_MAN)/man$(n))
|
||||
|
||||
#---------------------------------------------------------------
|
||||
ifneq ($(strip $(SHARED_LIBRARIES_$(ARCH_CLASS))),)
|
||||
SHARED_LIBRARIES+=$(subst -nil-,,$(SHARED_LIBRARIES_$(ARCH_CLASS)))
|
||||
else
|
||||
ifdef SHARED_LIBRARIES_DEFAULT
|
||||
SHARED_LIBRARIES_+=$(SHARED_LIBRARIES_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# must use c++ linker if linking to shared libs with c++ code
|
||||
ifeq ($(strip $(SHARED_LIBRARIES)),YES)
|
||||
ifneq ($(strip $(CPLUSPLUS)),)
|
||||
LINK.c = $(LINK.cc)
|
||||
endif # CPLUSPLUS
|
||||
endif # LIBTYPE
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Version number for base shared libraries (and win32 products)
|
||||
ifeq ($(EPICS_BASE),$(TOP))
|
||||
SHRLIB_VERSION = $(EPICS_VERSION).$(EPICS_REVISION)
|
||||
PROD_VERSION = $(EPICS_VERSION).$(EPICS_REVISION)
|
||||
endif # EPICS_BASE
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Libraries
|
||||
#
|
||||
# if there are no objects LIBOBJS to include
|
||||
# in this library (may be for e.g. base/src/libCompat
|
||||
# on some archs), don't define (and build) any library!
|
||||
ifdef LIBRARY
|
||||
ifdef LIBOBJS
|
||||
LIBTARGETS += $(LIBNAME) $(INSTALL_LIBS)
|
||||
CFLAGS += $($(ANSI)_SHRLIB_CFLAGS_YES)
|
||||
CXXFLAGS += $($(ANSI)_SHRLIB_CFLAGS_YES)
|
||||
|
||||
# check if shared libraries requested
|
||||
ifeq ($(strip $(SHARED_LIBRARIES)),YES)
|
||||
|
||||
PROD_VERSION =$(SHRLIB_VERSION)
|
||||
ifeq ($(findstring cc,$(suffix $(LIBSRCS))),cc)
|
||||
SHRLIB_LINKER = $(CXX)
|
||||
else
|
||||
SHRLIB_LINKER = $(CC)
|
||||
endif
|
||||
LIBTARGETS += $(SHRLIBNAME) $(INSTALL_SHRLIBS) $(INSTALL_DLL_LINK_LIBS)
|
||||
|
||||
endif # SHARED_LIBRARIES=YES
|
||||
|
||||
endif # LIBOBJS
|
||||
endif # LIBRARY
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Main targets
|
||||
|
||||
all:: install
|
||||
|
||||
build:: $(LIBTARGETS) $(PROD) $(TESTPROD) \
|
||||
$(MENUS) $(RECTYPES) $(BPTS) $(DBDNAME)
|
||||
|
||||
inc:: $(INSTALL_INC) $(INSTALL_OSINC)
|
||||
|
||||
rebuild:: clean install
|
||||
|
||||
install:: inc buildInstall
|
||||
|
||||
buildInstall :: build $(TARGETS) \
|
||||
$(INSTALL_SCRIPTS) $(INSTALL_PROD) \
|
||||
$(INSTALL_MANS) \
|
||||
$(INSTALL_DOCS) \
|
||||
$(INSTALL_HTMLS) \
|
||||
$(INSTALL_TEMPLATE) \
|
||||
$(INSTALL_CONFIGS) \
|
||||
$(INSTALL_DBS) $(INSTALL_BPTS) \
|
||||
$(INSTALL_DBDNAME) $(INSTALL_INCREC) \
|
||||
$(INSTALL_TCLLIBS) $(INSTALL_TCLINDEX)
|
||||
|
||||
clean::
|
||||
@echo "Cleaning"
|
||||
@$(RM) *.i *$(OBJ) *.a $(PROD) $(TESTPROD) $(LIBNAME) $(SHRLIBNAME) $(INC) *$(RES) $(TARGETS) \
|
||||
$(DBDINSTALL) $(MENUS) $(RECTYPES) $(BPTS) $(DBDNAME)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Products
|
||||
#
|
||||
|
||||
PROD += $(TESTPROD)
|
||||
ifdef PROD
|
||||
|
||||
COND_PROD_SRCS=$(foreach prod, $(basename $(PROD)), $($(prod)_SRCS))
|
||||
COND_PROD_RCS=$(foreach prod, $(basename $(PROD)), $($(prod)_RCS) $($(prod)_RCS_$(ARCH_CLASS)))
|
||||
COND_PROD_LIBS=$(foreach prod, $(basename $(PROD)), $($(prod)_LIBS))
|
||||
|
||||
ifdef PRODNAME
|
||||
|
||||
ifneq ($(strip $(PRODNAME_SRCS_$(ARCH_CLASS))),)
|
||||
PRODNAME_SRCS += $(subst -nil-,,$(PRODNAME_SRCS_$(ARCH_CLASS)))
|
||||
else
|
||||
ifdef PRODNAME_SRCS_DEFAULT
|
||||
PRODNAME_SRCS += $(PRODNAME_SRCS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(PRODNAME_RCS_$(ARCH_CLASS))),)
|
||||
PRODNAME_RCS += $(subst -nil-,,$(PRODNAME_RCS_$(ARCH_CLASS)))
|
||||
else
|
||||
ifdef PRODNAME_RCS_DEFAULT
|
||||
PRODNAME_RCS += $(PRODNAME_RCS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
$(PRODNAME): $(PROD_DEPLIBS) $(PRODNAME_DEPLIBS)
|
||||
|
||||
ifdef PRODNAME_SRCS
|
||||
|
||||
ifeq ($(findstring cc,$(suffix $(PRODNAME_SRCS))),cc)
|
||||
PRODNAME_LINKER = $(LINK.cc)
|
||||
else
|
||||
PRODNAME_LINKER = $(LINK.c)
|
||||
endif
|
||||
|
||||
PRODNAME_OBJS=$(addsuffix $(OBJ), $(basename $(PRODNAME_SRCS)))
|
||||
PRODNAME_RESS=$(addsuffix $(RES), $(basename $(PRODNAME_RCS)))
|
||||
|
||||
$(PRODNAME): $(PRODNAME_OBJS) $(PRODNAME_RESS)
|
||||
@$(RM) $@
|
||||
$(PRODNAME_LINKER) $(PRODNAME_OBJS) $(PRODNAME_RESS) $(LDLIBS)
|
||||
|
||||
endif # ifdef PRODNAME_SRCS
|
||||
|
||||
else # PRODNAME not defined
|
||||
|
||||
# We have to use the product's true dependancies and
|
||||
# call make again to determine if product should be rebuilt
|
||||
|
||||
ifneq ($(strip $(SRCS) $(COND_PROD_SRCS)),)
|
||||
PROD_OBJS=$(addsuffix $(OBJ), $(basename $(SRCS) $(COND_PROD_SRCS)))
|
||||
|
||||
PROD_RESS=$(addsuffix $(RES), $(basename $(RCS) $(COND_PROD_RCS)))
|
||||
|
||||
PROD_MAKE_COMMAND=$(MAKE) $@\
|
||||
PRODNAME="$@"\
|
||||
PRODNAME_SRCS="$(SRCS) $($(basename $@)_SRCS)"\
|
||||
PRODNAME_SRCS_DEFAULT="$($(basename $@)_SRCS_DEFAULT)"\
|
||||
PRODNAME_SRCS_$(ARCH_CLASS)="$($(basename $@)_SRCS_$(ARCH_CLASS))"\
|
||||
PRODNAME_RCS="$(RCS) $($(basename $@)_RCS)"\
|
||||
PRODNAME_RCS_DEFAULT="$($(basename $@)_RCS_DEFAULT)"\
|
||||
PRODNAME_RCS_$(ARCH_CLASS)="$($(basename $@)_RCS_$(ARCH_CLASS))"\
|
||||
PRODNAME_LIBS="$($(basename $@)_LIBS)"
|
||||
|
||||
$(PROD): $(PROD_OBJS) $(PROD_RESS) $(PROD_DEPLIBS) $(COND_PROD_DEPLIBS)
|
||||
@$(PROD_MAKE_COMMAND)
|
||||
|
||||
endif
|
||||
endif #ifdef PRODNAME
|
||||
|
||||
endif #ifdef PROD
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Java classes and packages
|
||||
#
|
||||
|
||||
INSTALL_JAVA = $(INSTALL_LOCATION)/javalib
|
||||
|
||||
DIRECTORY_TARGETS += $(INSTALL_JAVA)
|
||||
ifdef PACKAGE
|
||||
DIRECTORY_TARGETS += $(INSTALL_JAVA)/$(PACKAGE)
|
||||
endif
|
||||
|
||||
vpath %.class $(INSTALL_JAVA)/$(PACKAGE)
|
||||
|
||||
CLASSES += $(subst .java,.class,$(JAVA))
|
||||
TESTCLASSES += $(subst .java,.class,$(TESTJAVA))
|
||||
INSTALL_CLASSES =$(CLASSES:%=$(INSTALL_JAVA)/$(PACKAGE)/%)
|
||||
INSTALL_JAR =$(JAR:%=$(INSTALL_JAVA)/%)
|
||||
|
||||
JAR_OPTIONS = cvf
|
||||
ifdef MANIFEST
|
||||
JAR_OPTIONS = cvmf
|
||||
endif
|
||||
JAR_DEPFILES += $(wildcard $(JAR_INPUT) $(addsuffix /*,$(JAR_INPUT)))
|
||||
|
||||
$(DIRECTORY_TARGETS) :
|
||||
$(MKDIR) $@
|
||||
|
||||
build:: $(TESTCLASSES) $(JAR)
|
||||
|
||||
buildInstall :: $(DIRECTORY_TARGETS) $(INSTALL_CLASSES) $(INSTALL_JAR)
|
||||
|
||||
clean::
|
||||
@$(RM) $(TESTCLASSES) $(JAR)
|
||||
|
||||
%.class:%.java
|
||||
@echo Creating java class file $@
|
||||
$(RM) $@
|
||||
$(JAVACCMD) $<
|
||||
|
||||
$(INSTALL_JAVA)/$(PACKAGE)/%.class:%.java
|
||||
@echo Creating java class file $@
|
||||
@$(RM) $@
|
||||
$(JAVACCMD) -d $(INSTALL_JAVA) $<
|
||||
|
||||
$(JAR):%.jar: $(JAR_DEPFILES)
|
||||
@echo Creating java jar file $@
|
||||
@$(RM) $@
|
||||
$(JARCMD)
|
||||
|
||||
$(INSTALL_JAVA)/%.jar: %.jar
|
||||
@echo "Installing jar file $@"
|
||||
$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
#---------------------------------------------------------------
|
||||
# Generic Rules for 'simple' targets that
|
||||
# can be generated from a single source with same basename.
|
||||
#
|
||||
# The usual two rules .c* -> $(OBJ) and then $(OBJ) -> $(EXE)
|
||||
# do not work because the $(OBJ)->$(EXE) rule wouldn't
|
||||
# know if the original source was C or C++.
|
||||
#
|
||||
# Hint: The $(subst...) construct removes the .c or .cc
|
||||
# as well as the '../' from the filename and adds $(OBJ):
|
||||
# e.g. $< = '../abc.c' -> 'abc.o'
|
||||
#
|
||||
# The order of the following rules is
|
||||
# VERY IMPORTANT !!!!
|
||||
|
||||
depends:: $(LIBSRCS) $(SRCS) $(COND_PROD_SRCS)
|
||||
$(RM) DEPENDS
|
||||
touch DEPENDS
|
||||
$(DEPENDS_RULE)
|
||||
|
||||
%$(EXE): %.c
|
||||
@$(RM) $@
|
||||
$(COMPILE.c) $<
|
||||
$(LINK.c) $(subst ../,,$(basename $<))$(OBJ) $(LDLIBS)
|
||||
|
||||
%$(EXE): %.cc
|
||||
@$(RM) $@
|
||||
$(COMPILE.cc) $<
|
||||
$(LINK.cc) $(subst ../,,$(basename $<))$(OBJ) $(LDLIBS)
|
||||
|
||||
%$(EXE): %.C
|
||||
@$(RM) $@
|
||||
$(COMPILE.cc) $<
|
||||
$(LINK.cc) $(subst ../,,$(basename $<))$(OBJ) $(LDLIBS)
|
||||
|
||||
%$(OBJ): %.c
|
||||
@$(RM) $@
|
||||
$(COMPILE.c) $<
|
||||
|
||||
%$(OBJ): %.cc
|
||||
@$(RM) $@
|
||||
$(COMPILE.cc) $<
|
||||
|
||||
%$(OBJ): %.C
|
||||
@$(RM) $@
|
||||
$(COMPILE.cc) $<
|
||||
|
||||
# WIN95/NT resource compiler
|
||||
%$(RES): %.rc
|
||||
@$(RM) $@
|
||||
$(RCCMD)
|
||||
|
||||
#
|
||||
# rename the y.tab.h file only if we
|
||||
# are creating it
|
||||
#
|
||||
%.h %.c: ../%.y
|
||||
$(RM) $*.c y.tab.c
|
||||
ifeq ($(findstring -d, $(YACCOPT)),-d)
|
||||
$(RM) $*.h y.tab.h
|
||||
endif
|
||||
$(YACC) $(YACCOPT) $<
|
||||
$(MV) y.tab.c $*.c
|
||||
ifeq ($(findstring -d, $(YACCOPT)),-d)
|
||||
$(MV) y.tab.h $*.h
|
||||
endif
|
||||
|
||||
%.c: ../%.l
|
||||
@$(RM) lex.yy.c
|
||||
$(LEX) $(LEXOPT) $<
|
||||
@$(RM) $@
|
||||
$(MV) lex.yy.c $@
|
||||
|
||||
#state notation language rule
|
||||
%.c: ../%.st
|
||||
@echo "preprocessing $*.st"
|
||||
@$(RM) $*.i
|
||||
$(CPP) $(CPPFLAGS) $< $*.i
|
||||
@echo "converting $*.i"
|
||||
@$(RM) $@
|
||||
$(SNC) $(TARGET_SNCFLAGS) $(SNCFLAGS) $*.i
|
||||
|
||||
%.c: %.stt
|
||||
@echo "converting $<
|
||||
ln -s $< $*.st
|
||||
$(SNC) $(TARGET_SNCFLAGS) $(SNCFLAGS) $*.st
|
||||
@$(RM) $*.st
|
||||
|
||||
# Capfast Rules:
|
||||
%.db: %.edf
|
||||
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) $<
|
||||
|
||||
%.db: ../%.edf
|
||||
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) $<
|
||||
|
||||
%.edf: ../%.sch
|
||||
@if [ ! -f cad.rc -a -r ../cad.rc ] ; then ln -s ../cad.rc ; fi
|
||||
$(SCH2EDIF) $(SCH2EDIF_SYSFLAGS) $(SCH2EDIF_FLAGS) $<
|
||||
|
||||
# Adl2dl rule
|
||||
%.dl : ../%.adl
|
||||
-$(ADL2DL) $< $@
|
||||
|
||||
# Mangen Rule:
|
||||
%.1:%
|
||||
$(MANGEN) -s $<
|
||||
$(MV) $(<F).nr $(<F).1
|
||||
|
||||
# Mangen Rule:
|
||||
%.1:../%
|
||||
$(MANGEN) -s $<
|
||||
$(MV) $(<F).nr $(<F).1
|
||||
|
||||
$(INSTALL_DBD)/%: %
|
||||
@echo "Installing $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_DBD)
|
||||
|
||||
$(INSTALL_DBD)/%: ../%
|
||||
@echo "Installing $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_DBD)
|
||||
|
||||
%Record.h: %Record.dbd
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToRecordtypeH$(EXE) \
|
||||
$(USER_DBDFLAGS) $<
|
||||
|
||||
%Record.h: ../%Record.dbd
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToRecordtypeH$(EXE) \
|
||||
$(USER_DBDFLAGS) $<
|
||||
|
||||
menu%.h: menu%.dbd
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToMenuH$(EXE) $<
|
||||
|
||||
menu%.h: ../menu%.dbd
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToMenuH$(EXE) $<
|
||||
|
||||
bpt%.dbd: bpt%.data
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/makeBpt$(EXE) $<
|
||||
|
||||
bpt%.dbd: ../bpt%.data
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/makeBpt$(EXE) $<
|
||||
|
||||
$(DBDNAME): ../$(DBDEXPAND)
|
||||
@echo expanding dbd
|
||||
@$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbExpand$(EXE) $(USER_DBDFLAGS) $< > $@
|
||||
|
||||
$(DLL_LINK_LIBNAME) $(SHRLIBNAME): $(LIBOBJS)
|
||||
$(LINK.shrlib) $(LIBOBJS) $(DLL_LDLIBS)
|
||||
|
||||
# rule for lib (archive of object files) creation
|
||||
$(LIBNAME): $(LIBOBJS)
|
||||
$(RM) $@
|
||||
$(ARCMD) $(LIBOBJS)
|
||||
ifdef RANLIB
|
||||
$(RANLIB) $@;
|
||||
endif # RANLIB
|
||||
|
||||
$(INSTALL_BIN)/%: ../os/$(ARCH_CLASS)/%
|
||||
@echo "Installing os-specific script $@"
|
||||
@$(INSTALL_PRODUCT) -d -m 555 $< $(INSTALL_BIN)
|
||||
|
||||
$(INSTALL_BIN)/%: %
|
||||
@echo "Installing binary $@"
|
||||
@$(INSTALL_PRODUCT) -d -m 555 $< $(INSTALL_BIN)
|
||||
|
||||
$(INSTALL_BIN)/%: ../%
|
||||
@echo "Installing script $@"
|
||||
@$(INSTALL_PRODUCT) -d -m 555 $< $(INSTALL_BIN)
|
||||
|
||||
$(INSTALL_LIB)/%.a: %.a
|
||||
@echo "Installing library $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_LIB)
|
||||
ifdef RANLIB
|
||||
$(RANLIB) $(RANLIBFLAGS) $@
|
||||
endif # RANLIB
|
||||
|
||||
$(INSTALL_LIB)/%.lib: %.lib
|
||||
@echo "Installing library $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_LIB)
|
||||
|
||||
$(INSTALL_SHRLIB)/lib%: lib%
|
||||
@echo "Installing library $@"
|
||||
@$(INSTALL) -d -m 555 $< $(INSTALL_SHRLIB)
|
||||
ifdef SHRLIB_VERSION
|
||||
@$(RM) $(@:%.$(SHRLIB_VERSION)=%)
|
||||
ln -s $< $(@:%.$(SHRLIB_VERSION)=%)
|
||||
endif # SHRLIB_VERSION
|
||||
|
||||
$(INSTALL_TCLLIB)/%: %
|
||||
@echo "Installing Tcl library $@"
|
||||
@$(INSTALL) -d -m 555 $< $(INSTALL_TCLLIB)
|
||||
|
||||
$(INSTALL_TCLLIB)/%: ../%
|
||||
@echo "Installing Tcl library $@"
|
||||
@$(INSTALL) -d -m 555 $< $(INSTALL_TCLLIB)
|
||||
|
||||
$(INSTALL_CONFIG)/%: %
|
||||
@echo "Installing config file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_CONFIG)
|
||||
|
||||
$(INSTALL_CONFIG)/%: ../%
|
||||
@echo "Installing config file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_CONFIG)
|
||||
|
||||
$(addsuffix /%,$(MAN_DIRECTORY_TARGETS)) : %
|
||||
@echo "Installing man file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(addsuffix /%,$(MAN_DIRECTORY_TARGETS)) : ../%
|
||||
@echo "Installing man file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_INCLUDE)/%: %
|
||||
@echo "Installing include file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_INCLUDE)/%: ../%
|
||||
@echo "Installing include file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_DOC)/%: %
|
||||
@echo "Installing doc $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_DOC)
|
||||
|
||||
$(INSTALL_DOC)/%: ../%
|
||||
@echo "Installing doc $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_DOC)
|
||||
|
||||
$(INSTALL_HTML)/$(HTMLS_DIR)/%: %
|
||||
@echo "Installing html $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_HTML)/$(HTMLS_DIR)/%: ../%
|
||||
@echo "Installing html $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)/%: ../%
|
||||
@echo "Installing $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)/%: %
|
||||
@echo "Installing $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
.PRECIOUS: %.o %.c
|
||||
|
||||
-include DEPENDS
|
||||
|
||||
.PHONY:: all inc depends build install clean rebuild buildInstall
|
||||
|
||||
# EOF RULES.Host
|
||||
@@ -1,23 +1,39 @@
|
||||
# $Id$
|
||||
|
||||
INSTALL_PROD=$(PROD:%=$(INSTALL_BIN)/%)
|
||||
INSTALL_LIBS=$(LIBNAME:%=$(INSTALL_LIB)/%)
|
||||
INSTALL_INC=$(INC:%=$(INSTALL_INCLUDE)/%)
|
||||
INSTALL_MANS+=$(MAN1:%=$(INSTALL_MAN)/man1/%)
|
||||
INSTALL_MANS+=$(MAN2:%=$(INSTALL_MAN)/man2/%)
|
||||
INSTALL_MANS+=$(MAN3:%=$(INSTALL_MAN)/man3/%)
|
||||
INSTALL_MANS+=$(MAN4:%=$(INSTALL_MAN)/man4/%)
|
||||
INSTALL_MANS+=$(MAN5:%=$(INSTALL_MAN)/man5/%)
|
||||
INSTALL_MANS+=$(MAN6:%=$(INSTALL_MAN)/man6/%)
|
||||
INSTALL_MANS+=$(MAN7:%=$(INSTALL_MAN)/man7/%)
|
||||
INSTALL_MANS+=$(MAN8:%=$(INSTALL_MAN)/man8/%)
|
||||
INSTALL_MANS+=$(MAN9:%=$(INSTALL_MAN)/man9/%)
|
||||
INSTALL_DOCS=$(DOCS:%=$(INSTALL_DOC)/%)
|
||||
INSTALL_SCRIPTS=$(SCRIPTS:%=$(INSTALL_BIN)/%)
|
||||
INSTALL_TEMPLATE=$(TEMPLATES:%=$(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)/%)
|
||||
INCREC +=$(RECTYPES) $(MENUS)
|
||||
INSTALL_PROD = $(PROD:%= $(INSTALL_BIN)/%)
|
||||
INSTALL_LIBS = $(LIBNAME:%= $(INSTALL_LIB)/%)
|
||||
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)
|
||||
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)
|
||||
INSTALL_CONFIGS=$(CONFIGS:%=$(INSTALL_CONFIG)/%)
|
||||
INSTALL_INC = $(INC:%= $(INSTALL_INCLUDE)/%)
|
||||
INSTALL_OSINCLUDE = $(INSTALL_INCLUDE)/os/$(T_A)
|
||||
INSTALL_OSINC = $(OSINC:%= $(INSTALL_OSINCLUDE)/%)
|
||||
INSTALL_INCREC = $(INCREC:%= $(INSTALL_INCLUDE)/%)
|
||||
MANLIST = 1 2 3 4 5 6 7 8 9
|
||||
INSTALL_MANS = $(foreach n, \
|
||||
$(MANLIST),$(INSTALL_MAN)/man$(n) $(MAN$(n):%= $(INSTALL_MAN)/man$(n)/%))
|
||||
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)
|
||||
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)
|
||||
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)
|
||||
INSTALL_TEMPLATES_SUBDIR = $(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)
|
||||
INSTALL_TEMPLATE = $(TEMPLATES:%= $(INSTALL_TEMPLATES_SUBDIR)/%)
|
||||
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)
|
||||
|
||||
INSTALL_BPTS = $(BPTS:%= $(INSTALL_DBD)/%)
|
||||
INSTALL_DBS = $(DBDINSTALL:%= $(INSTALL_DBD)/%)\
|
||||
$(RECTYPES:%.h= $(INSTALL_DBD)/%.dbd)\
|
||||
$(MENUS:%.h= $(INSTALL_DBD)/%.dbd)
|
||||
|
||||
INSTALL_DBDNAME = $(DBDNAME:%= $(INSTALL_DBD)/%)
|
||||
|
||||
MAN_DIRECTORY_TARGETS = $(foreach n, $(MANLIST),$(INSTALL_MAN)/man$(n))
|
||||
|
||||
DIRECTORY_TARGETS = $(INSTALL_INCLUDE) $(INSTALL_INCLUDE)/os \
|
||||
$(INSTALL_OSINCLUDE) $(INSTALL_DOC) \
|
||||
$(INSTALL_TEMPLATES)/$(TEMPLATES_DIR) $(INSTALL_TEMPLATES) \
|
||||
$(INSTALL_LOCATION_BIN) $(INSTALL_BIN) $(INSTALL_LIB) \
|
||||
$(INSTALL_LOCATION_LIB) $(INSTALL_CONFIG) \
|
||||
$(MAN_DIRECTORY_TARGETS) $(INSTALL_MAN)
|
||||
|
||||
all:: install
|
||||
|
||||
@@ -25,13 +41,26 @@ pre_build::
|
||||
|
||||
rebuild:: clean install
|
||||
|
||||
build:: pre_build $(LIBNAME) $(TARGETS) $(PROD)
|
||||
build:: pre_build $(LIBNAME) $(TARGETS) $(PROD)\
|
||||
$(MENUS) $(RECTYPES) $(BPTS) $(DBDNAME)
|
||||
|
||||
inc:: $(INSTALL_INC)
|
||||
inc:: $(INSTALL_INCLUDE) $(INSTALL_INC) $(INSTALL_INCLUDE)/os \
|
||||
$(INSTALL_OSINCLUDE) $(INSTALL_OSINC)
|
||||
|
||||
install:: inc build $(INSTALL_LIBS) $(TARGETS) $(INSTALL_SCRIPTS) $(INSTALL_PROD) \
|
||||
$(INSTALL_MANS) $(INSTALL_DOCS) $(INSTALL_TEMPLATE) \
|
||||
$(INSTALL_TCLLIBS) $(INSTALL_TCLINDEX) $(INSTALL_CONFIGS)
|
||||
install:: inc buildInstall
|
||||
|
||||
buildInstall :: build \
|
||||
$(INSTALL_LOCATION_LIB) $(INSTALL_LIB) $(INSTALL_LIBS) \
|
||||
$(TARGETS) \
|
||||
$(INSTALL_LOCATION_BIN) $(INSTALL_BIN) \
|
||||
$(INSTALL_SCRIPTS) $(INSTALL_PROD) \
|
||||
$(INSTALL_MAN) $(INSTALL_MANS) $(INSTALL_HTMLS) \
|
||||
$(INSTALL_DOC) $(INSTALL_DOCS) $(INSTALL_TEMPLATES) \
|
||||
$(INSTALL_TEMPLATES)/$(TEMPLATES_DIR) $(INSTALL_TEMPLATE) \
|
||||
$(INSTALL_CONFIG) $(INSTALL_CONFIGS) \
|
||||
$(INSTALL_DBD) $(INSTALL_DBS) $(INSTALL_BPTS) \
|
||||
$(INSTALL_DBDNAME) $(INSTALL_INCREC) \
|
||||
$(INSTALL_TCLLIBS) $(INSTALL_TCLINDEX)
|
||||
|
||||
depends:: $(SRCS.c) $(SRCS.cc)
|
||||
ifdef SRCS
|
||||
@@ -49,6 +78,8 @@ clean::
|
||||
@echo "Cleaning"
|
||||
@$(RM) *.i *.o *.a $(TARGETS) $(PROD) $(LIBNAME) $(INC)
|
||||
|
||||
$(DIRECTORY_TARGETS) :
|
||||
@$(MKDIR) $@
|
||||
|
||||
$(TARGETS) $(PROD): $(DEPLIBS)
|
||||
|
||||
@@ -115,146 +146,155 @@ $(TARGETS) $(PROD): $(DEPLIBS)
|
||||
|
||||
# Capfast Rules:
|
||||
%.db: %.edf
|
||||
$(E2DB) $(E2SR_SYSFLAGS) $(E2SR_FLAGS) $<
|
||||
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) $<
|
||||
|
||||
%.db: ../%.edf
|
||||
$(E2DB) $(E2SR_SYSFLAGS) $(E2SR_FLAGS) $<
|
||||
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) $<
|
||||
|
||||
%.edf: ../%.sch $(DEPSCHS)
|
||||
@if [ ! -f cad.rc -a -r ../cad.rc ] ; then ln -s ../cad.rc ; fi
|
||||
$(SCH2EDIF) $(SCH2EDIF_SYSFLAGS) $(SCH2EDIF_FLAGS) $<
|
||||
|
||||
# Adl2dl rule
|
||||
%.dl : ../%.adl
|
||||
-$(ADL2DL) $< $@
|
||||
|
||||
# Mangen Rule:
|
||||
%.1:%
|
||||
$(RM) $(<F)
|
||||
$(RM) $(<F).nr
|
||||
ln -s $<
|
||||
$(MANGEN) -s $(<F)
|
||||
$(MANGEN) -s $<
|
||||
$(MV) $(<F).nr $(<F).1
|
||||
|
||||
# Mangen Rule:
|
||||
%.1:../%
|
||||
$(RM) $(<F)
|
||||
$(RM) $(<F).nr
|
||||
ln -s $<
|
||||
$(MANGEN) -s $(<F)
|
||||
$(MANGEN) -s $<
|
||||
$(MV) $(<F).nr $(<F).1
|
||||
|
||||
$(INSTALL_DBD)/%: %
|
||||
@echo "Installing $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_DBD)
|
||||
|
||||
$(INSTALL_DBD)/%: ../%
|
||||
@echo "Installing $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_DBD)
|
||||
|
||||
%Record.h: %Record.dbd
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToRecordtypeH \
|
||||
$(USER_DBDFLAGS) $<
|
||||
|
||||
%Record.h: ../%Record.dbd
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToRecordtypeH \
|
||||
$(USER_DBDFLAGS) $<
|
||||
|
||||
menu%.h: menu%.dbd
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToMenuH $<
|
||||
|
||||
menu%.h: ../menu%.dbd
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToMenuH $<
|
||||
|
||||
bpt%.dbd: bpt%.data
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/makeBpt $<
|
||||
|
||||
bpt%.dbd: ../bpt%.data
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/makeBpt $<
|
||||
|
||||
$(DBDNAME): ../$(DBDEXPAND)
|
||||
@echo expanding dbd
|
||||
@$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbExpand $(USER_DBDFLAGS) $< > $@
|
||||
|
||||
$(LIBNAME): $(LIBOBJS)
|
||||
@echo Building library $@
|
||||
$(RM) $@
|
||||
$(AR) $(ARFLAGS) $@ $(LIBOBJS)
|
||||
$(ARCMD) $(LIBOBJS)
|
||||
@if [ ! -z "$(RANLIB)" ] ; then\
|
||||
echo $(RANLIB) $@; \
|
||||
$(RANLIB) $@; \
|
||||
fi
|
||||
|
||||
$(INSTALL_BIN)/%: %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_LOCATION_BIN) || mkdir $(INSTALL_LOCATION_BIN)
|
||||
@test -d $(INSTALL_BIN) || mkdir $(INSTALL_BIN)
|
||||
@$(INSTALL_PRODUCT) -m 555 $< $(INSTALL_BIN)
|
||||
$(INSTALL_BIN)/%: %
|
||||
@echo "Installing Binary $@"
|
||||
@$(INSTALL_PRODUCT) -d -m 555 $< $(INSTALL_BIN)
|
||||
|
||||
$(INSTALL_BIN)/%: ../%
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_LOCATION_BIN) || mkdir $(INSTALL_LOCATION_BIN)
|
||||
@test -d $(INSTALL_BIN) || mkdir $(INSTALL_BIN)
|
||||
@$(INSTALL_PRODUCT) -m 555 $< $(INSTALL_BIN)
|
||||
$(INSTALL_BIN)/%: ../%
|
||||
@echo "Installing Binary $@"
|
||||
@$(INSTALL_PRODUCT) -d -m 555 $< $(INSTALL_BIN)
|
||||
|
||||
$(INSTALL_LIB)/%.a: %.a
|
||||
$(INSTALL_LIB)/%.a: %.a
|
||||
@echo "Installing library $@"
|
||||
@test -d $(INSTALL_LOCATION_LIB) || mkdir $(INSTALL_LOCATION_LIB)
|
||||
@test -d $(INSTALL_LIB) || mkdir $(INSTALL_LIB)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_LIB)
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_LIB)
|
||||
@if [ ! -z "$(RANLIB)" ] ; then\
|
||||
$(RANLIB) $(RANLIBFLAGS) $@; \
|
||||
fi
|
||||
|
||||
$(INSTALL_CONFIG)/%: %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_CONFIG) || mkdir $(INSTALL_CONFIG)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_CONFIG)
|
||||
|
||||
$(INSTALL_CONFIG)/%: ../%
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_CONFIG) || mkdir $(INSTALL_CONFIG)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_CONFIG)
|
||||
|
||||
$(INSTALL_TCLLIB)/%: ../%
|
||||
$(INSTALL_TCLLIB)/%: %
|
||||
@echo "Installing Tcl library $@"
|
||||
@test -d $(INSTALL_LOCATION_LIB) || mkdir $(INSTALL_LOCATION_LIB)
|
||||
@test -d $(INSTALL_LIB) || mkdir $(INSTALL_LIB)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_LIB)
|
||||
@$(INSTALL) -d -m 555 $< $(INSTALL_TCLLIB)
|
||||
|
||||
$(INSTALL_TCLLIB)/%: ../%
|
||||
@echo "Installing Tcl library $@"
|
||||
@$(INSTALL) -d -m 555 $< $(INSTALL_TCLLIB)
|
||||
|
||||
$(INSTALL_TCLLIB)/$(TCLINDEX): $(INSTALL_TCLLIBS)
|
||||
@echo "Updating $@"
|
||||
@echo eval auto_mkindex $(INSTALL_LIB) "$(TCLLIBNAME)" | tclsh
|
||||
@echo eval auto_mkindex $(INSTALL_TCLLIB) "$(TCLLIBNAME)" | tclsh
|
||||
|
||||
$(INSTALL_CONFIG)/%: %
|
||||
@echo "Installing Config File $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_CONFIG)
|
||||
|
||||
$(INSTALL_MAN)/man9/% \
|
||||
$(INSTALL_MAN)/man8/% \
|
||||
$(INSTALL_MAN)/man7/% \
|
||||
$(INSTALL_MAN)/man6/% \
|
||||
$(INSTALL_MAN)/man5/% \
|
||||
$(INSTALL_MAN)/man4/% \
|
||||
$(INSTALL_MAN)/man3/% \
|
||||
$(INSTALL_MAN)/man2/% \
|
||||
$(INSTALL_MAN)/man1/%: %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_MAN) || mkdir $(INSTALL_MAN)
|
||||
@test -d $(@D) || mkdir $(@D)
|
||||
@$(INSTALL) -m 644 $< $(@D)
|
||||
$(INSTALL_CONFIG)/%: ../%
|
||||
@echo "Installing Config File $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_CONFIG)
|
||||
|
||||
$(INSTALL_MAN)/man9/% \
|
||||
$(INSTALL_MAN)/man8/% \
|
||||
$(INSTALL_MAN)/man7/% \
|
||||
$(INSTALL_MAN)/man6/% \
|
||||
$(INSTALL_MAN)/man5/% \
|
||||
$(INSTALL_MAN)/man4/% \
|
||||
$(INSTALL_MAN)/man3/% \
|
||||
$(INSTALL_MAN)/man2/% \
|
||||
$(INSTALL_MAN)/man1/%: ../%
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_MAN) || mkdir $(INSTALL_MAN)
|
||||
@test -d $(@D) || mkdir $(@D)
|
||||
@$(INSTALL) -m 644 $< $(@D)
|
||||
$(addsuffix /%,$(MAN_DIRECTORY_TARGETS)) : %
|
||||
@echo "Installing man file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_INCLUDE)/%: %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_INCLUDE) || mkdir $(INSTALL_INCLUDE)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_INCLUDE)
|
||||
$(addsuffix /%,$(MAN_DIRECTORY_TARGETS)) : ../%
|
||||
@echo "Installing man file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_INCLUDE)/%: ../%
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_INCLUDE) || mkdir $(INSTALL_INCLUDE)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_INCLUDE)
|
||||
$(INSTALL_INCLUDE)/%: %
|
||||
@echo "Installing Include File $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_DOC)/%: %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_DOC) || mkdir $(INSTALL_DOC)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_DOC)
|
||||
$(INSTALL_INCLUDE)/%: ../%
|
||||
@echo "Installing Include File $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_DOC)/%: ../%
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_DOC) || mkdir $(INSTALL_DOC)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_DOC)
|
||||
$(INSTALL_DOC)/%: %
|
||||
@echo "Installing doc $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_DOC)
|
||||
|
||||
$(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)/%: ../%
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_TEMPLATES) || mkdir $(INSTALL_TEMPLATES)
|
||||
@test -d $(INSTALL_TEMPLATES)/$(TEMPLATES_DIR) || \
|
||||
mkdir $(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)
|
||||
$(INSTALL_DOC)/%: ../%
|
||||
@echo "Installing doc $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_DOC)
|
||||
|
||||
$(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)/%: %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_TEMPLATES) || mkdir $(INSTALL_TEMPLATES)
|
||||
@test -d $(INSTALL_TEMPLATES)/$(TEMPLATES_DIR) || \
|
||||
mkdir $(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)
|
||||
$(INSTALL_HTML)/$(HTMLS_DIR)/%: %
|
||||
@echo "Installing html $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_HTML)/$(HTMLS_DIR)/%: ../%
|
||||
@echo "Installing html $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)/%: ../%
|
||||
@echo "Installing template $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)/%: %
|
||||
@echo "Installing template $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
.PRECIOUS: %.o %.c
|
||||
|
||||
.PHONY: all inc depends build install pre-build clean rebuild
|
||||
.PHONY:: all inc depends build install pre-build clean rebuild
|
||||
|
||||
-include .DEPENDS
|
||||
|
||||
|
||||
294
config/RULES.Vx
294
config/RULES.Vx
@@ -1,71 +1,88 @@
|
||||
# $Id$
|
||||
|
||||
ifneq ($(strip $(LIBOBJS_$(ARCH_CLASS))),)
|
||||
LIBOBJS+=$(subst -nil-,,$(LIBOBJS_$(ARCH_CLASS)))
|
||||
else
|
||||
ifdef LIBOBJS_DEFAULT
|
||||
LIBOBJS+=$(LIBOBJS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
INCREC +=$(RECTYPES) $(MENUS)
|
||||
INSTALL_PROD=$(PROD:%=$(INSTALL_BIN)/%)
|
||||
INSTALL_LIBS=$(LIBNAME:%=$(INSTALL_BIN)/%)
|
||||
INSTALL_INC=$(INC:%=$(INSTALL_INCLUDE)/%)
|
||||
INSTALL_INCREC=$(INCREC:%=$(INSTALL_INCLUDE)/%)
|
||||
INSTALL_MANS+=$(MAN1:%=$(INSTALL_MAN)/man1/%)
|
||||
INSTALL_MANS+=$(MAN2:%=$(INSTALL_MAN)/man2/%)
|
||||
INSTALL_MANS+=$(MAN3:%=$(INSTALL_MAN)/man3/%)
|
||||
INSTALL_MANS+=$(MAN4:%=$(INSTALL_MAN)/man4/%)
|
||||
INSTALL_MANS+=$(MAN5:%=$(INSTALL_MAN)/man5/%)
|
||||
INSTALL_MANS+=$(MAN6:%=$(INSTALL_MAN)/man6/%)
|
||||
INSTALL_MANS+=$(MAN7:%=$(INSTALL_MAN)/man7/%)
|
||||
INSTALL_MANS+=$(MAN8:%=$(INSTALL_MAN)/man8/%)
|
||||
INSTALL_MANS+=$(MAN9:%=$(INSTALL_MAN)/man9/%)
|
||||
INSTALL_DOCS=$(DOCS:%=$(INSTALL_DOC)/%)
|
||||
INSTALL_SCRIPTS=$(SCRIPTS:%=$(INSTALL_BIN)/%)
|
||||
INSTALL_INSTALLS=$(INSTALLS:%=$(INSTALL_BIN)/%)
|
||||
INSTALL_PROD = $(PROD:%= $(INSTALL_BIN)/%)
|
||||
INSTALL_LIBS = $(LIBNAME:%= $(INSTALL_BIN)/%)
|
||||
INSTALL_LIBS_CXX = $(LIBNAME_CXX:%= $(INSTALL_BIN)/%)
|
||||
INSTALL_INC = $(INC:%= $(INSTALL_INCLUDE)/%)
|
||||
INSTALL_OSINCLUDE = $(INSTALL_INCLUDE)/os/vxWorks
|
||||
INSTALL_OSINC = $(OSINC:%= $(INSTALL_OSINCLUDE)/%)
|
||||
INSTALL_INCREC = $(INCREC:%= $(INSTALL_INCLUDE)/%)
|
||||
MANLIST = 1 2 3 4 5 6 7 8 9
|
||||
INSTALL_MANS = $(foreach n, \
|
||||
$(MANLIST),$(MAN$(n):%= $(INSTALL_MAN)/man$(n)/%))
|
||||
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)
|
||||
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)
|
||||
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)
|
||||
INSTALL_INSTALLS = $(INSTALLS:%= $(INSTALL_BIN)/%)
|
||||
|
||||
INSTALL_BPTS=$(BPTS:%=$(INSTALL_DBD)/%)
|
||||
INSTALL_DBS=$(DBDINSTALL:%=$(INSTALL_DBD)/%)\
|
||||
$(RECTYPES:%.h=$(INSTALL_DBD)/%.dbd)\
|
||||
$(MENUS:%.h=$(INSTALL_DBD)/%.dbd)
|
||||
INSTALL_BPTS = $(BPTS:%= $(INSTALL_DBD)/%)
|
||||
INSTALL_DBS = $(DBDINSTALL:%= $(INSTALL_DBD)/%)\
|
||||
$(RECTYPES:%.h= $(INSTALL_DBD)/%.dbd)\
|
||||
$(MENUS:%.h= $(INSTALL_DBD)/%.dbd)
|
||||
|
||||
INSTALL_DBDNAME=$(DBDNAME:%=$(INSTALL_DBD)/%)
|
||||
INSTALL_DBDNAME = $(DBDNAME:%= $(INSTALL_DBD)/%)
|
||||
|
||||
all:: install
|
||||
MAN_DIRECTORY_TARGETS = $(foreach n, $(MANLIST),$(INSTALL_MAN)/man$(n))
|
||||
|
||||
# if we are not building base add base includes
|
||||
#
|
||||
ifneq ($(EPICS_BASE),$(TOP))
|
||||
ifneq ($(EPICS_BASE),$(INSTALL_LOCATION))
|
||||
EPICS_INCLUDES += -I$(EPICS_BASE_INCLUDE) -I$(EPICS_BASE_INCLUDE)/os/$(OS_CLASS)
|
||||
endif
|
||||
endif
|
||||
|
||||
all:: install
|
||||
|
||||
rebuild:: clean install
|
||||
|
||||
pre_build::
|
||||
|
||||
build:: pre_build $(MENUS) $(RECTYPES) $(BPTS)\
|
||||
$(LIBNAME) $(TARGETS) $(PROD) $(DBDNAME)
|
||||
$(LIBNAME) $(LIBNAME_CXX) $(TARGETS) $(PROD) $(DBDNAME)
|
||||
|
||||
inc:: $(INSTALL_INC)
|
||||
inc:: $(INSTALL_INC) $(INSTALL_OSINC)
|
||||
|
||||
install:: inc buildInstall
|
||||
|
||||
install:: inc build $(INSTALL_INCREC)\
|
||||
$(INSTALL_LIBS) $(TARGETS) $(INSTALL_PROD) $(INSTALL_MANS)\
|
||||
$(INSTALL_DOCS) $(INSTALL_SCRIPTS)\
|
||||
$(INSTALL_INSTALLS) $(INSTALL_DBS) $(INSTALL_BPTS)\
|
||||
$(INSTALL_DBDNAME)
|
||||
buildInstall :: build $(INSTALL_INCREC)\
|
||||
$(INSTALL_LIBS) $(INSTALL_LIBS_CXX) \
|
||||
$(TARGETS) $(INSTALL_PROD) \
|
||||
$(INSTALL_MANS) $(INSTALL_DOCS) \
|
||||
$(INSTALL_HTMLS) \
|
||||
$(INSTALL_SCRIPTS) $(INSTALL_INSTALLS)\
|
||||
$(INSTALL_DBS) $(INSTALL_BPTS) \
|
||||
$(INSTALL_DBDNAME)
|
||||
|
||||
ifdef BIN_INSTALLS
|
||||
buildInstall :: binInstalls
|
||||
endif
|
||||
|
||||
depends:: $(SRCS.c) $(SRCS.cc)
|
||||
ifdef SRCS
|
||||
echo you have a SRCS in your Makefile
|
||||
exit 2
|
||||
endif
|
||||
ifdef SRCS.c
|
||||
$(DEPENDS_RULE.c)
|
||||
endif
|
||||
ifdef SRCS.cc
|
||||
$(DEPENDS_RULE.cc)
|
||||
endif
|
||||
$(RM) DEPENDS
|
||||
touch DEPENDS
|
||||
$(DEPENDS_RULE)
|
||||
|
||||
clean::
|
||||
@echo "Cleaning"
|
||||
@$(RM) *.i *.o *.a $(TARGETS) $(PROD) $(LIBNAME) $(INC) \
|
||||
@$(RM) *.i *.o *.a *.out $(TARGETS) $(PROD) $(LIBNAME) $(INC) \
|
||||
$(DBDINSTALL) $(MENUS) $(RECTYPES) $(BPTS) $(DBDNAME)
|
||||
|
||||
|
||||
# The order of the following dependencies is
|
||||
# VERY IMPORTANT !!!!
|
||||
|
||||
%: %.o
|
||||
$(RM) $@
|
||||
$(LINK.c) $@ $<
|
||||
$(LINK.c) $@ $< $(LDLIBS)
|
||||
|
||||
#$(PROD): $(OBJS)
|
||||
# $(RM) $@
|
||||
@@ -87,19 +104,28 @@ clean::
|
||||
$(RM) $@
|
||||
$(COMPILE.cc) $<
|
||||
|
||||
%.c: ../%.y
|
||||
$(RM) y.tab.c y.tab.h
|
||||
# C++ munching
|
||||
%.out : %.o
|
||||
@ $(RM) ctct.o ctdt.c
|
||||
$(NM) $< | $(MUNCH) > ctdt.c
|
||||
$(COMPILE.c) -traditional ctdt.c
|
||||
$(LINK.c) $@ $< ctdt.o
|
||||
@ $(RM) ctdt.c ctdt.o
|
||||
|
||||
#
|
||||
# rename the y.tab.h file only if we
|
||||
# are creating it
|
||||
#
|
||||
%.h %.c: ../%.y
|
||||
$(RM) $*.c y.tab.c
|
||||
ifeq ($(findstring -d, $(YACCOPT)),-d)
|
||||
$(RM) $*.h y.tab.h
|
||||
endif
|
||||
$(YACC) $(YACCOPT) $<
|
||||
@if [ -f y.tab.c ]; \
|
||||
then \
|
||||
echo "$(MV) y.tab.c $*.c"; \
|
||||
$(MV) y.tab.c $*.c; \
|
||||
fi
|
||||
@if [ -f y.tab.h ]; \
|
||||
then \
|
||||
echo "$(MV) y.tab.h $*.h"; \
|
||||
$(MV) y.tab.h $*.h; \
|
||||
fi
|
||||
$(MV) y.tab.c $*.c
|
||||
ifeq ($(findstring -d, $(YACCOPT)),-d)
|
||||
$(MV) y.tab.h $*.h
|
||||
endif
|
||||
|
||||
%.c: ../%.l
|
||||
$(RM) lex.yy.c
|
||||
@@ -111,152 +137,154 @@ clean::
|
||||
%.c: ../%.st
|
||||
@echo "preprocessing $*.st"
|
||||
@$(RM) $*.i
|
||||
$(CPP) $(CPPFLAGS) $< $*.i
|
||||
$(CPP) $(CPPFLAGS) $(CPPSNCFLAGS) $< $*.i
|
||||
@echo "converting $*.i"
|
||||
@$(RM) $@
|
||||
$(SNC) $(TARGET_SNCFLAGS) $(SNCFLAGS) $*.i
|
||||
|
||||
%.c: %.stt
|
||||
@echo "converting $<
|
||||
@$(RM) $@
|
||||
$(SNC) $(TARGET_SNCFLAGS) $(SNCFLAGS) $<
|
||||
|
||||
ln -s $< $*.st
|
||||
$(SNC) $(TARGET_SNCFLAGS) $(SNCFLAGS) $*.st
|
||||
@$(RM) $*.st
|
||||
|
||||
# Capfast Rules:
|
||||
%.db: %.edf
|
||||
$(E2DB) $(E2SR_SYSFLAGS) $(E2SR_FLAGS) $<
|
||||
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) $<
|
||||
|
||||
%.db: ../%.edf
|
||||
$(E2DB) $(E2SR_SYSFLAGS) $(E2SR_FLAGS) $<
|
||||
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) $<
|
||||
|
||||
%.edf: ../%.sch $(DEPSCHS)
|
||||
%.edf: ../%.sch
|
||||
@if [ ! -f cad.rc -a -r ../cad.rc ] ; then ln -s ../cad.rc ; fi
|
||||
$(SCH2EDIF) $(SCH2EDIF_SYSFLAGS) $(SCH2EDIF_FLAGS) $<
|
||||
|
||||
# Adl2dl rule
|
||||
%.dl : ../%.adl
|
||||
-$(ADL2DL) $< $@
|
||||
|
||||
# Mangen Rule:
|
||||
%.1:%
|
||||
$(RM) $(<F)
|
||||
$(RM) $(<F).nr
|
||||
ln -s $<
|
||||
$(MANGEN) -s $(<F)
|
||||
$(MANGEN) -s $<
|
||||
$(MV) $(<F).nr $(<F).1
|
||||
|
||||
# Mangen Rule:
|
||||
%.1:../%
|
||||
$(MANGEN) -s $<
|
||||
$(MV) $(<F).nr $(<F).1
|
||||
|
||||
$(INSTALL_DBD)/%: %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_DBD) || mkdir $(INSTALL_DBD)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_DBD)
|
||||
binInstalls: $(BIN_INSTALLS)
|
||||
$(INSTALL) -d -m 555 $^ $(INSTALL_BIN)
|
||||
|
||||
$(INSTALL_DBD)/%: ../%
|
||||
$(INSTALL_DBD)/%: %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_DBD) || mkdir $(INSTALL_DBD)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_DBD)
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_DBD)
|
||||
|
||||
$(INSTALL_DBD)/%: ../%
|
||||
@echo "Installing $@"
|
||||
@$(INSTALL) -d -m 644 $< $(INSTALL_DBD)
|
||||
|
||||
%Record.h: %Record.dbd
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToRecordtypeH \
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToRecordtypeH$(EXE) \
|
||||
$(USER_DBDFLAGS) $<
|
||||
|
||||
%Record.h: ../%Record.dbd
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToRecordtypeH \
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToRecordtypeH$(EXE) \
|
||||
$(USER_DBDFLAGS) $<
|
||||
|
||||
menu%.h: menu%.dbd
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToMenuH $<
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToMenuH$(EXE) $<
|
||||
|
||||
menu%.h: ../menu%.dbd
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToMenuH $<
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToMenuH$(EXE) $<
|
||||
|
||||
bpt%.dbd: bpt%.data
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/makeBpt $<
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/makeBpt$(EXE) $<
|
||||
|
||||
bpt%.dbd: ../bpt%.data
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/makeBpt $<
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/makeBpt$(EXE) $<
|
||||
|
||||
$(DBDNAME): ../$(DBDEXPAND)
|
||||
@echo expanding dbd
|
||||
@$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbExpand\
|
||||
$(USER_DBDFLAGS) $< > $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbExpand$(EXE) $(USER_DBDFLAGS) $< > $@
|
||||
|
||||
$(LIBNAME): $(LIBOBJS)
|
||||
@echo Building library $@
|
||||
@$(RM) $@
|
||||
$(LINK.c) $@ $(LIBOBJS)
|
||||
$(LINK.c) $@ $(LIBOBJS) $(LDLIBS)
|
||||
|
||||
$(INSTALL_BIN)/%: %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_LOCATION_BIN) || mkdir $(INSTALL_LOCATION_BIN)
|
||||
@test -d $(INSTALL_BIN) || mkdir $(INSTALL_BIN)
|
||||
@$(INSTALL) -m 555 $< $(INSTALL_BIN)
|
||||
$(LIBNAME_CXX): $(LIBOBJS_CXX)
|
||||
@echo Building CXX library $@
|
||||
@$(RM) $@
|
||||
$(LINK.cc) $@ $(LIBOBJS_CXX) $(LDLIBS)
|
||||
|
||||
$(INSTALL_BIN)/%: ../%
|
||||
$(INSTALL_BIN)/%: %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_LOCATION_BIN) || mkdir $(INSTALL_LOCATION_BIN)
|
||||
@test -d $(INSTALL_BIN) || mkdir $(INSTALL_BIN)
|
||||
@$(INSTALL) -m 555 $< $(INSTALL_BIN)
|
||||
@$(INSTALL) -d -m 555 $< $(INSTALL_BIN)
|
||||
|
||||
$(INSTALL_BIN)/%: $(EPICS_BASE_BIN)/%
|
||||
$(INSTALL_BIN)/%: ../%
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_LOCATION_BIN) || mkdir $(INSTALL_LOCATION_BIN)
|
||||
@test -d $(INSTALL_BIN) || mkdir $(INSTALL_BIN)
|
||||
@$(INSTALL) -m 555 $< $(INSTALL_BIN)
|
||||
@$(INSTALL) -d -m 555 $< $(INSTALL_BIN)
|
||||
|
||||
$(INSTALL_MAN)/man9/% \
|
||||
$(INSTALL_MAN)/man8/% \
|
||||
$(INSTALL_MAN)/man7/% \
|
||||
$(INSTALL_MAN)/man6/% \
|
||||
$(INSTALL_MAN)/man5/% \
|
||||
$(INSTALL_MAN)/man4/% \
|
||||
$(INSTALL_MAN)/man3/% \
|
||||
$(INSTALL_MAN)/man2/% \
|
||||
$(INSTALL_MAN)/man1/%: %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_MAN) || mkdir $(INSTALL_MAN)
|
||||
@test -d $(@D) || mkdir $(@D)
|
||||
@$(INSTALL) -m 644 $< $(@D)
|
||||
#
|
||||
# avoid confusing circular dependency message when
|
||||
# INSTALL_BIN and EPICS_BASE_BIN are the same (in base)
|
||||
#
|
||||
ifneq ($(INSTALL_BIN),$(EPICS_BASE_BIN))
|
||||
$(INSTALL_BIN)/%: $(EPICS_BASE_BIN)/%
|
||||
@echo "Installing $@ from EPICS base"
|
||||
@$(INSTALL) -d -m 555 $< $(INSTALL_BIN)
|
||||
endif
|
||||
|
||||
$(INSTALL_MAN)/man9/% \
|
||||
$(INSTALL_MAN)/man8/% \
|
||||
$(INSTALL_MAN)/man7/% \
|
||||
$(INSTALL_MAN)/man6/% \
|
||||
$(INSTALL_MAN)/man5/% \
|
||||
$(INSTALL_MAN)/man4/% \
|
||||
$(INSTALL_MAN)/man3/% \
|
||||
$(INSTALL_MAN)/man2/% \
|
||||
$(INSTALL_MAN)/man1/%: ../%
|
||||
$(addsuffix /%,$(MAN_DIRECTORY_TARGETS)) : %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_MAN) || mkdir $(INSTALL_MAN)
|
||||
@test -d $(@D) || mkdir $(@D)
|
||||
@$(INSTALL) -m 644 $< $(@D)
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_INCLUDE)/%: %
|
||||
$(addsuffix /%,$(MAN_DIRECTORY_TARGETS)) : ../%
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_INCLUDE) || mkdir $(INSTALL_INCLUDE)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_INCLUDE)
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_INCLUDE)/%: ../%
|
||||
$(INSTALL_INCLUDE)/%: %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_INCLUDE) || mkdir $(INSTALL_INCLUDE)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_INCLUDE)
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_DOC)/%: %
|
||||
$(INSTALL_INCLUDE)/%: ../%
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_DOC) || mkdir $(INSTALL_DOC)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_DOC)
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_DOC)/%: ../%
|
||||
$(INSTALL_DOC)/%: %
|
||||
@echo "Installing $@"
|
||||
@test -d $(INSTALL_DOC) || mkdir $(INSTALL_DOC)
|
||||
@$(INSTALL) -m 644 $< $(INSTALL_DOC)
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_DOC)/%: ../%
|
||||
@echo "Installing $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_HTML)/$(HTMLS_DIR)/%: %
|
||||
@echo "Installing $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_HTML)/$(HTMLS_DIR)/%: ../%
|
||||
@echo "Installing $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
.PRECIOUS: %.o %.c
|
||||
|
||||
.PHONY: all inc depends build install pre-build clean rebuild
|
||||
.PHONY:: all inc depends build install pre_build clean rebuild buildInstall binInstalls
|
||||
|
||||
-include .DEPENDS
|
||||
-include DEPENDS
|
||||
|
||||
ifneq (,$(wildcard ../baseLIBOBJS))
|
||||
$(LIBNAME): ../baseLIBOBJS
|
||||
endif
|
||||
#=====> ???? the following line causes a rebuild every time
|
||||
#=====> $(LIBNAME): ../Makefile.Vx
|
||||
$(DBDNAME): ../base.dbd $(RECTYPES:%.h=../%.dbd)
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# $Id$
|
||||
#
|
||||
# EPICS RULES_ARCH
|
||||
# by Matthew Needes and Mike Bordua and Janet Andersoni and Jeff Hill
|
||||
# by Matthew Needes and Mike Bordua and Janet Anderson and Jeff Hill
|
||||
#
|
||||
|
||||
all:: install
|
||||
@@ -10,6 +10,7 @@ all:: install
|
||||
ACTIONS += inc
|
||||
ACTIONS += build
|
||||
ACTIONS += install
|
||||
ACTIONS += buildInstall
|
||||
ACTIONS += depends
|
||||
ACTIONS += rebuild
|
||||
|
||||
@@ -22,12 +23,12 @@ archPart = $(word 2, $(subst $(DIVIDER), ,$@))
|
||||
hostArchs = $(HOST_ARCH)
|
||||
hostActionArchTargets = $(foreach x, $(ACTIONS),\
|
||||
$(foreach arch,$(hostArchs), $(x)$(DIVIDER)$(arch)))
|
||||
ifeq (Makefile.$(BUILD_TYPE), $(wildcard Makefile.$(BUILD_TYPE)))
|
||||
ifeq (Makefile.Host, $(wildcard Makefile.Host))
|
||||
hostDirs = $(addprefix O.,$(hostArchs))
|
||||
$(hostActionArchTargets) : $(hostDirs)
|
||||
$(MAKE) -C O.$(archPart) -f ../Makefile.$(BUILD_TYPE) T_A=$(archPart) $(actionPart)
|
||||
$(MAKE) -C O.$(archPart) -f ../Makefile.Host T_A=$(archPart) BUILD_TYPE=Host $(actionPart)
|
||||
$(hostArchs) : % : O.%
|
||||
$(MAKE) -C O.$@ -f ../Makefile.$(BUILD_TYPE) T_A=$@
|
||||
$(MAKE) -C O.$@ -f ../Makefile.Host T_A=$@ BUILD_TYPE=Host
|
||||
else
|
||||
$(hostActionArchTargets) :
|
||||
$(hostArchs) :
|
||||
@@ -42,28 +43,24 @@ crossActionArchTargets = $(foreach x, $(ACTIONS), \
|
||||
ifeq (Makefile.Vx, $(wildcard Makefile.Vx))
|
||||
crossDirs = $(addprefix O.,$(crossArchs))
|
||||
$(crossActionArchTargets) : $(crossDirs)
|
||||
$(MAKE) -C O.$(archPart) -f ../Makefile.Vx T_A=$(archPart) $(actionPart)
|
||||
$(MAKE) -C O.$(archPart) -f ../Makefile.Vx T_A=$(archPart) BUILD_TYPE=Vx $(actionPart)
|
||||
$(crossArchs) : % : O.%
|
||||
$(MAKE) -C O.$@ -f ../Makefile.Vx T_A=$@
|
||||
$(MAKE) -C O.$@ -f ../Makefile.Vx T_A=$@ BUILD_TYPE=Vx
|
||||
else
|
||||
$(crossActionArchTargets) :
|
||||
$(crossArchs) :
|
||||
endif
|
||||
|
||||
$(hostDirs) :
|
||||
$(MKDIR) $@
|
||||
echo "T_A=$(subst O.,,$@)" > $@/Makefile
|
||||
echo "include ../Makefile.$(BUILD_TYPE)" >> $@/Makefile
|
||||
$(PERL) $(EPICS_BASE_HOST_BIN)/makeMakefile.pl $@ Host
|
||||
|
||||
$(crossDirs) :
|
||||
$(MKDIR) $@
|
||||
echo "T_A=$(subst O.,,$@)" > $@/Makefile
|
||||
echo "include ../Makefile.Vx" >> $@/Makefile
|
||||
$(PERL) $(EPICS_BASE_HOST_BIN)/makeMakefile.pl $@ Vx
|
||||
|
||||
#
|
||||
# host/cross action targets
|
||||
#
|
||||
$(ACTIONS) clean : % : %$(DIVIDER)host %$(DIVIDER)cross
|
||||
$(ACTIONS) :: % : %$(DIVIDER)host %$(DIVIDER)cross
|
||||
HostActionTargets = $(foreach x, $(ACTIONS) clean, $(x)$(DIVIDER)host)
|
||||
CrossActionTargets = $(foreach x, $(ACTIONS) clean, $(x)$(DIVIDER)cross)
|
||||
$(HostActionTargets) : %$(DIVIDER)host : $(addprefix %$(DIVIDER), $(hostArchs))
|
||||
@@ -79,13 +76,15 @@ cross : $(crossArchs)
|
||||
#
|
||||
# special clean rule
|
||||
#
|
||||
clean ::
|
||||
$(RMDIR) $(hostDirs) $(crossDirs)
|
||||
clean$(DIVIDER)% :
|
||||
$(RMDIR) O.$*
|
||||
|
||||
.PHONY : $(HostActionTargets)
|
||||
.PHONY : $(CrossActionTargets)
|
||||
.PHONY : $(crossActionArchTargets)
|
||||
.PHONY : $(hostActionArchTargets)
|
||||
.PHONY : $(hostArchs) $(crossArchs)
|
||||
.PHONY : $(ACTIONS) clean all host cross
|
||||
.PHONY :: $(HostActionTargets)
|
||||
.PHONY :: $(CrossActionTargets)
|
||||
.PHONY :: $(crossActionArchTargets)
|
||||
.PHONY :: $(hostActionArchTargets)
|
||||
.PHONY :: $(hostArchs) $(crossArchs)
|
||||
.PHONY :: $(ACTIONS) clean all host cross
|
||||
|
||||
|
||||
@@ -4,39 +4,47 @@
|
||||
|
||||
|
||||
ARCHS += $(BUILD_ARCHS) host cross
|
||||
ACTIONS += clean inc install depends
|
||||
ACTIONS += clean inc depends buildInstall
|
||||
|
||||
dirPart = $(word 1, $(subst $(DIVIDER), ,$@))
|
||||
actionArchPart = $(subst $(dirPart)$(DIVIDER), ,$@)
|
||||
|
||||
dirActionArchTargets = $(foreach dir, $(DIRS), \
|
||||
$(foreach action, $(ACTIONS),\
|
||||
$(foreach action, $(ACTIONS) install,\
|
||||
$(foreach arch, $(ARCHS), \
|
||||
$(dir)$(DIVIDER)$(action)$(DIVIDER)$(arch))))
|
||||
dirArchTargets += $(foreach dir, $(DIRS), \
|
||||
$(foreach arch, $(ARCHS),\
|
||||
$(dir)$(DIVIDER)$(arch)))
|
||||
dirActionTargets += $(foreach dir, $(DIRS), \
|
||||
$(foreach action, $(ACTIONS),\
|
||||
$(foreach action, $(ACTIONS) install,\
|
||||
$(dir)$(DIVIDER)$(action)))
|
||||
actionArchTargets = $(foreach action, $(ACTIONS),\
|
||||
actionArchTargets = $(foreach action, $(ACTIONS) install,\
|
||||
$(foreach arch, $(ARCHS), \
|
||||
$(action)$(DIVIDER)$(arch)))
|
||||
|
||||
installArchTargets = $(foreach action, install,\
|
||||
$(foreach arch, $(ARCHS), \
|
||||
$(action)$(DIVIDER)$(arch)))
|
||||
|
||||
all:: inc install
|
||||
all install :: inc buildInstall
|
||||
|
||||
rebuild:: clean all
|
||||
|
||||
|
||||
$(ARCHS) $(installArchTargets) :: inc
|
||||
|
||||
$(DIRS) $(dirActionTargets) $(dirArchTargets)$(dirActionArchTargets) ::
|
||||
$(MAKE) -C $(dirPart) $(actionArchPart)
|
||||
|
||||
$(ARCHS) $(ACTIONS) $(actionArchTargets):%: $(foreach dir, $(DIRS), $(dir)$(DIVIDER)%)
|
||||
$(ARCHS) $(ACTIONS) $(actionArchTargets) ::%: \
|
||||
$(foreach dir, $(DIRS), $(dir)$(DIVIDER)%)
|
||||
|
||||
|
||||
.PHONY : $(DIRS)
|
||||
.PHONY : $(ARCHS) $(ACTIONS)
|
||||
.PHONY : $(dirActionTargets) $(dirArchTargets)
|
||||
.PHONY : $(dirActionArchTargets)
|
||||
.PHONY : $(actionArchTargets)
|
||||
.PHONY :: $(DIRS) all install rebuild
|
||||
.PHONY :: $(ARCHS) $(ACTIONS)
|
||||
.PHONY :: $(dirActionTargets) $(dirArchTargets)
|
||||
.PHONY :: $(dirActionArchTargets)
|
||||
.PHONY :: $(actionArchTargets)
|
||||
.PHONY :: $(installArchTargets)
|
||||
|
||||
|
||||
|
||||
@@ -5,46 +5,47 @@
|
||||
include $(TOP)/config/RULES_DIRS
|
||||
|
||||
uninstall$(DIVIDER)%::
|
||||
@$(RMDIR) $(INSTALL_LOCATION_BIN)/$* $(INSTALL_LOCATION_LIB)/$* \
|
||||
$(INSTALL_LOCATION)/dbd $(INSTALL_MAN) $(INSTALL_INCLUDE)
|
||||
@$(RMDIR) rec.bak rec
|
||||
@$(RMDIR) $(INSTALL_LOCATION_BIN)/$* $(INSTALL_LOCATION_LIB)/$* \
|
||||
$(INSTALL_DBD) $(INSTALL_MAN) $(INSTALL_INCLUDE) \
|
||||
$(INSTALL_HTML) $(INSTALL_JAVA) $(INSTALL_TEMPLATES)
|
||||
|
||||
uninstall:: $(addprefix uninstall$(DIVIDER),$(BUILD_ARCHS))
|
||||
|
||||
tar:
|
||||
@DIRNAME=$(notdir $(shell pwd)); \
|
||||
echo "TOP: Creating $$DIRNAME.Tar file..."; \
|
||||
ls Makefile* | xargs tar vcf $$DIRNAME.Tar; \
|
||||
echo "TOP: Creating $$DIRNAME.tar file..."; \
|
||||
ls Makefile* | xargs tar vcf $$DIRNAME.tar; \
|
||||
if [ -f .current_rel_hist ]; then \
|
||||
ls .current_rel_hist | xargs tar vrf $$DIRNAME.Tar ; \
|
||||
ls .current_rel_hist | xargs tar vrf $$DIRNAME.tar ; \
|
||||
fi ;\
|
||||
if [ -f EPICS_BASE ]; then \
|
||||
ls EPICS_BASE | xargs tar vrf $$DIRNAME.Tar ; \
|
||||
ls EPICS_BASE | xargs tar vrf $$DIRNAME.tar ; \
|
||||
fi ;\
|
||||
for DIR in ${DIRS}; do \
|
||||
find $${DIR} -name CVS -prune -o ! -type d -print \
|
||||
| grep -v "/O\..*$$" | xargs tar vrf $$DIRNAME.Tar; \
|
||||
| grep -v "/O\..*$$" | xargs tar vrf $$DIRNAME.tar; \
|
||||
done
|
||||
|
||||
help:
|
||||
@echo "Usage: gnumake [options] [target] ..."
|
||||
@echo "Targets supported by all Makefiles:"
|
||||
@echo " install - Installs executables in bin/<arch> (default rule)"
|
||||
@echo " build - Builds objects, using libraries from "build_libs"
|
||||
@echo " clean - Cleans objects. Clean removes the" O.<arch> dirs
|
||||
@echo " build - Builds objects, using libraries from build_libs"
|
||||
@echo " clean - Cleans objects. Clean removes the O.<arch> dirs"
|
||||
@echo " in all except the O.<arch> level Makefile"
|
||||
@echo " depends - Generates include dependencies"
|
||||
@echo "\"Partial\" build targets supported by Makefiles:"
|
||||
@echo " install.<arch> - Builds and installs <arch> only.
|
||||
@echo " install.<arch> - Builds and installs <arch> only."
|
||||
@echo " clean.<arch> - Cleans <arch> binaries in O.<arch> dirs only."
|
||||
@echo " build.<arch> - Builds <arch> only.
|
||||
@echo " depends.<arch> - Generates <arch> dependencies only.
|
||||
@echo " build.<arch> - Builds <arch> only."
|
||||
@echo " depends.<arch> - Generates <arch> dependencies only."
|
||||
@echo "Targets supported by top level Makefile:"
|
||||
@echo " uninstall - Cleans directories created by the install."
|
||||
@echo " tar - Create tar file "
|
||||
@echo "Indiv. object targets are supported by O.<arch> level Makefile .e.g"
|
||||
@echo " xxxRecord.o
|
||||
@echo " xxxRecord.o"
|
||||
|
||||
.PHONY : uninstall tar help
|
||||
.PHONY : $(addprefix uninstall$(DIVIDER), $(BUILDARCHS))
|
||||
.PHONY :: uninstall tar help
|
||||
.PHONY :: $(addprefix uninstall$(DIVIDER), $(BUILDARCHS))
|
||||
|
||||
|
||||
183
config/Sample.Makefile.Host
Normal file
183
config/Sample.Makefile.Host
Normal file
@@ -0,0 +1,183 @@
|
||||
# Makefile.Host for base/src/sample
|
||||
#
|
||||
#
|
||||
# Sample Makefile.Host showing all possible entries
|
||||
# that are allowed using RULES.Host.
|
||||
#
|
||||
|
||||
TOP = ../../..
|
||||
include $(TOP)/config/CONFIG_BASE
|
||||
CMPLR = STRICT
|
||||
|
||||
# Add-on CFLAGS that are needed by this Makefile.
|
||||
# (If possible, all system specific flags should be
|
||||
# defined in CONFIG.Host.$(ARCH_CLASS))
|
||||
#
|
||||
# These CFLAGS rules also apply to these Makefile-variables:
|
||||
# CXXFLAGS C++ flags
|
||||
# LDFLAGS link flags
|
||||
#
|
||||
# This is used on all systems:
|
||||
USR_CFLAGS = -DVAR=value -Ddefine_for_all_systems
|
||||
# This is added to the above, but only for ARCH_CLASS=BSD:
|
||||
USR_CFLAGS_BSD = -DVERSION='Berkeley enhanced'
|
||||
# ..only for WIN32:
|
||||
USR_CFLAGS_WIN32 = -DVERSION='WIN32 port'
|
||||
#
|
||||
# -nil- is special:
|
||||
# if USR_CFLAGS_SYSV was undefined or empty, .._DEFAULT would have
|
||||
# been used.
|
||||
# To indicate
|
||||
# "yes, there is a special USR_CFLAGS for SYSV, but it's empty"
|
||||
# you have to set it to -nil-:
|
||||
USR_CFLAGS_SYSV = -nil-
|
||||
# .. for all other arch classes:
|
||||
USR_CFLAGS_DEFAULT = -DVERSION='generic Unix'
|
||||
|
||||
# CFLAGS that are only used to compile a_file.c or a_file.cc:
|
||||
#
|
||||
a_file_CFLAGS = -DIN_A_FILE
|
||||
a_file_CFLAGS_WIN32 = -DVERSION='WIN32 port'
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# general rule for all .c .cc .h .hh files and scripts:
|
||||
#
|
||||
# In here you supply just the filename without '../' etc.
|
||||
# While building in an O.xxx subdir, the
|
||||
# sources are extracted from either the
|
||||
# '..'
|
||||
# dir or - if it exists - the dir
|
||||
# '../$(ARCH_CLASS)'
|
||||
# is preferred.
|
||||
# ---------------------------------------------------------
|
||||
|
||||
|
||||
# includes to install from this Makefile
|
||||
#
|
||||
# again: if INC_$(ARCH_CLASS) is defined, it is added to INC,
|
||||
# otherwise INC_DEFAULT (if defined) is added:
|
||||
#
|
||||
INC_DEFAULT = for_all_but_WIN32_or_hp700.h
|
||||
INC_WIN32 = only_for_WIN32.h
|
||||
INC_hp700 = -nil- # hp700 uses no special include
|
||||
INC = file.h
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# defining a library
|
||||
# --------------------------------------------------------------------
|
||||
#
|
||||
# Contents of a library are specified via LIBSRCS.
|
||||
# From this the platform specific object names (.o, .obj, ...)
|
||||
# are derived automatically.
|
||||
#
|
||||
# Platform specific objects:
|
||||
# use LIBOBJS_$(ARCH_CLASS) or .._DEFAULT
|
||||
#
|
||||
# Platform specific files can also be put in
|
||||
# separate os/ARCH_CLASS directories!
|
||||
#
|
||||
# For almost every file the seach order is:
|
||||
# ./os/ARCH_CLASS
|
||||
# ./os/generic
|
||||
# .
|
||||
# So usually only LIBSRCS should be sufficient!
|
||||
#
|
||||
LIBSRCS = file_for_lib.c another_file.cc
|
||||
LIBSRCS_DEFAULT = posix.c
|
||||
LIBSRCS_WIN32 = win32_special.c
|
||||
LIBSRCS_BSD = -nil-
|
||||
|
||||
# Library to build:
|
||||
# lib$(LIBRARY).a or ..dll/..exp/..lib
|
||||
#
|
||||
# Currently you can build only one (1) lib per Makefile.Host!
|
||||
#
|
||||
LIBRARY=libname
|
||||
|
||||
# if SHARED_LIBRARIES is YES then shared and archive libraries will
|
||||
# both be built
|
||||
#SHARED_LIBRARIES = YES
|
||||
#
|
||||
# Library version
|
||||
SHRLIB_VERSION =
|
||||
# On WIN32 results in /version:$(SHRLIB_VERSION) link option
|
||||
# On Unix type hosts .$(SHRLIB_VERSION) is appended to library name
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# defining products (executable programs)
|
||||
# --------------------------------------------------------------------
|
||||
#
|
||||
# if SRCS is undefined, it defaults to $(PROD).c
|
||||
SRCS=a.c b.c c.c
|
||||
|
||||
# SRCS that are only used for PROD a_file
|
||||
#
|
||||
a_file_SRCS = aa.c bb.c
|
||||
|
||||
# EPICS libs needed to link PROD, TESTPROD and sharable library
|
||||
#
|
||||
# note that DLL_LIBS (the libraries needed to link a shareable
|
||||
# library) is created by default from the PROD/SYS libraries specified
|
||||
# below minus the name of the sharable library (LIBRARY)
|
||||
#
|
||||
#
|
||||
# for all systems:
|
||||
PROD_LIBS = Com Ca
|
||||
# for most systems:
|
||||
PROD_LIBS_DEFAULT = mathlib
|
||||
PROD_LIBS_WIN32 = -nil-
|
||||
|
||||
# system libs needed to link PROD, TESTPROD and sharable library
|
||||
#
|
||||
# for all systems:
|
||||
SYS_PROD_LIBS = m
|
||||
# for most systems:
|
||||
SYS_PROD_LIBS_DEFAULT = foolib
|
||||
SYS_PROD_LIBS_WIN32 = -nil-
|
||||
|
||||
# other libs needed to link PROD, TESTPROD and sharable library
|
||||
#
|
||||
# for all systems:
|
||||
USR_LIBS = Xm Xt X11
|
||||
Xm_DIR = $(MOTIF_LIB)
|
||||
Xt_DIR = $(X11_LIB)
|
||||
X11_DIR = $(X11_LIB)
|
||||
|
||||
# for most systems:
|
||||
USR_LIBS_DEFAULT = foolib
|
||||
USR_LIBS_WIN32 = -nil-
|
||||
foolib_DIR = $(FOO_LIB)
|
||||
|
||||
# Product,
|
||||
# may be caRepeater.o -> caRepeater
|
||||
# or caRepeater.obj -> caRepeater.exe
|
||||
PROD = prod
|
||||
PROD_DEFAULT = product_for_rest
|
||||
PROD_WIN32 = product_only_for_WIN32
|
||||
PROD_BSD = product_only_for_BSD
|
||||
PROD_SYSV = product_only_for_SYSV
|
||||
|
||||
# Product version
|
||||
PROD_VERSION =
|
||||
# On WIN32 results in /version:$(SHRLIB_VERSION) link option
|
||||
# On Unix type hosts PROD_VERSION) is ignored
|
||||
|
||||
# Scripts to install
|
||||
#
|
||||
# If there is both ../$(SCRIPT) and ../$(ARCH_CLASS)/$(SCRIPT),
|
||||
# the latter, system specific version will be installed!
|
||||
#
|
||||
SCRIPTS_DEFAULT = script_for_rest
|
||||
SCRIPTS_WIN32 = script_only_for_WIN32
|
||||
SCRIPTS_BSD = script_only_for_BSD
|
||||
SCRIPTS = script
|
||||
|
||||
# if you want to build products locally without installing:
|
||||
# TESTPROD = test
|
||||
|
||||
# put all definitions before the following include line
|
||||
# put all rules after the following include line
|
||||
|
||||
include $(TOP)/config/RULES.Host
|
||||
|
||||
# EOF Makefile.Host
|
||||
32
src/as/Makefile.Host
Normal file
32
src/as/Makefile.Host
Normal file
@@ -0,0 +1,32 @@
|
||||
TOP = ../../..
|
||||
include $(TOP)/config/CONFIG_BASE
|
||||
|
||||
USR_CFLAGS += -D_NO_PROTO
|
||||
|
||||
INC := asDbLib.h asLib.h
|
||||
|
||||
# build lib As from asLib.c:
|
||||
#
|
||||
LIBSRCS := asLib.c
|
||||
LIBRARY := As
|
||||
|
||||
|
||||
# All systems link the libs As, Com, Db (and again Com ??),
|
||||
# generic Unix needs also lib m:
|
||||
#
|
||||
SYS_PROD_LIBS_DEFAULT := m
|
||||
SYS_PROD_LIBS_WIN32 := -nil-
|
||||
PROD_LIBS := As Com Db Com
|
||||
|
||||
PROD := ascheck
|
||||
|
||||
include $(TOP)/config/RULES.Host
|
||||
|
||||
# Extra rule since asLib_lex.c is included in asLib.c
|
||||
# In my opinion, these objects should really be built
|
||||
# independently.
|
||||
asLib$(OBJ): asLib_lex.c ../asLibRoutines.c
|
||||
|
||||
clean::
|
||||
@$(RM) asLib.c asLib_lex.c
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
TOP = ../../..
|
||||
include $(TOP)/config/CONFIG_BASE
|
||||
|
||||
USR_CFLAGS = -D_NO_PROTO
|
||||
USR_LDLIBS = -lAs -lCom -lDb -lCom -lm -s
|
||||
USR_LDFLAGS = -L.
|
||||
|
||||
DEPLIBS_BASE = $(INSTALL_LIB)
|
||||
DEPLIBS = ./libAs.a\
|
||||
$(DEPLIBS_BASE)/libCom.a\
|
||||
$(DEPLIBS_BASE)/libDb.a
|
||||
|
||||
INC += asDbLib.h
|
||||
INC += asLib.h
|
||||
|
||||
SRCS.c = ../ascheck.c asLib.c
|
||||
OBJS = ascheck.o
|
||||
LIBOBJS = asLib.o
|
||||
LIBNAME = libAs.a
|
||||
PROD = ascheck
|
||||
|
||||
include $(TOP)/config/RULES.Unix
|
||||
|
||||
# Extra rule since asLib_lex.c is included in asLib.c
|
||||
# In my opinion, these objects should really be built
|
||||
# independently.
|
||||
asLib.o: asLib_lex.c ../asLibRoutines.c
|
||||
|
||||
clean::
|
||||
@$(RM) asLib.c asLib_lex.c
|
||||
|
||||
346
src/as/asCa.c
346
src/as/asCa.c
@@ -5,53 +5,19 @@
|
||||
COPYRIGHT NOTIFICATION
|
||||
*****************************************************************
|
||||
|
||||
THE FOLLOWING IS A NOTICE OF COPYRIGHT, AVAILABILITY OF THE CODE,
|
||||
AND DISCLAIMER WHICH MUST BE INCLUDED IN THE PROLOGUE OF THE CODE
|
||||
AND IN ALL SOURCE LISTINGS OF THE CODE.
|
||||
|
||||
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
|
||||
|
||||
Argonne National Laboratory (ANL), with facilities in the States of
|
||||
Illinois and Idaho, is owned by the United States Government, and
|
||||
operated by the University of Chicago under provision of a contract
|
||||
with the Department of Energy.
|
||||
|
||||
Portions of this material resulted from work developed under a U.S.
|
||||
Government contract and are subject to the following license: For
|
||||
a period of five years from March 30, 1993, the Government is
|
||||
granted for itself and others acting on its behalf a paid-up,
|
||||
nonexclusive, irrevocable worldwide license in this computer
|
||||
software to reproduce, prepare derivative works, and perform
|
||||
publicly and display publicly. With the approval of DOE, this
|
||||
period may be renewed for two additional five year periods.
|
||||
Following the expiration of this period or periods, the Government
|
||||
is granted for itself and others acting on its behalf, a paid-up,
|
||||
nonexclusive, irrevocable worldwide license in this computer
|
||||
software to reproduce, prepare derivative works, distribute copies
|
||||
to the public, perform publicly and display publicly, and to permit
|
||||
others to do so.
|
||||
|
||||
*****************************************************************
|
||||
DISCLAIMER
|
||||
*****************************************************************
|
||||
|
||||
NEITHER THE UNITED STATES GOVERNMENT NOR ANY AGENCY THEREOF, NOR
|
||||
THE UNIVERSITY OF CHICAGO, NOR ANY OF THEIR EMPLOYEES OR OFFICERS,
|
||||
MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL
|
||||
LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR
|
||||
USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, OR PROCESS
|
||||
DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY
|
||||
OWNED RIGHTS.
|
||||
|
||||
*****************************************************************
|
||||
LICENSING INQUIRIES MAY BE DIRECTED TO THE INDUSTRIAL TECHNOLOGY
|
||||
DEVELOPMENT CENTER AT ARGONNE NATIONAL LABORATORY (708-252-2000).
|
||||
This software was developed under a United States Government license
|
||||
described on the COPYRIGHT_UniversityOfChicago file included as part
|
||||
of this distribution.
|
||||
**********************************************************************/
|
||||
/*
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 03-22-94 mrk Initial Implementation
|
||||
*/
|
||||
|
||||
|
||||
/*This module is separate from asDbLib because CA uses old database access*/
|
||||
#include <vxWorks.h>
|
||||
#include <taskLib.h>
|
||||
@@ -59,96 +25,105 @@ DEVELOPMENT CENTER AT ARGONNE NATIONAL LABORATORY (708-252-2000).
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <dbDefs.h>
|
||||
#include <taskwd.h>
|
||||
#include <asDbLib.h>
|
||||
#include <cadef.h>
|
||||
#include <caerr.h>
|
||||
#include <caeventmask.h>
|
||||
#include <task_params.h>
|
||||
#include <alarm.h>
|
||||
#include <semLib.h>
|
||||
|
||||
#include "dbDefs.h"
|
||||
#include "errlog.h"
|
||||
#include "taskwd.h"
|
||||
#include "asDbLib.h"
|
||||
#include "cadef.h"
|
||||
#include "caerr.h"
|
||||
#include "caeventmask.h"
|
||||
#include "task_params.h"
|
||||
#include "alarm.h"
|
||||
|
||||
int asCaDebug = 0;
|
||||
extern ASBASE volatile *pasbase;
|
||||
LOCAL int firstTime = TRUE;
|
||||
LOCAL int taskid=0;
|
||||
LOCAL int caInitializing=FALSE;
|
||||
extern ASBASE *pasbase;
|
||||
LOCAL SEM_ID asCaTaskLock; /*lock access to task */
|
||||
LOCAL SEM_ID asCaTaskWait; /*Wait for task to respond*/
|
||||
LOCAL SEM_ID asCaTaskAddChannels; /*Tell asCaTask to add channels*/
|
||||
LOCAL SEM_ID asCaTaskClearChannels; /*Tell asCaTask to clear channels*/
|
||||
|
||||
typedef struct {
|
||||
struct dbr_sts_double rtndata;
|
||||
chid chid;
|
||||
evid evid;
|
||||
} CAPVT;
|
||||
|
||||
LOCAL void accessRightsCallback(struct access_rights_handler_args arha)
|
||||
/*connectCallback only handles disconnects*/
|
||||
LOCAL void connectCallback(struct connection_handler_args arg)
|
||||
{
|
||||
chid chid = arha.chid;
|
||||
ASGINP *pasginp;
|
||||
ASG *pasg;
|
||||
CAPVT *pcapvt;
|
||||
int Ilocked=FALSE;
|
||||
chid chid = arg.chid;
|
||||
ASGINP *pasginp = (ASGINP *)ca_puser(chid);
|
||||
ASG *pasg = pasginp->pasg;
|
||||
|
||||
if(!caInitializing) {
|
||||
FASTLOCK(&asLock);
|
||||
Ilocked = TRUE;
|
||||
}
|
||||
pasginp = (ASGINP *)ca_puser(chid);
|
||||
pasg = (ASG *)pasginp->pasg;
|
||||
pcapvt = pasginp->capvt;
|
||||
if(!ca_read_access(chid)) {
|
||||
pasg->inpBad |= (1<<pasginp->inpIndex);
|
||||
if(!caInitializing) asComputeAsg(pasg);
|
||||
} /*eventCallback will set inpBad false*/
|
||||
if(Ilocked) FASTUNLOCK(&asLock);
|
||||
}
|
||||
|
||||
LOCAL void connectCallback(struct connection_handler_args cha)
|
||||
{
|
||||
chid chid = cha.chid;
|
||||
ASGINP *pasginp;
|
||||
ASG *pasg;
|
||||
CAPVT *pcapvt;
|
||||
int Ilocked=FALSE;
|
||||
|
||||
if(!caInitializing) {
|
||||
FASTLOCK(&asLock);
|
||||
Ilocked = TRUE;
|
||||
}
|
||||
pasginp = (ASGINP *)ca_puser(chid);
|
||||
pasg = (ASG *)pasginp->pasg;
|
||||
pcapvt = pasginp->capvt;
|
||||
if(ca_state(chid)!=cs_conn) {
|
||||
pasg->inpBad |= (1<<pasginp->inpIndex);
|
||||
if(!caInitializing) asComputeAsg(pasg);
|
||||
} /*eventCallback will set inpBad false*/
|
||||
if(Ilocked) FASTUNLOCK(&asLock);
|
||||
}
|
||||
|
||||
LOCAL void eventCallback(struct event_handler_args eha)
|
||||
{
|
||||
ASGINP *pasginp;
|
||||
CAPVT *pcapvt;
|
||||
ASG *pasg;
|
||||
struct dbr_sts_double *pdata = eha.dbr;
|
||||
int Ilocked=FALSE;
|
||||
|
||||
if(!caInitializing) {
|
||||
FASTLOCK(&asLock);
|
||||
Ilocked = TRUE;
|
||||
}
|
||||
pasginp = (ASGINP *)eha.usr;
|
||||
pcapvt = (CAPVT *)pasginp->capvt;
|
||||
if(ca_read_access(pcapvt->chid)) {
|
||||
pasg = (ASG *)pasginp->pasg;
|
||||
pcapvt->rtndata = *pdata; /*structure copy*/
|
||||
if(pdata->severity==INVALID_ALARM) {
|
||||
if(!(pasg->inpBad & (1<<pasginp->inpIndex))) {
|
||||
/*was good so lets make it bad*/
|
||||
pasg->inpBad |= (1<<pasginp->inpIndex);
|
||||
} else {
|
||||
pasg->inpBad &= ~((1<<pasginp->inpIndex));
|
||||
pasg->pavalue[pasginp->inpIndex] = pdata->value;
|
||||
if(!caInitializing) asComputeAsg(pasg);
|
||||
if(asCaDebug) printf("as connectCallback disconnect %s\n",
|
||||
ca_name(chid));
|
||||
}
|
||||
pasg->inpChanged |= (1<<pasginp->inpIndex);
|
||||
if(!caInitializing) asComputeAsg(pasg);
|
||||
}
|
||||
if(Ilocked) FASTUNLOCK(&asLock);
|
||||
}
|
||||
|
||||
LOCAL void eventCallback(struct event_handler_args arg)
|
||||
{
|
||||
int caStatus = arg.status;
|
||||
chid chid = arg.chid;
|
||||
ASGINP *pasginp = (ASGINP *)arg.usr;
|
||||
ASG *pasg;
|
||||
CAPVT *pcapvt;
|
||||
READONLY struct dbr_sts_double *pdata;
|
||||
|
||||
if(caStatus!=ECA_NORMAL) {
|
||||
if(chid) {
|
||||
epicsPrintf("asCa: eventCallback error %s channel %s\n",
|
||||
ca_message(caStatus),ca_name(chid));
|
||||
} else {
|
||||
epicsPrintf("asCa: eventCallback error %s chid is null\n",
|
||||
ca_message(caStatus));
|
||||
}
|
||||
return;
|
||||
}
|
||||
pasg = pasginp->pasg;
|
||||
pcapvt = (CAPVT *)pasginp->capvt;
|
||||
if(chid!=pcapvt->chid) {
|
||||
epicsPrintf("asCa: eventCallback error pcapvt->chid != arg.chid\n");
|
||||
return;
|
||||
}
|
||||
if(ca_state(chid)!=cs_conn || !ca_read_access(chid)) {
|
||||
if(!(pasg->inpBad & (1<<pasginp->inpIndex))) {
|
||||
/*was good so lets make it bad*/
|
||||
pasg->inpBad |= (1<<pasginp->inpIndex);
|
||||
if(!caInitializing) asComputeAsg(pasg);
|
||||
if(asCaDebug) {
|
||||
printf("as eventCallback %s inpBad ca_state %d"
|
||||
" ca_read_access %d\n",
|
||||
ca_name(chid),ca_state(chid),ca_read_access(chid));
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
pdata = arg.dbr;
|
||||
pcapvt->rtndata = *pdata; /*structure copy*/
|
||||
if(pdata->severity==INVALID_ALARM) {
|
||||
pasg->inpBad |= (1<<pasginp->inpIndex);
|
||||
if(asCaDebug)
|
||||
printf("as eventCallback %s inpBad because INVALID_ALARM\n",
|
||||
ca_name(chid));
|
||||
} else {
|
||||
pasg->inpBad &= ~((1<<pasginp->inpIndex));
|
||||
pasg->pavalue[pasginp->inpIndex] = pdata->value;
|
||||
if(asCaDebug)
|
||||
printf("as eventCallback %s inpGood data %f\n",
|
||||
ca_name(chid),pdata->value);
|
||||
}
|
||||
pasg->inpChanged |= (1<<pasginp->inpIndex);
|
||||
if(!caInitializing) asComputeAsg(pasg);
|
||||
}
|
||||
|
||||
LOCAL void asCaTask(void)
|
||||
@@ -156,69 +131,106 @@ LOCAL void asCaTask(void)
|
||||
ASG *pasg;
|
||||
ASGINP *pasginp;
|
||||
CAPVT *pcapvt;
|
||||
int status;
|
||||
|
||||
taskwdInsert(taskIdSelf(),NULL,NULL);
|
||||
SEVCHK(ca_task_initialize(),"ca_task_initialize");
|
||||
caInitializing = TRUE;
|
||||
FASTLOCK(&asLock);
|
||||
pasg = (ASG *)ellFirst(&pasbase->asgList);
|
||||
while(pasg) {
|
||||
pasginp = (ASGINP *)ellFirst(&pasg->inpList);
|
||||
while(pasginp) {
|
||||
pasg->inpBad |= (1<<pasginp->inpIndex);
|
||||
pcapvt = pasginp->capvt = asCalloc(1,sizeof(CAPVT));
|
||||
/*Note calls connectCallback immediately called for local Pvs*/
|
||||
SEVCHK(ca_search_and_connect(pasginp->inp,&pcapvt->chid,
|
||||
connectCallback,pasginp),"ca_build_and_connect");
|
||||
/*Note calls accessRightsCallback immediately called for local Pvs*/
|
||||
SEVCHK(ca_replace_access_rights_event(pcapvt->chid,accessRightsCallback),
|
||||
"ca_replace_access_rights_event");
|
||||
/*Note calls eventCallback immediately called for local Pvs*/
|
||||
SEVCHK(ca_add_event(DBR_STS_DOUBLE,pcapvt->chid,
|
||||
eventCallback,pasginp,&pcapvt->evid),
|
||||
"ca_add_event");
|
||||
pasginp = (ASGINP *)ellNext((ELLNODE *)pasginp);
|
||||
while(TRUE) {
|
||||
if(semTake(asCaTaskAddChannels,WAIT_FOREVER)!=OK) {
|
||||
epicsPrintf("asCa semTake error for asCaTaskClearChannels\n");
|
||||
taskSuspend(0);
|
||||
}
|
||||
pasg = (ASG *)ellNext((ELLNODE *)pasg);
|
||||
caInitializing = TRUE;
|
||||
pasg = (ASG *)ellFirst(&pasbase->asgList);
|
||||
while(pasg) {
|
||||
pasginp = (ASGINP *)ellFirst(&pasg->inpList);
|
||||
while(pasginp) {
|
||||
pasg->inpBad |= (1<<pasginp->inpIndex);
|
||||
pcapvt = pasginp->capvt = asCalloc(1,sizeof(CAPVT));
|
||||
/*Note calls connectCallback immediately for local Pvs*/
|
||||
status = ca_search_and_connect(pasginp->inp,&pcapvt->chid,
|
||||
connectCallback,pasginp);
|
||||
if(status!=ECA_NORMAL) {
|
||||
epicsPrintf("asCa ca_search_and_connect error %s\n",
|
||||
ca_message(status));
|
||||
}
|
||||
/*Note calls eventCallback immediately for local Pvs*/
|
||||
status = ca_add_event(DBR_STS_DOUBLE,pcapvt->chid,
|
||||
eventCallback,pasginp,0);
|
||||
if(status!=ECA_NORMAL) {
|
||||
epicsPrintf("asCa ca_add_event error %s\n",
|
||||
ca_message(status));
|
||||
}
|
||||
pasginp = (ASGINP *)ellNext((ELLNODE *)pasginp);
|
||||
}
|
||||
pasg = (ASG *)ellNext((ELLNODE *)pasg);
|
||||
}
|
||||
asComputeAllAsg();
|
||||
caInitializing = FALSE;
|
||||
if(asCaDebug) printf("asCaTask initialized\n");
|
||||
semGive(asCaTaskWait);
|
||||
while(TRUE) {
|
||||
if(semTake(asCaTaskClearChannels,NO_WAIT)==OK) break;
|
||||
ca_pend_event(2.0);
|
||||
}
|
||||
pasg = (ASG *)ellFirst(&pasbase->asgList);
|
||||
while(pasg) {
|
||||
pasginp = (ASGINP *)ellFirst(&pasg->inpList);
|
||||
while(pasginp) {
|
||||
pcapvt = (CAPVT *)pasginp->capvt;
|
||||
status = ca_clear_channel(pcapvt->chid);
|
||||
if(status!=ECA_NORMAL) {
|
||||
epicsPrintf("asCa ca_clear_channel error %s\n",
|
||||
ca_message(status));
|
||||
}
|
||||
free(pasginp->capvt);
|
||||
pasginp->capvt = 0;
|
||||
pasginp = (ASGINP *)ellNext((ELLNODE *)pasginp);
|
||||
}
|
||||
pasg = (ASG *)ellNext((ELLNODE *)pasg);
|
||||
}
|
||||
if(asCaDebug) printf("asCaTask has cleared all channels\n");
|
||||
semGive(asCaTaskWait);
|
||||
}
|
||||
asComputeAllAsg();
|
||||
caInitializing = FALSE;
|
||||
FASTUNLOCK(&asLock);
|
||||
SEVCHK(ca_pend_event(0.0),"ca_pend_event");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
||||
void asCaStart(void)
|
||||
{
|
||||
taskid = taskSpawn("asCaTask",CA_CLIENT_PRI-1,VX_FP_TASK,CA_CLIENT_STACK,
|
||||
(FUNCPTR)asCaTask,0,0,0,0,0,0,0,0,0,0);
|
||||
if(taskid==ERROR) {
|
||||
errMessage(0,"asCaStart: taskSpawn Failure\n");
|
||||
} else {
|
||||
taskDelay(1);
|
||||
if(asCaDebug) printf("asCaStart called\n");
|
||||
if(firstTime) {
|
||||
firstTime = FALSE;
|
||||
if((asCaTaskLock=semBCreate(SEM_Q_FIFO,SEM_FULL))==NULL)
|
||||
epicsPrintf("asCa semBCreate failure\n");
|
||||
if((asCaTaskWait=semBCreate(SEM_Q_FIFO,SEM_EMPTY))==NULL)
|
||||
epicsPrintf("asCa semBCreate failure\n");
|
||||
if((asCaTaskAddChannels=semBCreate(SEM_Q_FIFO,SEM_EMPTY))==NULL)
|
||||
epicsPrintf("asCa semBCreate failure\n");
|
||||
if((asCaTaskClearChannels=semBCreate(SEM_Q_FIFO,SEM_EMPTY))==NULL)
|
||||
epicsPrintf("asCa semBCreate failure\n");
|
||||
taskid = taskSpawn("asCaTask",CA_CLIENT_PRI-1,VX_FP_TASK,
|
||||
CA_CLIENT_STACK, (FUNCPTR)asCaTask,0,0,0,0,0,0,0,0,0,0);
|
||||
if(taskid==ERROR) {
|
||||
errMessage(0,"asCaStart: taskSpawn Failure\n");
|
||||
}
|
||||
}
|
||||
if(semTake(asCaTaskLock,WAIT_FOREVER)!=OK)
|
||||
epicsPrintf("asCa semTake error\n");
|
||||
semGive(asCaTaskAddChannels);
|
||||
if(semTake(asCaTaskWait,WAIT_FOREVER)!=OK)
|
||||
epicsPrintf("asCa semTake error\n");
|
||||
if(asCaDebug) printf("asCaStart done\n");
|
||||
semGive(asCaTaskLock);
|
||||
}
|
||||
|
||||
|
||||
void asCaStop(void)
|
||||
{
|
||||
ASG *pasg;
|
||||
ASGINP *pasginp;
|
||||
STATUS status;
|
||||
|
||||
if(taskid==0 || taskid==ERROR) return;
|
||||
taskwdRemove(taskid);
|
||||
status = taskDelete(taskid);
|
||||
if(status!=OK) errMessage(0,"asCaStop: taskDelete Failure\n");
|
||||
while(taskIdVerify(taskid)==OK) {
|
||||
taskDelay(5);
|
||||
}
|
||||
pasg = (ASG *)ellFirst(&pasbase->asgList);
|
||||
while(pasg) {
|
||||
pasginp = (ASGINP *)ellFirst(&pasg->inpList);
|
||||
while(pasginp) {
|
||||
free(pasginp->capvt);
|
||||
pasginp = (ASGINP *)ellNext((ELLNODE *)pasginp);
|
||||
}
|
||||
pasg = (ASG *)ellNext((ELLNODE *)pasg);
|
||||
}
|
||||
if(asCaDebug) printf("asCaStop called\n");
|
||||
if(semTake(asCaTaskLock,WAIT_FOREVER)!=OK)
|
||||
epicsPrintf("asCa semTake error\n");
|
||||
semGive(asCaTaskClearChannels);
|
||||
if(semTake(asCaTaskWait,WAIT_FOREVER)!=OK)
|
||||
epicsPrintf("asCa semTake error\n");
|
||||
if(asCaDebug) printf("asCaStop done\n");
|
||||
semGive(asCaTaskLock);
|
||||
}
|
||||
|
||||
166
src/as/asDbLib.c
166
src/as/asDbLib.c
@@ -5,53 +5,19 @@
|
||||
COPYRIGHT NOTIFICATION
|
||||
*****************************************************************
|
||||
|
||||
THE FOLLOWING IS A NOTICE OF COPYRIGHT, AVAILABILITY OF THE CODE,
|
||||
AND DISCLAIMER WHICH MUST BE INCLUDED IN THE PROLOGUE OF THE CODE
|
||||
AND IN ALL SOURCE LISTINGS OF THE CODE.
|
||||
|
||||
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
|
||||
|
||||
Argonne National Laboratory (ANL), with facilities in the States of
|
||||
Illinois and Idaho, is owned by the United States Government, and
|
||||
operated by the University of Chicago under provision of a contract
|
||||
with the Department of Energy.
|
||||
|
||||
Portions of this material resulted from work developed under a U.S.
|
||||
Government contract and are subject to the following license: For
|
||||
a period of five years from March 30, 1993, the Government is
|
||||
granted for itself and others acting on its behalf a paid-up,
|
||||
nonexclusive, irrevocable worldwide license in this computer
|
||||
software to reproduce, prepare derivative works, and perform
|
||||
publicly and display publicly. With the approval of DOE, this
|
||||
period may be renewed for two additional five year periods.
|
||||
Following the expiration of this period or periods, the Government
|
||||
is granted for itself and others acting on its behalf, a paid-up,
|
||||
nonexclusive, irrevocable worldwide license in this computer
|
||||
software to reproduce, prepare derivative works, distribute copies
|
||||
to the public, perform publicly and display publicly, and to permit
|
||||
others to do so.
|
||||
This software was developed under a United States Government license
|
||||
described on the COPYRIGHT_UniversityOfChicago file included as part
|
||||
of this distribution.
|
||||
**********************************************************************/
|
||||
|
||||
*****************************************************************
|
||||
DISCLAIMER
|
||||
*****************************************************************
|
||||
|
||||
NEITHER THE UNITED STATES GOVERNMENT NOR ANY AGENCY THEREOF, NOR
|
||||
THE UNIVERSITY OF CHICAGO, NOR ANY OF THEIR EMPLOYEES OR OFFICERS,
|
||||
MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL
|
||||
LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR
|
||||
USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, OR PROCESS
|
||||
DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY
|
||||
OWNED RIGHTS.
|
||||
|
||||
*****************************************************************
|
||||
LICENSING INQUIRIES MAY BE DIRECTED TO THE INDUSTRIAL TECHNOLOGY
|
||||
DEVELOPMENT CENTER AT ARGONNE NATIONAL LABORATORY (708-252-2000).
|
||||
*
|
||||
/*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 02-11-94 mrk Initial Implementation
|
||||
*/
|
||||
|
||||
|
||||
#include <vxWorks.h>
|
||||
#include <taskLib.h>
|
||||
#include <stdlib.h>
|
||||
@@ -59,45 +25,27 @@ DEVELOPMENT CENTER AT ARGONNE NATIONAL LABORATORY (708-252-2000).
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <dbDefs.h>
|
||||
#include <taskwd.h>
|
||||
#include <alarm.h>
|
||||
#include <caeventmask.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <dbAccess.h>
|
||||
#include <asLib.h>
|
||||
#include <asDbLib.h>
|
||||
#include <dbCommon.h>
|
||||
#include <recSup.h>
|
||||
#include <subRecord.h>
|
||||
#include <task_params.h>
|
||||
#include "dbDefs.h"
|
||||
#include "errlog.h"
|
||||
#include "taskwd.h"
|
||||
#include "alarm.h"
|
||||
#include "caeventmask.h"
|
||||
#include "dbStaticLib.h"
|
||||
#include "dbAccess.h"
|
||||
#include "dbEvent.h"
|
||||
#include "asLib.h"
|
||||
#include "asDbLib.h"
|
||||
#include "dbCommon.h"
|
||||
#include "recSup.h"
|
||||
#include "subRecord.h"
|
||||
#include "task_params.h"
|
||||
|
||||
extern struct dbBase *pdbbase;
|
||||
static FILE *stream;
|
||||
|
||||
#define BUF_SIZE 100
|
||||
FAST_LOCK asLock;
|
||||
static char *my_buffer;
|
||||
static char *my_buffer_ptr=NULL;
|
||||
static char *pacf=NULL;
|
||||
static int asLockInit=TRUE;
|
||||
static char *psubstitutions=NULL;
|
||||
static int initTaskId=0;
|
||||
|
||||
|
||||
static int my_yyinput(char *buf, int max_size)
|
||||
{
|
||||
int l,n;
|
||||
|
||||
if(*my_buffer_ptr==0) {
|
||||
if(fgets(my_buffer,BUF_SIZE,stream)==NULL) return(0);
|
||||
my_buffer_ptr = my_buffer;
|
||||
}
|
||||
l = strlen(my_buffer_ptr);
|
||||
n = (l<=max_size ? l : max_size);
|
||||
memcpy(buf,my_buffer_ptr,n);
|
||||
my_buffer_ptr += n;
|
||||
return(n);
|
||||
}
|
||||
static int firstTime = TRUE;
|
||||
|
||||
static long asDbAddRecords(void)
|
||||
{
|
||||
@@ -127,11 +75,6 @@ static long asDbAddRecords(void)
|
||||
|
||||
int asSetFilename(char *acf)
|
||||
{
|
||||
if(asLockInit) {
|
||||
FASTLOCKINIT(&asLock);
|
||||
asLockInit = FALSE;
|
||||
}
|
||||
FASTLOCK(&asLock);
|
||||
if(pacf) free ((void *)pacf);
|
||||
if(acf) {
|
||||
pacf = calloc(1,strlen(acf)+1);
|
||||
@@ -143,41 +86,46 @@ int asSetFilename(char *acf)
|
||||
} else {
|
||||
pacf = NULL;
|
||||
}
|
||||
FASTUNLOCK(&asLock);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int asSetSubstitutions(char *substitutions)
|
||||
{
|
||||
if(psubstitutions) free ((void *)psubstitutions);
|
||||
if(substitutions) {
|
||||
psubstitutions = calloc(1,strlen(substitutions)+1);
|
||||
if(!psubstitutions) {
|
||||
errMessage(0,"asSetSubstitutions calloc failure");
|
||||
} else {
|
||||
strcpy(psubstitutions,substitutions);
|
||||
}
|
||||
} else {
|
||||
psubstitutions = NULL;
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
static long asInitCommon(void)
|
||||
{
|
||||
long status;
|
||||
char buffer[BUF_SIZE];
|
||||
int asWasActive = asActive;
|
||||
|
||||
if(asLockInit) {
|
||||
FASTLOCKINIT(&asLock);
|
||||
asLockInit = FALSE;
|
||||
if(firstTime) {
|
||||
firstTime = FALSE;
|
||||
if(!pacf) return(0); /*access security will NEVER be turned on*/
|
||||
} else {
|
||||
if(!asActive) return(S_asLib_asNotActive);
|
||||
if(pacf) {
|
||||
asCaStop();
|
||||
} else { /*Just leave everything as is */
|
||||
return(S_asLib_badConfig);
|
||||
}
|
||||
}
|
||||
FASTLOCK(&asLock);
|
||||
if(asActive)asCaStop();
|
||||
if(!pacf) {
|
||||
asActive = FALSE;
|
||||
return(0);
|
||||
}
|
||||
buffer[0] = 0;
|
||||
my_buffer = buffer;
|
||||
my_buffer_ptr = my_buffer;
|
||||
stream = fopen(pacf,"r");
|
||||
if(!stream) {
|
||||
errMessage(0,"asInit failure");
|
||||
FASTUNLOCK(&asLock);
|
||||
return(-1);
|
||||
}
|
||||
status = asInitialize(my_yyinput);
|
||||
if(fclose(stream)==EOF) errMessage(0,"asInit fclose failure");
|
||||
status = asInitFile(pacf,psubstitutions);
|
||||
if(asActive) {
|
||||
asDbAddRecords();
|
||||
if(!asWasActive) asDbAddRecords();
|
||||
asCaStart();
|
||||
}
|
||||
FASTUNLOCK(&asLock);
|
||||
return(status);
|
||||
}
|
||||
|
||||
@@ -298,7 +246,7 @@ ASMEMBERPVT asDbGetMemberPvt(void *paddress)
|
||||
precord = paddr->precord;
|
||||
return((ASMEMBERPVT)precord->asp);
|
||||
}
|
||||
|
||||
|
||||
static void astacCallback(ASCLIENTPVT clientPvt,asClientStatus status)
|
||||
{
|
||||
char *recordname;
|
||||
@@ -348,41 +296,31 @@ static void myMemberCallback(ASMEMBERPVT memPvt)
|
||||
|
||||
int asdbdump(void)
|
||||
{
|
||||
FASTLOCK(&asLock);
|
||||
asDump(myMemberCallback,NULL,1);
|
||||
FASTUNLOCK(&asLock);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int aspuag(char *uagname)
|
||||
{
|
||||
|
||||
FASTLOCK(&asLock);
|
||||
asDumpUag(uagname);
|
||||
FASTUNLOCK(&asLock);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int asphag(char *hagname)
|
||||
{
|
||||
FASTLOCK(&asLock);
|
||||
asDumpHag(hagname);
|
||||
FASTUNLOCK(&asLock);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int asprules(char *asgname)
|
||||
{
|
||||
FASTLOCK(&asLock);
|
||||
asDumpRules(asgname);
|
||||
FASTUNLOCK(&asLock);
|
||||
return(0);
|
||||
}
|
||||
|
||||
int aspmem(char *asgname,int clients)
|
||||
{
|
||||
FASTLOCK(&asLock);
|
||||
asDumpMem(asgname,myMemberCallback,clients);
|
||||
FASTUNLOCK(&asLock);
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -5,48 +5,14 @@
|
||||
COPYRIGHT NOTIFICATION
|
||||
*****************************************************************
|
||||
|
||||
THE FOLLOWING IS A NOTICE OF COPYRIGHT, AVAILABILITY OF THE CODE,
|
||||
AND DISCLAIMER WHICH MUST BE INCLUDED IN THE PROLOGUE OF THE CODE
|
||||
AND IN ALL SOURCE LISTINGS OF THE CODE.
|
||||
|
||||
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
|
||||
|
||||
Argonne National Laboratory (ANL), with facilities in the States of
|
||||
Illinois and Idaho, is owned by the United States Government, and
|
||||
operated by the University of Chicago under provision of a contract
|
||||
with the Department of Energy.
|
||||
|
||||
Portions of this material resulted from work developed under a U.S.
|
||||
Government contract and are subject to the following license: For
|
||||
a period of five years from March 30, 1993, the Government is
|
||||
granted for itself and others acting on its behalf a paid-up,
|
||||
nonexclusive, irrevocable worldwide license in this computer
|
||||
software to reproduce, prepare derivative works, and perform
|
||||
publicly and display publicly. With the approval of DOE, this
|
||||
period may be renewed for two additional five year periods.
|
||||
Following the expiration of this period or periods, the Government
|
||||
is granted for itself and others acting on its behalf, a paid-up,
|
||||
nonexclusive, irrevocable worldwide license in this computer
|
||||
software to reproduce, prepare derivative works, distribute copies
|
||||
to the public, perform publicly and display publicly, and to permit
|
||||
others to do so.
|
||||
This software was developed under a United States Government license
|
||||
described on the COPYRIGHT_UniversityOfChicago file included as part
|
||||
of this distribution.
|
||||
**********************************************************************/
|
||||
|
||||
*****************************************************************
|
||||
DISCLAIMER
|
||||
*****************************************************************
|
||||
|
||||
NEITHER THE UNITED STATES GOVERNMENT NOR ANY AGENCY THEREOF, NOR
|
||||
THE UNIVERSITY OF CHICAGO, NOR ANY OF THEIR EMPLOYEES OR OFFICERS,
|
||||
MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL
|
||||
LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR
|
||||
USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, OR PROCESS
|
||||
DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY
|
||||
OWNED RIGHTS.
|
||||
|
||||
*****************************************************************
|
||||
LICENSING INQUIRIES MAY BE DIRECTED TO THE INDUSTRIAL TECHNOLOGY
|
||||
DEVELOPMENT CENTER AT ARGONNE NATIONAL LABORATORY (708-252-2000).
|
||||
*
|
||||
/*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 02-23-94 mrk Initial Implementation
|
||||
@@ -63,6 +29,7 @@ typedef struct {
|
||||
} ASDBCALLBACK;
|
||||
|
||||
int asSetFilename(char *acf);
|
||||
int asSetSubstitutions(char *substitutions);
|
||||
int asInit(void);
|
||||
int asInitAsyn(ASDBCALLBACK *pcallback);
|
||||
int asDbGetAsl( void *paddr);
|
||||
|
||||
129
src/as/asLib.h
129
src/as/asLib.h
@@ -4,48 +4,14 @@
|
||||
COPYRIGHT NOTIFICATION
|
||||
*****************************************************************
|
||||
|
||||
THE FOLLOWING IS A NOTICE OF COPYRIGHT, AVAILABILITY OF THE CODE,
|
||||
AND DISCLAIMER WHICH MUST BE INCLUDED IN THE PROLOGUE OF THE CODE
|
||||
AND IN ALL SOURCE LISTINGS OF THE CODE.
|
||||
|
||||
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
|
||||
|
||||
Argonne National Laboratory (ANL), with facilities in the States of
|
||||
Illinois and Idaho, is owned by the United States Government, and
|
||||
operated by the University of Chicago under provision of a contract
|
||||
with the Department of Energy.
|
||||
|
||||
Portions of this material resulted from work developed under a U.S.
|
||||
Government contract and are subject to the following license: For
|
||||
a period of five years from March 30, 1993, the Government is
|
||||
granted for itself and others acting on its behalf a paid-up,
|
||||
nonexclusive, irrevocable worldwide license in this computer
|
||||
software to reproduce, prepare derivative works, and perform
|
||||
publicly and display publicly. With the approval of DOE, this
|
||||
period may be renewed for two additional five year periods.
|
||||
Following the expiration of this period or periods, the Government
|
||||
is granted for itself and others acting on its behalf, a paid-up,
|
||||
nonexclusive, irrevocable worldwide license in this computer
|
||||
software to reproduce, prepare derivative works, distribute copies
|
||||
to the public, perform publicly and display publicly, and to permit
|
||||
others to do so.
|
||||
This software was developed under a United States Government license
|
||||
described on the COPYRIGHT_UniversityOfChicago file included as part
|
||||
of this distribution.
|
||||
**********************************************************************/
|
||||
|
||||
*****************************************************************
|
||||
DISCLAIMER
|
||||
*****************************************************************
|
||||
|
||||
NEITHER THE UNITED STATES GOVERNMENT NOR ANY AGENCY THEREOF, NOR
|
||||
THE UNIVERSITY OF CHICAGO, NOR ANY OF THEIR EMPLOYEES OR OFFICERS,
|
||||
MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL
|
||||
LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR
|
||||
USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, OR PROCESS
|
||||
DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY
|
||||
OWNED RIGHTS.
|
||||
|
||||
*****************************************************************
|
||||
LICENSING INQUIRIES MAY BE DIRECTED TO THE INDUSTRIAL TECHNOLOGY
|
||||
DEVELOPMENT CENTER AT ARGONNE NATIONAL LABORATORY (708-252-2000).
|
||||
*
|
||||
/*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 09-27-93 mrk Initial Implementation
|
||||
@@ -55,9 +21,10 @@ DEVELOPMENT CENTER AT ARGONNE NATIONAL LABORATORY (708-252-2000).
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <errMdef.h>
|
||||
#include <ellLib.h>
|
||||
|
||||
|
||||
typedef struct asgMember *ASMEMBERPVT;
|
||||
typedef struct asgClient *ASCLIENTPVT;
|
||||
typedef int (*ASINPUTFUNCPTR)(char *buf,int max_size);
|
||||
@@ -65,40 +32,54 @@ typedef enum{
|
||||
asClientCOAR /*Change of access rights*/
|
||||
/*For now this is all*/
|
||||
} asClientStatus;
|
||||
|
||||
typedef void (*ASCLIENTCALLBACK) (ASCLIENTPVT,asClientStatus);
|
||||
/* The following routines are macros with the following syntax
|
||||
long asCheckGet(ASCLIENTPVT asClientPvt);
|
||||
long asCheckPut(ASCLIENTPVT asClientPvt);
|
||||
end of macros
|
||||
*/
|
||||
int asInit(void);
|
||||
long asInitialize(ASINPUTFUNCPTR inputfunction);
|
||||
#define asCheckGet(asClientPvt)\
|
||||
(asActive ?\
|
||||
((asClientPvt)->access>=asREAD ? TRUE : FALSE)\
|
||||
: TRUE)
|
||||
#define asCheckPut(asClientPvt)\
|
||||
(asActive ?\
|
||||
((asClientPvt)->access>=asWRITE ? TRUE : FALSE)\
|
||||
: TRUE)
|
||||
|
||||
epicsShareFunc int epicsShareAPI asInit(void);
|
||||
epicsShareFunc long epicsShareAPI asInitialize(ASINPUTFUNCPTR inputfunction);
|
||||
epicsShareFunc long epicsShareAPI asInitFile(const char *filename,const char *substitutions);
|
||||
epicsShareFunc long epicsShareAPI asInitFP(FILE *fp,const char *substitutions);
|
||||
/*caller must provide permanent storage for asgName*/
|
||||
long asAddMember(ASMEMBERPVT *asMemberPvt,char *asgName);
|
||||
long asRemoveMember(ASMEMBERPVT *asMemberPvt);
|
||||
epicsShareFunc long epicsShareAPI asAddMember(ASMEMBERPVT *asMemberPvt,char *asgName);
|
||||
epicsShareFunc long epicsShareAPI asRemoveMember(ASMEMBERPVT *asMemberPvt);
|
||||
/*caller must provide permanent storage for newAsgName*/
|
||||
long asChangeGroup(ASMEMBERPVT *asMemberPvt,char *newAsgName);
|
||||
void *asGetMemberPvt(ASMEMBERPVT asMemberPvt);
|
||||
void asPutMemberPvt(ASMEMBERPVT asMemberPvt,void *userPvt);
|
||||
epicsShareFunc long epicsShareAPI asChangeGroup(ASMEMBERPVT *asMemberPvt,char *newAsgName);
|
||||
epicsShareFunc void * epicsShareAPI asGetMemberPvt(ASMEMBERPVT asMemberPvt);
|
||||
epicsShareFunc void epicsShareAPI asPutMemberPvt(ASMEMBERPVT asMemberPvt,void *userPvt);
|
||||
/*client must provide permanent storage for user and host*/
|
||||
long asAddClient(ASCLIENTPVT *asClientPvt,ASMEMBERPVT asMemberPvt,
|
||||
epicsShareFunc long epicsShareAPI asAddClient(ASCLIENTPVT *asClientPvt,ASMEMBERPVT asMemberPvt,
|
||||
int asl,char *user,char *host);
|
||||
/*client must provide permanent storage for user and host*/
|
||||
long asChangeClient(ASCLIENTPVT asClientPvt,int asl,char *user,char *host);
|
||||
long asRemoveClient(ASCLIENTPVT *asClientPvt);
|
||||
void *asGetClientPvt(ASCLIENTPVT asClientPvt);
|
||||
void asPutClientPvt(ASCLIENTPVT asClientPvt,void *userPvt);
|
||||
long asRegisterClientCallback(ASCLIENTPVT asClientPvt,
|
||||
epicsShareFunc long epicsShareAPI asChangeClient(ASCLIENTPVT asClientPvt,int asl,char *user,char *host);
|
||||
epicsShareFunc long epicsShareAPI asRemoveClient(ASCLIENTPVT *asClientPvt);
|
||||
epicsShareFunc void * epicsShareAPI asGetClientPvt(ASCLIENTPVT asClientPvt);
|
||||
epicsShareFunc void epicsShareAPI asPutClientPvt(ASCLIENTPVT asClientPvt,void *userPvt);
|
||||
epicsShareFunc long epicsShareAPI asRegisterClientCallback(ASCLIENTPVT asClientPvt,
|
||||
ASCLIENTCALLBACK pcallback);
|
||||
long asComputeAllAsg(void);
|
||||
/*asComputeAsg is defined after ASG is defined*/
|
||||
long asCompute(ASCLIENTPVT asClientPvt);
|
||||
int asDump(void (*memcallback)(ASMEMBERPVT),void (*clientcallback)(ASCLIENTPVT),int verbose);
|
||||
int asDumpUag(char *uagname);
|
||||
int asDumpHag(char *hagname);
|
||||
int asDumpRules(char *asgname);
|
||||
int asDumpMem(char *asgname,void (*memcallback)(ASMEMBERPVT),int clients);
|
||||
int asDumpHash(void);
|
||||
epicsShareFunc long epicsShareAPI asComputeAllAsg(void);
|
||||
/* following declared below after ASG is declared
|
||||
epicsShareFunc long epicsShareAPI asComputeAsg(ASG *pasg);
|
||||
*/
|
||||
epicsShareFunc long epicsShareAPI asCompute(ASCLIENTPVT asClientPvt);
|
||||
epicsShareFunc int epicsShareAPI asDump(void (*memcallback)(ASMEMBERPVT),
|
||||
void (*clientcallback)(ASCLIENTPVT),int verbose);
|
||||
epicsShareFunc int epicsShareAPI asDumpUag(char *uagname);
|
||||
epicsShareFunc int epicsShareAPI asDumpHag(char *hagname);
|
||||
epicsShareFunc int epicsShareAPI asDumpRules(char *asgname);
|
||||
epicsShareFunc int epicsShareAPI asDumpMem(char *asgname,void (*memcallback)(ASMEMBERPVT),int clients);
|
||||
epicsShareFunc int epicsShareAPI asDumpHash(void);
|
||||
|
||||
#define S_asLib_clientsExist (M_asLib| 1) /*Client Exists*/
|
||||
#define S_asLib_noUag (M_asLib| 2) /*User Access Group does not exist*/
|
||||
@@ -117,11 +98,6 @@ int asDumpHash(void);
|
||||
|
||||
/*Private declarations */
|
||||
#define ASMAXINP 12
|
||||
#ifdef vxWorks
|
||||
#include <fast_lock.h>
|
||||
extern FAST_LOCK asLock;
|
||||
extern int asLockInit;
|
||||
#endif
|
||||
extern int asActive;
|
||||
/* definition of access rights*/
|
||||
typedef enum{asNOACCESS,asREAD,asWRITE} asAccessRights;
|
||||
@@ -180,6 +156,7 @@ typedef struct{
|
||||
struct asg *pasg;
|
||||
int inpIndex;
|
||||
}ASGINP;
|
||||
|
||||
typedef struct asg{
|
||||
ELLNODE node;
|
||||
char *name;
|
||||
@@ -207,17 +184,9 @@ typedef struct asgClient {
|
||||
int level;
|
||||
asAccessRights access;
|
||||
} ASGCLIENT;
|
||||
/* function prototypes*/
|
||||
void *asCalloc(size_t nobj,size_t size);
|
||||
long asComputeAsg(ASG *pasg);
|
||||
/*macros*/
|
||||
#define asCheckGet(asClientPvt)\
|
||||
(asActive ?\
|
||||
((asClientPvt)->access>=asREAD ? TRUE : FALSE)\
|
||||
: TRUE)
|
||||
#define asCheckPut(asClientPvt)\
|
||||
(asActive ?\
|
||||
((asClientPvt)->access>=asWRITE ? TRUE : FALSE)\
|
||||
: TRUE)
|
||||
|
||||
epicsShareFunc long epicsShareAPI asComputeAsg(ASG *pasg);
|
||||
/*following is "friend" function*/
|
||||
void * asCalloc(size_t nobj,size_t size);
|
||||
|
||||
#endif /*INCasLibh*/
|
||||
|
||||
@@ -16,7 +16,7 @@ static ASGRULE *yyAsgRule=NULL;
|
||||
%token tokenUAG tokenHAG tokenASG tokenRULE tokenCALC
|
||||
%token <Str> tokenINP
|
||||
%token <Int> tokenINTEGER
|
||||
%token <Str> tokenNAME tokenPVNAME tokenSTRING
|
||||
%token <Str> tokenNAME tokenSTRING
|
||||
|
||||
%union
|
||||
{
|
||||
@@ -42,7 +42,7 @@ asconfig_item: tokenUAG uag_head uag_body
|
||||
uag_head: '(' tokenNAME ')'
|
||||
{
|
||||
yyUag = asUagAdd($2);
|
||||
if(!yyUag) yyerror($2);
|
||||
if(!yyUag) yyerror("");
|
||||
free((void *)$2);
|
||||
}
|
||||
;
|
||||
@@ -63,7 +63,6 @@ uag_user_list_name: tokenNAME
|
||||
|
||||
status = asUagAddUser(yyUag,$1);
|
||||
if(status) {
|
||||
errMessage(status,"Error while adding UAG");
|
||||
yyerror($1);
|
||||
}
|
||||
free((void *)$1);
|
||||
@@ -73,7 +72,7 @@ uag_user_list_name: tokenNAME
|
||||
hag_head: '(' tokenNAME ')'
|
||||
{
|
||||
yyHag = asHagAdd($2);
|
||||
if(!yyHag) yyerror($2);
|
||||
if(!yyHag) yyerror("");
|
||||
free((void *)$2);
|
||||
}
|
||||
;
|
||||
@@ -91,8 +90,7 @@ hag_user_list_name: tokenNAME
|
||||
|
||||
status = asHagAddHost(yyHag,$1);
|
||||
if(status) {
|
||||
errMessage(status,"Error while adding HAG");
|
||||
yyerror($1);
|
||||
yyerror("");
|
||||
}
|
||||
free((void *)$1);
|
||||
}
|
||||
@@ -101,7 +99,7 @@ hag_user_list_name: tokenNAME
|
||||
asg_head: '(' tokenNAME ')'
|
||||
{
|
||||
yyAsg = asAsgAdd($2);
|
||||
if(!yyAsg) yyerror($2);
|
||||
if(!yyAsg) yyerror("");
|
||||
free((void *)$2);
|
||||
}
|
||||
;
|
||||
@@ -122,14 +120,13 @@ inp_config: tokenINP '(' inp_body ')'
|
||||
|
||||
status = asAsgAddInp(yyAsg,$<Str>3,$<Int>1);
|
||||
if(status) {
|
||||
errMessage(status,"Error while adding INP");
|
||||
yyerror($1);
|
||||
yyerror("");
|
||||
}
|
||||
free((void *)$<Str>3);
|
||||
}
|
||||
;
|
||||
|
||||
inp_body: tokenNAME | tokenPVNAME
|
||||
inp_body: tokenNAME
|
||||
;
|
||||
|
||||
rule_config: tokenRULE rule_head rule_body
|
||||
@@ -170,8 +167,7 @@ rule_list_item: tokenUAG '(' rule_uag_list ')'
|
||||
|
||||
status = asAsgRuleCalc(yyAsgRule,$3);
|
||||
if(status){
|
||||
errMessage(status,$3);
|
||||
yyerror("CALC failure");
|
||||
yyerror("access security CALC failure");
|
||||
}
|
||||
free((void *)$3);
|
||||
}
|
||||
@@ -187,8 +183,7 @@ rule_uag_list_name: tokenNAME
|
||||
|
||||
status = asAsgRuleUagAdd(yyAsgRule,$1);
|
||||
if(status) {
|
||||
errMessage(status,"Error while adding UAG");
|
||||
yyerror($1);
|
||||
yyerror("");
|
||||
}
|
||||
free((void *)$1);
|
||||
}
|
||||
@@ -204,8 +199,7 @@ rule_hag_list_name: tokenNAME
|
||||
|
||||
status = asAsgRuleHagAdd(yyAsgRule,$1);
|
||||
if(status) {
|
||||
errMessage(status,"Error while adding HAG");
|
||||
yyerror($1);
|
||||
yyerror("");
|
||||
}
|
||||
free((void *)$1);
|
||||
}
|
||||
@@ -217,7 +211,8 @@ rule_hag_list_name: tokenNAME
|
||||
static int yyerror(str)
|
||||
char *str;
|
||||
{
|
||||
fprintf(stderr,"Error line %d : %s %s\n",line_num,str,yytext);
|
||||
epicsPrintf("Access Security Error(%s) line %d token %s\n",
|
||||
str,line_num,yytext);
|
||||
yyFailed = TRUE;
|
||||
return(0);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,14 +1,15 @@
|
||||
integer [0-9]
|
||||
name [a-zA-Z0-9_\.]
|
||||
pvname [a-zA-Z0-9_\-:\.\[\]<>;]
|
||||
string [a-zA-Z0-9_\,\./\*#\[\]%: ;!|\'\-&\(\)@\?\+<>=\$]
|
||||
name [a-zA-Z0-9_\-:\.\[\]<>;]
|
||||
notquote [^\"]
|
||||
escapequote \\\"
|
||||
string {notquote}|{escapequote}
|
||||
|
||||
%{
|
||||
static ASINPUTFUNCPTR *my_yyinput;
|
||||
#undef YY_INPUT
|
||||
#define YY_INPUT(b,r,ms) (r=(*my_yyinput)(b,ms))
|
||||
|
||||
yyreset()
|
||||
static int yyreset()
|
||||
{
|
||||
line_num=1;
|
||||
BEGIN INITIAL;
|
||||
@@ -35,19 +36,13 @@ INP[A-L] {/* If A-L is changed then ASMAXINP must also be changed*/
|
||||
return(tokenINTEGER);
|
||||
}
|
||||
|
||||
{name}+ {
|
||||
{name}+ { /*unquoted string*/
|
||||
yylval.Str=(char *)asCalloc(1,strlen(yytext)+1);
|
||||
strcpy(yylval.Str,yytext);
|
||||
return(tokenNAME);
|
||||
}
|
||||
|
||||
{pvname}+ {
|
||||
yylval.Str=(char *)asCalloc(1,strlen(yytext)+1);
|
||||
strcpy(yylval.Str,yytext);
|
||||
return(tokenPVNAME);
|
||||
}
|
||||
|
||||
\"{string}*\" {
|
||||
\"{string}*\" { /*quoted string*/
|
||||
yylval.Str=(char *)asCalloc(1,strlen(yytext)+1);
|
||||
/* making sure that neither double quote gets passed back */
|
||||
strcpy(yylval.Str,yytext+1);
|
||||
@@ -66,9 +61,13 @@ INP[A-L] {/* If A-L is changed then ASMAXINP must also be changed*/
|
||||
\n { line_num ++;}
|
||||
. {
|
||||
char message[20];
|
||||
YY_BUFFER_STATE *dummy=0;
|
||||
|
||||
sprintf(message,"invalid character '%c'",yytext[0]);
|
||||
yyerror(message);
|
||||
/*The following suppresses compiler warning messages*/
|
||||
if(FALSE) yyunput('c',message);
|
||||
if(FALSE) yy_switch_to_buffer(*dummy);
|
||||
}
|
||||
|
||||
%%
|
||||
|
||||
101
src/as/ascheck.c
101
src/as/ascheck.c
@@ -5,48 +5,13 @@
|
||||
COPYRIGHT NOTIFICATION
|
||||
*****************************************************************
|
||||
|
||||
THE FOLLOWING IS A NOTICE OF COPYRIGHT, AVAILABILITY OF THE CODE,
|
||||
AND DISCLAIMER WHICH MUST BE INCLUDED IN THE PROLOGUE OF THE CODE
|
||||
AND IN ALL SOURCE LISTINGS OF THE CODE.
|
||||
|
||||
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
|
||||
|
||||
Argonne National Laboratory (ANL), with facilities in the States of
|
||||
Illinois and Idaho, is owned by the United States Government, and
|
||||
operated by the University of Chicago under provision of a contract
|
||||
with the Department of Energy.
|
||||
|
||||
Portions of this material resulted from work developed under a U.S.
|
||||
Government contract and are subject to the following license: For
|
||||
a period of five years from March 30, 1993, the Government is
|
||||
granted for itself and others acting on its behalf a paid-up,
|
||||
nonexclusive, irrevocable worldwide license in this computer
|
||||
software to reproduce, prepare derivative works, and perform
|
||||
publicly and display publicly. With the approval of DOE, this
|
||||
period may be renewed for two additional five year periods.
|
||||
Following the expiration of this period or periods, the Government
|
||||
is granted for itself and others acting on its behalf, a paid-up,
|
||||
nonexclusive, irrevocable worldwide license in this computer
|
||||
software to reproduce, prepare derivative works, distribute copies
|
||||
to the public, perform publicly and display publicly, and to permit
|
||||
others to do so.
|
||||
This software was developed under a United States Government license
|
||||
described on the COPYRIGHT_UniversityOfChicago file included as part
|
||||
of this distribution.
|
||||
**********************************************************************/
|
||||
|
||||
*****************************************************************
|
||||
DISCLAIMER
|
||||
*****************************************************************
|
||||
|
||||
NEITHER THE UNITED STATES GOVERNMENT NOR ANY AGENCY THEREOF, NOR
|
||||
THE UNIVERSITY OF CHICAGO, NOR ANY OF THEIR EMPLOYEES OR OFFICERS,
|
||||
MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL
|
||||
LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR
|
||||
USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, OR PROCESS
|
||||
DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY
|
||||
OWNED RIGHTS.
|
||||
|
||||
*****************************************************************
|
||||
LICENSING INQUIRIES MAY BE DIRECTED TO THE INDUSTRIAL TECHNOLOGY
|
||||
DEVELOPMENT CENTER AT ARGONNE NATIONAL LABORATORY (708-252-2000).
|
||||
*/
|
||||
/* Modification Log:
|
||||
* -----------------
|
||||
* .01 03-24-94 mrk Initial Implementation
|
||||
@@ -55,30 +20,44 @@ DEVELOPMENT CENTER AT ARGONNE NATIONAL LABORATORY (708-252-2000).
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <asLib.h>
|
||||
static char my_buffer[100];
|
||||
static char *my_buffer_ptr="\0";
|
||||
#include <string.h>
|
||||
|
||||
static int my_yyinput(char *buf, int max_size)
|
||||
#include "dbDefs.h"
|
||||
#include "errlog.h"
|
||||
#include "asLib.h"
|
||||
#include "dbStaticLib.h"
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
int l,n;
|
||||
|
||||
if(*my_buffer_ptr==0) {
|
||||
if(gets(my_buffer)==NULL) return(0);
|
||||
my_buffer_ptr = &my_buffer[0];
|
||||
strcat(my_buffer_ptr,"\n");
|
||||
int i;
|
||||
int strip;
|
||||
char *sub = NULL;
|
||||
int subLength = 0;
|
||||
char **pstr;
|
||||
char *psep;
|
||||
int *len;
|
||||
long status;
|
||||
static char *subSep = ",";
|
||||
|
||||
/*Look for options*/
|
||||
while(argc>1 && (strncmp(argv[1],"-S",2)==0)) {
|
||||
pstr = ⊂
|
||||
psep = subSep;
|
||||
len = &subLength;
|
||||
if(strlen(argv[1])==2) {
|
||||
dbCatString(pstr,len,argv[2],psep);
|
||||
strip = 2;
|
||||
} else {
|
||||
dbCatString(pstr,len,argv[1]+2,psep);
|
||||
strip = 1;
|
||||
}
|
||||
argc -= strip;
|
||||
for(i=1; i<argc; i++) argv[i] = argv[i + strip];
|
||||
}
|
||||
l = strlen(my_buffer_ptr);
|
||||
n = (l<=max_size ? l : max_size);
|
||||
memcpy(buf,my_buffer_ptr,n);
|
||||
my_buffer_ptr += n;
|
||||
return(n);
|
||||
}
|
||||
int main()
|
||||
{
|
||||
long status;
|
||||
|
||||
status = asInitialize(my_yyinput);
|
||||
if(status) errMessage(status,"from asInitialize");
|
||||
if(argc!=1) {
|
||||
printf("usage: ascheck -Smacsub < file\n");
|
||||
exit(0);
|
||||
}
|
||||
status = asInitFP(stdin,sub);
|
||||
if(status) errMessage(status,"from asInitFP");
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
TOP = ../../..
|
||||
include $(TOP)/config/CONFIG_BASE
|
||||
|
||||
INC += bdt.h
|
||||
|
||||
LIBOBJS += bdt.o
|
||||
|
||||
LIBNAME = libBdt.a
|
||||
|
||||
include $(TOP)/config/RULES.Unix
|
||||
@@ -1,20 +0,0 @@
|
||||
TOP = ../../..
|
||||
include $(TOP)/config/CONFIG_BASE
|
||||
|
||||
SRCS.c += ../bdt.c
|
||||
SRCS.c += ../bdtServ.c
|
||||
SRCS.c += ../bdtServName.c
|
||||
SRCS.c += ../bdtServPv.c
|
||||
|
||||
OBJS += bdt.o
|
||||
OBJS += bdtServ.o
|
||||
OBJS += bdtServName.o
|
||||
OBJS += bdtServPv.o
|
||||
|
||||
PROD = bdt
|
||||
|
||||
include $(TOP)/config/RULES.Vx
|
||||
|
||||
$(PROD): $(OBJS)
|
||||
$(RM) $@
|
||||
$(LINK.c) $@ $(OBJS) $(LDLIBS)
|
||||
701
src/bdt/bdt.c
701
src/bdt/bdt.c
@@ -1,701 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#ifdef linux
|
||||
#include <sys/resource.h>
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#ifdef vxWorks
|
||||
#include <vxWorks.h>
|
||||
#include <in.h>
|
||||
#include <inetLib.h>
|
||||
#include <taskLib.h>
|
||||
#include <ioLib.h>
|
||||
#include <selectLib.h>
|
||||
#else
|
||||
#include <sys/time.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "bdt.h"
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
/* server mode functions */
|
||||
|
||||
#ifndef vxWorks /* server mode functions */
|
||||
static char* filename=(char*)NULL;
|
||||
|
||||
/* ----------------------------- */
|
||||
/* signal catcher for the server */
|
||||
/* ----------------------------- */
|
||||
static void catch_sig(int sig)
|
||||
{
|
||||
fprintf(stderr,"\nbdt server exiting\n");
|
||||
unlink(filename);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/* -------------------------------- */
|
||||
/* child reaper for the server mode */
|
||||
/* -------------------------------- */
|
||||
static void get_child(int sig)
|
||||
{
|
||||
while(wait3((int *)NULL,WNOHANG,(struct rusage *)NULL)>0);
|
||||
#ifdef linux
|
||||
signal(SIGCHLD,get_child); /* for reaping children */
|
||||
#endif
|
||||
}
|
||||
|
||||
/* ------------------------------- */
|
||||
/* Clear the signals for a process */
|
||||
/* ------------------------------- */
|
||||
int BdtServerClearSignals()
|
||||
{
|
||||
signal(SIGCHLD,SIG_DFL);
|
||||
signal(SIGHUP,SIG_DFL);
|
||||
signal(SIGINT,SIG_DFL);
|
||||
signal(SIGTERM,SIG_DFL);
|
||||
signal(SIGQUIT,SIG_DFL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------- */
|
||||
/* Make a unix process into a generic background process */
|
||||
/* ----------------------------------------------------- */
|
||||
int BdtMakeServer(char** argv)
|
||||
{
|
||||
FILE* fd;
|
||||
|
||||
if(filename) return -1;
|
||||
|
||||
/* set up signal handling for the server */
|
||||
signal(SIGCHLD,get_child); /* for reaping children */
|
||||
signal(SIGHUP,catch_sig);
|
||||
signal(SIGINT,catch_sig);
|
||||
signal(SIGTERM,catch_sig);
|
||||
signal(SIGQUIT,catch_sig);
|
||||
|
||||
/* disconnect from parent */
|
||||
switch(fork())
|
||||
{
|
||||
case -1: /* error */
|
||||
perror("Cannot fork");
|
||||
return -1;
|
||||
case 0: /* child */
|
||||
#ifdef linux
|
||||
setpgrp();
|
||||
#else
|
||||
setpgrp(0,0);
|
||||
#endif
|
||||
setsid();
|
||||
break;
|
||||
default: /* parent goes away */
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/* save process ID */
|
||||
filename=(char*)malloc(strlen(argv[0])+10);
|
||||
sprintf(filename,"%s.%d",argv[0],getpid());
|
||||
fd=fopen(filename,"w");
|
||||
fprintf(fd,"%d",getpid());
|
||||
fprintf(stderr,"\npv server pid: %d\n",getpid());
|
||||
fclose(fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* server mode functions */
|
||||
|
||||
/* ------------------------------------------ */
|
||||
/* unimplemented channel access open function */
|
||||
/* ------------------------------------------ */
|
||||
BDT* BdtPvOpen(char *IocName, char* PvName)
|
||||
{
|
||||
BDT *bdt;
|
||||
|
||||
if((bdt = BdtIpOpen(IocName, BDT_TCP_PORT)) == NULL)
|
||||
{
|
||||
fprintf(stderr,"open of address %s failed\n", IocName);
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
if(BdtServiceConnect(bdt, BDT_SERVICE_PV, PvName) < 0)
|
||||
{
|
||||
fprintf(stderr,"connect to PV %s failed\n", PvName);
|
||||
BdtClose(bdt);
|
||||
return(NULL);
|
||||
}
|
||||
return(bdt);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------- */
|
||||
/* open a bulk data socket to a server given the server IP address */
|
||||
/* --------------------------------------------------------------- */
|
||||
BDT* BdtIpOpen(char* address, int Port)
|
||||
{
|
||||
struct hostent *pHostent;
|
||||
struct sockaddr_in tsin;
|
||||
unsigned long addr;
|
||||
int osoc;
|
||||
BDT *bdt;
|
||||
|
||||
#ifndef vxWorks
|
||||
/* Deal with the name -vs- IP number issue. */
|
||||
if (isdigit(address[0]))
|
||||
#endif
|
||||
addr=inet_addr(address);
|
||||
#ifndef vxWorks
|
||||
else
|
||||
{
|
||||
if ((pHostent = gethostbyname (address)) == NULL)
|
||||
return(NULL);
|
||||
bcopy (pHostent->h_addr, (char *) &addr, sizeof(addr));
|
||||
printf("Converting name >%s< to IP number %08.8X\n", address, addr);
|
||||
}
|
||||
#endif
|
||||
|
||||
tsin.sin_port=0;
|
||||
tsin.sin_family=AF_INET;
|
||||
tsin.sin_addr.s_addr=htonl(INADDR_ANY);
|
||||
|
||||
if((osoc=socket(AF_INET,SOCK_STREAM,BDT_TCP))<0)
|
||||
{
|
||||
perror("BdtIpOpen: create socket failed");
|
||||
return (BDT*)NULL;
|
||||
}
|
||||
|
||||
if((bind(osoc,(struct sockaddr*)&tsin,sizeof(tsin)))<0)
|
||||
{
|
||||
perror("BdtIpOpen: local address bind failed");
|
||||
return (BDT*)NULL;
|
||||
}
|
||||
|
||||
tsin.sin_port=htons(Port);
|
||||
memcpy((char*)&tsin.sin_addr,(char*)&addr,sizeof(addr));
|
||||
|
||||
if(connect(osoc,(struct sockaddr*)&tsin,sizeof(tsin))<0)
|
||||
{
|
||||
perror("BdtIpOpen: connect failed");
|
||||
close(osoc);
|
||||
return (BDT*)NULL;
|
||||
}
|
||||
|
||||
bdt=(BDT*)malloc(sizeof(BDT));
|
||||
bdt->soc=osoc;
|
||||
bdt->remaining_send=0;
|
||||
bdt->remaining_recv=0;
|
||||
bdt->state=BdtUnbound;
|
||||
|
||||
#ifndef vxWorks
|
||||
{
|
||||
int j;
|
||||
j = fcntl(bdt->soc, F_GETFL, 0);
|
||||
fcntl(bdt->soc, F_SETFL, j|O_NDELAY);
|
||||
}
|
||||
#endif
|
||||
/* now connected to the bulk data socket on the IOC */
|
||||
return bdt;
|
||||
}
|
||||
|
||||
/* -------------------------------------- */
|
||||
/* write size bytes from buffer to socket */
|
||||
/* -------------------------------------- */
|
||||
int BdtWrite(int soc,void* buffer,int size)
|
||||
{
|
||||
int rc;
|
||||
int total;
|
||||
unsigned char* data;
|
||||
fd_set fds;
|
||||
struct timeval to;
|
||||
|
||||
data=(unsigned char*)buffer;
|
||||
total=size;
|
||||
|
||||
to.tv_sec = 5;
|
||||
to.tv_usec = 0;
|
||||
|
||||
do
|
||||
{
|
||||
FD_ZERO(&fds);
|
||||
FD_SET(soc, &fds);
|
||||
if (select(soc+1, NULL, &fds, NULL, &to) != 1)
|
||||
{
|
||||
printf("BdtWrite: timeout waiting to write data\n");
|
||||
return(-1);
|
||||
}
|
||||
/* send block of data */
|
||||
if((rc=send(soc,&data[size-total],total,0))<0)
|
||||
{
|
||||
if(errno == EINTR)
|
||||
rc = 0;
|
||||
else
|
||||
perror("BdtWrite: Send to remote failed");
|
||||
}
|
||||
else
|
||||
total-=rc;
|
||||
}
|
||||
while(rc>0 && total>0);
|
||||
|
||||
return (rc<=0)?-1:0;
|
||||
}
|
||||
|
||||
/* --------------------------------------- */
|
||||
/* send a message header down a BDT socket */
|
||||
/* --------------------------------------- */
|
||||
int BdtSendHeader(BDT* bdt,unsigned short verb,int size)
|
||||
{
|
||||
BdtMsgHead buf;
|
||||
|
||||
if(bdt->state!=BdtIdle)
|
||||
{
|
||||
fprintf(stderr,"BdtSendHeader: Interface not idle\n");
|
||||
bdt->state=BdtBad;
|
||||
return -1;
|
||||
}
|
||||
|
||||
buf.verb=htons(verb);
|
||||
buf.size=htonl((unsigned long)size);
|
||||
|
||||
if(BdtWrite(bdt->soc,&buf.verb, sizeof(buf.verb))<0)
|
||||
{
|
||||
fprintf(stderr,"BdtSendHeader: write to remote failed");
|
||||
return -1;
|
||||
}
|
||||
if(BdtWrite(bdt->soc,&buf.size, sizeof(buf.size))<0)
|
||||
{
|
||||
fprintf(stderr,"BdtSendHeader: write to remote failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* don't wait for response if data must go out */
|
||||
if(size)
|
||||
{
|
||||
bdt->remaining_send=size;
|
||||
bdt->state=BdtSData;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ------------------------------------------- */
|
||||
/* send a message data chunk down a BDT socket */
|
||||
/* ------------------------------------------- */
|
||||
int BdtSendData(BDT* bdt,void* buffer,int size)
|
||||
{
|
||||
int len;
|
||||
int remaining;
|
||||
int rc;
|
||||
|
||||
if(bdt->state!=BdtSData)
|
||||
{
|
||||
fprintf(stderr,"BdtSendData: Interface not in send data mode\n");
|
||||
bdt->state=BdtBad;
|
||||
return -1;
|
||||
}
|
||||
|
||||
remaining=bdt->remaining_send-size;
|
||||
|
||||
if(remaining<0)
|
||||
{
|
||||
fprintf(stderr,"WARNING -- BdtSendData: To much data to send\n");
|
||||
len=bdt->remaining_send;
|
||||
}
|
||||
else
|
||||
len=size;
|
||||
|
||||
if (BdtWrite(bdt->soc, buffer, len) < 0)
|
||||
return -1;
|
||||
|
||||
bdt->remaining_send-=len;
|
||||
|
||||
if(bdt->remaining_send<0)
|
||||
{
|
||||
fprintf(stderr,"BdtSendData: To much data Sent\n");
|
||||
bdt->remaining_send=0;
|
||||
}
|
||||
|
||||
if(bdt->remaining_send==0)
|
||||
bdt->state=BdtIdle;
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
int BdtFlushOutput(BDT* bdt)
|
||||
{
|
||||
#ifdef vxWorks
|
||||
ioctl(bdt->soc, FIOWFLUSH, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* ------------------------------------- */
|
||||
/* Read exactly size bytes from remote */
|
||||
/* ------------------------------------- */
|
||||
int BdtRead(int soc,void* buffer,int size)
|
||||
{
|
||||
int rc,total;
|
||||
unsigned char* data;
|
||||
fd_set fds;
|
||||
struct timeval to;
|
||||
|
||||
to.tv_sec = 5;
|
||||
to.tv_usec = 0;
|
||||
|
||||
data=(unsigned char*)buffer;
|
||||
total=size;
|
||||
|
||||
do
|
||||
{
|
||||
#if 1
|
||||
/* wait for data chunk */
|
||||
FD_ZERO(&fds);
|
||||
FD_SET(soc, &fds);
|
||||
if (select(soc+1, &fds, NULL, NULL, &to) != 1)
|
||||
{
|
||||
printf("BdtRead: timeout waiting for data\n");
|
||||
return(-1);
|
||||
}
|
||||
#endif
|
||||
if((rc=recv(soc,&data[size-total],total,0))<0)
|
||||
{
|
||||
if(errno==EINTR)
|
||||
{
|
||||
printf("BdtRead: EINTR");
|
||||
rc=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
perror("BdtRead: Receive data chunk failed");
|
||||
}
|
||||
}
|
||||
else
|
||||
total-=rc;
|
||||
}
|
||||
while(rc>0 && total>0);
|
||||
|
||||
return (rc<=0)?-1:0;
|
||||
}
|
||||
|
||||
/* ------------------------------------- */
|
||||
/* wait for a message header from remote */
|
||||
/* ------------------------------------- */
|
||||
int BdtReceiveHeader(BDT* bdt,int* verb,int* size)
|
||||
{
|
||||
BdtMsgHead buf;
|
||||
|
||||
/* can only receive header when in the idle state */
|
||||
if (bdt->state == BdtEof)
|
||||
return -1;
|
||||
|
||||
if(bdt->state != BdtIdle)
|
||||
{
|
||||
fprintf(stderr,"BdtReceiveHeader: Interface not idle\n");
|
||||
bdt->state=BdtBad;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(BdtRead(bdt->soc,&buf.verb,sizeof(buf.verb))<0)
|
||||
{
|
||||
fprintf(stderr,"BdtReceiveHeader: Read failed\n");
|
||||
return -1;
|
||||
}
|
||||
if(BdtRead(bdt->soc,&buf.size,sizeof(buf.size))<0)
|
||||
{
|
||||
fprintf(stderr,"BdtReceiveHeader: Read failed\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* copy message data to user */
|
||||
*verb=ntohs(buf.verb);
|
||||
*size=ntohl(buf.size);
|
||||
|
||||
if(*size)
|
||||
bdt->state=BdtRData;
|
||||
|
||||
bdt->remaining_recv=*size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------
|
||||
Wait for a chunk of data from remote.
|
||||
User can continually call this with a maximum size until it return 0.
|
||||
------------------------------------------------------------------------ */
|
||||
int BdtReceiveData(BDT* bdt,void* buffer,int size)
|
||||
{
|
||||
int rc;
|
||||
|
||||
/* can only receive data when in the receive data state */
|
||||
switch(bdt->state)
|
||||
{
|
||||
case BdtRData: break;
|
||||
case BdtIdle: return 0;
|
||||
default:
|
||||
fprintf(stderr,"BdtReceiveData: bad receive state\n");
|
||||
bdt->state=BdtBad;
|
||||
break;
|
||||
}
|
||||
|
||||
if (bdt->remaining_recv < size)
|
||||
size = bdt->remaining_recv;
|
||||
|
||||
if(BdtRead(bdt->soc,buffer,size)<0)
|
||||
{
|
||||
fprintf(stderr,"BdtReceiveData: Read failed\n");
|
||||
bdt->state = BdtEof;
|
||||
return -1;
|
||||
}
|
||||
|
||||
bdt->remaining_recv-=size;
|
||||
|
||||
if(bdt->remaining_recv<0)
|
||||
{
|
||||
fprintf(stderr,"BdtReceiveData: To much data received\n");
|
||||
bdt->remaining_recv=0;
|
||||
}
|
||||
|
||||
if(bdt->remaining_recv==0)
|
||||
bdt->state=BdtIdle;
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------ */
|
||||
/* connect to a process variable, useful if raw open used */
|
||||
/* ------------------------------------------------------ */
|
||||
int BdtServiceConnect(BDT* bdt, char* Name, char *Args)
|
||||
{
|
||||
int len;
|
||||
int rc;
|
||||
int size;
|
||||
int verb;
|
||||
unsigned char NameLen;
|
||||
unsigned char ArgLen;
|
||||
|
||||
if(bdt->state!=BdtUnbound)
|
||||
{
|
||||
fprintf(stderr,"BdtServiceConnect: can only bind to one service\n");
|
||||
return -1;
|
||||
}
|
||||
bdt->state=BdtIdle;
|
||||
NameLen = strlen(Name)+1;
|
||||
if (Args != NULL)
|
||||
ArgLen = strlen(Args)+1;
|
||||
else
|
||||
ArgLen = 0;
|
||||
|
||||
/* send out connect message */
|
||||
if(BdtSendHeader(bdt, BDT_Connect, NameLen+ArgLen) < 0)
|
||||
{
|
||||
fprintf(stderr,"BdtServiceConnect: send of connect header failed\n");
|
||||
bdt->state=BdtUnbound;
|
||||
return -1;
|
||||
}
|
||||
|
||||
NameLen--;
|
||||
ArgLen--;
|
||||
/* send out the process variable to connect to */
|
||||
if((BdtSendData(bdt, &NameLen, 1) < 0) || (BdtSendData(bdt, Name, NameLen) < 0))
|
||||
|
||||
{
|
||||
fprintf(stderr,"BdtServiceConnect: send of connect body failed\n");
|
||||
bdt->state=BdtUnbound;
|
||||
return -1;
|
||||
}
|
||||
if (ArgLen > 0)
|
||||
{
|
||||
if ((BdtSendData(bdt, &ArgLen, 1) < 0) || (BdtSendData(bdt, Args, ArgLen) < 0))
|
||||
{
|
||||
fprintf(stderr,"BdtServiceConnect: send of connect body failed\n");
|
||||
bdt->state=BdtUnbound;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
rc=0;
|
||||
|
||||
/* wait for response from connect to process variable */
|
||||
if(BdtReceiveHeader(bdt,&verb,&size)<0)
|
||||
{
|
||||
fprintf(stderr,"BdtServiceConnect: receive reponse failed\n");
|
||||
bdt->state=BdtUnbound;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* check response */
|
||||
switch(verb)
|
||||
{
|
||||
case BDT_Ok:
|
||||
rc=0;
|
||||
break;
|
||||
case BDT_Error:
|
||||
fprintf(stderr,"BdtServiceConnect: connection rejected\n");
|
||||
bdt->state=BdtUnbound;
|
||||
rc=-1;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr,"BdtServiceConnect: unknown response from remote\n");
|
||||
bdt->state=BdtUnbound;
|
||||
rc=-1;
|
||||
break;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* -------------------- */
|
||||
/* close the connection */
|
||||
/* -------------------- */
|
||||
int BdtClose(BDT* bdt)
|
||||
{
|
||||
int verb,size,done;
|
||||
|
||||
/* send a close message out */
|
||||
if(BdtSendHeader(bdt,BDT_Close,0)<0)
|
||||
{
|
||||
fprintf(stderr,"BdtClose: Cannot send close message\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
done=0;
|
||||
|
||||
do
|
||||
{
|
||||
/* check response */
|
||||
if(BdtReceiveHeader(bdt,&verb,&size)<0)
|
||||
{
|
||||
fprintf(stderr,"BdtClose: Close message response error\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch(verb)
|
||||
{
|
||||
case BDT_Ok:
|
||||
done=1;
|
||||
break;
|
||||
case BDT_Error:
|
||||
fprintf(stderr,"BdtClose: Close rejected\n");
|
||||
return -1;
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
while(done==0);
|
||||
|
||||
bdt->state=BdtUnbound;
|
||||
free(bdt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* --------------------------------------- */
|
||||
/* make a listener socket for UDP - simple */
|
||||
/* --------------------------------------- */
|
||||
int BdtOpenListenerUDP(int Port)
|
||||
{
|
||||
int nsoc;
|
||||
struct sockaddr_in tsin;
|
||||
|
||||
tsin.sin_port=htons(Port);
|
||||
tsin.sin_family=AF_INET;
|
||||
tsin.sin_addr.s_addr=htonl(INADDR_ANY);
|
||||
|
||||
if((nsoc=socket(AF_INET,SOCK_DGRAM,BDT_UDP))<0)
|
||||
{
|
||||
perror("BdtOpenListenerUDP: open socket failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if((bind(nsoc,(struct sockaddr*)&tsin,sizeof(tsin)))<0)
|
||||
{
|
||||
perror("BdtOpenListenerUDP: local bind failed");
|
||||
close(nsoc);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return nsoc;
|
||||
}
|
||||
|
||||
/* --------------------------------------- */
|
||||
/* make a listener socket for TCP - simple */
|
||||
/* --------------------------------------- */
|
||||
int BdtOpenListenerTCP(int Port)
|
||||
{
|
||||
int nsoc;
|
||||
struct sockaddr_in tsin;
|
||||
|
||||
memset (&tsin, 0, sizeof(struct sockaddr_in));
|
||||
tsin.sin_port=htons(Port);
|
||||
tsin.sin_family=htons(AF_INET);
|
||||
tsin.sin_addr.s_addr=htonl(INADDR_ANY);
|
||||
|
||||
if((nsoc=socket(AF_INET,SOCK_STREAM,BDT_TCP))<0)
|
||||
{
|
||||
perror("BdtOpenListenerTCP: open socket failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if((bind(nsoc,(struct sockaddr*)&tsin,sizeof(tsin)))<0)
|
||||
{
|
||||
perror("BdtOpenListenerTCP: local bind failed");
|
||||
close(nsoc);
|
||||
return -1;
|
||||
}
|
||||
|
||||
listen(nsoc,5);
|
||||
return nsoc;
|
||||
}
|
||||
|
||||
/* ------------------------------- */
|
||||
/* make BDT from a socket - simple */
|
||||
/* ------------------------------- */
|
||||
BDT* BdtMakeBDT(int soc)
|
||||
{
|
||||
BDT* bdt;
|
||||
bdt=(BDT*)malloc(sizeof(BDT));
|
||||
bdt->soc=soc;
|
||||
bdt->remaining_send=0;
|
||||
bdt->remaining_recv=0;
|
||||
bdt->state=BdtIdle;
|
||||
return bdt;
|
||||
}
|
||||
|
||||
/* --------------------------- */
|
||||
/* free a BDT and close socket */
|
||||
/* --------------------------- */
|
||||
int BdtFreeBDT(BDT* bdt)
|
||||
{
|
||||
close(bdt->soc);
|
||||
free(bdt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int BdtPvPutArray(BDT *bdt, short DbrType, void *Buf, unsigned long NumElements,
|
||||
unsigned long ElementSize)
|
||||
{
|
||||
int Verb;
|
||||
int Size;
|
||||
unsigned long BufSize;
|
||||
|
||||
BufSize = NumElements * ElementSize;
|
||||
if (BdtSendHeader(bdt, BDT_Put, 6 + BufSize) != 0)
|
||||
return(-1);
|
||||
if (BdtSendData(bdt, &DbrType, 2) < 0)
|
||||
return(-1);
|
||||
if (BdtSendData(bdt, &NumElements, 4) < 0)
|
||||
return(-1);
|
||||
if (BdtSendData(bdt, Buf, BufSize) < 0)
|
||||
return(-1);
|
||||
if (BdtReceiveHeader(bdt, &Verb, &Size) != 0)
|
||||
return(-1);
|
||||
if (Verb != BDT_Ok)
|
||||
return(-1);
|
||||
|
||||
return(0);
|
||||
}
|
||||
304
src/bdt/bdt.h
304
src/bdt/bdt.h
@@ -1,304 +0,0 @@
|
||||
#ifndef __BDT_H
|
||||
#define __BDT_H
|
||||
|
||||
/*
|
||||
* $Log$
|
||||
* Revision 1.4 1995/07/27 14:21:58 winans
|
||||
* General mods for first release.
|
||||
*
|
||||
* Revision 1.3 1995/05/30 14:47:17 winans
|
||||
* Added BDT_Ping and a port parm to BdtIpOpen.
|
||||
*
|
||||
* Revision 1.2 1995/05/16 15:38:00 winans
|
||||
* Added BdtEof to BdtState enum list.
|
||||
* Added WriteLock and DeltaFlagLock to vxWorks-side BDTs.
|
||||
* Added port number args to BdtOpenListenerTCP() and BdtOpenListenerUDP().
|
||||
*
|
||||
* Revision 1.1 1995/05/11 02:08:44 jbk
|
||||
* new file for the bulk data transfer stuff
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
Author: Jim Kowalkowski
|
||||
Date: 5/1/95
|
||||
*/
|
||||
|
||||
/* got from protocols(5) (cheated) or /etc/protocols */
|
||||
#define BDT_UDP 17
|
||||
#define BDT_TCP 6
|
||||
|
||||
/* server ports - in the user reserved area */
|
||||
#define BDT_UDP_PORT 50296
|
||||
#define BDT_TCP_PORT 50297
|
||||
|
||||
/* Well known service names */
|
||||
#define BDT_SERVICE_PV "pv"
|
||||
#define BDT_SERVICE_NAME "name"
|
||||
#define BDT_SERVICE_DRV "drv"
|
||||
|
||||
#define PV_TRANSFER_SIZE 512
|
||||
|
||||
/* How often some type of message is expected to arrive at each end-point */
|
||||
#define BDT_PING_INTERVAL 10 /* Specified in seconds */
|
||||
#define BDT_CONENCTION_TIMEOUT 25 /* Specified in seconds */
|
||||
|
||||
/* message types */
|
||||
#define BDT_Ok 0
|
||||
#define BDT_Connect 1
|
||||
#define BDT_Error 2
|
||||
#define BDT_Get 3
|
||||
#define BDT_Put 4
|
||||
#define BDT_Close 5
|
||||
#define BDT_Monitor 6
|
||||
#define BDT_Value 7
|
||||
#define BDT_Delta 8
|
||||
#define BDT_Add 9
|
||||
#define BDT_Delete 10
|
||||
#define BDT_Ping 11
|
||||
|
||||
#define BDT_LAST_VERB 11
|
||||
|
||||
/* protocol states */
|
||||
typedef enum
|
||||
{ BdtIdle,BdtUnbound,BdtSData,BdtRData,BdtBad,BdtEof } BdtState;
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* The format of a BDT_Connect message is:
|
||||
*
|
||||
* BdtMsgHead.verb (unsigned 16 binary = BDT_Connect)
|
||||
* BdtMsgHead.size (unsigned 32 bit binary)
|
||||
* service name length (unsigned 8 bit binary)
|
||||
* service name string (service name length characters)
|
||||
* arg1 string length (unsigned 8 bit binary)
|
||||
* arg1 string (arg1 string length characters)
|
||||
* ...
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* NOTICE!!!!!!!! MONITORS ARE NOT CURRENTLY SUPPORTED!!!!!!!
|
||||
*
|
||||
* The BdtMonitor structure is created on the server-side when ever a client
|
||||
* registers a monitor. It contains a tag string that is given by the client
|
||||
* when the monitor is established. This tag string is an arbitrary binary
|
||||
* string of bytes... presumably used by the client as a pointer or index
|
||||
* to a status structure that represents the resource being monitored.
|
||||
*
|
||||
* The Message portion of the BdtMonitor represents the body of the message
|
||||
* that is to be sent to the client to indicate the status of the event that
|
||||
* happened. (It may not be present in the message.)
|
||||
*
|
||||
* The BdtMonitor structures are only hooked into the bdt.pMonitor list if they
|
||||
* are waiting to be sent to the client.
|
||||
*
|
||||
* The format of a BDT_Monitor message is:
|
||||
*
|
||||
* BdtMsgHead.verb (unsigned 16 binary = BDT_Monitor)
|
||||
* BdtMsgHead.size (unsigned 32 bit binary)
|
||||
* TagLength (unsigned 32 bit binary)
|
||||
* Tag (TagLength characters)
|
||||
* service name string (BdtMsgHead.size-TagLength-4 characters)
|
||||
*
|
||||
* The <service name string> for a monitor message should include the object
|
||||
* name(s) that are to be monitored.
|
||||
*
|
||||
*
|
||||
* The format of a BDT_Delta message is:
|
||||
*
|
||||
* BdtMsgHead.verb (unsigned 16 binary = BDT_Delta)
|
||||
* BdtMsgHead.size (unsigned 32 bit binary)
|
||||
* BdtMonitor.TagLength (unsigned 32 bit binary)
|
||||
* BdtMonitor.Tag (BdtMonitor.TagLength characters)
|
||||
* BdtMonitor.MessageLength (unsigned 32 bit binary)
|
||||
* BdtMonitor.Message (BdtMonitor.MessageLength characters)
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
struct bdt;
|
||||
typedef struct BdtMonitor
|
||||
{
|
||||
struct bdt *pBdt; /* Connection to send notices back to */
|
||||
char *Tag; /* Client-generated tag */
|
||||
int TagLength; /* Length of tag */
|
||||
char *Message; /* Server-gen'd status change message */
|
||||
int MessageLength; /* Length of Message */
|
||||
struct BdtMonitor *pNext; /* Allow queue of N outbound on BDT */
|
||||
} BdtMonitor;
|
||||
|
||||
typedef int (*BdthandlerFunc)(struct bdt *Bdt);
|
||||
typedef struct BdtHandlers
|
||||
{
|
||||
BdthandlerFunc Ok;
|
||||
BdthandlerFunc Connect;
|
||||
BdthandlerFunc Error;
|
||||
BdthandlerFunc Get;
|
||||
BdthandlerFunc Put;
|
||||
BdthandlerFunc Close;
|
||||
BdthandlerFunc Monitor;
|
||||
BdthandlerFunc Value;
|
||||
BdthandlerFunc Delta;
|
||||
BdthandlerFunc Add;
|
||||
BdthandlerFunc Delete;
|
||||
BdthandlerFunc Ping;
|
||||
} BdtHandlers;
|
||||
|
||||
struct bdt
|
||||
{
|
||||
int soc;
|
||||
int remaining_send;
|
||||
int remaining_recv;
|
||||
BdtState state;
|
||||
|
||||
#ifdef vxWorks
|
||||
char *Name; /* Service name (used for messages) */
|
||||
SEM_ID WriteLock;
|
||||
SEM_ID MonitorLock;
|
||||
BdtMonitor *pMonitor; /* List of pending monitor events */
|
||||
BdthandlerFunc *pHandlers; /* Support routines for messages */
|
||||
void *pService; /* Provate pointer for service */
|
||||
#endif
|
||||
};
|
||||
typedef struct bdt BDT;
|
||||
|
||||
struct BdtMsgHead
|
||||
{
|
||||
unsigned short verb;
|
||||
unsigned long size;
|
||||
};
|
||||
typedef struct BdtMsgHead BdtMsgHead;
|
||||
|
||||
#define BdtGetSocket(BDT) (BDT->soc)
|
||||
#define BdtGetResidualWrite(BDT) (BDT->remaining_send)
|
||||
#define BdtGetResidualRead(BDT) (BDT->remaining_recv)
|
||||
#define BdtGetProtoState(BDT) (BDT->state)
|
||||
#ifdef vxWorks
|
||||
#define BdtGetServiceName(BDT) (BDT->Name)
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------------------
|
||||
Server functions:
|
||||
|
||||
BdtOpenListenerTCP:
|
||||
Open a socket locally bound to the bulk data transfer TCP server port.
|
||||
Set the socket up as a listener. Return the open socket.
|
||||
|
||||
BdtOpenListenerUDP:
|
||||
Open a socket locally bound to the bulk data transfer UDP server port.
|
||||
Return the open socket.
|
||||
|
||||
------------------------------------------------------------------------ */
|
||||
|
||||
int BdtOpenListenerTCP(int Port);
|
||||
int BdtOpenListenerUDP(int Port);
|
||||
|
||||
/* ------------------------------------------------------------------------
|
||||
Utilities functions:
|
||||
|
||||
BdtMakeServer:
|
||||
Available under unix only. Put process in the background, disassociate
|
||||
process from controlling terminal and parent process, and prepare
|
||||
signals for reaping children spawned by the process.
|
||||
|
||||
BdtServerClearSignals:
|
||||
Clear the signal handlers for a process, set them to default.
|
||||
|
||||
BdtMakeBDT:
|
||||
Allocate and initialize a BDT from a socket.
|
||||
|
||||
BdtFreeBDT:
|
||||
Close the open socket and free the memory for the BDT.
|
||||
------------------------------------------------------------------------ */
|
||||
|
||||
#ifndef vxWorks
|
||||
int BdtMakeServer(char** argv);
|
||||
int BdtServerClearSignals();
|
||||
#endif
|
||||
|
||||
BDT* BdtMakeBDT(int socket); /* make a BDT from a socket */
|
||||
int BdtFreeBDT(BDT* bdt); /* free a BDT */
|
||||
|
||||
/* ------------------------------------------------------------------------
|
||||
Client functions:
|
||||
|
||||
BdtIpOpen:
|
||||
Open a connection to an bulk data transfer given the IP address of the
|
||||
machine where the server exists. The returned BDT is returned unbound,
|
||||
a connect must be issued before data transactions can take place.
|
||||
|
||||
BdtPvOpen:
|
||||
Open and connect (bind) to a process variable. Data transfers can
|
||||
take place after this call.
|
||||
|
||||
BdtServiceConnect:
|
||||
Used in conjunction with BdtIpOpen(). Bind an unbound BDT to a
|
||||
generic service provided by the server at the other end of the open
|
||||
connection.
|
||||
|
||||
BdtPvConnect:
|
||||
Used in conjunction with BdtIpOpen(). Bind an unbound BDT to a
|
||||
process variable on the server at the other end of the open
|
||||
connection.
|
||||
|
||||
BdtClose:
|
||||
Completely close a connection to a server and free the BDT.
|
||||
|
||||
BdtDeltaPending:
|
||||
Check if a delta message arrived at an unexpected time. This function
|
||||
clears the pending condition.
|
||||
|
||||
------------------------------------------------------------------------ */
|
||||
|
||||
BDT* BdtIpOpen(char* address, int port);
|
||||
BDT* BdtPvOpen(char *IocName, char* PvName);
|
||||
int BdtServiceConnect(BDT* bdt, char* service_name, char *args);
|
||||
int BdtPvConnect(BDT* bdt, char* pv_name);
|
||||
int BdtClose(BDT* bdt);
|
||||
int BdtPvDeltaPending(BDT* bdt);
|
||||
|
||||
/* ------------------------------------------------------------------------
|
||||
Client and Server shared functions:
|
||||
|
||||
BdtSendHeader:
|
||||
Send a message header out to a connect BDT with command and message body
|
||||
size information.
|
||||
|
||||
BdtSendData:
|
||||
Send a portion or all the message body out a connected BDT. A header
|
||||
must have previously been sent with length information. The interface
|
||||
will only allow the amount of data specified in the header to be sent.
|
||||
|
||||
BdtWrite:
|
||||
This call will block until all the data specified in the size parameter
|
||||
are sent down the socket.
|
||||
|
||||
BdtRead:
|
||||
This call will block until all the data specified in the size parameter
|
||||
is read from the socket.
|
||||
|
||||
BdtReceiveHeader:
|
||||
Wait until a message header appears at the BDT, return the action and
|
||||
remaining message body size.
|
||||
|
||||
BdtReceiveData:
|
||||
Wait for a chunk or the entire body of a message to appear at the BDT.
|
||||
Put the data into the buffer for a maximum size. Return the amount of
|
||||
data actually received, or zero if there is no data remaining for the
|
||||
current message.
|
||||
|
||||
------------------------------------------------------------------------ */
|
||||
|
||||
int BdtSendHeader(BDT* bdt, unsigned short verb, int size);
|
||||
int BdtSendData(BDT* bdt, void* buffer, int size);
|
||||
int BdtReceiveHeader(BDT* bdt, int* verb, int* size);
|
||||
int BdtReceiveData(BDT* bdt, void* buffer, int size);
|
||||
int BdtRead(int socket, void* buffer, int size);
|
||||
int BdtWrite(int socket, void* buffer, int size);
|
||||
int BdtFlushOutput(BDT* bdt);
|
||||
int BdtPvPutArray(BDT *bdt, short DbrType, void *Buf, unsigned long NumElements, unsigned long ElementSize);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,392 +0,0 @@
|
||||
/*
|
||||
*
|
||||
* Author: John Winans
|
||||
* Date: 95-05-22
|
||||
*
|
||||
* $Log$
|
||||
*/
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* IOC listener task blocks on accept calls waiting for binders.
|
||||
* If a bind arrives, a receiver task is spawned.
|
||||
*
|
||||
* IOC receiver task blocks on read calls waiting for transactions.
|
||||
* When a transaction arrives it is serviced.
|
||||
* At the end of a transaction service, a response is sent back.
|
||||
* After the response is sent, a chack is made to see if a delta transmission
|
||||
* was blocked by the transaction's use of the socket... if so, it is sent.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#include <selectLib.h>
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
#include <vxWorks.h>
|
||||
#include <sys/socket.h>
|
||||
#include <in.h>
|
||||
#include <inetLib.h>
|
||||
#include <taskLib.h>
|
||||
#include <sysSymTbl.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "bdt.h"
|
||||
|
||||
#define BDT_TASK_PRIO 200
|
||||
#define BDT_TASK_OPTIONS VX_FP_TASK
|
||||
#define BDT_TASK_STACK 5000
|
||||
#define STATIC static
|
||||
|
||||
/* used for debugging */
|
||||
STATIC char *BdtNames[] = {
|
||||
"BDT_Ok",
|
||||
"BDT_Connect",
|
||||
"BDT_Error",
|
||||
"BDT_Get",
|
||||
"BDT_Put",
|
||||
"BDT_Close",
|
||||
"BDT_Monitor",
|
||||
"BDT_Value",
|
||||
"BDT_Delta",
|
||||
"BDT_Add",
|
||||
"BDT_Delete",
|
||||
"BDT_Ping"
|
||||
};
|
||||
|
||||
STATIC int HexDump(char *ReadBuffer, int rbytes);
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* A debugging routine that hex-dumps a message to the console.
|
||||
*
|
||||
*****************************************************************************/
|
||||
void BDT_DumpMessage(BDT *Bdt)
|
||||
{
|
||||
char Buf[16*4];
|
||||
int RecvLen;
|
||||
|
||||
while(Bdt->remaining_recv)
|
||||
{
|
||||
RecvLen = (Bdt->remaining_recv > sizeof(Buf)) ? sizeof(Buf): Bdt->remaining_recv;
|
||||
if (BdtReceiveData(Bdt, Buf, RecvLen) != RecvLen)
|
||||
return; /* Got EOF, (EOM handled by the while() */
|
||||
|
||||
HexDump(Buf, RecvLen);
|
||||
}
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Throw away a message.
|
||||
*
|
||||
****************************************************************************/
|
||||
void BDT_DiscardMessage(BDT *Bdt)
|
||||
{
|
||||
char Buf[16*4];
|
||||
int RecvLen;
|
||||
|
||||
while(Bdt->remaining_recv)
|
||||
{
|
||||
RecvLen = (Bdt->remaining_recv > sizeof(Buf)) ? sizeof(Buf): Bdt->remaining_recv;
|
||||
if (BdtReceiveData(Bdt, Buf, RecvLen) != RecvLen)
|
||||
return; /* Got EOF, (EOM handled by the while() */
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Process a single Connect message. And return a response.
|
||||
*
|
||||
******************************************************************************/
|
||||
STATIC int BDT_ProcessConnect(BDT *Bdt)
|
||||
{
|
||||
SYM_TYPE Type;
|
||||
unsigned char length;
|
||||
char Buf[50];
|
||||
char HandlerName[70];
|
||||
|
||||
if (Bdt->remaining_recv > sizeof(Buf))
|
||||
{
|
||||
printf("BDT_ProcessConnect Connect Message too long %d\n", Bdt->remaining_recv);
|
||||
BDT_DiscardMessage(Bdt);
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
if (Bdt->remaining_recv < 2)
|
||||
{
|
||||
printf("BDT_ProcessConnect Connect Message w/missing service name\n");
|
||||
BDT_DiscardMessage(Bdt);
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
BdtReceiveData(Bdt, &length, 1);
|
||||
if (length > sizeof(Buf))
|
||||
{
|
||||
printf("BDT_ProcessConnect Connect Message service name too long %d\n", length);
|
||||
BDT_DiscardMessage(Bdt);
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
BdtReceiveData(Bdt, Buf, length);
|
||||
Buf[length] = '\0';
|
||||
|
||||
sprintf(HandlerName, "_BDT_ServiceHandler_%s", Buf);
|
||||
printf("BDT_ProcessConnect NAME service (%s)\n", HandlerName);
|
||||
|
||||
/*Bdt->pHandlers = (BdthandlerFunc *)(&BDT_NameServicehandlers);*/
|
||||
if (symFindByName(sysSymTbl, HandlerName, (char **)&(Bdt->pHandlers), &Type) != OK)
|
||||
{
|
||||
printf("BDT_ProcessConnect Connect to unknown service (%s)\n", Buf);
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
Bdt->Name = (char *)malloc(strlen(Buf)+1);
|
||||
strcpy(Bdt->Name, Buf);
|
||||
if (Bdt->pHandlers[BDT_Connect] != NULL)
|
||||
return((*(Bdt->pHandlers[BDT_Connect]))(Bdt));
|
||||
else
|
||||
{
|
||||
BDT_DiscardMessage(Bdt);
|
||||
BdtSendHeader(Bdt, BDT_Ok, 0);
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Process a single message. And return a response.
|
||||
*
|
||||
******************************************************************************/
|
||||
STATIC int BDT_ProcMessage(BDT *Bdt, unsigned short Command)
|
||||
{
|
||||
int RecvLen;
|
||||
|
||||
if (Command > BDT_LAST_VERB)
|
||||
{
|
||||
printf("BDT: %s Invalid command %d, length = %d\n", Bdt->Name, Command, Bdt->remaining_recv);
|
||||
BDT_DumpMessage(Bdt);
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
|
||||
if (Bdt->pHandlers == NULL)
|
||||
{
|
||||
if (Command == BDT_Connect)
|
||||
BDT_ProcessConnect(Bdt);
|
||||
else
|
||||
{
|
||||
printf("BDT_ProcMessage: %s got %s before connect\n", Bdt->Name, BdtNames[Command]);
|
||||
BDT_DiscardMessage(Bdt);
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
if (Bdt->pHandlers[Command] == NULL)
|
||||
{
|
||||
printf("BDT_ProcMessage: service %s got %s... invalid\n", Bdt->Name, BdtNames[Command]);
|
||||
}
|
||||
return((*(Bdt->pHandlers[Command]))(Bdt));
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Wait on a socket read for a message. When one arrives, read the header,
|
||||
* decode it, and call the message handler routine to process and respond to it.
|
||||
*
|
||||
******************************************************************************/
|
||||
STATIC void BDT_ReceiverTask(int Sock)
|
||||
{
|
||||
int Verb;
|
||||
int Size;
|
||||
BDT Bdt;
|
||||
int MonitorLockTimeout = (BDT_PING_INTERVAL*sysClkRateGet())/2;
|
||||
static char *NoBdtName = "(No Name)";
|
||||
fd_set FdSet;
|
||||
struct timeval TimeVal;
|
||||
int PollStatus;
|
||||
int SocketState;
|
||||
|
||||
Bdt.soc = Sock;
|
||||
Bdt.pMonitor = NULL;
|
||||
Bdt.WriteLock = semBCreate(SEM_Q_PRIORITY, SEM_FULL);
|
||||
Bdt.MonitorLock = semBCreate(SEM_Q_PRIORITY, SEM_FULL);
|
||||
Bdt.state = BdtIdle;
|
||||
Bdt.pHandlers = NULL;
|
||||
Bdt.Name = NoBdtName;
|
||||
|
||||
printf("BDT_ReceiverTask(%d) started\n", Sock);
|
||||
|
||||
TimeVal.tv_sec = BDT_CONENCTION_TIMEOUT;
|
||||
TimeVal.tv_usec = 0;
|
||||
FD_ZERO(&FdSet);
|
||||
FD_SET(Bdt.soc, &FdSet);
|
||||
|
||||
SocketState = 0;
|
||||
while (((PollStatus = select(FD_SETSIZE, &FdSet, NULL, NULL, &TimeVal)) > 0) && (BdtReceiveHeader(&Bdt, &Verb, &Size) == 0))
|
||||
{
|
||||
semTake(Bdt.WriteLock, WAIT_FOREVER);
|
||||
|
||||
SocketState = BDT_ProcMessage(&Bdt, Verb);
|
||||
|
||||
if (SocketState != 0)
|
||||
break;
|
||||
|
||||
#if 0
|
||||
if (semTake(Bdt.MonitorLock, MonitorLockTimeout) == OK)
|
||||
{
|
||||
/* Check for delta flag and send if so */
|
||||
|
||||
/* Change this to run thru a delta-message linked list */
|
||||
if (Bdt.pMonitor != NULL)
|
||||
{
|
||||
/* Send delta notifier */
|
||||
}
|
||||
semGive(Bdt.WriteLock); /* Order important for BDT_SendDelta */
|
||||
semGive(Bdt.MonitorLock);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("BDT_ReceiverTask timeout on monitor semaphore. Monitors are stuck!\n");
|
||||
semGive(Bdt.WriteLock);
|
||||
}
|
||||
#else
|
||||
semGive(Bdt.WriteLock);
|
||||
#endif
|
||||
BdtFlushOutput(&Bdt);
|
||||
|
||||
FD_ZERO(&FdSet);
|
||||
FD_SET(Bdt.soc, &FdSet);
|
||||
}
|
||||
if (SocketState == 0)
|
||||
{
|
||||
if (PollStatus == 0)
|
||||
printf("BDT_ReceiverTask(%d) exiting on client timeout\n", Sock);
|
||||
else
|
||||
printf("BDT_ReceiverTask(%d) exiting on I/O error talking to Client\n", Sock);
|
||||
}
|
||||
else
|
||||
printf("BDT_ReceiverTask(%d) received close from client\n", Sock);
|
||||
|
||||
/* Free up resources */
|
||||
if (Bdt.Name != NoBdtName)
|
||||
free(Bdt.Name);
|
||||
|
||||
close(Sock);
|
||||
semDelete(Bdt.WriteLock);
|
||||
semDelete(Bdt.MonitorLock);
|
||||
return;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
******************************************************************************/
|
||||
#if 0
|
||||
int BDT_SendDelta(int Socket, char *Message)
|
||||
{
|
||||
semTake (DeltaFlagLock, WAIT_FOREVER);
|
||||
if (if (semTake(SocketWriteLock, no wait) == failed)
|
||||
{
|
||||
/* Reader task is busy... Post message for future transmission */
|
||||
Bdt.pending_delta = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
write(Message); /* This COULD block */
|
||||
semGive(SocketWriteLock);
|
||||
}
|
||||
semGive(DeltaFlagLock);
|
||||
return (0);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* This task listens on a port for new connections. When one is made, it
|
||||
* spawns a task to manage it.
|
||||
*
|
||||
******************************************************************************/
|
||||
void BDT_ListenerTask(int Port)
|
||||
{
|
||||
/* Open a socket to listen on */
|
||||
struct sockaddr_in ListenerAddr;
|
||||
struct sockaddr_in ClientAddr;
|
||||
int ListenerSock;
|
||||
int ClientSock;
|
||||
int ClientAddrLen;
|
||||
int SockAddrSize = sizeof(struct sockaddr_in);
|
||||
|
||||
if (Port == 0)
|
||||
Port = BDT_TCP_PORT;
|
||||
|
||||
printf("BDT_Listener(%d) started\n", Port);
|
||||
|
||||
if ((ListenerSock = BdtOpenListenerTCP(Port)) < 0)
|
||||
{
|
||||
printf("BDT_ListenerTask(%d) can't start listener\n", Port);
|
||||
return;
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
ClientAddrLen = sizeof(ClientAddr);
|
||||
if((ClientSock = accept(ListenerSock, (struct sockaddr*)&ClientAddr, &ClientAddrLen)) < 0)
|
||||
{
|
||||
if(errno!=EINTR)
|
||||
{
|
||||
printf("BDT_ListenerTask(%d) accept() failed\n", Port);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Spawn a task to handle the new connection */
|
||||
printf("Accepted a connection\n");
|
||||
taskSpawn("BDT", BDT_TASK_PRIO, BDT_TASK_OPTIONS, BDT_TASK_STACK, (FUNCPTR)BDT_ReceiverTask, ClientSock, 2,3,4,5,6,7,8,9,0);
|
||||
}
|
||||
}
|
||||
/* Never reached */
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* A handy routine to assist in debugging.
|
||||
*
|
||||
******************************************************************************/
|
||||
STATIC int HexDump(char *ReadBuffer, int rbytes)
|
||||
{
|
||||
int c = 0;
|
||||
int i = 0;
|
||||
int firsttime;
|
||||
char ascii[20]; /* To hold printable portion of string */
|
||||
|
||||
if (!rbytes)
|
||||
return(0);
|
||||
|
||||
firsttime = 1;
|
||||
while(c < rbytes)
|
||||
{
|
||||
if ((c % 16) == 0)
|
||||
{
|
||||
if (!firsttime)
|
||||
{
|
||||
ascii[i] = '\0';
|
||||
printf(" *%s*\n", ascii);
|
||||
}
|
||||
firsttime=0;
|
||||
i = 0;
|
||||
}
|
||||
printf(" %02.2X", ReadBuffer[c] & 0xff);
|
||||
ascii[i] = ReadBuffer[c];
|
||||
if (!isprint(ascii[i]))
|
||||
ascii[i] = '.';
|
||||
++i;
|
||||
++c;
|
||||
}
|
||||
while (c%16)
|
||||
{
|
||||
fputs(" ", stdout);
|
||||
++c;
|
||||
}
|
||||
ascii[i] = '\0';
|
||||
printf(" *%s*\n", ascii);
|
||||
return(0);
|
||||
}
|
||||
@@ -1,129 +0,0 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Author: John Winans
|
||||
* Date: 95-06-05
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* $Log$
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <selectLib.h>
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* IOC listener task blocks on accept calls waiting for binders.
|
||||
* If a bind arrives, a receiver task is spawned.
|
||||
*
|
||||
* IOC receiver task blocks on read calls waiting for transactions.
|
||||
* When a transaction arrives it is serviced.
|
||||
* At the end of a transaction service, a response is sent back.
|
||||
* After the response is sent, a chack is made to see if a delta transmission
|
||||
* was blocked by the transaction's use of the socket... if so, it is sent.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#include <vxWorks.h>
|
||||
#include <sys/socket.h>
|
||||
#include <in.h>
|
||||
#include <inetLib.h>
|
||||
#include <taskLib.h>
|
||||
|
||||
#include "bdt.h"
|
||||
|
||||
#define STATIC static
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_NameServiceOk(BDT *Bdt)
|
||||
{
|
||||
printf("BDT_NameServiceOk \n");
|
||||
return(0);
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_NameServiceConnect(BDT *Bdt)
|
||||
{
|
||||
printf("BDT_NameServiceConnect \n");
|
||||
BdtSendHeader(Bdt, BDT_Ok, 0);
|
||||
return(0);
|
||||
}
|
||||
STATIC int BDT_NameServiceError(BDT *Bdt)
|
||||
{
|
||||
printf("BDT_NameServiceError \n");
|
||||
return(0);
|
||||
}
|
||||
STATIC int BDT_NameServiceGet(BDT *Bdt)
|
||||
{
|
||||
printf("BDT_NameServiceGet \n");
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
STATIC int BDT_NameServicePut(BDT *Bdt)
|
||||
{
|
||||
printf("BDT_NameServicePut \n");
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
STATIC int BDT_NameServiceClose(BDT *Bdt)
|
||||
{
|
||||
printf("BDT_NameServiceClose \n");
|
||||
BdtSendHeader(Bdt, BDT_Ok, 0);
|
||||
return(0);
|
||||
}
|
||||
STATIC int BDT_NameServiceMonitor(BDT *Bdt)
|
||||
{
|
||||
printf("BDT_NameServiceMonitor \n");
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
STATIC int BDT_NameServiceValue(BDT *Bdt)
|
||||
{
|
||||
printf("BDT_NameServiceValue \n");
|
||||
return(0);
|
||||
}
|
||||
STATIC int BDT_NameServiceDelta(BDT *Bdt)
|
||||
{
|
||||
printf("BDT_NameServiceDelta \n");
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
STATIC int BDT_NameServiceAdd(BDT *Bdt)
|
||||
{
|
||||
printf("BDT_NameServiceAdd \n");
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
STATIC int BDT_NameServiceDelete(BDT *Bdt)
|
||||
{
|
||||
printf("BDT_NameServiceDelete \n");
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
STATIC int BDT_NameServicePing(BDT *Bdt)
|
||||
{
|
||||
printf("BDT_NameServicePing \n");
|
||||
BdtSendHeader(Bdt, BDT_Ok, 0);
|
||||
return(0);
|
||||
}
|
||||
|
||||
BdtHandlers BDT_ServiceHandler_name =
|
||||
{
|
||||
BDT_NameServiceOk,
|
||||
BDT_NameServiceConnect,
|
||||
BDT_NameServiceError,
|
||||
BDT_NameServiceGet,
|
||||
BDT_NameServicePut,
|
||||
BDT_NameServiceClose,
|
||||
BDT_NameServiceMonitor,
|
||||
BDT_NameServiceValue,
|
||||
BDT_NameServiceDelta,
|
||||
BDT_NameServiceAdd,
|
||||
BDT_NameServiceDelete,
|
||||
BDT_NameServicePing
|
||||
};
|
||||
@@ -1,377 +0,0 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Author: John Winans
|
||||
* Date: 95-06-05
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* $Log$
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#include <vxWorks.h>
|
||||
#include <semLib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <dbCommon.h>
|
||||
#include <dbAccess.h>
|
||||
|
||||
#include "bdt.h"
|
||||
|
||||
#define STATIC static
|
||||
#define MESSAGE_PREFIX "BDT PV server:"
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* These conversion finctions take care of one of the most insane parts
|
||||
* of dealing with database access... having two different interfaces that
|
||||
* have the same named enumerators in two seperate header files... that
|
||||
* therefore can not be both included in the same file.
|
||||
*
|
||||
* This is so bad, I wanted to vomit when typing it in.
|
||||
*
|
||||
******************************************************************************/
|
||||
STATIC int DbrOld2New(int Old)
|
||||
{
|
||||
switch (Old)
|
||||
{
|
||||
case 0: return(DBR_STRING);
|
||||
case 1: return(DBR_SHORT);
|
||||
case 2: return(DBR_FLOAT);
|
||||
case 3: return(DBR_ENUM);
|
||||
case 4: return(DBR_CHAR);
|
||||
case 5: return(DBR_LONG);
|
||||
case 6: return(DBR_DOUBLE);
|
||||
default:
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
|
||||
STATIC int DbrNew2Old(int New)
|
||||
{
|
||||
switch (New)
|
||||
{
|
||||
case DBR_STRING: return(0);
|
||||
case DBR_CHAR: return(4);
|
||||
case DBR_UCHAR: return(4);
|
||||
case DBR_SHORT: return(1);
|
||||
case DBR_USHORT: return(1);
|
||||
case DBR_LONG: return(5);
|
||||
case DBR_ULONG: return(5);
|
||||
case DBR_FLOAT: return(2);
|
||||
case DBR_DOUBLE: return(6);
|
||||
case DBR_ENUM: return(3);
|
||||
default:
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Handle the receipt of an OK message.
|
||||
*
|
||||
* The OK message is received as a confirmation of the last operation. It is
|
||||
* not normally responded to.
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_ServiceOk(BDT *Bdt)
|
||||
{
|
||||
printf("%s got a Ok message\n", MESSAGE_PREFIX);
|
||||
return(0);
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Handle the receipt of a Connect message.
|
||||
*
|
||||
* The Connect is received when a new connection is first made.
|
||||
* Any arguments left in the message body have not yet been read.
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_ServiceConnect(BDT *Bdt)
|
||||
{
|
||||
unsigned char Length;
|
||||
char Buf[100];
|
||||
struct dbAddr *pDbAddr;
|
||||
|
||||
Buf[0] = '\0';
|
||||
if (Bdt->remaining_recv > 0)
|
||||
{
|
||||
BdtReceiveData(Bdt, &Length, 1);
|
||||
if (Length <= sizeof(Buf))
|
||||
{
|
||||
BdtReceiveData(Bdt, Buf, Length);
|
||||
Buf[Length] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("%s Connect message argument list too long\n", MESSAGE_PREFIX);
|
||||
BDT_DiscardMessage(Bdt);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
}
|
||||
#ifdef DEBUG_VERBOSE
|
||||
printf("%s got Connect >%s<\n", MESSAGE_PREFIX, Buf);
|
||||
#endif
|
||||
/* Find the PV in the database */
|
||||
Bdt->pService = malloc(sizeof(struct dbAddr));
|
||||
pDbAddr = (struct dbAddr *)(Bdt->pService);
|
||||
if (dbNameToAddr(Buf, pDbAddr))
|
||||
{
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
free(Bdt->pService);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pDbAddr->dbr_field_type != pDbAddr->field_type)
|
||||
{
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
free(Bdt->pService);
|
||||
}
|
||||
else
|
||||
BdtSendHeader(Bdt, BDT_Ok, 0);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Handle the receipt of an Error message.
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_ServiceError(BDT *Bdt)
|
||||
{
|
||||
printf("%s got a Error message\n", MESSAGE_PREFIX);
|
||||
return(0);
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Handle the receipt of a Get message.
|
||||
*
|
||||
* The response to a Get message is either an Error or a Value:
|
||||
*
|
||||
* Value message body format:
|
||||
* SHORT EPICS data type enumerator (in old format)
|
||||
* LONG Number of elements
|
||||
* CHAR[] Value image
|
||||
*
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_ServiceGet(BDT *Bdt)
|
||||
{
|
||||
void *Buf;
|
||||
struct dbAddr *pDbAddr = (struct dbAddr *)(Bdt->pService);
|
||||
long NumElements;
|
||||
long Size;
|
||||
long l;
|
||||
short OldType;
|
||||
int stat;
|
||||
|
||||
#ifdef DEBUG_VERBOSE
|
||||
printf("%s got a Get message\n", MESSAGE_PREFIX);
|
||||
|
||||
printf("field type=%d, field size=%d, elements=%d\n", pDbAddr->field_type, pDbAddr->field_size, pDbAddr->no_elements);
|
||||
#endif
|
||||
|
||||
OldType = DbrNew2Old(pDbAddr->field_type);
|
||||
if (OldType < 0)
|
||||
{
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
/* Allocate a buffer to hold the response message data */
|
||||
Buf = malloc(pDbAddr->field_size * pDbAddr->no_elements);
|
||||
if (Buf == NULL)
|
||||
{
|
||||
printf("Can't allocate %d-byte buffer for get request to %s\n",
|
||||
pDbAddr->field_size * pDbAddr->no_elements,
|
||||
pDbAddr->precord->name);
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
/* Get the response message data */
|
||||
NumElements = pDbAddr->no_elements;
|
||||
if (stat=dbGetField(pDbAddr, pDbAddr->field_type, Buf, 0, &NumElements, NULL))
|
||||
{
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
#if 0
|
||||
/* Test hack to transfer HUGE buffers */
|
||||
NumElements = pDbAddr->no_elements;
|
||||
#endif
|
||||
/* Send the response message */
|
||||
Size = NumElements * pDbAddr->field_size;
|
||||
BdtSendHeader(Bdt, BDT_Value, Size + sizeof(long) + sizeof(short));
|
||||
BdtSendData(Bdt, &OldType, sizeof(short));
|
||||
BdtSendData(Bdt, &NumElements, sizeof(long));
|
||||
if (Size)
|
||||
BdtSendData(Bdt, Buf, Size);
|
||||
free(Buf);
|
||||
return(0);
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Handle the receipt of a Put message.
|
||||
*
|
||||
* Put message body format:
|
||||
* SHORT EPICS data type enumerator
|
||||
* LONG Number of elements
|
||||
* CHAR[] Value image
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_ServicePut(BDT *Bdt)
|
||||
{
|
||||
long Size;
|
||||
void *Buf;
|
||||
short DbrType;
|
||||
long NumElements;
|
||||
struct dbAddr *pDbAddr = (struct dbAddr *)(Bdt->pService);
|
||||
|
||||
#ifdef DEBUG_VERBOSE
|
||||
printf("%s got a Put message\n", MESSAGE_PREFIX);
|
||||
#endif
|
||||
if (BdtGetResidualRead(Bdt) < 6)
|
||||
{
|
||||
BDT_DiscardMessage(Bdt);
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
if (BdtGetResidualRead(Bdt) == 6)
|
||||
{ /* Do data contents, just toss it */
|
||||
BDT_DiscardMessage(Bdt);
|
||||
BdtSendHeader(Bdt, BDT_Ok, 0);
|
||||
return(0);
|
||||
}
|
||||
Buf = malloc(BdtGetResidualRead(Bdt) - 6);
|
||||
if (Buf == NULL)
|
||||
{
|
||||
printf("Can't allocate %d-byte buffer for put request to %s\n",
|
||||
BdtGetResidualRead(Bdt), pDbAddr->precord->name);
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
BdtReceiveData(Bdt, &DbrType, 2);
|
||||
BdtReceiveData(Bdt, &NumElements, 4);
|
||||
|
||||
#ifdef DEBUG_VERBOSE
|
||||
printf("record field type=%d, field size=%d, elements=%d\n", pDbAddr->field_type, pDbAddr->field_size, pDbAddr->no_elements);
|
||||
printf("message field type=%d, field size=%d, elements=%d total %d\n", DbrType, pDbAddr->field_type ,NumElements, BdtGetResidualRead(Bdt));
|
||||
#endif
|
||||
|
||||
BdtReceiveData(Bdt, Buf, BdtGetResidualRead(Bdt));
|
||||
DbrType = DbrOld2New(DbrType);
|
||||
|
||||
if (DbrType < 0)
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
else if (dbPutField(pDbAddr, DbrType, Buf, NumElements))
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
else
|
||||
BdtSendHeader(Bdt, BDT_Ok, 0);
|
||||
|
||||
free(Buf);
|
||||
return(0);
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Handle the receipt of a Close message.
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_ServiceClose(BDT *Bdt)
|
||||
{
|
||||
printf("%s got a Close message\n", MESSAGE_PREFIX);
|
||||
free(Bdt->pService);
|
||||
BdtSendHeader(Bdt, BDT_Ok, 0);
|
||||
return(1);
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Handle the receipt of a Monitor message.
|
||||
*
|
||||
* Not Supported.
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_ServiceMonitor(BDT *Bdt)
|
||||
{
|
||||
printf("%s got a Monitor message\n", MESSAGE_PREFIX);
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Handle the receipt of a Value message.
|
||||
*
|
||||
* Not Supported.
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_ServiceValue(BDT *Bdt)
|
||||
{
|
||||
printf("%s got a Value message\n", MESSAGE_PREFIX);
|
||||
return(0);
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Handle the receipt of a Delta message.
|
||||
*
|
||||
* Not Supported.
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_ServiceDelta(BDT *Bdt)
|
||||
{
|
||||
printf("%s got a Delta message\n", MESSAGE_PREFIX);
|
||||
BdtSendHeader(Bdt, BDT_Ok, 0);
|
||||
return(0);
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Handle the receipt of an Add message.
|
||||
*
|
||||
* Not Supported.
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_ServiceAdd(BDT *Bdt)
|
||||
{
|
||||
printf("%s got a Add message\n", MESSAGE_PREFIX);
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Handle the receipt of a Delete message.
|
||||
*
|
||||
* Not Supported.
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_ServiceDelete(BDT *Bdt)
|
||||
{
|
||||
printf("%s got a Delete message\n", MESSAGE_PREFIX);
|
||||
BdtSendHeader(Bdt, BDT_Error, 0);
|
||||
return(0);
|
||||
}
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Handle the receipt of a Ping message.
|
||||
*
|
||||
*****************************************************************************/
|
||||
STATIC int BDT_ServicePing(BDT *Bdt)
|
||||
{
|
||||
printf("%s got a Ping message\n", MESSAGE_PREFIX);
|
||||
BdtSendHeader(Bdt, BDT_Ok, 0);
|
||||
return(0);
|
||||
}
|
||||
|
||||
BdtHandlers BDT_ServiceHandler_pv =
|
||||
{
|
||||
BDT_ServiceOk,
|
||||
BDT_ServiceConnect,
|
||||
BDT_ServiceError,
|
||||
BDT_ServiceGet,
|
||||
BDT_ServicePut,
|
||||
BDT_ServiceClose,
|
||||
BDT_ServiceMonitor,
|
||||
BDT_ServiceValue,
|
||||
BDT_ServiceDelta,
|
||||
BDT_ServiceAdd,
|
||||
BDT_ServiceDelete,
|
||||
BDT_ServicePing
|
||||
};
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user