Compare commits
734 Commits
R3.14.0-al
...
R3.14.0-be
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ba1e47fd3 | ||
|
|
5c00f84847 | ||
|
|
e42becdce4 | ||
|
|
7f3eca0394 | ||
|
|
105ecaca8d | ||
|
|
1b24ce1620 | ||
|
|
6352940ce6 | ||
|
|
6ec4eaea40 | ||
|
|
63ea05ecdd | ||
|
|
3566bc7d8d | ||
|
|
792e651d8e | ||
|
|
ee7cc03774 | ||
|
|
a7a87b8d99 | ||
|
|
119e45dc28 | ||
|
|
62954ecf50 | ||
|
|
5bd31e2aa2 | ||
|
|
4675ba5077 | ||
|
|
da917cce37 | ||
|
|
38d5f71072 | ||
|
|
e46a919662 | ||
|
|
8d2eaa9cf5 | ||
|
|
e287eac4c7 | ||
|
|
7b1b2988d7 | ||
|
|
ed88bdd35b | ||
|
|
21f9dd8179 | ||
|
|
f1d7722f80 | ||
|
|
7c4ddfffcd | ||
|
|
f84e7f5df6 | ||
|
|
e16d797011 | ||
|
|
40148ba63b | ||
|
|
114058de02 | ||
|
|
0ed3880913 | ||
|
|
855027654b | ||
|
|
8aff497180 | ||
|
|
e8c12c369c | ||
|
|
5e1804ae94 | ||
|
|
08b16eba09 | ||
|
|
7c186698aa | ||
|
|
8c404fc69e | ||
|
|
06f99426c3 | ||
|
|
739d67853a | ||
|
|
6e86544e20 | ||
|
|
f1d9236ee9 | ||
|
|
a7b06a7588 | ||
|
|
bd73d46620 | ||
|
|
dbc44e58d7 | ||
|
|
61e6a84ae3 | ||
|
|
4cd0787e4d | ||
|
|
3583c70725 | ||
|
|
55c4981d4d | ||
|
|
db6b7367cd | ||
|
|
2123916c45 | ||
|
|
5c353c4fa1 | ||
|
|
864209af1c | ||
|
|
e30a01cab5 | ||
|
|
78239fb213 | ||
|
|
42b8dcc3bf | ||
|
|
218cf86318 | ||
|
|
f770728ed0 | ||
|
|
0422478975 | ||
|
|
d67e8a28c6 | ||
|
|
f26ba7daa6 | ||
|
|
75cf4ebcff | ||
|
|
28282e176d | ||
|
|
7c86082b23 | ||
|
|
978cbb9517 | ||
|
|
39a9682dbe | ||
|
|
e2d2cdf882 | ||
|
|
190914f680 | ||
|
|
7fc0860442 | ||
|
|
f31cbb8a8c | ||
|
|
928f3234f2 | ||
|
|
7b568edc59 | ||
|
|
2cf796ce9b | ||
|
|
4f56353867 | ||
|
|
5555ea4edc | ||
|
|
00d878aff8 | ||
|
|
d707be4c0e | ||
|
|
90b4d40b96 | ||
|
|
2015e37f53 | ||
|
|
e849feeb13 | ||
|
|
28ecb1209f | ||
|
|
af42d394b9 | ||
|
|
8ca27c4b4e | ||
|
|
932813b85e | ||
|
|
659c60fd90 | ||
|
|
475e16ec96 | ||
|
|
17cb74de76 | ||
|
|
19f8326ae0 | ||
|
|
67eb482234 | ||
|
|
bd2f706e0f | ||
|
|
ac07c6a248 | ||
|
|
e27671e8d6 | ||
|
|
37d45a57f3 | ||
|
|
ee4b426a34 | ||
|
|
480129b790 | ||
|
|
d7717d106d | ||
|
|
0c22d38d55 | ||
|
|
75d0fc16e0 | ||
|
|
42e498e2ff | ||
|
|
ba3be45400 | ||
|
|
e8d24da299 | ||
|
|
3843cc0ddb | ||
|
|
06ee15bbfb | ||
|
|
b19e46db7e | ||
|
|
c54518d555 | ||
|
|
deb6813aee | ||
|
|
0080b2d007 | ||
|
|
3eece23175 | ||
|
|
1220439a85 | ||
|
|
34b5548ef1 | ||
|
|
0d9b5ce097 | ||
|
|
ec8a33ea5b | ||
|
|
d4107b4900 | ||
|
|
692c3b64b9 | ||
|
|
8a29c82245 | ||
|
|
c7f8051c84 | ||
|
|
993f3423ee | ||
|
|
26016a2810 | ||
|
|
12ccb0936a | ||
|
|
7eaabd7df2 | ||
|
|
cab1f58df1 | ||
|
|
74f581dce5 | ||
|
|
ec582e8c91 | ||
|
|
8139443186 | ||
|
|
ade7bebfcd | ||
|
|
9a651fe9bf | ||
|
|
cee658604b | ||
|
|
1f21e491ed | ||
|
|
78d663d064 | ||
|
|
c7a82c3ce2 | ||
|
|
0768bb9764 | ||
|
|
0809aa8c8b | ||
|
|
8b0161c463 | ||
|
|
c4b6554964 | ||
|
|
682dbfae7a | ||
|
|
e4a75d4a8c | ||
|
|
878809a164 | ||
|
|
8012642f9b | ||
|
|
ba4df8fd29 | ||
|
|
5b2d1df716 | ||
|
|
2e329813aa | ||
|
|
c5084f15cc | ||
|
|
2cb9e531cc | ||
|
|
4f2c38bb03 | ||
|
|
20ab67691f | ||
|
|
a04d40082c | ||
|
|
e5d3ebaf70 | ||
|
|
322b492f7f | ||
|
|
329d91c595 | ||
|
|
347997bed1 | ||
|
|
f3edc221f3 | ||
|
|
44e8fa75d3 | ||
|
|
bffacccf79 | ||
|
|
ba36f44354 | ||
|
|
d80c01f2b2 | ||
|
|
21f5c8a0de | ||
|
|
bdd20db4f2 | ||
|
|
863b0ebb03 | ||
|
|
7597f551ad | ||
|
|
b7128a8aa2 | ||
|
|
f89f31b505 | ||
|
|
42ecec6b11 | ||
|
|
93d2705002 | ||
|
|
ecd1cafe46 | ||
|
|
296304ca00 | ||
|
|
66e3a3de22 | ||
|
|
38269f4f21 | ||
|
|
0d9df123c6 | ||
|
|
2893c435ac | ||
|
|
bce2df010c | ||
|
|
14d152bcaf | ||
|
|
f280f73a64 | ||
|
|
65871f02e8 | ||
|
|
34d439983d | ||
|
|
29e4cd9f61 | ||
|
|
f855880786 | ||
|
|
01e185e1fa | ||
|
|
c5d3e65511 | ||
|
|
365c82023f | ||
|
|
2891f74d54 | ||
|
|
0fe3dcdbe7 | ||
|
|
28435f8f09 | ||
|
|
0966f06cb9 | ||
|
|
8d7cb4ce1d | ||
|
|
118dcad5b4 | ||
|
|
dbeab43347 | ||
|
|
ce150624fb | ||
|
|
8cdc639fb9 | ||
|
|
0d2922fbcf | ||
|
|
575969a672 | ||
|
|
c51161f7a4 | ||
|
|
87661c57d4 | ||
|
|
c1ae00ab21 | ||
|
|
c5fbd3e8ec | ||
|
|
f7b89d58e9 | ||
|
|
3334174809 | ||
|
|
c39788961e | ||
|
|
a5aa5c1543 | ||
|
|
9f96c98ff3 | ||
|
|
60cd0e880b | ||
|
|
2b9212727f | ||
|
|
cc382a10e0 | ||
|
|
82a6c078a9 | ||
|
|
47779a4492 | ||
|
|
cb22f79e6d | ||
|
|
16aa60586d | ||
|
|
6ce71a7b54 | ||
|
|
cda6791496 | ||
|
|
ccd2eb30bd | ||
|
|
7507eec873 | ||
|
|
eb1a83c71b | ||
|
|
049953e8ac | ||
|
|
bf5ffaf41b | ||
|
|
0afaadb981 | ||
|
|
dcd20fa978 | ||
|
|
6b2ff88e40 | ||
|
|
6426c3093e | ||
|
|
bdd52c1eb4 | ||
|
|
43a5ce763b | ||
|
|
ad819cba65 | ||
|
|
6517109e7e | ||
|
|
3fbee94fde | ||
|
|
c92a488c82 | ||
|
|
81d04e3883 | ||
|
|
98cf88ab66 | ||
|
|
d091596772 | ||
|
|
dce3f534ce | ||
|
|
a4e4cfab7c | ||
|
|
4d4b491517 | ||
|
|
2b246be69b | ||
|
|
d5a587d616 | ||
|
|
1ce15d8137 | ||
|
|
d70f4f718f | ||
|
|
e4da2bf773 | ||
|
|
d7b7747887 | ||
|
|
3a5fbed882 | ||
|
|
4fa81a1ac6 | ||
|
|
7fb6862dfb | ||
|
|
40e476f7b9 | ||
|
|
36770de102 | ||
|
|
56fa1c87e8 | ||
|
|
0c85c515f1 | ||
|
|
07e9ed18bf | ||
|
|
8aa2d63967 | ||
|
|
b136bfa3ed | ||
|
|
8982740d23 | ||
|
|
1c76b5d80a | ||
|
|
40e19e0118 | ||
|
|
becfc8ca3c | ||
|
|
fc1d377622 | ||
|
|
74b5d6093f | ||
|
|
2d662d4d08 | ||
|
|
360841bdc1 | ||
|
|
fe7fb3ba50 | ||
|
|
15a9e07ab2 | ||
|
|
9b876d82dd | ||
|
|
8c103d1cb9 | ||
|
|
abf2b19755 | ||
|
|
d6bbb0f3ef | ||
|
|
34ffeae3eb | ||
|
|
86055bce3d | ||
|
|
e3f86b5cec | ||
|
|
5b6f17f7db | ||
|
|
678818b59f | ||
|
|
f3dc728e89 | ||
|
|
822d4dd79f | ||
|
|
c90112a04c | ||
|
|
9c892d128f | ||
|
|
8ad35f4038 | ||
|
|
6d7cb09151 | ||
|
|
d556e3375c | ||
|
|
5a808ee4d5 | ||
|
|
ab82d8c6fc | ||
|
|
d8eded00c3 | ||
|
|
f9a9010ad2 | ||
|
|
a4144e9675 | ||
|
|
4daac95e18 | ||
|
|
aef70acbb9 | ||
|
|
d4e3b1b626 | ||
|
|
798e5b6d3a | ||
|
|
dd723369fe | ||
|
|
984d8cac2b | ||
|
|
a2cf8335fc | ||
|
|
3235b59641 | ||
|
|
56e9cbfd67 | ||
|
|
0aa19f05bc | ||
|
|
44ff5cf058 | ||
|
|
719340369c | ||
|
|
29218a2a27 | ||
|
|
7af4623511 | ||
|
|
11d2c6b698 | ||
|
|
6eeb8c74a2 | ||
|
|
97d679e350 | ||
|
|
7c753f5383 | ||
|
|
70b49f3ba4 | ||
|
|
fe2b7fd8fc | ||
|
|
1a0bbfb0ca | ||
|
|
16f3eff801 | ||
|
|
91fe7cecfb | ||
|
|
05d89d878e | ||
|
|
2034323254 | ||
|
|
24351032cf | ||
|
|
21b7bf8b6b | ||
|
|
a1b9e58cd0 | ||
|
|
99e5535085 | ||
|
|
937b575ec3 | ||
|
|
b1f414543a | ||
|
|
d69d957ebe | ||
|
|
5e71997d09 | ||
|
|
8f619b5f8d | ||
|
|
6e42c7e3e9 | ||
|
|
48da409965 | ||
|
|
c35b876af4 | ||
|
|
19a8fe6e7b | ||
|
|
d67fcbdb67 | ||
|
|
cc191cddbc | ||
|
|
89d93df035 | ||
|
|
93e745ef83 | ||
|
|
9bbb9c1314 | ||
|
|
217cc10840 | ||
|
|
977299cffd | ||
|
|
f32583bdbd | ||
|
|
625beb2300 | ||
|
|
46bf66f198 | ||
|
|
f77bdc3b54 | ||
|
|
2f50543112 | ||
|
|
2a1d135889 | ||
|
|
48ea56d295 | ||
|
|
b3f2c87697 | ||
|
|
0c9c5c1682 | ||
|
|
224c7494b6 | ||
|
|
9b117a376e | ||
|
|
ce506a77a7 | ||
|
|
81b169f059 | ||
|
|
79d648229e | ||
|
|
dbf7b13e9f | ||
|
|
d19294499c | ||
|
|
d6587ddca1 | ||
|
|
192632eaf2 | ||
|
|
b5322ea925 | ||
|
|
6fad25e2d1 | ||
|
|
cfc8c2b8e0 | ||
|
|
73b3a37881 | ||
|
|
2c71674012 | ||
|
|
6c2303a958 | ||
|
|
331b9b3d8b | ||
|
|
7363d6a125 | ||
|
|
ec6806d071 | ||
|
|
b5c0f11f5f | ||
|
|
634f25873b | ||
|
|
9765db4254 | ||
|
|
4ebb8f4351 | ||
|
|
296d94a2c5 | ||
|
|
355c0313f6 | ||
|
|
4cb9d0b7d8 | ||
|
|
7119b68a3b | ||
|
|
58989fb8e1 | ||
|
|
1d07007562 | ||
|
|
f47210502e | ||
|
|
de4f57cf5c | ||
|
|
6beb555fcc | ||
|
|
cfa8a80ee1 | ||
|
|
cbb5d190f5 | ||
|
|
b05630a986 | ||
|
|
01a63dd7c5 | ||
|
|
9391e3d9cc | ||
|
|
a83f3f9214 | ||
|
|
e661474c44 | ||
|
|
96557512f5 | ||
|
|
758eaede80 | ||
|
|
0205741354 | ||
|
|
2e34ee4829 | ||
|
|
dc50563da0 | ||
|
|
c1e34b85fd | ||
|
|
d0e4a93563 | ||
|
|
cd43af94e1 | ||
|
|
4cb0e2b7cc | ||
|
|
1fab139eca | ||
|
|
cf99837560 | ||
|
|
9989ff73fe | ||
|
|
86d42a8283 | ||
|
|
ba6a096e86 | ||
|
|
11ffedc376 | ||
|
|
452d4df4fb | ||
|
|
b85bdd318b | ||
|
|
464cb4b26b | ||
|
|
33dbdc68a3 | ||
|
|
5930f5b7d9 | ||
|
|
216105deeb | ||
|
|
a5ebba6be3 | ||
|
|
181f1e720f | ||
|
|
9ebaf81de3 | ||
|
|
11e57aa52d | ||
|
|
8a99fac979 | ||
|
|
bbd6c9ef90 | ||
|
|
3712987800 | ||
|
|
e49a919434 | ||
|
|
84007a0b20 | ||
|
|
f11205de68 | ||
|
|
e573c4362f | ||
|
|
ca14e4eabc | ||
|
|
c20c4c5380 | ||
|
|
fd6d55f1ae | ||
|
|
5178220160 | ||
|
|
443f95471e | ||
|
|
bee24cadd8 | ||
|
|
973e8eb0bc | ||
|
|
7c81b6920e | ||
|
|
420d583db2 | ||
|
|
694f21d8b9 | ||
|
|
018f0b5186 | ||
|
|
3031016853 | ||
|
|
ffdecd4a21 | ||
|
|
7df3905b5c | ||
|
|
a6e67869db | ||
|
|
a67444ea1e | ||
|
|
48aac3bc86 | ||
|
|
993fbd06e9 | ||
|
|
4698215212 | ||
|
|
35110d3e88 | ||
|
|
a520078ce2 | ||
|
|
e095b7feba | ||
|
|
13f8bc14ec | ||
|
|
ef54680c9d | ||
|
|
4d3cf68a21 | ||
|
|
dd3baf0ce4 | ||
|
|
57e8a344fc | ||
|
|
9803b24aa9 | ||
|
|
24a08c9c78 | ||
|
|
df9b5703d5 | ||
|
|
d0e047f78f | ||
|
|
d1c39d4089 | ||
|
|
20aebe4460 | ||
|
|
2758df6db2 | ||
|
|
35d23ac6bd | ||
|
|
a29b0fafc7 | ||
|
|
ef4ebf4d4b | ||
|
|
bc0b51dbe4 | ||
|
|
207f25f469 | ||
|
|
c61e68b4e3 | ||
|
|
b061bb6eb9 | ||
|
|
1042e657c8 | ||
|
|
41a2ba5a9b | ||
|
|
f82a4a28d2 | ||
|
|
1403317247 | ||
|
|
2923f64442 | ||
|
|
e5b28e846b | ||
|
|
a16db0ee59 | ||
|
|
ca2c93bda4 | ||
|
|
72cbc5edf0 | ||
|
|
c285cbfa30 | ||
|
|
bab43925ac | ||
|
|
9a1023a5da | ||
|
|
1ac9d69c64 | ||
|
|
94a05a3077 | ||
|
|
a5c339209b | ||
|
|
b1fee9b6e3 | ||
|
|
8ffb5e5fb9 | ||
|
|
71fa55fd2a | ||
|
|
7b54119ff8 | ||
|
|
21dc0da78c | ||
|
|
d36ee2b634 | ||
|
|
7a6a6dc53e | ||
|
|
5640c38032 | ||
|
|
c717ab3aec | ||
|
|
a9f1052b59 | ||
|
|
29b706dd35 | ||
|
|
5a9517cc4c | ||
|
|
803d57042d | ||
|
|
8f07a836f0 | ||
|
|
0eba4833fb | ||
|
|
40ed20bdb1 | ||
|
|
40dab8bd5b | ||
|
|
2b5d0af492 | ||
|
|
5ff1a8f2a3 | ||
|
|
6db46f8890 | ||
|
|
00815ca1c9 | ||
|
|
1fdcd08c9d | ||
|
|
e195df9f32 | ||
|
|
b90c266295 | ||
|
|
185b773419 | ||
|
|
f4f3c931b0 | ||
|
|
ac19d5fba6 | ||
|
|
36e7eb94c0 | ||
|
|
87a3481b2a | ||
|
|
c20ddad7c6 | ||
|
|
f6ea24d417 | ||
|
|
7b16e38974 | ||
|
|
69545bc772 | ||
|
|
22abff43bf | ||
|
|
f7d0bf146c | ||
|
|
61c057df16 | ||
|
|
60173f78cf | ||
|
|
aa8e36e015 | ||
|
|
d7279bbcbf | ||
|
|
a6ceb5a3f1 | ||
|
|
b5e9036e79 | ||
|
|
e76c4287ac | ||
|
|
b1643cf138 | ||
|
|
76cb1ca826 | ||
|
|
384af09c72 | ||
|
|
8dbecc7b16 | ||
|
|
bbd3a45142 | ||
|
|
1e595bfaa6 | ||
|
|
6d9a8de270 | ||
|
|
33e11134e5 | ||
|
|
e4447d8c97 | ||
|
|
d4126b1c80 | ||
|
|
22e9be48ad | ||
|
|
cf7df276ff | ||
|
|
3ac74dd5a8 | ||
|
|
e684ff02eb | ||
|
|
f2332d1bb1 | ||
|
|
ae57d2592e | ||
|
|
da412768fa | ||
|
|
99df1b5584 | ||
|
|
61ff831b2d | ||
|
|
6348395b7f | ||
|
|
13b74464ab | ||
|
|
ab52e91d66 | ||
|
|
843595ed42 | ||
|
|
4cf55705d6 | ||
|
|
d02e01c55b | ||
|
|
8926a0a8b3 | ||
|
|
9a0f0900ce | ||
|
|
5b729b2f31 | ||
|
|
60be389ce0 | ||
|
|
b271bcf8e9 | ||
|
|
89a2c69651 | ||
|
|
3e622f35b2 | ||
|
|
389ed62c33 | ||
|
|
12ea010e4b | ||
|
|
25f6920f1f | ||
|
|
ca76832387 | ||
|
|
759b1a3541 | ||
|
|
9c89eabc84 | ||
|
|
535ead1241 | ||
|
|
28ea1b66a3 | ||
|
|
d5b84741ca | ||
|
|
4375774da3 | ||
|
|
d2c3f80fe4 | ||
|
|
865e4cbc01 | ||
|
|
1688ff923b | ||
|
|
95c23a4784 | ||
|
|
3a4435a70a | ||
|
|
8d1830b8c6 | ||
|
|
8693ee19f9 | ||
|
|
71ccf13585 | ||
|
|
4886ad2b6d | ||
|
|
bbb3b9a432 | ||
|
|
4444b74a58 | ||
|
|
ff76c98aa3 | ||
|
|
87f9c12a77 | ||
|
|
08208e995d | ||
|
|
452ead8a9f | ||
|
|
403c377de8 | ||
|
|
6098b72694 | ||
|
|
5395f95484 | ||
|
|
dd95b5462e | ||
|
|
77a90ccc57 | ||
|
|
24b1da7fff | ||
|
|
2a22727348 | ||
|
|
01b7b23743 | ||
|
|
26a92d3526 | ||
|
|
c6696c209f | ||
|
|
c3cbf1bd2c | ||
|
|
c2a5eef5d4 | ||
|
|
cb0d92aa82 | ||
|
|
d8ca8c6d72 | ||
|
|
fddb0939a4 | ||
|
|
c307a05e81 | ||
|
|
4ae24683fc | ||
|
|
7874d35daf | ||
|
|
06bec39aa7 | ||
|
|
b6479bbc80 | ||
|
|
6a96052fcf | ||
|
|
5e215a944d | ||
|
|
6937cc4075 | ||
|
|
39b28e9bd6 | ||
|
|
fbf5947f15 | ||
|
|
3ede456a0d | ||
|
|
b13d938b11 | ||
|
|
07a767e345 | ||
|
|
1f8d22994c | ||
|
|
54949779a9 | ||
|
|
1611bc40f7 | ||
|
|
d9508ce1e4 | ||
|
|
e4b95a6ae7 | ||
|
|
fde282b967 | ||
|
|
93a8be53d8 | ||
|
|
22b5eca868 | ||
|
|
5d3495485d | ||
|
|
11388a5ad3 | ||
|
|
7be47b2b86 | ||
|
|
4c50314331 | ||
|
|
f49289fdd0 | ||
|
|
2a50d5f897 | ||
|
|
09be73c889 | ||
|
|
b716cca8b0 | ||
|
|
c585721024 | ||
|
|
31a2548d28 | ||
|
|
ba8e61f26a | ||
|
|
75a5891fb0 | ||
|
|
d0438b37a1 | ||
|
|
a456376230 | ||
|
|
d8a5dc3563 | ||
|
|
47757dffaf | ||
|
|
e73613a699 | ||
|
|
b1ca3061a1 | ||
|
|
194435b010 | ||
|
|
0504af338b | ||
|
|
257d4af995 | ||
|
|
2f128e7e39 | ||
|
|
e3203ca468 | ||
|
|
564ca4a6f6 | ||
|
|
4be3cc14a8 | ||
|
|
a7f8f90ddc | ||
|
|
8d1e2327df | ||
|
|
bc0b97556e | ||
|
|
fb7a2d6490 | ||
|
|
eb9b01e118 | ||
|
|
ac587806a0 | ||
|
|
5961325186 | ||
|
|
61e2a3f8ce | ||
|
|
5179d0d505 | ||
|
|
9ecf5a5349 | ||
|
|
13de25e9f4 | ||
|
|
6fbf031e75 | ||
|
|
4a5067b8a6 | ||
|
|
245bd5ab5e | ||
|
|
069e25aa72 | ||
|
|
48aa0b3e45 | ||
|
|
6d5a8b94a6 | ||
|
|
bee3c82735 | ||
|
|
e3a0888cb3 | ||
|
|
e6a9227421 | ||
|
|
f78c134d31 | ||
|
|
7f88505a9a | ||
|
|
0b40765719 | ||
|
|
9940b408fb | ||
|
|
70de17474b | ||
|
|
fa87c186fe | ||
|
|
63c2a025d3 | ||
|
|
13212ddfea | ||
|
|
976ce6a645 | ||
|
|
cf668c6448 | ||
|
|
bc4bd0216e | ||
|
|
6440ee39e8 | ||
|
|
f8cf4a582e | ||
|
|
1f7c046c8f | ||
|
|
f6c9619a48 | ||
|
|
6bd55da631 | ||
|
|
2b0f55ad23 | ||
|
|
430ce13c0e | ||
|
|
f69a2933a9 | ||
|
|
db60073049 | ||
|
|
bf13ffdfe3 | ||
|
|
83a864997d | ||
|
|
5f07d422fd | ||
|
|
f30ceae58b | ||
|
|
4dc395bb24 | ||
|
|
61b049dd46 | ||
|
|
5ba2368b00 | ||
|
|
962f6d08d1 | ||
|
|
a0e4aeba1e | ||
|
|
71b3d962cf | ||
|
|
b4ef480a49 | ||
|
|
0a48ac3a35 | ||
|
|
e14120a25d | ||
|
|
d99fb7029d | ||
|
|
84cd107ad9 | ||
|
|
63a964914d | ||
|
|
a543f647ae | ||
|
|
1e552c57e4 | ||
|
|
aed2fd1f51 | ||
|
|
b8f79c760b | ||
|
|
87a038a379 | ||
|
|
3ec821a74a | ||
|
|
01311de271 | ||
|
|
9549c0dc00 | ||
|
|
b95129d71b | ||
|
|
a4ba05e90c | ||
|
|
f8f306624e | ||
|
|
a1ef63686c | ||
|
|
d7126b0784 | ||
|
|
68f40981a3 | ||
|
|
92d922d446 | ||
|
|
ea74ab6e7a | ||
|
|
057fbc10a0 | ||
|
|
636c028b56 | ||
|
|
90e07a7840 | ||
|
|
f1f5f385bb | ||
|
|
647221079f | ||
|
|
0a3f27c689 | ||
|
|
42aa85a1d9 | ||
|
|
91707b9e92 | ||
|
|
5152152edb | ||
|
|
9f2d93d2d4 | ||
|
|
01c5adc8a7 | ||
|
|
22ec308865 | ||
|
|
e585c60d67 | ||
|
|
452c8d1384 | ||
|
|
00641af25c | ||
|
|
a42a95f60a | ||
|
|
c6d116d1e8 | ||
|
|
1c6767d3f2 | ||
|
|
1e786e3d5a | ||
|
|
03a92021a7 | ||
|
|
7cbc79ff30 | ||
|
|
e20bf02652 | ||
|
|
20e702a629 | ||
|
|
1f52aaf9d6 | ||
|
|
c2ffc9e893 | ||
|
|
eeaf3af7a4 | ||
|
|
a8a86993e3 | ||
|
|
76560ce7c3 | ||
|
|
1ec6f444b7 | ||
|
|
8d5075b441 | ||
|
|
84bec6ceba | ||
|
|
ee60f232c1 | ||
|
|
e73d083131 | ||
|
|
7a56359b73 | ||
|
|
e73d66bbff | ||
|
|
008b125aec | ||
|
|
bfe4d463c1 | ||
|
|
f69a65a4fe | ||
|
|
332a7228a8 | ||
|
|
4b99a3d268 | ||
|
|
c2e6490220 | ||
|
|
aa2516eb85 | ||
|
|
01fd6d5253 | ||
|
|
95806cd1cd | ||
|
|
22df1fb68a |
414
README
Normal file
414
README
Normal file
@@ -0,0 +1,414 @@
|
||||
README
|
||||
|
||||
Installation Instructions
|
||||
|
||||
EPICS base
|
||||
|
||||
Release 3.14.0beta1
|
||||
|
||||
What is EPICS base?
|
||||
|
||||
The Experimental Physics and Industrial Control Systems (EPICS) is
|
||||
an extensible set of software components and tools with which
|
||||
application developers can create a control system. This control system
|
||||
can be used to control accelerators, detectors, telescopes, or other
|
||||
scientific experimental equipment. EPICS base is the set of core
|
||||
software, i.e. the components of EPICS without which EPICS would not
|
||||
function. EPICS base allows an arbitrary number of target systems,
|
||||
IOCs (input/output controllers), and host systems, OPIs (operator
|
||||
interfaces) of various types.
|
||||
|
||||
What is new in this release?
|
||||
|
||||
This version of EPICS base contains significant changes and offers
|
||||
major improvements in functionality over previous versions. Please
|
||||
check the RELEASE_NOTES file in the distribution for description of
|
||||
changes and release migration details.
|
||||
|
||||
Copyright
|
||||
|
||||
Please review the COPYRIGHT* files included in the distribution for
|
||||
legal terms of usage.
|
||||
|
||||
Supported platforms
|
||||
|
||||
Currently this version of EPICS base has been built on the following
|
||||
hosts for the following targets. If you are trying to build EPICS base on a
|
||||
different host or for a different target machine you must get the proper
|
||||
host/target cross compiler and header files and you will have to create
|
||||
and add the appropriate new configure files to the
|
||||
base/configure/os/directory. You can start by copying existing
|
||||
configuration files in the configure/os directory and then make changes
|
||||
for your new platforms.
|
||||
|
||||
Host platforms (operating system - architecture - <alternate c++
|
||||
compiler>)
|
||||
|
||||
solaris-sparc
|
||||
solaris-sparc-gnu
|
||||
linux-x86
|
||||
win32-x86
|
||||
win32-x86-borland
|
||||
|
||||
Cross compile target platforms (operating system - architecture)
|
||||
|
||||
vxWorks-486
|
||||
vxWorks-68040
|
||||
vxWorks-68040lc
|
||||
vxWorks-68060
|
||||
vxWorks-ppc603
|
||||
vxWorks-ppc604
|
||||
vxWorks-pentium
|
||||
RTEMS-gen68360
|
||||
RTEMS-mvme167
|
||||
RTEMS-pc386
|
||||
|
||||
Supported compilers
|
||||
|
||||
This version of EPICS base has been built and tested using the host
|
||||
vendor's C and C++ compilers as well as the GNU gcc and g++
|
||||
compilers. The GNU cross-compilers have been used for all
|
||||
cross-compiled targets. You may need the host vendor's C++ compiler
|
||||
in your search path to do EPICS builds. Check definitions of ACC and
|
||||
CCC in base/configure/os/CONFIG.<host>.<host> or the definitions
|
||||
for GCC and G++ if ANSI=GCC and CPLUSPLUS=GCC are specified
|
||||
in CONFIG_SITE.
|
||||
|
||||
Software requirements
|
||||
|
||||
GNU make
|
||||
You must use GNU make, gnumake, for any EPICS builds. Set your
|
||||
path so that a gnumake version 3.70 or later is available.
|
||||
|
||||
Perl
|
||||
You must have perl version 5.0 or later installed. The configure files do
|
||||
not specify the perl full pathname. You need the perl executable in
|
||||
your search path.
|
||||
|
||||
Unzip and tar (Winzip on WIN32 systems)
|
||||
You must have tools available to unzip and untar the EPICS base
|
||||
distribution file.
|
||||
|
||||
Tornado 2.0
|
||||
You must have Tornado 2.0 installed if any of your target systems are
|
||||
vxWorks systems. Tornado 2.0 provides the cross-compiler and header
|
||||
files needed to build for these target systems. The full path location to
|
||||
Tornado 2.0 must be specified in the base/configure/RELEASE or
|
||||
base/configure/RELEASE.<hostarch> file. You will also need one or
|
||||
more board support packages. Consult the vxWorks documentation for
|
||||
details.
|
||||
|
||||
Optional GNU compiler requirement for solaris-sparc and
|
||||
win32-x86 hosts
|
||||
If you have state notation language source files (*.st files) which require
|
||||
c preprocessing before conversion to c source, gcc must be in your path.
|
||||
|
||||
Host system storage requirements
|
||||
|
||||
The GNU zipped tar file is approximately 1.4 MB in size. The unzipped
|
||||
untarred distribution source tree is approximately 6 MB. The build
|
||||
created files for each host take approximately 40 MB and the build
|
||||
created files for each target take approximately 10 MB.
|
||||
|
||||
Documentation
|
||||
|
||||
EPICS documentation is available on the WWW via the EPICS home
|
||||
page at APS: URL http://www.aps.anl.gov/Epics
|
||||
|
||||
This README.htm is in the base distribution file and will be available
|
||||
on the IOC software R3.14 EPICS WWW page which can be accessed
|
||||
from the APS EPICS home page.
|
||||
|
||||
WWW pages
|
||||
|
||||
EPICS home page at APS
|
||||
|
||||
http://www.aps.anl.gov/epics
|
||||
|
||||
Other WWW sites
|
||||
|
||||
Additional information on EPICS can be found at the
|
||||
various other WWW links on the EPICS home page at APS.
|
||||
|
||||
Mailing Lists
|
||||
|
||||
There are five EPICS mailing lists provided by APS. See The
|
||||
EPICS home page for subscription instructions.
|
||||
|
||||
Directory Structure
|
||||
|
||||
Distribution directory structure:
|
||||
|
||||
base Root directory of the base istribution
|
||||
base/config R3.13 compatibility build configuration files
|
||||
base/config/tools Perl and shell scripts used in the R3.13 build
|
||||
base/configure Operating system independent build config files
|
||||
base/configure/os Operating system dependent build config files
|
||||
base/configure/tools Perl and shell scripts used in the build
|
||||
base/copyright Text files describing software copyrights
|
||||
base/src All epics base source code in subdirectories
|
||||
base/src/as Access security
|
||||
base/src/bpt Break point table
|
||||
base/src/ca Channel access
|
||||
base/src/cas Channel access server
|
||||
base/src/db Database access
|
||||
base/src/db/test Database access tests
|
||||
base/src/dbStatic Static database access
|
||||
base/src/dbtools Database dbLoadTemplate tools
|
||||
base/src/dev Device support (softDev and testDev)
|
||||
base/src/gdd General data descriptor
|
||||
base/src/iocsh Ioc shell command interpreter
|
||||
base/src/libCom General purpose library code in subdirectories
|
||||
base/src/libCom/bucketLib Hash bucket
|
||||
base/src/libCom/calc Algebraic expression interpreter
|
||||
base/src/libCom/cvtFast Fast number to string conversion
|
||||
base/src/libCom/cxxTemplates C++ templates and templates tests
|
||||
base/src/libCom/dbmf Memory management for frequent alloc/free
|
||||
base/src/libCom/ellLib EPICS double linked list
|
||||
base/src/libCom/env Default EPICS environment settings
|
||||
base/src/libCom/error Error handling definitions and routines
|
||||
base/src/libCom/fdmgr File descriptor manager
|
||||
base/src/libCom/freeList Memory management using free lists
|
||||
base/src/libCom/gpHash General purpose hash table
|
||||
base/src/libCom/logClient Logging client
|
||||
base/src/libCom/macLib Macro substitution handler
|
||||
base/src/libCom/misc Miscellaneous utilities
|
||||
base/src/libCom/osi Operating system independent code
|
||||
base/src/libCom/osi/os Operating system dependant code in subdirectories
|
||||
base/src/libCom/taskwd Task watchdog
|
||||
base/src/libCom/test Test tools (timer, semBinary, semMutex,fdmgr, ?)
|
||||
base/src/libCom/timer Timer
|
||||
base/src/libCom/tsDefs R3.13 time stamp definitions and routines
|
||||
base/src/libCom/ring ringPointer: First in first out circular buffers
|
||||
base/src/libCom/cppStd epicsList: Lists of pointers to objects
|
||||
base/src/makeBaseApp Perl tool+templates to create ioc app dvl tree
|
||||
base/src/makeBaseExt Perl tool+templates to create extension dvl tree
|
||||
base/src/misc Miscellaneous (coreRelease, iocInit, asSub*)
|
||||
base/src/rec Record support
|
||||
base/src/registry EPICS support function registry
|
||||
base/src/rsrv Channel access ioc resource server library
|
||||
base/src/toolsComm Code for the build tools antelope and e_flex
|
||||
base/src/util Utilities (ca_test, iocLogServer, startCArepeater)
|
||||
base/src/vxWorks R3.13 compatibility code specific to vxWorks
|
||||
base/startup Scripts for setting up path and environment
|
||||
|
||||
Install directories created by the build:
|
||||
|
||||
base/bin Installed scripts and executables in subdirs
|
||||
base/lib Installed libraries in arch subdirectories
|
||||
base/dbd Installed data base definitions
|
||||
base/include Installed header files
|
||||
base/include/os Installed os specific header files
|
||||
base/templates Installed templates
|
||||
|
||||
Build related components
|
||||
|
||||
base/README* files
|
||||
README.htm Instructions for setup and building epics base
|
||||
(i.e. this document)
|
||||
README.WIN32 Microsoft WIN32 specific instructions
|
||||
README.cxxTemplates Information about C++ templates in EPICS base
|
||||
README.niCpu030 NI cpu030 specific instructions
|
||||
|
||||
base/startup directory - contains scripts to set environment and path
|
||||
EpicsHostArch c shell script to set EPICS_HOST_ARCH env variable
|
||||
EpicsHostArch.pl perl script to set EPICS_HOST_ARCH env variable
|
||||
Site.profile bourne shell script to set path and env variables
|
||||
Site.cshrc c shell script to set path and env variables
|
||||
borland.bat WIN32 bat file to set path and env variables
|
||||
win32.bat WIN32 bat file to set path and env variables
|
||||
|
||||
base/configure directory - contains build definitions and rules
|
||||
CONFIG.CrossCommon Cross build definitions
|
||||
CONFIG.gnuCommon Gnu compiler build definitions for all archs
|
||||
CONFIG_ADDONS Definitions for <osclass> and DEFAULT options
|
||||
CONFIG_BASE EPICS base tool and location definitions
|
||||
CONFIG_BASE_VERSION Definitions for EPICS base version number
|
||||
CONFIG_COMMON Definitions common to all builds
|
||||
CONFIG_ENV Definitions of EPICS environment variables
|
||||
CONFIG_SITE Site specific make defintions
|
||||
CONFIG_SITE_ENV Site defaults for EPICS environment variables
|
||||
CONFIG Includes configure files and allows variable overrides
|
||||
RELEASE Location of external products such as Tornado II
|
||||
RULES Includes appropriate rules file
|
||||
RULES.Db Rules for database and database definition files
|
||||
RULES_ARCHS Definitions and rules for building architectures
|
||||
RULES_BUILD Build and install rules and definitions
|
||||
RULES_DIRS Definitions and rules for building subdirectories
|
||||
RULES_JAVA Definitions and rules for java jars and classes
|
||||
RULES_TOP Rules specific to a <top> dir (uninstall and tar)
|
||||
Sample.Makefile Sample makefile with comments
|
||||
|
||||
base/configure/os directory - contains os-arch specific definitions
|
||||
CONFIG.<host>.<target> Specific host-target build definitions
|
||||
CONFIG.Common.<target> Specific target definitions for all hosts
|
||||
CONFIG.<host>.Common Specific host definitions for all targets
|
||||
CONFIG.UnixCommon.Common Definitions for Unix hosts and all target
|
||||
CONFIG.<host>.vxWorksCommon Specific host definitions for all vx targets
|
||||
CONFIG_COMPAT R3.13 arch compatibility definitions
|
||||
CONFIG_SITE.<host>.<target> Site specific host-target definitions
|
||||
CONFIG_SITE.Common.<target> Site specific target defs for all hosts
|
||||
CONFIG_SITE.<host>.Common Site specific host defs for all targets
|
||||
|
||||
base/configure/tools directory - contains Perl scripts used for the build
|
||||
MakeReleae Unix shell script to create a release tar file
|
||||
convertRelease.pl Performs consistancy checks on RELEASE files
|
||||
cp.pl This Perl script copies an existing file
|
||||
installEpics.pl Installs built files into install directories.
|
||||
makeDependsTargets.pl Creates targets of include dependency files
|
||||
makeMakefile.pl Creates a Makefile in O.<arch> dirs
|
||||
makeMakefileInclude.pl Creates file to be included by Makefile
|
||||
mkdir.pl Creates a directory (like Unix mkdir)
|
||||
mkmf.pl Generates dependencies from include stmnts
|
||||
munch.pl Creates a ctdt.c file for vxWorks targets
|
||||
mv.pl Renames an existing file.
|
||||
replaceVAR.pl Changes CapFast VAR(xxx) to $(xxx) notation
|
||||
rm.pl Quietly removes an existing file.
|
||||
|
||||
Building EPICS base (Unix and Win32)
|
||||
|
||||
Unpack file
|
||||
|
||||
Unzip and untar the distribution file. Use WinZip on
|
||||
Windows systems.
|
||||
|
||||
Set environment variable
|
||||
|
||||
Files in the base/startup directory have been provided to help
|
||||
set required path and other environment variables .
|
||||
|
||||
EPICS_HOST_ARCH
|
||||
Before you can build or use EPICS R3.14, the environment
|
||||
variable EPICS_HOST_ARCH must be defined. A perl
|
||||
script EpicsHostArch.pl in the base/startup directory has
|
||||
been provided to help set EPICS_HOST_ARCH. You should
|
||||
have EPICS_HOST_ARCH set to your host operating
|
||||
system followed by a dash and then your host architecture,
|
||||
e.g. solaris-sparc. If you are not using the OS vendor's
|
||||
c/c++ compiler for host builds, you will need another dash
|
||||
followed by the alternate compiler name (e.g. "-gnu" for GNU
|
||||
c/c++ compilers on a solaris host or "-borland" for Borland
|
||||
c/c++ compilers on a WIN32 host) . See configure/CONFIG_SITE
|
||||
for a list of supported EPICS_HOST_ARCH values.
|
||||
|
||||
PERLLIB
|
||||
On WIN32, some versions of Perl require that the
|
||||
environment variable PERLLIB be set to <perl directory
|
||||
location>.
|
||||
|
||||
PATH
|
||||
As already mentioned, you must have the perl executable
|
||||
and you may need C and C++ compilers in your search path.
|
||||
For building base you also must have echo in your search
|
||||
path. For Unix host builds you also need touch, cpp, cp, rm,
|
||||
mv, and mkdir in your search path and /bin/chmod must
|
||||
exist. On some Unix systems you may also need ar and ranlib
|
||||
in your path, and the c compiler may require ld in your path.
|
||||
|
||||
Unix LD_LIBRARY_PATH
|
||||
If you plan to build EPICS base shared libraries instead of
|
||||
archive libraries, on Unix systems you will need to add
|
||||
fullpathname to $(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH) to
|
||||
your LD_LIBRARY_PATH environment variable.
|
||||
|
||||
Win32 PATH
|
||||
On WIN32 systems, building shared libraries is the default
|
||||
setting and you will need to add fullpathname to
|
||||
$(INSTALL_LOCATION)/bin/$(EPICS_HOST_ARCH) to your path.
|
||||
Building shared libraries is determined by the value of the
|
||||
macro SHARED_LIBRARIES in CONFIG_SITE (either YES or NO).
|
||||
|
||||
|
||||
Do site-specific build configuration
|
||||
|
||||
Site configuration
|
||||
To configure EPICS, you may want to modify the default
|
||||
definitions in the following files:
|
||||
|
||||
configure/CONFIG_SITE Build choices. Specify target archs.
|
||||
configure/CONFIG_SITE_ENV Environment variable defaults
|
||||
configure/RELEASE TORNADO 2 full path location
|
||||
|
||||
Host configuration
|
||||
To configure each host system, you may override the default
|
||||
definitions by adding a new file with override definitions into
|
||||
the configure/os directory. The new file should have the
|
||||
same name as the distribution file to be overridden except
|
||||
with CONFIG in the name changed to CONFIG_SITE.
|
||||
|
||||
configure/os/CONFIG.<host>.<host> - Host build settings
|
||||
configure/os/CONFIG.<host>.Common - Host cross build settings
|
||||
|
||||
Target configuration
|
||||
To configure each target system, you may override the
|
||||
default definitions by adding a new file with override
|
||||
definitions into the configure/os directory. The new file
|
||||
should have the same name as the distribution file to be
|
||||
overridden except with CONFIG in the name replaced by
|
||||
CONFIG_SITE.
|
||||
|
||||
configure/os/CONFIG.Common.<target> - Target cross settings
|
||||
configure/os/CONFIG.<host>.<target> - Host-target settings
|
||||
|
||||
R3.13 compatibility configuration
|
||||
To configure EPICS base for building with R3.13 extensions
|
||||
and ioc applications, you must modify the default definitions
|
||||
in the base/config/CONFIG_SITE* files to agree with definitions
|
||||
you made in base/configure and base/configure/os files.
|
||||
|
||||
Build EPICS base
|
||||
|
||||
After configuring the build you should be able to build
|
||||
EPICS base by issuing the following commands in the
|
||||
distribution's root directory (base)
|
||||
|
||||
gnumake clean uninstall
|
||||
gnumake
|
||||
|
||||
The command "gnumake clean uninstall" will remove all
|
||||
files and directories generated by a previous build. The
|
||||
command "gnumake" will build and install everything for
|
||||
the configured host and targets.
|
||||
It is recommended that you do a "gnumake clean uninstall"
|
||||
at the root directory of an EPICS directory structure before
|
||||
each complete rebuild to ensure that all components will be
|
||||
rebuilt.
|
||||
|
||||
Multiple host platforms
|
||||
|
||||
You can build using a single EPICS directory structure on multiple host
|
||||
systems and for multiple cross target systems. The intermediate and
|
||||
binary files generated by the build will be created in separate
|
||||
subdirectories and installed into the appropriate separate host/target
|
||||
install directories. EPICS executables and perl scripts are installed
|
||||
into the $(INSTALL_LOCATION)/bin/<arch> directories. Libraries are
|
||||
installed into $(INSTALL_LOCATION)/lib/<arch>. The default
|
||||
definition for $(INSTALL_LOCATION) is $(TOP) which is the root
|
||||
directory in the distribution directory structure, base. Created object
|
||||
files are stored in O.<arch> source subdirectories, This allows objects
|
||||
for multiple cross target architectures to be maintained at the same
|
||||
time. To build EPICS base for a specific host/target combination you
|
||||
must have the proper host/target c/c++ cross compiler and target header
|
||||
files and the base/configure/os directory must have the appropriate
|
||||
configure files.
|
||||
|
||||
Example application and extension
|
||||
|
||||
A perl tool, makeBaseApp.pl is included in the distribution file. This
|
||||
script will create a sample application that can be built and then
|
||||
executed to try out this release of base. Also, a perl script,
|
||||
makeBaseExt.pl, is included in the distribution file. This script will
|
||||
create a sample extension that can be built and executed. The
|
||||
makeBaseApp.pl and makeBaseExt.pl scripts are installed into the
|
||||
install location bin/<hostarch> directory during the base build.
|
||||
|
||||
Instructions for building and executing the 3.14 example application
|
||||
can be found in the section "Example Application" of Chapter 2, "New
|
||||
Features for 3.14", in the "IOC Application Developer's Guide
|
||||
R3.14.0beta1". The "Example Application" section briefly explains
|
||||
how to create and build an example application in a user created <top>
|
||||
directory. It also explains how to run the example application on a
|
||||
vxWorks ioc or a host system and run an example channel access client
|
||||
on the host system.
|
||||
|
||||
|
||||
59
README.WIN32
59
README.WIN32
@@ -1,8 +1,8 @@
|
||||
|
||||
Compiling EPICS and Building IOC Applications on WIN32 (Windows95/NT)
|
||||
Compiling EPICS and Building IOC Applications on win32-x86 (Windows95/NT)
|
||||
---------------------------------------------------------------------
|
||||
|
||||
Original port of EPICS base to WIN32 (Windows95/NT)
|
||||
Original port of EPICS base build system to WIN32 (Windows95/NT)
|
||||
was done by Kay-Uwe Kasemir 11/96
|
||||
|
||||
please mail questions, comments, corrections, additional examples, etc
|
||||
@@ -11,9 +11,9 @@ please mail questions, comments, corrections, additional examples, etc
|
||||
0) what you will get
|
||||
--------------------
|
||||
|
||||
Right now this port of EPICS to WIN32 should allow you to
|
||||
Right now this port of EPICS to win32-x86 should allow you to
|
||||
|
||||
* compile almost all of EPICS base using {Tornado, MS Visual C, perl,
|
||||
* compile 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, ...),
|
||||
@@ -23,16 +23,16 @@ Right now this port of EPICS to WIN32 should allow you to
|
||||
* 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.
|
||||
|
||||
To build only for WIN32 and not cross compile for IOC development type
|
||||
"make host" or in your config files set "CROSS_COMPILER_HOST_ARCHS=void"
|
||||
* build gdd, cas and a demo of the new portable CA server on win32-x86.
|
||||
|
||||
To build only for win32-x86 and not cross compile for IOC development type
|
||||
"make win32-x86" or in your configure/CONFIG_SITE file set
|
||||
"CROSS_COMPILER_HOST_ARCHS="
|
||||
|
||||
1) see what you have
|
||||
--------------------
|
||||
|
||||
To compile EPICS on WIN32, we need
|
||||
To compile EPICS on win32-x86, we need
|
||||
|
||||
WindRiver System's Tornado (used: 1.0) (not required if host only build)
|
||||
Microsoft's Visual C/C++ (used: 6.0) (borland C++ rumored to work also)
|
||||
@@ -51,7 +51,7 @@ If you cannot/don't want to find them, contact me, please!
|
||||
(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 the following
|
||||
When setting paths in the EPICS CONFIG files for win32-x86 the following
|
||||
are hints in case you have trouble. You should not need to worry about
|
||||
this unless you type a path into one of the EPICS config files that
|
||||
includes a "\". In most situations gnu make, windows NT, the MS compiler,
|
||||
@@ -66,7 +66,7 @@ and the MS linker will accept "/" and this will result in less trouble.
|
||||
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,
|
||||
** win32-x86 will generally allow "/" and "\" interchangeably in file paths,
|
||||
but the DOS shell only accepts "\".
|
||||
|
||||
** Certain command line utilities such as the MS linker are known to in rare
|
||||
@@ -75,7 +75,7 @@ and the MS linker will accept "/" and this will result in less trouble.
|
||||
the bulk of our experience indicates that this is not the necessary.
|
||||
|
||||
Your path should include:
|
||||
- The EPICS-binaries that we are about to build in <EPICS>base/bin/WIN32
|
||||
- The EPICS-binaries that we are about to build in <EPICS>base/bin/win32-x86
|
||||
- The System (for me it's in NT40...)
|
||||
- The MS Visual C compiler binaries
|
||||
|
||||
@@ -108,7 +108,7 @@ 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)
|
||||
EPICS_HOST_ARCH=win32-x86 (used by the make system)
|
||||
|
||||
Set the "TMP" environment variable if you need to specify where
|
||||
temporary files are created.
|
||||
@@ -139,7 +139,7 @@ Prepare apx. 2 ltr. Tee and type:
|
||||
Watch for errors and send them to me.
|
||||
|
||||
Known problems:
|
||||
* gnumake seems to be faster than WIN32 sometimes
|
||||
* gnumake seems to be faster than win32-x86 sometimes
|
||||
which results in warnings/errors like
|
||||
"file has modification date in the future"
|
||||
for newly created things.
|
||||
@@ -150,7 +150,7 @@ Known problems:
|
||||
WIN32 is WIN32, not win32. Gnumake fails
|
||||
if e.g. base/src/include/os/WIN32 is ...win32.
|
||||
|
||||
4) Creating EPICS IOC applications under WIN32
|
||||
4) Creating EPICS IOC applications under win32-x86
|
||||
|
||||
o create application development folder
|
||||
|
||||
@@ -192,8 +192,27 @@ in a visual C++ make file project: "kill caRepeater.exe&make -C ..". Be careful
|
||||
not to introduce additional spaces around the &. The kill.exe command is in the
|
||||
NT resource kit.
|
||||
|
||||
6) When compiling applications that link with EPICS base you will need to
|
||||
include from <epics>\base\include, include from <epics>\base\include\os\win32,
|
||||
and augment the link path with <epics>\base\lib\win32-x86. If the visual C++
|
||||
/Za option is not used then you will also need to define __STDC__ to be zero
|
||||
on the command line.
|
||||
6) Issues that you should be aware of if you are building code that
|
||||
calls EPICS, but you are not using the EPICS build system.
|
||||
|
||||
6a) You will need to include header files from the following paths.
|
||||
<epics>\base\include
|
||||
<epics>\base\include\os\win32
|
||||
6b) You will need to link with the following path in effect.
|
||||
<epics>\base\lib\win32-x86.
|
||||
6c) If the visual C++ /Za option is not used then you will also need to define
|
||||
__STDC__ to be zero on the command line so that EPICS headers will know that
|
||||
a ANSI standard C compiler is in use.
|
||||
6d) If you link with EPICS object libraries then specify /MT or /MTd
|
||||
depending on whether EPICS base and your code are built for debugging.
|
||||
This specifies the multithreaded operating environment required by EPICS.
|
||||
This will also not define _DLL and therefore the EPICS header files will
|
||||
not specify that sharable libraries are being called. EPICS object library
|
||||
names follow the convention "xxxObj.lib".
|
||||
6e) If you link with EPICS shareable libraries (with DLLs) then you must
|
||||
use /MDd or /MD depending on whether EPICS base and your code are
|
||||
built for debugging. This specifies the multithreaded operating environment
|
||||
required by EPICS. This will also define _DLL and therefore the EPICS header
|
||||
files will specify an optimized calling convention for shareable libraries.
|
||||
EPICS shareable libraries (DLL) names follow the convention "xxx.lib"
|
||||
and "xxx.dll".
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
|
||||
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
|
||||
|
||||
|
||||
176
README.htm
176
README.htm
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta name="Author" content="jba">
|
||||
<meta name="GENERATOR" content="Mozilla/4.76 [en] (X11; U; SunOS 5.8 sun4u) [Netscape]">
|
||||
<meta name="GENERATOR" content="Mozilla/4.77 [en] (X11; U; SunOS 5.8 sun4u) [Netscape]">
|
||||
</head>
|
||||
<body>
|
||||
README.htm
|
||||
@@ -17,7 +17,7 @@ EPICS base</h2></center>
|
||||
|
||||
<center>
|
||||
<h2>
|
||||
Release 3.14.0alpha2</h2></center>
|
||||
Release 3.14.0beta1</h2></center>
|
||||
|
||||
<h3>
|
||||
What is EPICS base?</h3>
|
||||
@@ -75,6 +75,7 @@ Cross compile target platforms (operating system - architecture)</h4>
|
||||
<br><tt>vxWorks-68040</tt>
|
||||
<br><tt>vxWorks-68040lc</tt>
|
||||
<br><tt>vxWorks-68060</tt>
|
||||
<br><tt>vxWorks-ppc603</tt>
|
||||
<br><tt>vxWorks-ppc604</tt>
|
||||
<br><tt>vxWorks-pentium</tt>
|
||||
<br><tt>RTEMS-gen68360</tt>
|
||||
@@ -115,11 +116,9 @@ file. You will also need one or more board support packages. Consult the
|
||||
vxWorks documentation for details.
|
||||
<p><b>Optional GNU compiler requirement for solaris-sparc and win32-x86
|
||||
hosts</b>
|
||||
<br>If you wish to run "gnumake depends" to create header dependancy
|
||||
include files for c/c++ source code, g++ must be be in your path. Also,
|
||||
if you have state notation language source files (*.st files) which require
|
||||
c preprocessing before conversion to c source, gcc must be in your
|
||||
path.</blockquote>
|
||||
<br>If you have state notation language source files (*.st files) which
|
||||
require c preprocessing before conversion to c source, gcc must be
|
||||
in your path.</blockquote>
|
||||
|
||||
<h3>
|
||||
Host system storage requirements</h3>
|
||||
@@ -166,15 +165,19 @@ Directory Structure</h3>
|
||||
|
||||
<blockquote>Distribution directory structure:</blockquote>
|
||||
<tt> base
|
||||
Root directory of the base distribution</tt>
|
||||
Root directory of the base istribution</tt>
|
||||
<br><tt> base/config
|
||||
R3.13 compatibility build configuration files</tt>
|
||||
<br><tt> base/config/tools
|
||||
Perl and shell scripts used in the R3.13 build</tt>
|
||||
<br><tt> base/configure
|
||||
Operating system independent build config files</tt>
|
||||
<br><tt> base/configure/os
|
||||
Operating system dependent build config files</tt>
|
||||
<br><tt> base/configure/tools
|
||||
Perl and shell scripts used in the build</tt>
|
||||
<br><tt> base/config
|
||||
R3.13 compatibility build configuration files</tt>
|
||||
<br><tt> base/copyright
|
||||
Text files describing software copyrights</tt>
|
||||
<br><tt> base/src
|
||||
All epics base source code in subdirectories</tt>
|
||||
<br><tt> base/src/as
|
||||
@@ -187,12 +190,14 @@ Channel access</tt>
|
||||
Channel access server</tt>
|
||||
<br><tt> base/src/db
|
||||
Database access</tt>
|
||||
<br><tt> base/src/db/test
|
||||
Database access tests</tt>
|
||||
<br><tt> base/src/dbStatic
|
||||
Static database access</tt>
|
||||
<br><tt> base/src/dbtools
|
||||
Database dbLoadTemplate tools</tt>
|
||||
<br><tt> base/src/dev
|
||||
Device support</tt>
|
||||
Device support (softDev and testDev)</tt>
|
||||
<br><tt> base/src/gdd
|
||||
General data descriptor</tt>
|
||||
<br><tt> base/src/iocsh
|
||||
@@ -205,7 +210,8 @@ Hash bucket</tt>
|
||||
Algebraic expression interpreter</tt>
|
||||
<br><tt> base/src/libCom/cvtFast
|
||||
Fast number to string conversion</tt>
|
||||
<br><tt> base/src/libCom/cxxTemplates C++ templates</tt>
|
||||
<br><tt> base/src/libCom/cxxTemplates C++ templates
|
||||
and templates tests</tt>
|
||||
<br><tt> base/src/libCom/dbmf
|
||||
Memory management for frequent alloc/free</tt>
|
||||
<br><tt> base/src/libCom/ellLib
|
||||
@@ -230,16 +236,20 @@ Miscellaneous utilities</tt>
|
||||
Operating system independent code</tt>
|
||||
<br><tt> base/src/libCom/osi/os
|
||||
Operating system dependant code in subdirectories</tt>
|
||||
<br><tt> base/src/libCom/taskwd
|
||||
Task watchdog</tt>
|
||||
<br><tt> base/src/libCom/test
|
||||
Test tools (timer, semBinary, semMutex,fdmgr, ?)</tt>
|
||||
<br><tt> base/src/libCom/timer
|
||||
Timer</tt>
|
||||
<br><tt> base/src/libCom/taskwd
|
||||
Task watchdog</tt>
|
||||
<br><tt> base/src/libCompat
|
||||
EPICS base R3.13 compatibility code</tt>
|
||||
<br><tt> base/src/libCom/tsDefs
|
||||
R3.13 time stamp definitions and routines</tt>
|
||||
<br><tt> base/src/libCom/ring
|
||||
ringPointer: First in first out circular buffers</tt>
|
||||
<br><tt> base/src/libCom/cppStd
|
||||
epicsList: Lists of pointers to objects</tt>
|
||||
<br><tt> base/src/makeBaseApp
|
||||
Perl tool+templates to create app dvl tree</tt>
|
||||
Perl tool+templates to create ioc app dvl tree</tt>
|
||||
<br><tt> base/src/makeBaseExt
|
||||
Perl tool+templates to create extension dvl tree</tt>
|
||||
<br><tt> base/src/misc
|
||||
@@ -258,8 +268,9 @@ Utilities (ca_test, iocLogServer, startCArepeater)</tt>
|
||||
R3.13 compatibility code specific to vxWorks</tt>
|
||||
<br><tt> base/startup
|
||||
Scripts for setting up path and environment</tt>
|
||||
<p><tt> Install directories created by the build</tt>
|
||||
<br><tt> base/bin
|
||||
<p><tt> </tt>Install directories created by the
|
||||
build:
|
||||
<p><tt> base/bin
|
||||
Installed scripts and executables in subdirs</tt>
|
||||
<br><tt> base/lib
|
||||
Installed libraries in arch subdirectories</tt>
|
||||
@@ -309,6 +320,8 @@ WIN32 bat file to set path and env variables</tt>
|
||||
base/configure directory - contains build definitions and rules</li>
|
||||
|
||||
<br><tt>CONFIG.CrossCommon Cross build definitions</tt>
|
||||
<br><tt>CONFIG.gnuCommon Gnu compiler build
|
||||
definitions for all archs</tt>
|
||||
<br><tt>CONFIG_ADDONS Definitions
|
||||
for <osclass> and DEFAULT options</tt>
|
||||
<br><tt>CONFIG_BASE
|
||||
@@ -341,6 +354,8 @@ Definitions and rules for building subdirectories</tt>
|
||||
Definitions and rules for java jars and classes</tt>
|
||||
<br><tt>RULES_TOP
|
||||
Rules specific to a <top> dir (uninstall and tar)</tt>
|
||||
<br><tt>Sample.Makefile Sample makefile
|
||||
with comments</tt>
|
||||
<br>
|
||||
<li>
|
||||
base/configure/os directory - contains os-arch specific definitions</li>
|
||||
@@ -357,24 +372,32 @@ hosts and all target</tt>
|
||||
vx targets</tt>
|
||||
<br><tt>CONFIG_COMPAT
|
||||
R3.13 arch compatibility definitions</tt>
|
||||
<br><tt>CONFIG_SITE.<host>.<target> Site specific host-target definitions</tt>
|
||||
<br><tt>CONFIG_SITE.Common.<target> Site specific target defs for all
|
||||
hosts</tt>
|
||||
<br><tt>CONFIG_SITE.<host>.Common Site specific host defs
|
||||
for all targets</tt>
|
||||
<br>
|
||||
<li>
|
||||
base/configure/tools directory - contains Perl scripts used for the build</li>
|
||||
|
||||
<br><tt>MakeReleae
|
||||
Unix shell script to create a release tar file</tt>
|
||||
<br><tt>convertRelease.pl Performs
|
||||
consistancy checks on RELEASE files</tt>
|
||||
<br><tt>cp.pl
|
||||
This Perl script copies an existing file</tt>
|
||||
<br><tt>installEpics.pl
|
||||
Installs built files into install directories.</tt>
|
||||
<br><tt>makeConfigAppInclude.pl Generates include,bin, lib dir definitions</tt>
|
||||
<br><tt>makeDbDepends.pl Generates
|
||||
dependencies from substitution files</tt>
|
||||
<br><tt>makeIocCdCommands.pl Generates cdCommands file
|
||||
for use in IOCs</tt>
|
||||
<br><tt>makeDependsTargets.pl Creates targets of include dependency
|
||||
files</tt>
|
||||
<br><tt>makeMakefile.pl
|
||||
Creates a Makefile in O.<arch> dirs</tt>
|
||||
<br><tt>makeMakefileInclude.pl Creates file to be included by Makefile</tt>
|
||||
<br><tt>mkdir.pl
|
||||
Creates a directory (like Unix mkdir)</tt>
|
||||
<br><tt>mkmf.pl
|
||||
Generates dependencies from include stmnts</tt>
|
||||
<br><tt>munch.pl
|
||||
Creates a ctdt.c file for vxWorks targets</tt>
|
||||
<br><tt>mv.pl
|
||||
@@ -390,40 +413,51 @@ Building EPICS base (Unix and Win32)</h3>
|
||||
<blockquote><b>Unpack file</b>
|
||||
<blockquote>Unzip and untar the distribution file. Use WinZip on Windows
|
||||
systems.</blockquote>
|
||||
S<b>et environment variable</b>
|
||||
<blockquote>Before you can build or use EPICS R3.14, the environment variable
|
||||
EPICS_HOST_ARCH must be defined. A perl script EpicsHostArch.pl in the
|
||||
base/startup directory has been provided to help set EPICS_HOST_ARCH. You
|
||||
should have EPICS_HOST_ARCH set to your host operating system followed
|
||||
by a dash and then your host architecture, e.g. solaris-sparc.
|
||||
<p>On WIN32, some versions of Perl require that the environment variable
|
||||
PERLLIB be set to <perl directory location>.</blockquote>
|
||||
<b>Check path requirements</b>
|
||||
<blockquote>As already mentioned, you must have the perl executable and
|
||||
you may need C and C++ compilers in your search path. For building base
|
||||
you also must have echo in your search path. For Unix host builds you also
|
||||
need touch, cpp, cp, rm, mv, and mkdir in your search path and /bin/chmod
|
||||
must exist. On some Unix systems you may also need ar and ranlib in you
|
||||
path, and the c compiler may require ld in your path.
|
||||
<p>If you plan to build EPICS base shared libraries instead of archive
|
||||
S<b>et environment variables</b>
|
||||
<blockquote>Files in the base/startup directory have been provided to help
|
||||
set required path and other environment variables .
|
||||
<p><b>EPICS_HOST_ARCH</b>
|
||||
<br>Before you can build or use EPICS R3.14, the environment variable EPICS_HOST_ARCH
|
||||
must be defined. A perl script EpicsHostArch.pl in the base/startup directory
|
||||
has been provided to help set EPICS_HOST_ARCH. You should have EPICS_HOST_ARCH
|
||||
set to your host operating system followed by a dash and then your host
|
||||
architecture, e.g. solaris-sparc. If you are not using the OS vendor's
|
||||
c/c++ compiler for host
|
||||
<br>builds, you will need another dash followed by the alternate compiler
|
||||
name (e.g. "-gnu" for GNU c/c++ compilers on a solaris host or "-borland"
|
||||
for Borland c/c++ compilers on a WIN32 host) . See configure/CONFIG_SITE
|
||||
for a list of supported EPICS_HOST_ARCH values.
|
||||
<p><b>PERLLIB</b>
|
||||
<br>On WIN32, some versions of Perl require that the environment
|
||||
variable PERLLIB be set to <perl directory location>.</blockquote>
|
||||
|
||||
<blockquote><b>PATH</b>
|
||||
<br>As already mentioned, you must have the perl executable and you may
|
||||
need C and C++ compilers in your search path. For building base you also
|
||||
must have echo in your search path. For Unix host builds you also need
|
||||
touch, cpp, cp, rm, mv, and mkdir in your search path and /bin/chmod must
|
||||
exist. On some Unix systems you may also need ar and ranlib in your path,
|
||||
and the c compiler may require ld in your path.
|
||||
<p><b>LD_LIBRARY_PATH</b>
|
||||
<br>If you plan to build EPICS base shared libraries instead of archive
|
||||
libraries, on Unix systems you will need to add fullpathname to $(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH)
|
||||
to your LD_LIBRARY_PATH environment variable. On WIN32 systems, building
|
||||
shared libraries is the default setting and you will need to add
|
||||
fullpathname to $(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH) to your path.
|
||||
Building shared libraries is determined by the value of the macro SHARED_LIBRARIES in
|
||||
CONFIG_SITE (YES or NO).</blockquote>
|
||||
to your LD_LIBRARY_PATH environment variable.
|
||||
<p><b>PATH</b>
|
||||
<br>On WIN32 systems, building shared libraries is the default setting
|
||||
and you will need to add fullpathname to $(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH)
|
||||
to your path. Building shared libraries is determined by the value of the
|
||||
macro SHARED_LIBRARIES in CONFIG_SITE (either YES or NO).
|
||||
<br> </blockquote>
|
||||
<b>Do site-specific build configuration</b>
|
||||
<blockquote><b>Site configuration</b>
|
||||
<br>To configure EPICS, you may want to modify the default definitions
|
||||
in the following files:
|
||||
<blockquote><tt>configure/CONFIG_SITE </tt>-
|
||||
Build choices. Specify your target archs.
|
||||
<br><tt>configure/CONFIG_SITE_ENV </tt>- Set your environment variable
|
||||
definitions
|
||||
<br><tt>configure/RELEASE </tt>-
|
||||
TORNADO 2 full path location</blockquote>
|
||||
|
||||
<p><br><b>Host configuration</b>
|
||||
<blockquote><tt>configure/CONFIG_SITE </tt>Build
|
||||
choices. Specify target archs.
|
||||
<br><tt>configure/CONFIG_SITE_ENV </tt>Environment variable defaults
|
||||
<br><tt>configure/RELEASE </tt>TORNADO
|
||||
2 full path location</blockquote>
|
||||
<b>Host configuration</b>
|
||||
<br>To configure each host system, you may override the default definitions
|
||||
by adding a new file with override definitions into the configure/os directory.
|
||||
The new file should have the same name as the distribution file to be overridden
|
||||
@@ -443,8 +477,9 @@ except with CONFIG in the name replaced by CONFIG_SITE.
|
||||
settings</blockquote>
|
||||
<b>R3.13 compatibility configuration</b>
|
||||
<br>To configure EPICS base for building with R3.13 extensions and ioc
|
||||
applications , you will want to modify the default definitions in the base/config/CONFIG_SITE*
|
||||
files to agree with the definitions in your base/configure files.</blockquote>
|
||||
applications , you must modify the default definitions in the base/config/CONFIG_SITE*
|
||||
files to agree with definitions you made in base/configure and base/configure/os
|
||||
files.</blockquote>
|
||||
|
||||
<h4>
|
||||
<b>Build EPICS base</b></h4>
|
||||
@@ -476,31 +511,28 @@ which is the root directory in the distribution directory structure, base.
|
||||
Created object files are stored in O.<arch> source subdirectories, This
|
||||
allows objects for multiple cross target architectures to be maintained
|
||||
at the same time. To build EPICS base for a specific host/target combination
|
||||
you must have the proper host/target c++ cross compiler and target header
|
||||
you must have the proper host/target c/c++ cross compiler and target header
|
||||
files and the base/configure/os directory must have the appropriate configure
|
||||
files.</blockquote>
|
||||
|
||||
<h3>
|
||||
Examples</h3>
|
||||
Example application and extension</h3>
|
||||
|
||||
<blockquote>A perl tool, makeBaseApp.pl is included in the distribution
|
||||
file. This script will create a sample application that then can be built
|
||||
and then executed to try out this release of base. Also, a perl script,
|
||||
makeBaseExt.pl, is included in the distribution file. This script will
|
||||
create a sample extension that can be built and executed. The makeBaseApp.pl
|
||||
and makeBaseExt.pl scripts are installed into the install location bin/<hostarch>
|
||||
directory during the base build.</blockquote>
|
||||
file. This script will create a sample application that can be built and
|
||||
then executed to try out this release of base. Also, a perl script, makeBaseExt.pl,
|
||||
is included in the distribution file. This script will create a sample
|
||||
extension that can be built and executed. The makeBaseApp.pl and makeBaseExt.pl
|
||||
scripts are installed into the install location bin/<hostarch> directory
|
||||
during the base build.</blockquote>
|
||||
|
||||
<h3>
|
||||
Example base application</h3>
|
||||
|
||||
<blockquote>Instructions for building and executing a 3.14 example application
|
||||
<blockquote>Instructions for building and executing the 3.14 example application
|
||||
can be found in the section "Example Application" of Chapter 2, "New Features
|
||||
for 3.14", in the "IOC Application Developer's Guide R3.14.0alpha2"
|
||||
. The "Example Application" section briefly explains how to create
|
||||
and build an example application in a user created <top> directory.
|
||||
It also explains how to run the example application on a vxWorks ioc or
|
||||
a host system and run an example channel access client on the host system.</blockquote>
|
||||
for 3.14", in the "IOC Application Developer's Guide R3.14.0beta1".
|
||||
The "Example Application" section briefly explains how to create and build
|
||||
an example application in a user created <top> directory. It also explains
|
||||
how to run the example application on a vxWorks ioc or a host system and
|
||||
run an example channel access client on the host system.</blockquote>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
298
READMEbuildingR3.13AppsWithR3.14.html
Normal file
298
READMEbuildingR3.13AppsWithR3.14.html
Normal file
@@ -0,0 +1,298 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta name="ProgId" content="Word.Document">
|
||||
<meta name="Generator" content="Microsoft Word 9">
|
||||
<meta name="Originator" content="Microsoft Word 9">
|
||||
<meta name="GENERATOR" content="Mozilla/4.77 [en] (X11; U; SunOS 5.8 sun4u) [Netscape]">
|
||||
<title>Instruction on building existing R3</title>
|
||||
<link rel=File-List href="./READMEbuildingR3.13AppsWithR3.14_files/filelist.xml">
|
||||
<!--[if gte mso 9]><xml>
|
||||
<o:DocumentProperties>
|
||||
<o:LastAuthor>Jba</o:LastAuthor>
|
||||
<o:Revision>3</o:Revision>
|
||||
<o:TotalTime>4</o:TotalTime>
|
||||
<o:Created>2000-10-25T19:43:00Z</o:Created>
|
||||
<o:LastSaved>2000-10-25T19:47:00Z</o:LastSaved>
|
||||
<o:Pages>1</o:Pages>
|
||||
<o:Company>Argonne National Laboratory</o:Company>
|
||||
<o:Lines>1</o:Lines>
|
||||
<o:Paragraphs>1</o:Paragraphs>
|
||||
<o:Version>9.2720</o:Version>
|
||||
</o:DocumentProperties>
|
||||
</xml><![endif]-->
|
||||
<!--[if gte mso 9]><xml>
|
||||
<w:WordDocument>
|
||||
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
|
||||
<w:DisplayVerticalDrawingGridEvery>0</w:DisplayVerticalDrawingGridEvery>
|
||||
<w:UseMarginsForDrawingGridOrigin/>
|
||||
<w:Compatibility>
|
||||
<w:FootnoteLayoutLikeWW8/>
|
||||
<w:ShapeLayoutLikeWW8/>
|
||||
<w:AlignTablesRowByRow/>
|
||||
<w:ForgetLastTabAlignment/>
|
||||
<w:LayoutRawTableWidth/>
|
||||
<w:LayoutTableRowsApart/>
|
||||
</w:Compatibility>
|
||||
</w:WordDocument>
|
||||
</xml><![endif]-->
|
||||
<style>
|
||||
<!--
|
||||
/* Font Definitions */
|
||||
@font-face
|
||||
{font-family:"MS Mincho";
|
||||
panose-1:2 2 6 9 4 2 5 8 3 4;
|
||||
mso-font-alt:"\FF2D\FF33 \660E\671D";
|
||||
mso-font-charset:128;
|
||||
mso-generic-font-family:roman;
|
||||
mso-font-pitch:fixed;
|
||||
mso-font-signature:-1610612033 1757936891 16 0 131231 0;}
|
||||
@font-face
|
||||
{font-family:"\@MS Mincho";
|
||||
mso-font-charset:128;
|
||||
mso-generic-font-family:roman;
|
||||
mso-font-pitch:fixed;
|
||||
mso-font-signature:1 134676480 16 0 131072 0;}
|
||||
/* Style Definitions */
|
||||
p.MsoNormal, li.MsoNormal, div.MsoNormal
|
||||
{mso-style-parent:"";
|
||||
margin:0in;
|
||||
margin-bottom:.0001pt;
|
||||
mso-pagination:widow-orphan;
|
||||
font-size:10.0pt;
|
||||
font-family:"Times New Roman";
|
||||
mso-fareast-font-family:"Times New Roman";}
|
||||
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
|
||||
{margin:0in;
|
||||
margin-bottom:.0001pt;
|
||||
mso-pagination:widow-orphan;
|
||||
font-size:10.0pt;
|
||||
font-family:"Courier New";
|
||||
mso-fareast-font-family:"Times New Roman";}
|
||||
@page Section1
|
||||
{size:8.5in 11.0in;
|
||||
margin:1.0in 66.0pt 1.0in 66.0pt;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-paper-source:0;}
|
||||
div.Section1
|
||||
{page:Section1;}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body lang="EN-US" style="tab-interval:.5in">
|
||||
|
||||
<center>
|
||||
<h2>
|
||||
Building EPICS R3.13 applications with R3.14.0beta1 base</h2></center>
|
||||
|
||||
<p><br>This document describes how to modify a R3.13 vxWorks application
|
||||
so that it builds with release R3.14.0beta1. It describes an easy
|
||||
way to modify applications subject to the following restrictions:
|
||||
<ul>
|
||||
<li>
|
||||
The application still uses config rules rather than the configure rules
|
||||
which are new to release 3.14.</li>
|
||||
|
||||
<li>
|
||||
The OSI (Operating System Independent) features of R3.14 are not available,
|
||||
i.e. iocCore products can only be build for vxWorks.</li>
|
||||
|
||||
<li>
|
||||
Once the application is changed to build with base R3.14, it will not build
|
||||
with earlier base releases.</li>
|
||||
</ul>
|
||||
Ultimately applications should be converted to use the new configure rules
|
||||
so that the OSI features are available.
|
||||
<h3>
|
||||
<b>Gnumake clean uninstall</b></h3>
|
||||
|
||||
<blockquote>At the top of the application execute:
|
||||
<pre>"<tt>gnumake clean uninstall</tt>"</pre>
|
||||
to remove all files and directories created by earlier builds.</blockquote>
|
||||
|
||||
<h3>
|
||||
Update RELEASE</h3>
|
||||
|
||||
<blockquote>Change the <tt>EPICS_BASE</tt> definition to point to
|
||||
the R3.14 base release. All hardware support and some soft support is now
|
||||
unbundled. For example the sequencer is unbundled. You must obtain and
|
||||
build all required unbundled products before you can build the application.
|
||||
The location of each unbundled product must be specified in <top>/config/RELEASE.</blockquote>
|
||||
|
||||
<h3>
|
||||
Update target arch definitions</h3>
|
||||
|
||||
<blockquote>Change any target arch specification in config/CONFIG to new
|
||||
R3.14 target arch specification. Look in the R3.14 base/bin directory to
|
||||
see the target arch names.
|
||||
<p>For example, in config/CONFIG change
|
||||
<pre>CROSS_COMPILER_TARGET_ARCHS = mv167</pre>
|
||||
to
|
||||
<pre>CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040</pre>
|
||||
In the iocBoot/*/Makefile files, change
|
||||
<pre>ARCH=<old arch name></pre>
|
||||
to
|
||||
<pre>ARCH=<new arch name></pre>
|
||||
and do a "<tt>gnumake"</tt> in the iocBoot directory to update the cdCommands
|
||||
files.</blockquote>
|
||||
|
||||
<h3>
|
||||
State Notation Language changes</h3>
|
||||
|
||||
<blockquote>snc is no longer in base. If snc is used in your application,
|
||||
you must download and build the seq module with baseR3.14.0beta1. See the
|
||||
Application Developer's Guide to see how to build sequence programs.</blockquote>
|
||||
|
||||
<blockquote>Change
|
||||
<pre>INSTALLS=seq</pre>
|
||||
to
|
||||
<pre>LIBOBJS += $(SEQ_BIN)/seqLibrary.o</pre>
|
||||
|
||||
<p><br>in application src/Makefile.Vx files to link seq library into your
|
||||
application library,.
|
||||
<br>Also add
|
||||
<pre>SEQ=<full path to seq module directory></pre>
|
||||
to config/RELEASE.
|
||||
<br>Also remove
|
||||
<pre>ld < seq</pre>
|
||||
from the st.cmd files in the iocBoot subdirectories.</blockquote>
|
||||
|
||||
<h3>
|
||||
iocCore changes</h3>
|
||||
|
||||
<blockquote>iocCore has been renamed to iocCoreLibrary.o.
|
||||
<br>Change
|
||||
<pre>INSTALLS=iocCore</pre>
|
||||
to
|
||||
<pre>LIBOBJS += $(EPICS_BASE_BIN)/iocCoreLibrary.o</pre>
|
||||
in your application src/Makefile.Vx files .
|
||||
<br>Also remove
|
||||
<pre>ld < iocCore</pre>
|
||||
from the st.cmd files in the iocBoot subdirectories.</blockquote>
|
||||
|
||||
<h3>
|
||||
Library db changes</h3>
|
||||
|
||||
<blockquote>The Db library name was changed to dbStaticHost for host builds
|
||||
and dbStaticIoc for ioc builds.
|
||||
<br>Change
|
||||
<pre>PROD_LIBS+=Db</pre>
|
||||
to
|
||||
<pre>PROD_LIBS+=dbStaticHost</pre>
|
||||
and
|
||||
<pre>Db_DIR=$(EPICS_BASE_LIB)</pre>
|
||||
to
|
||||
<pre>dbStaticHost_DIR=$(EPICS_BASE_LIB)</pre>
|
||||
in your application src/Makefile.Host files.</blockquote>
|
||||
|
||||
<h3>
|
||||
VxWorks C++ munched libraries and object files</h3>
|
||||
|
||||
<blockquote>Since R3.14 contains C++ code, the build rules were changed
|
||||
to create a corresponding munched file for every vx object file built.
|
||||
The objects files can be combined to form libraries but the munched files
|
||||
must be loaded into vxWorks. In all st.cmd files add the suffix "<tt>.munch</tt>"
|
||||
to the ld lines where object files were previously loaded. For example
|
||||
change
|
||||
<pre>ld < exampleLib</pre>
|
||||
to
|
||||
<pre>ld < exampleLibrary.munch</pre>
|
||||
</blockquote>
|
||||
|
||||
<h3>
|
||||
recGbl calls</h3>
|
||||
|
||||
<blockquote>You may need to add the line "<tt>#include "recGbl.h</tt>"
|
||||
to any source files that have recGbl* calls so that the file will compile
|
||||
without errors.</blockquote>
|
||||
|
||||
<h3>
|
||||
Record support changes</h3>
|
||||
|
||||
<blockquote>The steppermotor, scan, and pid records are no longer in base.
|
||||
If your application does not use these record types, comment out or remove
|
||||
references to them in base.dbd and baseLIBOBJS. If these record types are
|
||||
used by your application you must download and build the modules with R3.14
|
||||
base, add appropriate module definitions to your application's config/RELEASE
|
||||
fileand change the <tt>LIBOBJS</tt> definitions. For example
|
||||
<br>add
|
||||
<pre>PID=<full path to modules directory>/pid</pre>
|
||||
to config/RELEASE.
|
||||
<br>Remove
|
||||
<pre>LIBOBJS += $(EPICS_BASE_BIN)/pidRecord.o</pre>
|
||||
from baseLIBOBJS,
|
||||
<br>and add
|
||||
<pre>LIBOBJS += $(PID_BIN)/pidRecord.o</pre>
|
||||
to your application src/Makefile.
|
||||
<p>You should consider changing any existing old steppermotor records to
|
||||
the new EPICS <a href="http://www.aps.anl.gov/upd/people/sluiter/epics/modules/mechanism/motor/index.html">motor
|
||||
record</a> module supported by Beamline Controls and Data Acquisition
|
||||
at APS.</blockquote>
|
||||
|
||||
<h3>
|
||||
RecDynLink.o and devPtSoft changes</h3>
|
||||
|
||||
<blockquote>recDynLink.o and devPtSoft.o are no longer in base. Remove
|
||||
references to them in base.dbd and baseLIBOBJS if they are not used in
|
||||
application.</blockquote>
|
||||
|
||||
<h3>
|
||||
Hardware support changes</h3>
|
||||
|
||||
<blockquote>All hardware support (dev, drv and dbd files) has been unbundled
|
||||
from base R3.14. This support includes the files <tt>symb, symb.dbd, drvHp1404a.o,
|
||||
drvEpvxiMsg.o, and drvEpvxi.o</tt>. If they are not used in your
|
||||
application, comment out references to these files in base.dbd and baseLIBOBJS.
|
||||
<p>Hardware support files now exist as separate modules available for download
|
||||
from the <a href="http://www.aps.anl.gov/epics/">EPICS www home page at
|
||||
ANL</a>. You must now download all the hardware support modules needed
|
||||
for your application, build the modules with R3.14 base, add the
|
||||
appropriate module full path definitions to your application config/RELEASE
|
||||
file, and change <tt>LIBOBJS</tt> location definition <tt>$(EPICS_BASE_BIN)</tt>
|
||||
to the module definition bin directory in your application src directory
|
||||
files.
|
||||
<p>For example, remove
|
||||
<pre>LIBOBJS+=$(EPICS_BASE_BIN)/symb</pre>
|
||||
from baseLIBOBJS and add
|
||||
<pre>LIBOBJS+=$(SYMB_BIN)/symb</pre>
|
||||
to your application src/Makefile,
|
||||
<br>and add the line
|
||||
<pre>SYMB=<full path definition for the built module SYMB></pre>
|
||||
into your application config/RELEASE file .
|
||||
<p>After a gnumake in the symb module followed by a gnumake in the application
|
||||
config directory, the definitions <tt>SYMB_BIN</tt> and <tt>SYMB_LIB</tt>
|
||||
will be created, the directory $(SYMB)/include will be added to the
|
||||
include directories on the compiler command lines (in the <tt>INSTALL_INCLUDES</tt>
|
||||
definition) and the directory $(SYMB)/dbd will be added to the dbd
|
||||
search directories on the dbExpand command lines (in the <tt>INSTALL_DBDFLAGS</tt>
|
||||
definition).</blockquote>
|
||||
|
||||
<h3>
|
||||
dbLoadtemplate tool changes</h3>
|
||||
|
||||
<blockquote>The host tool dbLoadTemplate has been replaced by a new extension,
|
||||
msi. dbLoadTemplate is still supported on iocs. Build the msi extension
|
||||
with base R3.14 and change the following definitions in your application
|
||||
files.
|
||||
<p>In config/RULES.Db replace the line
|
||||
<pre>DBLOADTEMPLATE=$(EPICS_BASE_HOST_BIN)/dbLoadTemplate$(EXE)</pre>
|
||||
with
|
||||
<pre>MSI = $(firstword $(wildcard $(EPICS_EXTENSIONS_HOST_BIN)/msi$(HOSTEXE) \
|
||||
(EPICS_EXTENSIONS)/bin/$(HOST_OS_CLASS)/msi$(HOSTEXE)) msi$(HOSTEXE))</pre>
|
||||
and change line:
|
||||
<pre>@$(DBLOADTEMPLATE) $< > $@</pre>
|
||||
to
|
||||
<pre>@$(MSI) $< > $@</pre>
|
||||
Also, if dbLoadTemplate was used by your application, add the definition
|
||||
<blockquote>
|
||||
<pre>EPICS_EXTENSIONS=<full path name to epics extensions directory></pre>
|
||||
</blockquote>
|
||||
to your application config/RELEASE file.</blockquote>
|
||||
depends changes
|
||||
<p> Remove any SRCS.c and SRCS.cc definitions in
|
||||
your application src/Makefile..*files. The depends rule no longer uses
|
||||
these definitions.
|
||||
</body>
|
||||
</html>
|
||||
132
READMEbuildingR3.13ExtensionsWithR3.14.html
Normal file
132
READMEbuildingR3.13ExtensionsWithR3.14.html
Normal file
@@ -0,0 +1,132 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta name="Author" content="jba">
|
||||
<meta name="GENERATOR" content="Mozilla/4.76 [en] (X11; U; SunOS 5.8 sun4u) [Netscape]">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<center>
|
||||
<h2>
|
||||
Building EPICS R3.13 extensions with R3.14 base</h2></center>
|
||||
|
||||
<p><br>EPICS R3.13 extensions have both a Makefile and a Makefile.Host
|
||||
in the build directories and the EPICS R3.13 extension tree has an extensions/config
|
||||
directory.
|
||||
<h3>
|
||||
Preliminary steps for all extensions</h3>
|
||||
|
||||
<blockquote>
|
||||
<li>
|
||||
Download the latest version (10/25/00) of the extensions/config files,
|
||||
extensionsConfig.tar.gz, from the APS EPICS www page.</li>
|
||||
|
||||
<li>
|
||||
Make certain that you have set the HOST_ARCH environment variable.</li>
|
||||
|
||||
<li>
|
||||
Set EPICS_BASE in extensions/config/RELEASE to the full path location of
|
||||
a built R3.14 base.</li>
|
||||
|
||||
<li>
|
||||
BASE_3_14 is now defined in the base/config/CONFIG_BASE_VERSION.
|
||||
The commented BASE_3_14 definition can be removed from extensions/config/RELEASE.</li>
|
||||
</blockquote>
|
||||
|
||||
<h3>
|
||||
Building downloaded APS distribution extensions with base R3.14</h3>
|
||||
|
||||
<blockquote>
|
||||
<li>
|
||||
Download the latest version (10/25/00) of extensions distributed from the
|
||||
APS EPICS www page. The latest versions of the extensions should build
|
||||
with both R3.13 and R3.14. Note that the order of building extensions is
|
||||
important, i.e. some extensions depend on other extensions being built
|
||||
first. The extensions/config/CONFIG_EXTENSIONS file contains notes on extension
|
||||
dependancies and contains a definition of DIRS (used by extensions/src/Makefile)
|
||||
with the proper order for building the APS distributed extensions.</li>
|
||||
|
||||
<li>
|
||||
Executing gnumake at the root level of the extensions tree or in the src
|
||||
directory should build the APS extensions in the proper order.</li>
|
||||
</blockquote>
|
||||
|
||||
<h3>
|
||||
Building your extensions with base R3.14</h3>
|
||||
|
||||
<blockquote>
|
||||
<li>
|
||||
<b>Library Db renamed</b></li>
|
||||
|
||||
<br>Library Db has been renamed to dbStaticHost in EPICS base R3.14. In
|
||||
some extensions lib Db is not used and Db can be removed from the USR_LIBS
|
||||
(or PROD_LIBS) line. If the library is needed ( you get unresolved items
|
||||
after removing Db), the following lines should be added to Makefile.Host.
|
||||
<blockquote><tt>ifdef BASE_3_14</tt>
|
||||
<br><tt>USR_LIBS += dbStaticHost</tt>
|
||||
<br><tt>dbStaticHost_DIR = $(EPICS_BASE_LIB)</tt>
|
||||
<br><tt>else</tt>
|
||||
<br><tt>USR_LIBS += Db</tt>
|
||||
<br><tt>Db_DIR = $(EPICS_BASE_LIB)</tt>
|
||||
<br><tt>endif</tt></blockquote>
|
||||
|
||||
<li>
|
||||
<b>Target architecture specifications changed</b></li>
|
||||
|
||||
<br>Since target architecture specifications have been changed (solaris
|
||||
to solaris-sparc, win32 to win32-x86, ...) Makefile.Host references to
|
||||
and tests on T_A have to be changed. In most cases T_A can be replaced
|
||||
by OS_CLASS. Since HOST_ARCH will eventually be phased out, it would
|
||||
be a good idea to change any Makefile.Host references to HOST_ARCH to OS_CLASS
|
||||
if possible.
|
||||
<br>For example change
|
||||
<blockquote><tt>ifeq ($(T_A),solaris)</tt>
|
||||
<br><tt>RPCFLAGS = -K -1</tt>
|
||||
<br><tt>endif</tt></blockquote>
|
||||
to
|
||||
<blockquote><tt>ifeq ($(OS_CLASS),solaris)</tt>
|
||||
<br><tt>RPCFLAGS = -K -1</tt>
|
||||
<br><tt>endif</tt></blockquote>
|
||||
|
||||
<li>
|
||||
<b>New ca_set_puser</b></li>
|
||||
|
||||
<br>Statements of the form: <tt>ca_puser(chid) = xyz</tt>; should to be
|
||||
changed to: <tt>ca_set_puser(chid,xyz)</tt>;
|
||||
<br>
|
||||
<li>
|
||||
<b>Extern C around includes</b></li>
|
||||
|
||||
<br>Remove any extern "C" braces around #includes of EPICS base header
|
||||
files.
|
||||
<br>For example change
|
||||
<blockquote><tt>extern "C" {</tt>
|
||||
<br><tt>#include "cadefs.h"</tt>
|
||||
<br><tt>} /* end extern C */</tt></blockquote>
|
||||
to
|
||||
<blockquote><tt>#include "cadefs.h"</tt></blockquote>
|
||||
|
||||
<li>
|
||||
<b>Infrequently used R3.13 timestamp functions unbundled from base</b></li>
|
||||
|
||||
<br>Some infrequently used R3.13 timestamp functions and macro definitions
|
||||
have been removed from EPICS base and now exist in a library, ts, created
|
||||
and installed in the ar extension. The only ANL distributed extension
|
||||
that uses these unbundled functions and macros is cau. The two R3.13
|
||||
functions tsStampToText and tsLocalTime along with the definitions TS_TEXT_MONDDYYYY
|
||||
and TS_TEXT_MMDDYY have been retained in R3.14 for extension compatibility
|
||||
purposes.
|
||||
<br>If your extension gets undefines for TS_* usage and ts* function calls
|
||||
when built with R3.14, you must obtain and build the ar extension. Add
|
||||
an #include for tsSubr.h to your extension source code and add library
|
||||
ts to PROD_LIBS or USR_LIBS in your Makefile.Host as follows:
|
||||
<blockquote><tt>#include "tsSubr.h"</tt>
|
||||
<p><tt>ifdef BASE_3_14</tt>
|
||||
<br><tt>PROD_LIBS += ts</tt>
|
||||
<br><tt>ts_DIR = $(EPICS_EXTENSIONS_LIB)</tt>
|
||||
<br><tt>endif</tt></blockquote>
|
||||
</blockquote>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
302
READMEconvertingR3.13AppsToR3.14.html
Normal file
302
READMEconvertingR3.13AppsToR3.14.html
Normal file
@@ -0,0 +1,302 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta name="Author" content="jba">
|
||||
<meta name="GENERATOR" content="Mozilla/4.76 [en] (X11; U; SunOS 5.8 sun4u) [Netscape]">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<center>
|
||||
<h2>
|
||||
Converting an EPICS R3.13 application to R3.14.0alpha3</h2></center>
|
||||
|
||||
<p><br>This document describes how to convert a R3.13 vxWorks application
|
||||
so that it builds with release R3.14.0alpha3. It describes procedures
|
||||
such that:
|
||||
<ul>
|
||||
<li>
|
||||
The application uses the configure rules which are new to R3.14.</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
The OSI (Operating System Independent) features of R3.14 are available,
|
||||
i.e. iocCore products can be build for vxWorks as well as other platforms,
|
||||
e.g. solaris and linux.</li>
|
||||
</ul>
|
||||
|
||||
<h3>
|
||||
Gnumake clean uninstall</h3>
|
||||
|
||||
<blockquote>First do a gnumake clean uninstall in the application's root
|
||||
directory to remove all files created by earlier builds.</blockquote>
|
||||
|
||||
<h3>
|
||||
Create a new R3.14 application</h3>
|
||||
|
||||
<blockquote><tt>mkdir <top></tt>
|
||||
<br><tt>cd <top></tt>
|
||||
<br><tt><full path to R3.14.0alpha3 base>/bin/<host_arch>/makeBaseApp.pl
|
||||
-t example example</tt></blockquote>
|
||||
|
||||
<h3>
|
||||
Copy all *App and iocBoot directories and files to the new <top> directory</h3>
|
||||
|
||||
<blockquote><tt>cd <oldtop></tt>
|
||||
<br><tt>find *App iocBoot -print | cpio -pvmd <fullpath name to new
|
||||
top></tt></blockquote>
|
||||
|
||||
<h3>
|
||||
Modify <top>/configure/RELEASE</h3>
|
||||
|
||||
<blockquote>Copy definitions of external modules excluding EPICS_BASE and
|
||||
TEMPLATES_TOP from old application RELEASE file.
|
||||
<br>If sequence programs (*.st or *.stt files) exist in your application,
|
||||
add the SNCSEQ location definition for the R3.14 seq external module
|
||||
<blockquote><tt>SNCSEQ =<full path to seq module top></tt></blockquote>
|
||||
The R3.14 seq module must exist and be built with EPICS base R3.14.0alpha3.</blockquote>
|
||||
|
||||
<h3>
|
||||
Modify the Makefiles in <top>/*App directories.</h3>
|
||||
|
||||
<blockquote>Change <tt>include $(TOP)/config/CONFIG_APP</tt>
|
||||
<br>to <tt>include $(TOP)/configure/CONFIG</tt>
|
||||
<p>Change i<tt>nclude $(TOP)/config/RULES_DIRS</tt>
|
||||
<br>to <tt>include $(TOP)/configure/RULES_DIRS</tt></blockquote>
|
||||
|
||||
<h3>
|
||||
Modify the Makefiles in <top>/*App/*Db directories.</h3>
|
||||
|
||||
<blockquote>Remove existing Makefile
|
||||
<br>Rename Makefile.Host to Makefile
|
||||
<br>Modify Makefile as follows:
|
||||
<p>Change <tt>TOP=../../..</tt>
|
||||
<br>to <tt>TOP=../..</tt>
|
||||
<p>Change i<tt>nclude $(TOP)/config/CONFIG_APP</tt>
|
||||
<br>to <tt>include $(TOP)/configure/CONFIG</tt>
|
||||
<p>Change <tt>include $(TOP)/config/RULES.Db</tt>
|
||||
<br>to <tt>include $(TOP)/configure/RULES</tt>
|
||||
<p>Place all definitions between the include lines.
|
||||
<p>Place any rules after the last include line.</blockquote>
|
||||
|
||||
<h3>
|
||||
Modify the Makefiles in <top>/*App/src directories.</h3>
|
||||
|
||||
<blockquote>Remove existing Makefile
|
||||
<br>Rename Makefile.Host to Makefile
|
||||
<br>Modify Makefile as follows:
|
||||
<p>Change <tt>TOP=../../..</tt>
|
||||
<br>to <tt>TOP=../..</tt>
|
||||
<p>Change <tt>include $(TOP)/config/CONFIG_APP</tt>
|
||||
<br>to <tt>include $(TOP)/configure/CONFIG</tt>
|
||||
<p>Change i<tt>nclude $(TOP)/config/RULES.Host</tt>
|
||||
<br>to <tt>include $(TOP)/configure/RULES</tt>
|
||||
<p>Change <tt>PROD_LIBS = <name></tt>
|
||||
<br>to <tt> <prod name>_LIBS = dbStaticHost</tt>
|
||||
<br>where <tt><prod name></tt> is a specifified product to be
|
||||
built.
|
||||
<p>Change library name <tt>Db</tt> to <tt>dbStaticHost.</tt>
|
||||
<br>Change<tt> PROD_LIBS = Db</tt>
|
||||
<br>to <tt> <prodname>_LIBS += dbStaticHost</tt>
|
||||
<br>and <tt>Db_DIR = $(EPICS_BASE_LIB)</tt>
|
||||
<br>to <tt>dbStaticHost_DIR = $(EPICS_BASE_LIB)</tt>
|
||||
<p>Change <tt>USER_DBDFLAGS</tt>
|
||||
<br>to <tt>USR_DBDFLAGS</tt>
|
||||
<p>Change <tt>RECTYPES += xxxRecord.h</tt>
|
||||
<br>to <tt>DBDINC += xxxRecord</tt>
|
||||
<p>Change <tt>DBDNAME = <name>App.dbd</tt>
|
||||
<br>to <tt>DBD += <name>.dbd</tt>
|
||||
<p>Remove all <tt>DBDEXPAND</tt> lines.
|
||||
<p>Change <tt>PROD = <prodname></tt>
|
||||
<br>to <tt>PROD_HOST = <prodname></tt>
|
||||
<p>Change <tt>SRCS.c += <name></tt>
|
||||
<br>to <tt><prodname>_SRCS += <name></tt>
|
||||
<br>or<tt> <libname>_SRCS += <name></tt>
|
||||
<p>Add the contents of Makefile.Vx to Makefile removing the include lines
|
||||
and the TOP definition.</blockquote>
|
||||
|
||||
<blockquote>Change <tt>LIBNAME = <libname>Lib</tt>
|
||||
<br>to <tt>PROD_vxWorks = <libname></tt><tt></tt>
|
||||
<p>Remove line <tt> -include ../baseLIBOBJS</tt>
|
||||
<p>Remove line <tt>INSTALLS = iocCore seq</tt><tt></tt>
|
||||
<p>Change all <tt>SRCS.c += ../<name>.c </tt>lines
|
||||
<br>to <font face="Arial,Helvetica"><prodname>_SRCS += <name>.c</font>
|
||||
<br>if the source files exist in the current directory.<tt></tt>
|
||||
<p>Change all <tt>*OBJS += <name>.o</tt>
|
||||
lines
|
||||
<br>to <font face="Arial,Helvetica"><prodname>_SRCS += <name>.c</font>
|
||||
<br>or <font face="Arial,Helvetica"> <prodname>_SRCS += <name>.cc</font>
|
||||
<br>if the c/c++ source files exist in the current directory.
|
||||
<p>Change <tt>LIBOBJS += <seq_program_name>.o</tt>
|
||||
lines
|
||||
<br>to <tt><prodname>_SRCS += <seq_program_name>.stt</tt>
|
||||
<br>or <tt><prodname>_SRCS += <seq_program_name>.st</tt><tt></tt>
|
||||
<p>Add the lines
|
||||
<blockquote><tt>#<name>_LIBS += seq</tt>
|
||||
<br><tt>#<name>_LIBS += pv</tt>
|
||||
<br><tt>#seq_DIR = $(SNCSEQ_LIB)</tt>
|
||||
<br><tt>#pv_DIR = $(SNCSEQ_LIB)</tt><tt></tt>
|
||||
<p><tt><name>_LIBS += recIoc</tt>
|
||||
<br><tt><name>_LIBS += softDevIoc</tt>
|
||||
<br><tt><name>_LIBS += testDevIoc</tt>
|
||||
<br><tt><name>_LIBS += iocsh</tt>
|
||||
<br><tt><name>_LIBS += miscIoc</tt>
|
||||
<br><tt><name>_LIBS += rsrvIoc</tt>
|
||||
<br><tt><name>_LIBS += dbtoolsIoc</tt>
|
||||
<br><tt><name>_LIBS += asIoc</tt>
|
||||
<br><tt><name>_LIBS += dbIoc</tt>
|
||||
<br><tt><name>_LIBS += registryIoc</tt>
|
||||
<br><tt><name>_LIBS += dbStaticIoc</tt>
|
||||
<br><tt><name>_LIBS += ca</tt>
|
||||
<br><tt><name>_LIBS += Com</tt></blockquote>
|
||||
where <tt><name></tt> is the name in the <tt>PROD_vxWorks</tt>
|
||||
definition, and uncomment the first four lines if you have sequence programs
|
||||
(.st or .stt files) in the current directory.
|
||||
<p>Place all macro definitions between the include lines.
|
||||
<p>Place any rules after the last include line.</blockquote>
|
||||
|
||||
<h3>
|
||||
Modify the Makefiles in <top>/iocBoot directory.</h3>
|
||||
|
||||
<blockquote>Change i<tt>nclude $(TOP)/config/CONFIG_APP</tt>
|
||||
<br>to <tt>include $(TOP)/configure/CONFIG</tt>
|
||||
<p>Remove the line <tt>DIRS += $(wildcard *ioc*)</tt>
|
||||
<p>Change <tt>include $(TOP)/config/RULES.iocBoot</tt>
|
||||
<br>to i<tt>nclude $(TOP)/configure/RULES.iocBoot</tt></blockquote>
|
||||
|
||||
<h3>
|
||||
Modify the Makefiles in <top>/iocBoot/ioc* directories.</h3>
|
||||
|
||||
<blockquote>Change <tt>include $(TOP)/config/CONFIG_APP</tt>
|
||||
<br>to <tt>include $(TOP)/configure/CONFIG</tt>
|
||||
<p>Change <tt>include ARCH = <old arch specification e.g. mv167></tt>
|
||||
<br>to <tt>include ARCH = <new arch specificatio
|
||||
e.g. vxWorks-68040></tt><tt></tt>
|
||||
<p>Change <tt>include $(TOP)/config/RULES.ioc</tt>
|
||||
<br>to <tt>include $(TOP)/configure/RULES.ioc</tt>
|
||||
<p>Add the following rule at the end of the Makefile.
|
||||
<blockquote><tt>buildInstall: cdCommands</tt></blockquote>
|
||||
</blockquote>
|
||||
|
||||
<h3>
|
||||
Modify st.cmd in <top>/iocBoot/ioc* directories.</h3>
|
||||
|
||||
<blockquote>Remove the lines</blockquote>
|
||||
|
||||
<blockquote>
|
||||
<blockquote>
|
||||
<pre>ld < seq</pre>
|
||||
|
||||
<pre>ld < iocCore</pre>
|
||||
</blockquote>
|
||||
Change <tt>ld < <libname>Lib</tt>
|
||||
<br>to <tt>ld < <libname>.munch</tt>
|
||||
<p>Change load statements for db and dbd files from
|
||||
<blockquote><tt>cd startup</tt>
|
||||
<br><tt>dbLoadDatabase("../../dbd/exampleApp.dbd")</tt>
|
||||
<br><tt>dbLoadRecords("../../db/dbExample1.db","user=jba")</tt>
|
||||
<br><tt>dbLoadRecords("../../db/dbExample2.db")</tt></blockquote>
|
||||
to
|
||||
<blockquote><tt>cd top</tt>
|
||||
<br><tt>dbLoadDatabase("dbd/example.dbd")</tt>
|
||||
<br><tt>registerRecordDeviceDriver(pdbbase)</tt>
|
||||
<br><tt>dbLoadRecords("db/dbExample1.db","user=jba")</tt>
|
||||
<br><tt>dbLoadRecords("db/dbExample2.db")</tt></blockquote>
|
||||
</blockquote>
|
||||
|
||||
<h3>
|
||||
Record support changes</h3>
|
||||
|
||||
<blockquote>The steppermotor, scan, and pid records are no longer in base.
|
||||
If these records are not used in your application, comment out references
|
||||
to them in base.dbd. If these record types are used at your site, they
|
||||
should be downloaded and built with base R3.14 by your EPICS administrator.
|
||||
To update the R3.14 location of these record types in your application
|
||||
you must add appropriate module definitions to your application's
|
||||
config/RELEASE file and change the <tt>LIBOBJS</tt> definitions.
|
||||
<p>For example add</blockquote>
|
||||
|
||||
<blockquote> <tt>PID=<full
|
||||
path to modules directory>/pid</tt>
|
||||
<p>to config/RELEASE.
|
||||
<br>Remove</blockquote>
|
||||
|
||||
<blockquote> <tt>LIBOBJS
|
||||
+= $(EPICS_BASE_BIN)/pidRecord.o</tt>
|
||||
<p>from baseLIBOBJS, and add</blockquote>
|
||||
|
||||
<blockquote>
|
||||
<blockquote><tt>LIBOBJS += $(PID_BIN)/pidRecord.o</tt></blockquote>
|
||||
to your application src/Makefile.</blockquote>
|
||||
|
||||
<blockquote>You should consider changing any existing old steppermotor
|
||||
records to the new EPICS motor record module supported by Beamline
|
||||
Controls and Data Acquisition at APS.</blockquote>
|
||||
|
||||
<h3>
|
||||
RecDynLink.o and devPtSoft changes</h3>
|
||||
|
||||
<blockquote>recDynLink.o and devPtSoft.o are no longer in EPICS base and
|
||||
now exist as separate EPICS modules.You must now add the appropriate module
|
||||
full path definitions to your application config/RELEASE file, and change
|
||||
<tt>LIBOBJS</tt>
|
||||
location definition <tt>$(EPICS_BASE_BIN)</tt> to the module definition
|
||||
bin directory in your application src directory files. See "Hardware
|
||||
support changes" below for instructions.</blockquote>
|
||||
|
||||
<h3>
|
||||
Hardware support changes</h3>
|
||||
|
||||
<blockquote>All hardware support (dev, drv and dbd files) except soft support
|
||||
has been unbundled from base R3.14. This support includes the files symb.dbd,
|
||||
drvHp1404a.o, drvEpvxiMsg.o, and drvEpvxi.o. If these are not used by your
|
||||
application, comment out references to them in base.dbd.</blockquote>
|
||||
|
||||
<blockquote>Hardware support now exists as separate EPICS modules. The
|
||||
hardware support for your site should be downloaded and built with base
|
||||
R3.14 by your EPICS administrator. You must now add the appropriate module
|
||||
full path definitions to your application config/RELEASE file, and change
|
||||
<tt>LIBOBJS</tt>
|
||||
location from <tt>$(EPICS_BASE_BIN) </tt>to the module bin directory
|
||||
in your application src directory files.
|
||||
<p>For example, remove</blockquote>
|
||||
|
||||
<blockquote> <tt>LIBOBJS+=$(EPICS_BASE_BIN)/symb</tt></blockquote>
|
||||
|
||||
<blockquote>from baseLIBOBJS and add</blockquote>
|
||||
|
||||
<blockquote> <tt>LIBOBJS+=$(SYMB_BIN)/symb</tt></blockquote>
|
||||
|
||||
<blockquote>to your application src/Makefile,
|
||||
<br>and add the line</blockquote>
|
||||
|
||||
<blockquote>
|
||||
<blockquote><tt>SYMB=<full path definition for the built module SYMB></tt></blockquote>
|
||||
</blockquote>
|
||||
|
||||
<blockquote>into your application config/RELEASE file .</blockquote>
|
||||
|
||||
<h3>
|
||||
dbLoadtemplate tool changes</h3>
|
||||
|
||||
<blockquote>The host tool dbLoadTemplate has been replace by a new EPICS
|
||||
extension, msi, which should be downloaded and built with base R3.14 by
|
||||
your EPICS administrator. dbLoadTemplate is still supported on iocs.
|
||||
If, in your application, db files are created from template and substitution
|
||||
files you should add the definition
|
||||
<p> <tt>EPICS_EXTENSIONS=<full
|
||||
path name to epics extensions directory></tt>
|
||||
<p>to your application config/RELEASE file.</blockquote>
|
||||
|
||||
<blockquote>
|
||||
<blockquote> </blockquote>
|
||||
|
||||
<blockquote>
|
||||
<pre></pre>
|
||||
</blockquote>
|
||||
</blockquote>
|
||||
|
||||
<br>
|
||||
</body>
|
||||
</html>
|
||||
145
READMEconvertingR3.14.0alpha2AppsTobeta1.html
Normal file
145
READMEconvertingR3.14.0alpha2AppsTobeta1.html
Normal file
@@ -0,0 +1,145 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta name="Author" content="jba">
|
||||
<meta name="GENERATOR" content="Mozilla/4.77 [en] (X11; U; SunOS 5.8 sun4u) [Netscape]">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<center>
|
||||
<h2>
|
||||
Converting an EPICS R3.14.0 alpha2 application to beta1</h2></center>
|
||||
|
||||
<p><br>This document describes how to convert a R3.14.0alpha2 application
|
||||
so that it builds with release R3.14.0beta1.
|
||||
<h3>
|
||||
Gnumake clean uninstall</h3>
|
||||
|
||||
<blockquote>First do a "<tt>gnumake clean uninstall"</tt> in the application's
|
||||
root directory to remove all files created by earlier builds.</blockquote>
|
||||
|
||||
<h3>
|
||||
Replace configure/RULES.ioc and configure/Makefile</h3>
|
||||
|
||||
<blockquote>The rules defined in RULES.ioc have changed slightly, and new
|
||||
applications are now given a wrapper version which just includes $(EPICS_BASE)/configureRULES.ioc.
|
||||
The new configure/Makefile contains an additional macro that causes the
|
||||
contents of the configure/RELEASE file to be checked at build time for
|
||||
consistency with all the support applications that it references. These
|
||||
files should be replaced with copies of the new versions from <base>/templates/makeBaseApp/top/configure</blockquote>
|
||||
|
||||
<h3>
|
||||
Remove baseLIBOBJS</h3>
|
||||
|
||||
<blockquote>Record and device support from base now exists in archive libraries
|
||||
so baseLIBOBJS is no longer needed and the file and references to it in
|
||||
the Makefile can be deleted. e.g. remove
|
||||
<blockquote><tt>-include ../baseLIBOBJS</tt></blockquote>
|
||||
and the file baseLIBOBJS. If there are no LIBOBJS definitions in the Makefile,
|
||||
also remove
|
||||
<blockquote><tt>example_OBJS += $(LIBOBJS)</tt></blockquote>
|
||||
</blockquote>
|
||||
|
||||
<h3>
|
||||
Libraries recIoc, softDevIoc, and testDevIoc</h3>
|
||||
|
||||
<blockquote>Add the new record and dev support libraries to <name>App/src/Makefile,
|
||||
i.e. add the lines
|
||||
<blockquote><tt>example_LIBS += recIoc</tt>
|
||||
<br><tt>example_LIBS += softDevIoc</tt>
|
||||
<br><tt>example_LIBS += testDevIoc</tt></blockquote>
|
||||
and remove any references to iocLibrary, e.g. remove the line
|
||||
<blockquote><tt>example_OBJS_vxWorks += $(EPICS_BASE_BIN)/iocCoreLibrary</tt></blockquote>
|
||||
The order of references to base libraries is important so place recIoc
|
||||
and softDevIoc before the the other base library references.
|
||||
<p>If you are building on a WIN32 host add the following lines instead:
|
||||
<blockquote><tt># Use win32 object libs for registered support</tt>
|
||||
<br><tt>example_LIBS_win32 += recIocObj</tt>
|
||||
<br><tt>example_LIBS_win32 += softDevIocObj</tt>
|
||||
<br><tt>example_LIBS_win32 += testDevIocObj</tt>
|
||||
<br><tt>example_LIBS_DEFAULT += recIoc</tt>
|
||||
<br><tt>example_LIBS_DEFAULT += softDevIoc</tt>
|
||||
<br><tt>example_LIBS_DEFAULT += testDevIoc</tt></blockquote>
|
||||
</blockquote>
|
||||
|
||||
<h3>
|
||||
iocrf renamed to iocsh</h3>
|
||||
|
||||
<blockquote>Change all references to ioccrf in your application src directories
|
||||
to iocsh e.g.
|
||||
<p>change <tt>#include "ioccrf.h"</tt>
|
||||
<br>to <tt>#include "iocsh.h"</tt>
|
||||
<p>change<tt> ioccrf(argv[1]);</tt>
|
||||
<br>to <tt> iocsh(argv[1]);</tt>
|
||||
<p>and change <tt> ioccrf(NULL);</tt>
|
||||
<br>to <tt>iocsh(NULL)</tt>;
|
||||
<p>in <name>App/src/exampleMain.c.</blockquote>
|
||||
|
||||
<h3>
|
||||
PROD changes</h3>
|
||||
|
||||
<blockquote>PROD targets will now be built for all target architectures.
|
||||
If a product should be built only for host architectures change PROD to
|
||||
PROD_HOST .e.g. in your application src Makefiles
|
||||
<blockquote>change <tt>PROD += caExample</tt>
|
||||
<br>to <tt>PROD_HOST += caExample</tt>
|
||||
<br>and
|
||||
<br>change <tt>PROD = sncExample</tt>
|
||||
<br>to <tt>PROD_HOST += sncExample</tt></blockquote>
|
||||
</blockquote>
|
||||
<b>LIBRARY and PROD changes</b>
|
||||
<blockquote>The meaning of LIBRARY and PROD have now changed. For vxWorks,
|
||||
LIBRARY now means an archive library, OBJLIB is now a combined object file
|
||||
(only needed for R3.13 compatibility) and PROD is now a combined object
|
||||
file with library references resolved and will have a corresponding .munch
|
||||
file created. Thus, in your application src Makefiles,
|
||||
<blockquote>change <tt>LIBRARY_vxWorks = <name></tt>
|
||||
<br>to <tt>PROD_vxWorks = <name></tt>
|
||||
<br>or
|
||||
<br>remove the lines <tt>LIBRARY_vxWorks = <name></tt>
|
||||
<br>and <tt>PROD_RTEMS = <name></tt>
|
||||
<br>and change <tt>PROD = <name></tt>
|
||||
<br>to <tt>PROD_IOC = <name></tt>.</blockquote>
|
||||
In the iocBoot/ioc<name>/st.cmd files,
|
||||
<blockquote>change <tt>ld < <name>Library.munch</tt>
|
||||
<br>to <tt>ld < <name>.munch</tt></blockquote>
|
||||
A SRCS definition is now required for every PROD and LIBRARY source
|
||||
file to determine correct header file dependancies. This is true even if
|
||||
there is only one source file for the PROD or LIBRARY . Thus, for the PROD
|
||||
caExample in your src Makefile, add the line
|
||||
<blockquote> caExample_SRCS += caExample.c</blockquote>
|
||||
</blockquote>
|
||||
|
||||
<h3>
|
||||
registerRecordDeviceDriver changes</h3>
|
||||
|
||||
<blockquote>The created file registerRecordDeviceDriver.cpp is now used
|
||||
for all target architectures. Thus in your application src Makefiles
|
||||
<blockquote>change <tt>example_SRCS_DEFAULT += example_registerRecordDeviceDriver.cpp</tt>
|
||||
<br>to <tt>example_SRCS += example_registerRecordDeviceDriver.cpp</tt>
|
||||
<br><tt></tt> </blockquote>
|
||||
</blockquote>
|
||||
|
||||
<h3>
|
||||
RTEMS-specific pathname changes</h3>
|
||||
|
||||
<blockquote>1. The RTEMS TFTP remote filesystem no longer ignores leading
|
||||
`../' components in path names. All st.cmd file lines with path names
|
||||
of the form <tt>dbLoadRecords("../../db/dbExample1.db","user=norume")</tt>
|
||||
<br>must be changed to
|
||||
<br><tt>dbLoadRecords("db/dbExample1.db","user=norume")</tt><tt></tt>
|
||||
<p>The makeBaseApp.pl script distributed with R3.14-beta1 creates st.cmd
|
||||
scripts with the proper path names.
|
||||
<p>2. The RTEMS TFTP remote filesystem supports a limited set of chdir
|
||||
operations.
|
||||
<br>All paths passed to chdir (or to the IOC shell `cd' command) must end
|
||||
in a `/'
|
||||
<br>character.</blockquote>
|
||||
|
||||
<blockquote>
|
||||
<blockquote> </blockquote>
|
||||
</blockquote>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -7,7 +7,29 @@
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<center>
|
||||
<h1>
|
||||
EPICS Release base 3.14.0beta1</h1></center>
|
||||
<h2>Changes since alpha2</h2>
|
||||
All changes for release 3.13.5 that also apply to 3.14 have been made.
|
||||
<p>
|
||||
<b>devAiSoftRaw and devAoSoftRaw</b>
|
||||
</p>
|
||||
<p>
|
||||
A new state is defined for the LINR field. The name is "SLOPE",
|
||||
which allows any device type to be used with manual settings of
|
||||
the EOFF and ESLO fields. With this setting, the device support's
|
||||
special_linconv() routine is only called when LINR=LINEAR.
|
||||
</p>
|
||||
<p>
|
||||
The RTEMS TFTP remote filesystem driver now supports a limited form of
|
||||
the chdir() system call. One restriction is that all pathnames passed
|
||||
to chdir() must end in a / character, so IOC shell commands to change
|
||||
directories must be given as
|
||||
</p>
|
||||
<p>
|
||||
cd ../db
|
||||
</p>
|
||||
<center>
|
||||
<h1>
|
||||
EPICS Release base 3.14.0alpha2</h1></center>
|
||||
@@ -186,7 +208,8 @@ and MC68360 processors. RTEMS also supports powerPC.
|
||||
<li>
|
||||
solaris</li>
|
||||
|
||||
<br>Has been tested on solaris 2.6 and solaris 8.
|
||||
<br>Has been tested on solaris 2.6 and solaris 8 with Sun workshop 6.0 (C++ 5.2).
|
||||
Sun workshop 5.0 (C++ 5.0) will not compile this version of EPICS.
|
||||
<li>
|
||||
Linux</li>
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ CCC_TEMPL_INST_FLAG =
|
||||
# -w-8012 Comparing signed and unsigned values
|
||||
# -w-8060 Possibly incorrect assignment
|
||||
# -w-8071 Conversion may lose significant digits
|
||||
CCC_WARN_YES = -w -g0 -w-8012 -w-8060 -w-8071
|
||||
CCC_WARN_YES = -w -g0 -w-8012 -w-8060 -w-8071 -w-8008 -w-8027 -w-8066 -w-8080 -w-8004
|
||||
# -w- display warnings off
|
||||
CCC_WARN_NO = -w-
|
||||
|
||||
|
||||
@@ -20,9 +20,7 @@ SHRLIB_SUFFIX = .so
|
||||
|
||||
SHRLIBNAME = lib$(LIBRARY)$(SHRLIB_SUFFIX)$(SHRLIB_VERSION:%=.%)
|
||||
|
||||
#For backward compatability only
|
||||
DLL_LIBS = $(subst $(LIBRARY),, $(PROD_LIBS))
|
||||
|
||||
DLL_LIBS = $(patsubst $(LIBRARY),, $(PROD_LIBS) $(USR_LIBS))
|
||||
DLL_LDLIBS = $(PRODNAME_LIBS:%=-l%) $(DLL_LIBS:%=-l%)
|
||||
|
||||
INSTALL_SHRLIB = $(INSTALL_LIB)
|
||||
|
||||
@@ -27,6 +27,7 @@ ACC_SLIBS_YES =
|
||||
ACC_SLIBS_NO=
|
||||
ACC_SHRLIB_CFLAGS_YES = +Z
|
||||
ACC_SHRLIB_LDFLAGS_YES = -b
|
||||
ACC_DEP_CFLAGS=+DAportable
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
HPCC = cc
|
||||
@@ -43,6 +44,7 @@ HPCC_SLIBS_YES =
|
||||
HPCC_SLIBS_NO=
|
||||
HPCC_SHRLIB_CFLAGS_YES = +Z
|
||||
HPCC_SHRLIB_LDFLAGS_YES = -b
|
||||
HPCC_DEP_CFLAGS=+DAportable
|
||||
|
||||
#Old HP C++ compiler
|
||||
#CCC = CC
|
||||
@@ -67,11 +69,12 @@ CCC_SHRLIB_CFLAGS_YES = +Z
|
||||
# then by searching the specified path (see below)
|
||||
CCC_SHRLIB_LDFLAGS_YES = -b
|
||||
CCC_DEPENDS_FLAG = +m
|
||||
CCC_DEP_CFLAGS=+DAportable
|
||||
|
||||
# +DAportable causes portable object code to be created for execution
|
||||
# on different PA-Risc machines
|
||||
ARCH_DEP_CFLAGS = -D_HPUX_SOURCE -DHP_UX +DAportable
|
||||
ARCH_DEP_CXXFLAGS = -D_HPUX_SOURCE -DHP_UX +DAportable
|
||||
ARCH_DEP_CFLAGS = -D_HPUX_SOURCE -DHP_UX
|
||||
ARCH_DEP_CXXFLAGS = -D_HPUX_SOURCE -DHP_UX
|
||||
ARCH_DEP_LDLIBS =
|
||||
ARCH_DEP_LDFLAGS = -Wl,+b$(DEFAULT_SHRLIB_SEARCH_PATH),+s
|
||||
|
||||
|
||||
@@ -11,6 +11,6 @@ CMPLR_SUFFIX = 68k
|
||||
ARCH_CLASS = 68k
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68030
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=MC68030 -DNICPU030
|
||||
ARCH_DEP_CFLAGS = -m68030
|
||||
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
EPICS_VERSION=3
|
||||
EPICS_REVISION=14
|
||||
EPICS_MODIFICATION=0
|
||||
EPICS_UPDATE_NAME=alpha
|
||||
EPICS_UPDATE_LEVEL=2
|
||||
EPICS_UPDATE_NAME=beta
|
||||
EPICS_UPDATE_LEVEL=1
|
||||
|
||||
EPICS_LOCAL_NAME=B
|
||||
EPICS_LOCAL_VERSION=0
|
||||
|
||||
@@ -22,3 +22,15 @@ endif
|
||||
endif
|
||||
|
||||
HOST_ARCH := $(EPICS_HOST_ARCH)
|
||||
|
||||
# Note:
|
||||
# The EPICS_HOST_ARCH solaris-sparc-gnu is new for base release R3.14
|
||||
# so existing R3.13 applications, when HOST_ARCH is set to solaris and
|
||||
# when built with R3.14, will look for base solaris-sparc directories
|
||||
# and not solaris-sparc-gnu. If you plan to build R3.13 applications
|
||||
# against a solaris-sparc-gnu built R3.14 base, you should set
|
||||
# ANSI=GCC and CPLUSPLUS=G++ in base/config/CONFIG_SITE.Host.solaris
|
||||
# and change ARCH_solaris=solaris-sparc to ARCH_solaris=solaris-sparc-gnu
|
||||
# in base/config/CONFIG_COMPAT.
|
||||
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ TORNADO=YES
|
||||
# VxWorks directory for TORNADO=YES
|
||||
#VX_DIR_YES=c:\\Tornado
|
||||
#VX_DIR_YES = /usr/local/vw/tornado101
|
||||
VX_DIR_YES = /usr/local/vw/tornado20
|
||||
VX_DIR_YES = /usr/local/vw/tornado202
|
||||
|
||||
# VxWorks directory for TORNADO=NO
|
||||
#VX_DIR_NO=$(VW)
|
||||
|
||||
@@ -11,8 +11,8 @@ INSTALL_CONFIG = $(INSTALL_LOCATION)/config
|
||||
CONFIGS += $(subst ../,,$(wildcard ../CONFIG*))
|
||||
CONFIGS += $(subst ../,,$(wildcard ../RULES*))
|
||||
|
||||
BIN_INSTALLS += $(wildcard ../tools/*.pl)
|
||||
BIN_INSTALLS += ../tools/installEpics
|
||||
SCRIPTS_HOST += $(wildcard ../tools/*.pl)
|
||||
SCRIPTS_HOST += ../tools/installEpics
|
||||
|
||||
include $(TOP)/configure/RULES
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ MAKEBPT = $(EPICS_BASE_HOST_BIN)/makeBpt$(EXE)
|
||||
ifndef MSI
|
||||
# Tool from R3.14 extensions bin, R3.13 extensions bin, or user path
|
||||
MSI = $(firstword $(wildcard $(EPICS_EXTENSIONS_HOST_BIN)/msi$(HOSTEXE) \
|
||||
$(EPICS_EXTENSIONS)/bin/$(HOST_OS_CLASS)/msi$(HOSTEXE)) msi$(HOSTEXE))
|
||||
$(EPICS_EXTENSIONS)/bin/$(HOST_ARCH)/msi$(HOSTEXE)) msi$(HOSTEXE))
|
||||
endif
|
||||
|
||||
DBEXPAND = $(EPICS_BASE_HOST_BIN)/dbExpand$(EXE)
|
||||
|
||||
@@ -306,11 +306,6 @@ LIBTARGETS += $(LIBNAME) $(INSTALL_LIBS)
|
||||
LIBNAME_RCS=$(foreach lib, $(basename $(LIBRARY)), $(RCS) $($(lib)_RCS) $($(lib)_RCS_$(ARCH_CLASS)))
|
||||
LIBNAME_RESS=$(addsuffix $(RES), $(basename $(LIBNAME_RCS)))
|
||||
|
||||
ifneq ($(words $(DLL_LIBS)), $(words $(DLL_DEPLIBS)))
|
||||
# If invalid library names, don't make DLL file
|
||||
SHARED_LIBRARIES = NO
|
||||
endif
|
||||
|
||||
# check if shared libraries requested
|
||||
ifeq ($(strip $(SHARED_LIBRARIES)),YES)
|
||||
|
||||
@@ -329,8 +324,6 @@ endif # LIBOBJS
|
||||
endif # LIBRARY
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Main targets
|
||||
|
||||
all:: install
|
||||
|
||||
build:: inc
|
||||
@@ -520,9 +513,11 @@ $(PACKAGE)_%.h:$(INSTALL_JAVA)/$(PACKAGE)/%.class
|
||||
# The order of the following rules is
|
||||
# VERY IMPORTANT !!!!
|
||||
|
||||
depends:: $(LIBSRCS) $(SRCS) $(COND_PROD_SRCS)
|
||||
depends:: $(LIBSRCS) $(SRCS) $(COND_PROD_SRCS) $(SRCS.c) $(SRCS.cc)
|
||||
$(RM) DEPENDS
|
||||
ifneq ($(strip $(LIBSRCS) $(SRCS) $(COND_PROD_SRCS) $(SRCS.c) $(SRCS.cc)),)
|
||||
$(DEPENDS_RULE)
|
||||
endif
|
||||
|
||||
ifeq ($(HOST_ARCH),Borland)
|
||||
%$(EXE): %.c
|
||||
@@ -633,7 +628,7 @@ endif
|
||||
%.db: ../%.edf
|
||||
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) $<
|
||||
|
||||
%.edf: ../%.sch
|
||||
%.edf: ../%.sch $(DEPSCHS)
|
||||
@if [ ! -f cad.rc -a -r ../cad.rc ] ; then ln -s ../cad.rc ; fi
|
||||
$(SCH2EDIF) $(SCH2EDIF_SYSFLAGS) $(SCH2EDIF_FLAGS) $<
|
||||
|
||||
|
||||
@@ -77,7 +77,9 @@ endif
|
||||
|
||||
depends:: $(SRCS.c) $(SRCS.cc)
|
||||
$(RM) DEPENDS
|
||||
ifneq ($(strip $(SRCS.c) $(SRCS.cc)),)
|
||||
$(DEPENDS_RULE)
|
||||
endif
|
||||
|
||||
clean::
|
||||
@echo "Cleaning"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
# UNIX-cp in Perl
|
||||
|
||||
use File::Copy;
|
||||
use File::Basename;
|
||||
|
||||
sub Usage
|
||||
{
|
||||
@@ -26,7 +27,8 @@ if (-d $target)
|
||||
{
|
||||
foreach $file ( @sources )
|
||||
{
|
||||
copy ($file, "$target/$file");
|
||||
$base=basename($file);
|
||||
copy ($file, "$target/$base");
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -37,7 +37,7 @@ $install_dir =~ s[/$][]; # remove trailing '/'
|
||||
$install_dir =~ s[//][/]g; # replace '//' by '/'
|
||||
|
||||
# Do we have to create the directory?
|
||||
unless (-d $install_dir)
|
||||
unless ( (-d $install_dir) || (-l $install_dir) )
|
||||
{
|
||||
# Create dir only if -d option given
|
||||
Usage ("$install_dir does not exist") unless ($opt_d);
|
||||
|
||||
@@ -9,16 +9,22 @@ eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
|
||||
|
||||
while ($line = <STDIN>)
|
||||
{
|
||||
next if ($line =~ /__?GLOBAL_.F.+/);
|
||||
next if ($line =~ /__?GLOBAL_.I._GLOBAL_.D.+/);
|
||||
if ($line =~ /__?GLOBAL_.D.+/) {
|
||||
($adr,$type,$name) = split ' ',$line,3;
|
||||
chop $name;
|
||||
$name =~ s/^__/_/;
|
||||
next if ( $name =~ /^__?GLOBAL_.D.*.\.cpp/ );
|
||||
next if ( $name =~ /^__?GLOBAL_.D.\.\./ );
|
||||
@dtorlist = (@dtorlist,$name);
|
||||
};
|
||||
if ($line =~ /__?GLOBAL_.I.+/) {
|
||||
($adr,$type,$name) = split ' ',$line,3;
|
||||
chop $name;
|
||||
$name =~ s/^__/_/;
|
||||
next if ( $name =~ /^__?GLOBAL_.I.*.\.cpp/ );
|
||||
next if ( $name =~ /^__?GLOBAL_.I.\.\./ );
|
||||
@ctorlist = (@ctorlist,$name);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -22,6 +22,10 @@ foreach $arg ( @ARGV )
|
||||
{
|
||||
rmdir ($arg) or die "Cannot delete $arg";
|
||||
}
|
||||
if (-d $arg)
|
||||
{
|
||||
die "Failed to delete $arg";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -12,11 +12,12 @@ CROSS = YES
|
||||
GNU_TARGET_INCLUDE_DIR = $(GNU_DIR)/$(GNU_TARGET)/include
|
||||
GNU_TARGET_LIB_DIR = $(GNU_DIR)/$(GNU_TARGET)/lib
|
||||
|
||||
export GCC_EXEC_PREFIX = $(GNU_LIB)/gcc-lib/
|
||||
|
||||
CROSS_CPPFLAGS = -nostdinc
|
||||
CROSS_CFLAGS = -B$(GNU_LIB)/gcc-lib/
|
||||
CROSS_INCLUDES = $(addprefix -I,$(GNU_TARGET_INCLUDE_DIR))
|
||||
CROSS_LDFLAGS = $(addprefix -L,$(GNU_TARGET_LIB_DIR))
|
||||
|
||||
|
||||
# All cross builds use the gnu compiler
|
||||
include $(CONFIG)/CONFIG.gnuCommon
|
||||
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
GNU_BIN = $(GNU_DIR)/bin
|
||||
GNU_LIB = $(GNU_DIR)/lib
|
||||
|
||||
export GCC_EXEC_PREFIX = $(GNU_LIB)/gcc-lib/
|
||||
|
||||
CC = $(GNU_BIN)/$(CMPLR_PREFIX)cc$(CMPLR_SUFFIX)
|
||||
CCC = $(GNU_BIN)/$(CMPLR_PREFIX)cc$(CMPLR_SUFFIX)
|
||||
AR = $(GNU_BIN)/$(CMPLR_PREFIX)ar$(CMPLR_SUFFIX) -rc
|
||||
@@ -23,10 +21,7 @@ WARN_CFLAGS_NO = -w
|
||||
OPT_CFLAGS_YES = -O3
|
||||
OPT_CFLAGS_NO = -g
|
||||
|
||||
# Template instantiation c++ flags
|
||||
TEMPL_INST_CXXFLAG = -DEXPL_TEMPL
|
||||
|
||||
CODE_CXXFLAGS = -fPIC
|
||||
CODE_CXXFLAGS = -fPIC -fno-implicit-templates
|
||||
CONFORM_CXXFLAGS_NORMAL = -ansi -pedantic
|
||||
CONFORM_CXXFLAGS_STRICT = -ansi -pedantic
|
||||
#WARN_CXXFLAGS_YES = -Wall -Weffc++
|
||||
@@ -42,5 +37,5 @@ STATIC_LDFLAGS_NO =
|
||||
SHRLIB_LDFLAGS_YES = -shared
|
||||
SHRLIB_LDFLAGS_NO =
|
||||
|
||||
DEPENDS_FLAG = -MM
|
||||
HDEPENDS_FLAGS_CMPLR = -MM
|
||||
|
||||
|
||||
@@ -203,12 +203,13 @@ endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(PROD_LIBS_$(OS_CLASS))),)
|
||||
PROD_LIBS += $(subst -nil-,,$(PROD_LIBS_$(OS_CLASS)))
|
||||
PROD_LDLIBS += $(subst -nil-,,$(PROD_LIBS_$(OS_CLASS)))
|
||||
else
|
||||
ifdef PROD_LIBS_DEFAULT
|
||||
PROD_LIBS += $(PROD_LIBS_DEFAULT)
|
||||
PROD_LDLIBS += $(PROD_LIBS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
PROD_LDLIBS += $(PROD_LIBS)
|
||||
|
||||
ifneq ($(strip $(SHRLIB_LIBS_$(OS_CLASS))),)
|
||||
SHRLIB_LIBS += $(subst -nil-,,$(SHRLIB_LIBS_$(OS_CLASS)))
|
||||
@@ -219,12 +220,13 @@ endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(USR_LIBS_$(OS_CLASS))),)
|
||||
USR_LIBS += $(subst -nil-,,$(USR_LIBS_$(OS_CLASS)))
|
||||
USR_LDLIBS += $(subst -nil-,,$(USR_LIBS_$(OS_CLASS)))
|
||||
else
|
||||
ifdef USR_LIBS_DEFAULT
|
||||
USR_LIBS += $(USR_LIBS_DEFAULT)
|
||||
USR_LDLIBS += $(USR_LIBS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
USR_LDLIBS += $(USR_LIBS)
|
||||
|
||||
#
|
||||
# concat specific library contents (if defined) to SYS_PROD_LIBS
|
||||
@@ -241,10 +243,26 @@ endif
|
||||
# concat specific products
|
||||
#
|
||||
ifneq ($(strip $(PROD_$(OS_CLASS))),)
|
||||
PROD += $(subst -nil-,,$(PROD_$(OS_CLASS)))
|
||||
PROD+=$(subst -nil-,,$(PROD_$(OS_CLASS)))
|
||||
else
|
||||
ifdef PROD_DEFAULT
|
||||
PROD += $(PROD_DEFAULT)
|
||||
ifneq (,$(strip $(PROD_DEFAULT)))
|
||||
PROD+=$(PROD_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(PROD_IOC_$(OS_CLASS))),)
|
||||
PROD_IOC+=$(subst -nil-,,$(PROD_IOC_$(OS_CLASS)))
|
||||
else
|
||||
ifneq (,$(strip $(PROD_IOC_DEFAULT)))
|
||||
PROD_IOC+=$(PROD_IOC_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(PROD_HOST_$(OS_CLASS))),)
|
||||
PROD_HOST+=$(subst -nil-,,$(PROD_HOST_$(OS_CLASS)))
|
||||
else
|
||||
ifneq (,$(strip $(PROD_HOST_DEFAULT)))
|
||||
PROD_HOST+=$(PROD_HOST_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -252,10 +270,26 @@ endif
|
||||
# concat specific products
|
||||
#
|
||||
ifneq ($(strip $(TESTPROD_$(OS_CLASS))),)
|
||||
TESTPROD += $(subst -nil-,,$(TESTPROD_$(OS_CLASS)))
|
||||
TESTPROD+=$(subst -nil-,,$(TESTPROD_$(OS_CLASS)))
|
||||
else
|
||||
ifdef TESTPROD_DEFAULT
|
||||
TESTPROD += $(TESTPROD_DEFAULT)
|
||||
ifneq (,$(strip $(TESTPROD_DEFAULT)))
|
||||
TESTPROD+=$(TESTPROD_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(TESTPROD_IOC_$(OS_CLASS))),)
|
||||
TESTPROD_IOC+=$(subst -nil-,,$(TESTPROD_IOC_$(OS_CLASS)))
|
||||
else
|
||||
ifneq (,$(strip $(TESTPROD_IOC_DEFAULT)))
|
||||
TESTPROD_IOC+=$(TESTPROD_IOC_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(TESTPROD_HOST_$(OS_CLASS))),)
|
||||
TESTPROD_HOST+=$(subst -nil-,,$(TESTPROD_HOST_$(OS_CLASS)))
|
||||
else
|
||||
ifneq (,$(strip $(TESTPROD_HOST_DEFAULT)))
|
||||
TESTPROD_HOST+=$(TESTPROD_HOST_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -270,6 +304,22 @@ SCRIPTS += $(SCRIPTS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(SCRIPTS_IOC_$(OS_CLASS))),)
|
||||
SCRIPTS_IOC+=$(subst -nil-,,$(SCRIPTS_IOC_$(OS_CLASS)))
|
||||
else
|
||||
ifneq (,$(strip $(SCRIPTS_IOC_DEFAULT)))
|
||||
SCRIPTS_IOC+=$(SCRIPTS_IOC_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(SCRIPTS_HOST_$(OS_CLASS))),)
|
||||
SCRIPTS_HOST+=$(subst -nil-,,$(SCRIPTS_HOST_$(OS_CLASS)))
|
||||
else
|
||||
ifneq (,$(strip $(SCRIPTS_HOST_DEFAULT)))
|
||||
SCRIPTS_HOST+=$(SCRIPTS_HOST_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# concat specific resource files
|
||||
#
|
||||
|
||||
@@ -6,44 +6,32 @@ endif
|
||||
# Epics base directories
|
||||
|
||||
EPICS_BASE_HOST_BIN = $(EPICS_BASE)/bin/$(EPICS_HOST_ARCH)
|
||||
EPICS_BASE_HOST_LIB = $(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)
|
||||
EPICS_EXTENSIONS_HOST_BIN = $(EPICS_EXTENSIONS)/bin/$(EPICS_HOST_ARCH)
|
||||
EPICS_EXTENSIONS_HOST_LIB = $(EPICS_EXTENSIONS)/lib/$(EPICS_HOST_ARCH)
|
||||
EPICS_BASE_INCLUDE = $(EPICS_BASE)/include
|
||||
|
||||
ifdef T_A
|
||||
EPICS_BASE_LIB = $(EPICS_BASE)/lib/$(T_A)
|
||||
EPICS_BASE_BIN = $(EPICS_BASE)/bin/$(T_A)
|
||||
endif
|
||||
|
||||
#Definitions for extensions convenience
|
||||
As_DIR = $(EPICS_BASE_LIB)
|
||||
ca_DIR = $(EPICS_BASE_LIB)
|
||||
cas_DIR = $(EPICS_BASE_LIB)
|
||||
Com_DIR = $(EPICS_BASE_LIB)
|
||||
dbtoolsIoc_DIR = $(EPICS_BASE_LIB)
|
||||
iocsh_DIR = $(EPICS_BASE_LIB)
|
||||
miscIoc_DIR = $(EPICS_BASE_LIB)
|
||||
rsrvIoc_DIR = $(EPICS_BASE_LIB)
|
||||
registryIoc_DIR = $(EPICS_BASE_LIB)
|
||||
asHost_DIR = $(EPICS_BASE_LIB)
|
||||
asIoc_DIR = $(EPICS_BASE_LIB)
|
||||
ca_DIR = $(EPICS_BASE_LIB)
|
||||
cas_DIR = $(EPICS_BASE_LIB)
|
||||
dbIoc_DIR = $(EPICS_BASE_LIB)
|
||||
dbStaticHost_DIR = $(EPICS_BASE_LIB)
|
||||
dbStaticIoc_DIR = $(EPICS_BASE_LIB)
|
||||
dbtoolsIoc_DIR = $(EPICS_BASE_LIB)
|
||||
gdd_DIR = $(EPICS_BASE_LIB)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# For applications and extensions
|
||||
|
||||
# add epics/base include directories
|
||||
ifneq ($(strip $(EPICS_BASE)),$(strip $(TOP)))
|
||||
ifneq ($(strip $(EPICS_BASE)),$(strip $(INSTALL_LOCATION)))
|
||||
INSTALL_INCLUDES += \
|
||||
-I$(EPICS_BASE_INCLUDE)/os/$(OS_CLASS) \
|
||||
-I$(EPICS_BASE_INCLUDE)
|
||||
endif
|
||||
endif
|
||||
iocsh_DIR = $(EPICS_BASE_LIB)
|
||||
miscIoc_DIR = $(EPICS_BASE_LIB)
|
||||
registryIoc_DIR = $(EPICS_BASE_LIB)
|
||||
rsrvIoc_DIR = $(EPICS_BASE_LIB)
|
||||
recIoc_DIR = $(EPICS_BASE_LIB)
|
||||
softDevIoc_DIR = $(EPICS_BASE_LIB)
|
||||
testDevIoc_DIR = $(EPICS_BASE_LIB)
|
||||
recIocObj_DIR = $(EPICS_BASE_LIB)
|
||||
softDevIocObj_DIR = $(EPICS_BASE_LIB)
|
||||
testDevIocObj_DIR = $(EPICS_BASE_LIB)
|
||||
iocCore_DIR = $(EPICS_BASE_LIB)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Version number for base shared libraries (and win32 products)
|
||||
@@ -56,11 +44,7 @@ endif # EPICS_BASE
|
||||
#---------------------------------------------------------------
|
||||
# Epics base c preprocessor flags
|
||||
|
||||
# c++ exceptions
|
||||
CXX_EXCEPTIONS = YES
|
||||
CXX_EXCEPTIONS_FLAGS_YES =
|
||||
CXX_EXCEPTIONS_FLAGS_NO = -DnoExceptionsFromCXX
|
||||
EPICS_BASE_CPPFLAGS = $(CXX_EXCEPTIONS_FLAGS_$(CXX_EXCEPTIONS))
|
||||
EPICS_BASE_CPPFLAGS =
|
||||
|
||||
# osithread default stack
|
||||
OSITHREAD_USE_DEFAULT_STACK = YES
|
||||
@@ -73,8 +57,7 @@ EPICS_BASE_CPPFLAGS += $(OSITHREAD_DEFAULT_STACK_FLAGS_$(OSITHREAD_USE_DEFAULT_S
|
||||
|
||||
MAKEBPT = $(EPICS_BASE_HOST_BIN)/makeBpt$(HOSTEXE)
|
||||
DBEXPAND = $(EPICS_BASE_HOST_BIN)/dbExpand$(HOSTEXE)
|
||||
MAKEDBDEPENDS = $(PERL) $(TOOLS)/makeDbDepends.pl
|
||||
MAKEDBDDEPENDS = $(EPICS_BASE_HOST_BIN)/dbMakeDBDDepends$(HOSTEXE)
|
||||
MKMF = $(PERL) $(TOOLS)/mkmf.pl
|
||||
REPLACEVAR = $(PERL) $(TOOLS)/replaceVAR.pl
|
||||
DBTORECORDTYPEH = $(EPICS_BASE_HOST_BIN)/dbToRecordtypeH$(HOSTEXE)
|
||||
DBTOMENUH = $(EPICS_BASE_HOST_BIN)/dbToMenuH$(HOSTEXE)
|
||||
@@ -82,48 +65,38 @@ REGISTERRECORDDEVICEDRIVER = $(PERL) $(EPICS_BASE_HOST_BIN)/registerRecordDevice
|
||||
|
||||
# private versions of lex/yacc from EPICS
|
||||
EYACC = $(EPICS_BASE_HOST_BIN)/antelope$(HOSTEXE)
|
||||
ELEX = $(EPICS_BASE_HOST_BIN)/e_flex$(HOSTEXE) -S$(EPICS_BASE_INCLUDE)/flex.skel.static
|
||||
ELEX = $(EPICS_BASE_HOST_BIN)/e_flex$(HOSTEXE) -S$(EPICS_BASE)/include/flex.skel.static
|
||||
|
||||
YACC = $(EYACC)
|
||||
LEX = $(ELEX)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# External tools and tool flags
|
||||
# External tools and tool flags - must be in path or defined in application
|
||||
|
||||
# adl2dl
|
||||
ifndef ADL2DL
|
||||
# Tool from R3.14 extensions bin, R3.13 extensions bin, or user path
|
||||
ADL2DL = $(firstword $(wildcard $(EPICS_EXTENSIONS_HOST_BIN)/adl2dl \
|
||||
$(EPICS_EXTENSIONS)/bin/$(HOST_OS_CLASS)/adl2dl) adl2dl)
|
||||
ADL2DL = adl2dl
|
||||
endif
|
||||
|
||||
# sch2edif compiler and flags
|
||||
SCH2EDIF = sch2edif
|
||||
SCH2EDIF_PATH =
|
||||
SCH2EDIF_SYSFLAGS = -n -ap -p.+..+$(SCH2EDIF_PATH)+$(EPICS_EXTENSIONS)/templates/capfast/sym+
|
||||
SCH2EDIF_SYSFLAGS = -n -ap -p.+..+$(SCH2EDIF_PATH)+$(CAPFAST_TEMPLATES)/sym+
|
||||
SCH2EDIF_FLAGS =
|
||||
|
||||
# e2db and flags
|
||||
# - again there is an assumption where edb.def is installed.
|
||||
ifndef E2DB
|
||||
# Tool from R3.14 extensions bin, R3.13 extensions bin, or user path
|
||||
E2DB = $(firstword $(wildcard $(EPICS_EXTENSIONS_HOST_BIN)/e2db \
|
||||
$(EPICS_EXTENSIONS)/bin/$(HOST_OS_CLASS)/e2db) e2db)
|
||||
E2DB = e2db
|
||||
endif
|
||||
E2DB_SYSFLAGS = -ate -d $(EPICS_EXTENSIONS)/templates/capfast/edb.def
|
||||
E2DB_SYSFLAGS = -ate -d $(CAPFAST_TEMPLATES)/edb.def
|
||||
E2DB_FLAGS =
|
||||
|
||||
#dbst
|
||||
ifndef DBST
|
||||
# Tool from R3.14 extensions bin, R3.13 extensions bin, or user path
|
||||
DBST = $(firstword $(wildcard $(EPICS_EXTENSIONS_HOST_BIN)/dbst \
|
||||
$(EPICS_EXTENSIONS)/bin/$(HOST_OS_CLASS)/dbst) dbst)
|
||||
DBST = dbst
|
||||
endif
|
||||
|
||||
#msi
|
||||
ifndef MSI
|
||||
# Tool from R3.14 extensions bin, R3.13 extensions bin, or user path
|
||||
MSI = $(firstword $(wildcard $(EPICS_EXTENSIONS_HOST_BIN)/msi$(HOSTEXE) \
|
||||
$(EPICS_EXTENSIONS)/bin/$(HOST_OS_CLASS)/msi$(HOSTEXE)) msi$(HOSTEXE))
|
||||
MSI = msi
|
||||
endif
|
||||
|
||||
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
EPICS_VERSION=3
|
||||
EPICS_REVISION=14
|
||||
EPICS_MODIFICATION=0
|
||||
EPICS_UPDATE_NAME=alpha
|
||||
EPICS_UPDATE_LEVEL=2
|
||||
EPICS_UPDATE_NAME=beta
|
||||
EPICS_UPDATE_LEVEL=1
|
||||
|
||||
EPICS_VERSION_STRING="EPICS Version ${EPICS_VERSION}.${EPICS_REVISION}.${EPICS_MODIFICATION}.${EPICS_UPDATE_NAME}${EPICS_UPDATE_LEVEL}"
|
||||
|
||||
|
||||
@@ -24,12 +24,18 @@ BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)
|
||||
CONFIG_TARGETS += CONFIG_APP_INCLUDE RULES_INCLUDE
|
||||
CONFIG_INSTALLS += ../RULES_BUILD
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Check configure/RELEASE file for consistency
|
||||
CHECK_RELEASE_YES = checkRelease
|
||||
CHECK_RELEASE_NO =
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Cross compile default, HOST or CROSS, CONFIG.crossCommon will override
|
||||
BUILD_CLASS = HOST
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Divider and suffix
|
||||
# Prefix and suffix
|
||||
DEP=.depends
|
||||
DIVIDER = .
|
||||
OBJ = .
|
||||
RES = .
|
||||
@@ -79,7 +85,7 @@ INSTALL_BIN = $(INSTALL_LOCATION_BIN)/$(T_A)
|
||||
#--------------------------------------------------
|
||||
# vpath directories
|
||||
GENERIC_SRC_DIRS = .. $(SRC_DIRS)
|
||||
OS_SRC_DIRS += . $(foreach dir, $(SRC_DIRS) .., \
|
||||
OS_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \
|
||||
$(dir)/os/$(OS_CLASS) $(dir)/os/posix $(dir)/os/default )
|
||||
ALL_SRC_DIRS = $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)
|
||||
|
||||
@@ -96,6 +102,8 @@ OBJSNAME = $(addsuffix $(OBJ),$(basename $(OBJS)))
|
||||
PRODNAME = $(addsuffix $(EXE),$(basename $(PROD)))
|
||||
TESTPRODNAME = $(addsuffix $(EXE),$(basename $(TESTPROD)))
|
||||
|
||||
SHRLIBNAME = $(SHRLIBNAME_$(SHARED_LIBRARIES))
|
||||
|
||||
#--------------------------------------------------
|
||||
# obj files
|
||||
|
||||
@@ -150,30 +158,37 @@ USR_INCLUDES =
|
||||
USR_CFLAGS =
|
||||
USR_CXXFLAGS =
|
||||
USR_LDFLAGS =
|
||||
USR_LDLIBS =
|
||||
USR_LIBS =
|
||||
USR_CPPFLAGS =
|
||||
USR_DBDFLAGS =
|
||||
USR_ARFLAGS =
|
||||
|
||||
# Target specific options
|
||||
TARGET_INCLUDES = $($(basename $@)_INCLUDES) $($(basename $@)_INCLUDES_$(OS_CLASS))
|
||||
TARGET_CFLAGS = $($(basename $@)_CFLAGS) $($(basename $@)_CFLAGS_$(OS_CLASS))
|
||||
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS) $($(basename $@)_CXXFLAGS_$(OS_CLASS))
|
||||
TARGET_LDFLAGS = $($(basename $@)_LDFLAGS) $($(basename $@)_LDFLAGS_$(OS_CLASS))
|
||||
TARGET_LDLIBS = $($(basename $@)_LDLIBS) $($(basename $@)_LDLIBS_$(OS_CLASS))
|
||||
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS) $($(basename $@)_CPPFLAGS_$(OS_CLASS))
|
||||
TARGET_INCLUDES = $($(basename $@)_INCLUDES_$(OS_CLASS)) $($(basename $@)_INCLUDES)
|
||||
TARGET_CFLAGS = $($(basename $@)_CFLAGS_$(OS_CLASS)) $($(basename $@)_CFLAGS)
|
||||
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS_$(OS_CLASS)) $($(basename $@)_CXXFLAGS)
|
||||
TARGET_LDFLAGS = $($(basename $@)_LDFLAGS_$(OS_CLASS)) $($(basename $@)_LDFLAGS)
|
||||
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS_$(OS_CLASS)) $($(basename $@)_CPPFLAGS)
|
||||
|
||||
# Level of ansi conformance flags
|
||||
CONFORM_CFLAGS = $(CONFORM_CFLAGS_$(CMPLR))
|
||||
CONFORM_CXXFLAGS = $(CONFORM_CXXFLAGS_$(CMPLR))
|
||||
CONFORM_CPPFLAGS = $(CONFORM_CPPFLAGS_$(firstword $($(basename $@)_CMPLR_$(T_A)) \
|
||||
$($(basename $@)_CMPLR_$(OS_CLASS)) $($(basename $@)_CMPLR) $(CMPLR)))
|
||||
CONFORM_CFLAGS = $(CONFORM_CFLAGS_$(firstword $($(basename $@)_CMPLR_$(T_A)) \
|
||||
$($(basename $@)_CMPLR_$(OS_CLASS)) $($(basename $@)_CMPLR) $(CMPLR)))
|
||||
CONFORM_CXXFLAGS = $(CONFORM_CXXFLAGS_$(firstword $($(basename $@)_CMPLR_$(T_A)) \
|
||||
$($(basename $@)_CMPLR_$(OS_CLASS)) $($(basename $@)_CMPLR) $(CXXCMPLR)))
|
||||
|
||||
# Warnings flags
|
||||
WARN_CFLAGS = $(WARN_CFLAGS_$($(BUILD_CLASS)_WARN))
|
||||
WARN_CXXFLAGS = $(WARN_CXXFLAGS_$($(BUILD_CLASS)_WARN))
|
||||
WARN_CFLAGS = $(WARN_CFLAGS_$(firstword $($(basename $@)_WARN_$(T_A)) \
|
||||
$($(basename $@)_WARN_$(OS_CLASS)) $($(basename $@)_WARN) $($(BUILD_CLASS)_WARN)))
|
||||
WARN_CXXFLAGS = $(WARN_CXXFLAGS_$(firstword $($(basename $@)_WARN_$(T_A)) \
|
||||
$($(basename $@)_WARN_$(OS_CLASS)) $($(basename $@)_WARN) $($(BUILD_CLASS)_WARN)))
|
||||
|
||||
# Optimization flags
|
||||
OPT_CFLAGS = $(OPT_CFLAGS_$($(BUILD_CLASS)_OPT))
|
||||
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$($(BUILD_CLASS)_OPT))
|
||||
OPT_CFLAGS = $(OPT_CFLAGS_$(firstword $($(basename $@)_OPT_$(T_A)) \
|
||||
$($(basename $@)_OPT_$(OS_CLASS)) $($(basename $@)_OPT) $($(BUILD_CLASS)_OPT)))
|
||||
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$(firstword $($(basename $@)_OPT_$(T_A)) \
|
||||
$($(basename $@)_OPT_$(OS_CLASS)) $($(basename $@)_OPT) $($(BUILD_CLASS)_OPT)))
|
||||
|
||||
# Posix flags
|
||||
POSIX=YES
|
||||
@@ -189,8 +204,8 @@ STATIC_LDLIBS = $(STATIC_LDLIBS_$(STATIC_BUILD))
|
||||
#--------------------------------------------------
|
||||
# Flags
|
||||
|
||||
INCLUDES = -I. $(GENERIC_SRC_INCLUDES) $(INSTALL_INCLUDES) $(TARGET_INCLUDES)\
|
||||
$(USR_INCLUDES) $(OP_SYS_INCLUDES) $(CROSS_INCLUDES)
|
||||
INCLUDES = -I. $(GENERIC_SRC_INCLUDES) $(INSTALL_INCLUDES) $(RELEASE_INCLUDES)\
|
||||
$(TARGET_INCLUDES) $(USR_INCLUDES) $(OP_SYS_INCLUDES) $(CROSS_INCLUDES)
|
||||
|
||||
CFLAGS = $(CONFORM_CFLAGS) $(CROSS_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS)\
|
||||
$(WARN_CFLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS)\
|
||||
@@ -198,17 +213,16 @@ CFLAGS = $(CONFORM_CFLAGS) $(CROSS_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS)\
|
||||
|
||||
CXXFLAGS = $(CONFORM_CXXFLAGS) $(CROSS_CXXFLAGS) $(OPT_CXXFLAGS)\
|
||||
$(DEBUG_CXXFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS) $(USR_CXXFLAGS)\
|
||||
$(ARCH_DEP_CXXFLAGS) $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS)\
|
||||
$(TEMPL_INST_CXXFLAG) $(CROSS_CXXFLAGS)
|
||||
$(ARCH_DEP_CXXFLAGS) $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS)
|
||||
|
||||
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(DEPLIB_LDFLAGS)\
|
||||
$(ARCH_DEP_LDFLAGS) $(STATIC_LDFLAGS) $(OP_SYS_LDFLAGS) $(CROSS_LDFLAGS)
|
||||
|
||||
LDLIBS = $(TARGET_LDLIBS) $(USR_LDLIBS) $(DEPLIB_LDLIBS) $(STATIC_LDLIBS)\
|
||||
LDLIBS = $(DEPLIB_LDLIBS) $(STATIC_LDLIBS)\
|
||||
$(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(OP_SYS_LDLIBS)
|
||||
|
||||
CPPFLAGS += $(CROSS_CPPFLAGS) $(POSIX_CPPFLAGS) $(EPICS_BASE_CPPFLAGS)\
|
||||
$(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\
|
||||
CPPFLAGS += $(CONFORM_CPPFLAGS) $(CROSS_CPPFLAGS) $(POSIX_CPPFLAGS)\
|
||||
$(EPICS_BASE_CPPFLAGS) $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\
|
||||
$(OP_SYS_CPPFLAGS) $(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)
|
||||
|
||||
#--------------------------------------------------
|
||||
@@ -229,16 +243,34 @@ COMPILE.cpp = $(CCC) -c $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) $(SOURCE_CXXFLAG)
|
||||
#--------------------------------------------------
|
||||
# Build depends command here
|
||||
|
||||
DEPENDS.cpp = $(CCC)
|
||||
DEPENDSFLAGS += $(CPPFLAGS) $(INCLUDES) $(DEPENDS_FLAG)
|
||||
DEPENDS_CMD.cpp = -$(DEPENDS.cpp) $(DEPENDSFLAGS) $(DEPENDS_SRC_FILES) > DEPENDS
|
||||
HOST_HDEPENDS_CMD = MKMF
|
||||
CROSS_HDEPENDS_CMD = MKMF
|
||||
|
||||
HDEPENDS_CMD = $($(BUILD_CLASS)_HDEPENDS_CMD)
|
||||
|
||||
HDEPENDS.c_CMPLR = $(CC)
|
||||
HDEPENDS.cpp_CMPLR = $(CCC)
|
||||
HDEPENDSFLAGS_CMPLR += $(CPPFLAGS) $(INCLUDES) $< > $*$(DEP)
|
||||
|
||||
HDEPENDS.c_MKMF = $(PERL) $(TOOLS)/mkmf.pl
|
||||
HDEPENDS.cpp_MKMF = $(PERL) $(TOOLS)/mkmf.pl
|
||||
HDEPENDSFLAGS_MKMF = -m $*$(DEP) $(HDEPENDS_INCLUDES_MKMF) $@ $<
|
||||
HDEPENDS_INCLUDES_MKMF = $(filter .%,$(subst -I,,$(INCLUDES)))
|
||||
|
||||
HDEPENDS.c = $(HDEPENDS.c_$(HDEPENDS_CMD))
|
||||
HDEPENDS.cpp = $(HDEPENDS.cpp_$(HDEPENDS_CMD))
|
||||
HDEPENDSFLAGS = $(HDEPENDSFLAGS_$(HDEPENDS_CMD))
|
||||
HDEPENDS_FLAGS = $(HDEPENDS_FLAGS_$(HDEPENDS_CMD))
|
||||
HDEPENDS_CMD.c = -$(HDEPENDS.c) $(HDEPENDS_FLAGS) $(HDEPENDSFLAGS)
|
||||
HDEPENDS_CMD.cpp = -$(HDEPENDS.cpp) $(HDEPENDS_FLAGS) $(HDEPENDSFLAGS)
|
||||
HDEPENDS_TARGETS_CMD = $(PERL) $(TOOLS)/makeDependsTargets.pl $*$(DEP)
|
||||
|
||||
#--------------------------------------------------
|
||||
# depends definition
|
||||
|
||||
TARGET_SRCS = $(foreach name, $(TESTPROD) $(PROD) $(LIBRARY), $($(name)_SRCS))
|
||||
SRC_FILES = $(foreach src, $(LIB_SRCS) $(LIBSRCS) $(SRCS) $(PROD_SRCS) $(TARGET_SRCS) , \
|
||||
$(firstword $(wildcard $(addsuffix /$(src),$(ALL_SRC_DIRS))) $(src)))
|
||||
DEPENDS_SRC_FILES = $(SRC_FILES)
|
||||
SRC_FILES = $(LIB_SRCS) $(LIBSRCS) $(SRCS) $(PROD_SRCS) $(TARGET_SRCS)
|
||||
HDEPENDS_FILES = $(addsuffix $(DEP),$(notdir $(basename $(SRC_FILES))))
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Names of installed items
|
||||
@@ -248,7 +280,7 @@ DEPENDS_SRC_FILES = $(SRC_FILES)
|
||||
|
||||
INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)
|
||||
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)
|
||||
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_LIB)/%)
|
||||
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)
|
||||
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)
|
||||
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)
|
||||
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)
|
||||
|
||||
@@ -24,22 +24,33 @@
|
||||
# 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 network interfaces found; NO = only use
|
||||
# EPICS_CA_ADDR_LIST to create this list.
|
||||
#
|
||||
# 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_MAX_ARRAY_BYTES
|
||||
# This parameter specifies the size (in bytes) of the largest array
|
||||
# that will transport through CA. It must be specified for both the
|
||||
# client and the server library.
|
||||
#
|
||||
|
||||
EPICS_CA_ADDR_LIST=""
|
||||
EPICS_CA_AUTO_ADDR_LIST=YES
|
||||
EPICS_CA_CONN_TMO=30.0
|
||||
EPICS_CA_REPEATER_PORT=5065
|
||||
EPICS_CA_SERVER_PORT=5064
|
||||
EPICS_CA_MAX_ARRAY_BYTES=16384
|
||||
|
||||
#
|
||||
# These parameters are only used by the CA server library
|
||||
@@ -111,40 +122,39 @@ EPICS_CA_SERVER_PORT=5064
|
||||
# --------------------------------------------------
|
||||
#
|
||||
# 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".
|
||||
# server's host and on the client's host. This can be checked
|
||||
# on UNIX with "netstat -i" or "ifconfig -a"; on vxWorks with
|
||||
# ifShow; and on windows with ipconfig.
|
||||
#
|
||||
# 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.
|
||||
# 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).
|
||||
# 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 a common
|
||||
# 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 etc.
|
||||
EPICS_IOC_LOG_PORT=7004
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
# override
|
||||
#
|
||||
#CROSS_COMPILER_TARGET_ARCHS=
|
||||
CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040
|
||||
CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040 vxWorks-ppc604
|
||||
|
||||
|
||||
# If only a subset of the host architectures perform
|
||||
@@ -74,7 +74,8 @@ 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: os/CONFIG.$(EPICS_HOST_ARCH).$(EPICS_HOST_ARCH) files and
|
||||
# os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(EPICS_HOST_ARCH) files may override
|
||||
#
|
||||
# NOTE WIN32: YES results in a DLL. CONFIG_SITE.Host.WIN32
|
||||
# distribution file contains YES override
|
||||
@@ -88,6 +89,11 @@ SHARED_LIBRARIES=NO
|
||||
# must be either YES or NO
|
||||
STATIC_BUILD=NO
|
||||
|
||||
# Should header dependancy files be automatically generated
|
||||
# for each C/C++ created object file?
|
||||
# must be either YES or NO
|
||||
HDEPENDS=YES
|
||||
|
||||
# Host build optimization
|
||||
# must be either YES or NO
|
||||
HOST_OPT=YES
|
||||
|
||||
@@ -19,10 +19,12 @@
|
||||
# Site-specific environment settings
|
||||
|
||||
# Time service:
|
||||
# EPICS_TS_MIN_WEST the local time difference from GMT.
|
||||
# EPICS_TIMEZONE needed for vxWorks
|
||||
# EPICS_TIMEZONE=<name>::<minutesWest>:<start daylight>:<end daylight>
|
||||
# eg EPICS_TIMEZONE=CUS::360:033102:102802
|
||||
# EPICS_TS_NTP_INET ntp or Unix time server ip addr.
|
||||
|
||||
EPICS_TS_MIN_WEST=360
|
||||
EPICS_TIMEZONE=CUS::360:033102:102802
|
||||
EPICS_TS_NTP_INET=
|
||||
|
||||
|
||||
|
||||
@@ -3,5 +3,4 @@
|
||||
# NOTE: RELEASE.$(EPICS_HOST_ARCH) files will override
|
||||
|
||||
# Tornado directory
|
||||
#VX_DIR = /usr/local/vw/tornado101
|
||||
VX_DIR = /usr/local/vw/tornado20
|
||||
VX_DIR = /usr/local/vw/tornado202
|
||||
|
||||
@@ -6,12 +6,14 @@ vpath %.dbd $(USR_VPATH) $(GENERIC_SRC_DIRS) $(dir $(DBD)) $(COMMON_DIR)
|
||||
vpath %.db $(USR_VPATH) $(GENERIC_SRC_DIRS) $(dir $(DB)) $(COMMON_DIR)
|
||||
vpath %.substitutions $(USR_VPATH) $(GENERIC_SRC_DIRS) $(COMMON_DIR)
|
||||
vpath %.template $(USR_VPATH) $(GENERIC_SRC_DIRS) $(COMMON_DIR)
|
||||
vpath %.edf $(USR_VPATH) $(GENERIC_SRC_DIRS) $(COMMON_DIR)
|
||||
vpath bpt%.data $(USR_VPATH) $(GENERIC_SRC_DIRS) $(COMMON_DIR)
|
||||
|
||||
##################################################### dbdflags
|
||||
|
||||
# dbExpand
|
||||
INSTALL_DBDFLAGS += -I $(INSTALL_LOCATION)/dbd
|
||||
DBDFLAGS = $(USR_DBDFLAGS) -I . -I .. $(INSTALL_DBDFLAGS)
|
||||
DBDFLAGS = $(USR_DBDFLAGS) -I . -I .. $(INSTALL_DBDFLAGS) $(RELEASE_DBDFLAGS)
|
||||
|
||||
##################################################### Targets
|
||||
|
||||
@@ -21,7 +23,7 @@ DBD += $(DBDNAME)
|
||||
DBD += $(addsuffix .dbd,$(patsubst %.h,%,$(patsubst %.db,%,$(DBDINC))))
|
||||
INC += $(addsuffix .h,$(patsubst %.h,%,$(patsubst %.db,%,$(DBDINC))))
|
||||
|
||||
INSTALL_DBDS += $(DBD:%= $(INSTALL_DBD)/%)
|
||||
INSTALL_DBDS += $(addprefix $(INSTALL_DBD)/,$(notdir $(DBD)))
|
||||
|
||||
COMMON_DBDS += $(filter $(COMMON_DIR)/%, $(foreach file, $(DBD), \
|
||||
$(firstword $(SOURCE_DBD) $(COMMON_DIR)/$(file) ) ) )
|
||||
@@ -37,8 +39,19 @@ SOURCE_DB = $(wildcard $(file) $(SOURCE_DB_bbb) )
|
||||
SOURCE_DB_bbb = $(foreach dir, $(GENERIC_SRC_DIRS), $(SOURCE_DB_aaa) )
|
||||
SOURCE_DB_aaa = $(addsuffix /$(file), $(dir) )
|
||||
|
||||
COMMONS = $(COMMON_DIR)/*.dbd $(COMMON_DIR)/*.db $(COMMON_DIR)/*.h $(COMMON_DIR)/*.substitutions $(COMMON_DIR)/*.template
|
||||
COMMONS = $(COMMON_DIR)/*.dbd $(COMMON_DIR)/*.db $(COMMON_DIR)/*.h \
|
||||
$(COMMON_DIR)/*.substitutions $(COMMON_DIR)/*.template
|
||||
|
||||
##################################################### dependancies
|
||||
|
||||
HINC += $(addsuffix .h,$(patsubst %.h,%,$(patsubst %.db,%,$(DBDINC))))
|
||||
COMMON_DBDINC += $(addprefix $(COMMON_DIR),$(HINC))
|
||||
|
||||
DBDDEPENDS_FILES += $(addsuffix $(DEP),$(COMMON_DBDS) \
|
||||
$(COMMON_DBDINC) $(COMMON_DBS))
|
||||
|
||||
DBDDEPENDS_FLAGS = $(filter .%,$(subst -I,,$(filter-out -S%,$(DBDFLAGS))))
|
||||
DBDDEPENDS_CMD=@-$(MKMF) -m $@$(DEP) $(DBDDEPENDS_FLAGS) $@ $<
|
||||
|
||||
#####################################################
|
||||
|
||||
@@ -61,19 +74,26 @@ install: buildInstall
|
||||
|
||||
rebuild: clean install
|
||||
|
||||
.PHONY: all inc depends build install clean rebuild buildInstall
|
||||
.PHONY: all inc build install clean rebuild buildInstall
|
||||
|
||||
endif # T_A defined
|
||||
|
||||
ifneq (,$(strip $(DBDDEPENDS_FILES)))
|
||||
-include $(DBDDEPENDS_FILES)
|
||||
endif
|
||||
|
||||
$(DBDDEPENDS_FILES):
|
||||
|
||||
##################################################### build dependancies, clean rule
|
||||
|
||||
inc : $(COMMON_INC) $(INSTALL_INC)
|
||||
|
||||
build : $(COMMON_DBDS) $(COMMON_DBS) \
|
||||
$(INSTALL_DBDS) $(INSTALL_DBS)
|
||||
$(INSTALL_DBDS) $(INSTALL_DBS) \
|
||||
$(DBDDEPENDS_FILES)
|
||||
|
||||
clean::
|
||||
@$(RM) $(COMMONS)
|
||||
@$(RM) $(COMMONS) $(DBDDEPENDS_FILES)
|
||||
@$(RM) *_registerRecordDeviceDriver.cpp
|
||||
|
||||
##################################################### "Foreign" templates
|
||||
@@ -104,10 +124,7 @@ $(COMMON_DIR)/%.edf: ../%.sch $(DEPSCHS)
|
||||
|
||||
##################################################### Substitution files
|
||||
|
||||
#$(COMMON_DIR)/%.substitutions: ../%.substitutions $(COMMON_DIR)/%.template
|
||||
# @$(CP) $< $@
|
||||
|
||||
# WARNING: CREATESUBSTITUTIONS script need output dir on command line
|
||||
# WARNING: CREATESUBSTITUTIONS script needs output dir on command line
|
||||
|
||||
ifdef CREATESUBSTITUTIONS
|
||||
$(COMMON_DIR)/%.substitutions:
|
||||
@@ -118,18 +135,7 @@ endif
|
||||
|
||||
##################################################### Template files
|
||||
|
||||
#$(COMMON_DIR)/%.template: ../%.template
|
||||
# @$(CP) $< $@
|
||||
|
||||
$(COMMON_DIR)/%.template:
|
||||
@$(TOUCH) $@
|
||||
|
||||
$(COMMON_DIR)/%.template: $(COMMON_DIR)/%.edf
|
||||
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $@.VAR $<
|
||||
@$(REPLACEVAR) < $@.VAR > $@
|
||||
@$(RM) $@.VAR
|
||||
|
||||
$(COMMON_DIR)/%.template: ../%.edf
|
||||
$(COMMON_DIR)/%.template: %.edf
|
||||
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $@.VAR $<
|
||||
@$(REPLACEVAR) < $@.VAR > $@
|
||||
@$(RM) $@.VAR
|
||||
@@ -138,39 +144,28 @@ $(COMMON_DIR)/%.template: ../%.edf
|
||||
|
||||
##################################################### INC files
|
||||
|
||||
$(COMMON_DIR)/%Record.h: ../%Record.dbd
|
||||
$(COMMON_DIR)/%Record.h: %Record.dbd
|
||||
@$(RM) $@
|
||||
$(DBTORECORDTYPEH) $(DBDFLAGS) $< $@
|
||||
|
||||
$(COMMON_DIR)/menu%.h: ../menu%.dbd
|
||||
|
||||
$(COMMON_DIR)/menu%.h: menu%.dbd
|
||||
@$(RM) $@
|
||||
$(DBTOMENUH) $< $@
|
||||
|
||||
|
||||
##################################################### DBD files
|
||||
|
||||
$(COMMON_DIR)/bpt%.dbd: ../bpt%.data
|
||||
$(RM) $@
|
||||
$(MAKEBPT) $< $@
|
||||
|
||||
$(COMMON_DIR)/bpt%.dbd: bpt%.data
|
||||
$(RM) $@
|
||||
@$(RM) $@
|
||||
$(MAKEBPT) $< $@
|
||||
|
||||
$(COMMON_DIR)/%.dbd: ../%Include.dbd
|
||||
@echo "Expanding dbd"
|
||||
$(RM) $@
|
||||
$(DBEXPAND) $(DBDFLAGS) $< > $@
|
||||
|
||||
$(COMMON_DIR)/%.dbd: %Include.dbd
|
||||
@$(RM) $@$(DEP)
|
||||
@$(DBDDEPENDS_CMD)
|
||||
@echo "Expanding dbd"
|
||||
$(RM) $@
|
||||
@$(RM) $@
|
||||
$(DBEXPAND) $(DBDFLAGS) $< > $@
|
||||
|
||||
$(INSTALL_DBD)/%: $(COMMON_DIR)/%
|
||||
@echo "Installing dbd file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
$(INSTALL_DBD)/%: ../%
|
||||
$(INSTALL_DBD)/%: %
|
||||
@echo "Installing dbd file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
@@ -178,20 +173,14 @@ $(INSTALL_DBD)/%: ../%
|
||||
|
||||
##################################################### DB files
|
||||
|
||||
$(COMMON_DIR)/%.db$(RAW): ../%.db
|
||||
$(CP) $< $@
|
||||
|
||||
$(COMMON_DIR)/%.db$(RAW): $(COMMON_DIR)/%.edf
|
||||
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $@.VAR $<
|
||||
@$(REPLACEVAR) < $@.VAR > $@
|
||||
@$(RM) $@.VAR
|
||||
|
||||
$(COMMON_DIR)/%.db$(RAW): ../%.edf
|
||||
$(COMMON_DIR)/%.db$(RAW): %.edf
|
||||
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $@.VAR $<
|
||||
@$(REPLACEVAR) < $@.VAR > $@
|
||||
@$(RM) $@.VAR
|
||||
|
||||
$(COMMON_DIR)/%.db$(RAW): %.substitutions %.template
|
||||
@$(RM) $@$(DEP)
|
||||
@$(DBDDEPENDS_CMD)
|
||||
@echo "Inflating database from $<"
|
||||
@$(RM) $@
|
||||
$(MSI) -S $^ > $@
|
||||
@@ -199,6 +188,9 @@ $(COMMON_DIR)/%.db$(RAW): %.substitutions %.template
|
||||
# dbst based database optimization
|
||||
ifeq '$(DB_OPT)' 'YES'
|
||||
|
||||
$(COMMON_DIR)/%.db$(RAW): %.db
|
||||
$(CP) $< $@
|
||||
|
||||
$(COMMON_DIR)/%.db: $(COMMON_DIR)/%.db$(RAW)
|
||||
@echo "Optimizing database $@"
|
||||
$(DBST) . $< -d > $@
|
||||
@@ -206,15 +198,9 @@ $(COMMON_DIR)/%.db: $(COMMON_DIR)/%.db$(RAW)
|
||||
RAW=.raw
|
||||
|
||||
.PRECIOUS: $(DB:%=$(COMMON_DIR)/%$(RAW))
|
||||
else
|
||||
|
||||
$(INSTALL_DB)/%: %
|
||||
@echo "Installing db file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
endif
|
||||
|
||||
$(INSTALL_DB)/%: $(COMMON_DIR)/%
|
||||
$(INSTALL_DB)/%: %
|
||||
@echo "Installing db file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
@@ -222,35 +208,11 @@ $(INSTALL_DB)/%: $(COMMON_DIR)/%
|
||||
|
||||
##################################################### register record,device,driver support
|
||||
|
||||
%_registerRecordDeviceDriver.cpp: $(COMMON_DIR)/%.dbd
|
||||
$(RM) $@
|
||||
$(REGISTERRECORDDEVICEDRIVER) $< > $@
|
||||
|
||||
%_registerRecordDeviceDriver.cpp: ../%.dbd
|
||||
$(RM) $@
|
||||
$(REGISTERRECORDDEVICEDRIVER) $< > $@
|
||||
|
||||
##################################################### DB dependancies
|
||||
|
||||
ifneq (,$(COMMON_DBS))
|
||||
DBDEPENDS: $(COMMON_DBS:$(COMMON_DIR)/%.db=%.substitutions) $(COMMON_DBS:$(COMMON_DIR)/%.db=%.template)
|
||||
@echo 'Creating DB dependancy file $@'
|
||||
@echo "Making template database dependencies"
|
||||
@$(MAKEDBDEPENDS) $^
|
||||
|
||||
-include DBDEPENDS
|
||||
endif
|
||||
|
||||
##################################################### DBD dependancies
|
||||
|
||||
ifneq (,$(wildcard $(patsubst %.dbd,../%Include.dbd,$(notdir $(COMMON_DBDS)))))
|
||||
DBDDEPENDS_%: ../%Include.dbd
|
||||
@echo 'Creating DBD dependancy file $@'
|
||||
%_registerRecordDeviceDriver.cpp: %.dbd
|
||||
@$(RM) $@
|
||||
$(MAKEDBDDEPENDS) $(DBDFLAGS) $(COMMON_DIR)/$*.dbd $< > $@
|
||||
|
||||
-include $(patsubst ../%Include.dbd,DBDDEPENDS_%,$(wildcard $(patsubst %.dbd,../%Include.dbd,$(notdir $(COMMON_DBDS)))))
|
||||
endif
|
||||
$(REGISTERRECORDDEVICEDRIVER) $< > $@
|
||||
|
||||
.PRECIOUS: %_registerRecordDeviceDriver.cpp
|
||||
|
||||
##################################################### END OF FILE
|
||||
|
||||
|
||||
18
configure/RULES.ioc
Normal file
18
configure/RULES.ioc
Normal file
@@ -0,0 +1,18 @@
|
||||
#RULES.ioc
|
||||
include $(EPICS_BASE)/configure/RULES_DIRS
|
||||
|
||||
build: buildInstall
|
||||
install: buildInstall
|
||||
|
||||
buildInstall: $(TARGETS)
|
||||
|
||||
cdCommands: $(wildcard $(TOP)/config/RELEASE*)
|
||||
ifeq ($(IOCS_APPL_TOP),)
|
||||
$(PERL) $(TOOLS)/convertRelease.pl -a $(ARCH) $@
|
||||
else
|
||||
$(PERL) $(TOOLS)/convertRelease.pl -a $(ARCH) -t $(IOCS_APPL_TOP) $@
|
||||
endif
|
||||
|
||||
clean:
|
||||
@$(RM) cdCommands
|
||||
|
||||
@@ -4,13 +4,14 @@
|
||||
|
||||
all: install
|
||||
|
||||
build install buildInstall: $(CHECK_RELEASE_$(CHECK_RELEASE))
|
||||
|
||||
rebuild: clean all
|
||||
|
||||
ACTIONS = inc
|
||||
ACTIONS += build
|
||||
ACTIONS += install
|
||||
ACTIONS += buildInstall
|
||||
ACTIONS += depends
|
||||
ACTIONS += browse
|
||||
|
||||
actionPart = $(word 1, $(subst $(DIVIDER), ,$@))
|
||||
@@ -24,7 +25,7 @@ buildDirs = $(addprefix O.,$(BUILD_ARCHS))
|
||||
$(actionArchTargets) : $(buildDirs) O.Common
|
||||
$(MAKE) -C O.$(archPart) -f ../Makefile TOP=$(TOP)/.. T_A=$(archPart) $(actionPart)
|
||||
|
||||
$(BUILD_ARCHS) : % : O.%
|
||||
$(BUILD_ARCHS) : % : O.% O.Common
|
||||
$(MAKE) -C O.$@ -f ../Makefile TOP=$(TOP)/.. T_A=$@
|
||||
|
||||
$(ACTIONS):%: $(foreach arch, $(BUILD_ARCHS), %$(DIVIDER)$(arch))
|
||||
@@ -35,6 +36,9 @@ $(buildDirs):
|
||||
O.Common:
|
||||
$(MKDIR) O.Common
|
||||
|
||||
checkRelease: $(wildcard $(TOP)/configure/RELEASE*)
|
||||
$(PERL) $(TOOLS)/convertRelease.pl -h $(EPICS_HOST_ARCH) -t $(TOP) $@
|
||||
|
||||
#
|
||||
# special clean rule
|
||||
#
|
||||
@@ -48,4 +52,5 @@ clean$(DIVIDER)% ::
|
||||
.PHONY : $(buildActionArchTargets)
|
||||
.PHONY : $(buildArchs)
|
||||
.PHONY : $(ACTIONS) clean all
|
||||
.PHONY : checkRelease
|
||||
|
||||
|
||||
@@ -28,13 +28,18 @@
|
||||
# vpath, of course, has the disadvantage that we need explicit rules
|
||||
# for scripts or similar os-specific filed which have _no_ suffix...
|
||||
|
||||
ifndef BASE_RULES_BUILD
|
||||
BASE_RULES_BUILD=1
|
||||
|
||||
vpath %.c $(USR_VPATH) $(ALL_SRC_DIRS)
|
||||
vpath %.cc $(USR_VPATH) $(ALL_SRC_DIRS)
|
||||
vpath %.cpp $(USR_VPATH) $(ALL_SRC_DIRS)
|
||||
vpath %.C $(USR_VPATH) $(ALL_SRC_DIRS)
|
||||
vpath %.rc $(USR_VPATH) $(ALL_SRC_DIRS)
|
||||
vpath %.h $(USR_VPATH) $(ALL_SRC_DIRS)
|
||||
vpath %.skel.static $(USR_VPATH) $(GENERIC_SRC_DIRS)
|
||||
vpath %.skel.static $(USR_VPATH) $(ALL_SRC_DIRS)
|
||||
vpath %.y $(USR_VPATH) $(ALL_SRC_DIRS)
|
||||
vpath %.l $(USR_VPATH) $(ALL_SRC_DIRS)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
|
||||
@@ -46,18 +51,17 @@ include $(CONFIG)/CONFIG_ADDONS
|
||||
ifeq ($(findstring Host,$(VALID_BUILDS)),Host)
|
||||
LIBRARY += $(LIBRARY_HOST)
|
||||
OBJS += $(OBJS_HOST)
|
||||
else
|
||||
PROD = $(PROD_$(OS_CLASS))
|
||||
TESTPROD = $(TESTPROD_$(OS_CLASS))
|
||||
ifneq ($(findstring Ioc,$(VALID_BUILDS)),Ioc)
|
||||
LIBRARY = $(LIBRARY_$(OS_CLASS))
|
||||
OBJS = $(OBJS_$(OS_CLASS))
|
||||
endif
|
||||
PROD += $(PROD_HOST)
|
||||
SCRIPTS += $(SCRIPTS_HOST)
|
||||
TESTPROD += $(TESTPROD_HOST)
|
||||
endif
|
||||
|
||||
ifeq ($(findstring Ioc,$(VALID_BUILDS)),Ioc)
|
||||
LIBRARY += $(LIBRARY_IOC)
|
||||
OBJS += $(OBJS_IOC)
|
||||
PROD += $(PROD_IOC)
|
||||
SCRIPTS += $(SCRIPTS_IOC)
|
||||
TESTPROD += $(TESTPROD_IOC)
|
||||
endif
|
||||
|
||||
#---------------------------------------------------------------
|
||||
@@ -73,6 +77,14 @@ endif
|
||||
|
||||
all: install
|
||||
|
||||
-include $(CONFIG)/RULES.Db
|
||||
|
||||
ifeq ($(HDEPENDS),YES)
|
||||
ifneq (,$(strip $(HDEPENDS_FILES)))
|
||||
-include $(HDEPENDS_FILES)
|
||||
endif
|
||||
endif
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Create included Makefile for prod,testprod, and library targets
|
||||
|
||||
@@ -86,18 +98,18 @@ MakefileInclude: ../Makefile
|
||||
|
||||
endif # PROD, TESTPROD, or LIBRARY defined
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Products and Object libraries
|
||||
#
|
||||
PRODTARGETS += $(PRODNAME) $(MUNCHNAME) $(CTDT_SRCS) $(CTDT_OBJS) $(NMS)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Libraries
|
||||
#
|
||||
|
||||
LIBTARGETS += $(LIBNAME)
|
||||
LIBTARGETS += $(MUNCHNAME) $(LIBRARY_CTDT_SRCS) $(LIBRARY_CTDT_OBJS) $(LIBRARY_NM)
|
||||
ifneq (,$(strip $(LIBTARGETS)))
|
||||
LIBTARGETS += $(INSTALL_LIBS) $(INSTALL_MUNCHS)
|
||||
ifeq ($(strip $(SHARED_LIBRARIES)),YES)
|
||||
LIBTARGETS += $(INSTALL_LIBS)
|
||||
LIBTARGETS += $(SHRLIBNAME) $(INSTALL_SHRLIBS) $(INSTALL_DLL_LINK_LIBS)
|
||||
endif # SHARED_LIBRARIES=YES
|
||||
endif # LIBTARGETS
|
||||
|
||||
#---------------------------------------------------------------
|
||||
ifneq ($(CONFIG),$(TOP)/configure)
|
||||
@@ -118,11 +130,11 @@ install: buildInstall
|
||||
|
||||
rebuild: clean install
|
||||
|
||||
build: $(OBJSNAME) $(LIBTARGETS) $(PRODNAME) $(TESTPRODNAME) \
|
||||
build: $(OBJSNAME) $(LIBTARGETS) $(PRODTARGETS) $(TESTPRODNAME) \
|
||||
$(TARGETS)
|
||||
|
||||
buildInstall : \
|
||||
$(INSTALL_SCRIPTS) $(INSTALL_PROD) \
|
||||
$(INSTALL_SCRIPTS) $(INSTALL_PROD) $(INSTALL_MUNCHS) \
|
||||
$(INSTALL_TCLLIBS) $(INSTALL_TCLINDEX) \
|
||||
$(INSTALL_OBJS) \
|
||||
$(INSTALL_DOCS) \
|
||||
@@ -136,13 +148,10 @@ endif
|
||||
|
||||
clean::
|
||||
@echo "Cleaning"
|
||||
@$(RM) *.i *$(OBJ) *.a $(PRODNAME) $(TESTPRODNAME) $(LIBNAME) $(SHRLIBNAME)\
|
||||
@$(RM) *.i *$(OBJ) *.a $(TESTPRODNAME) $(LIBNAME) $(SHRLIBNAME)\
|
||||
$(INC) *$(RES) $(TARGETS) \
|
||||
*.out MakefileInclude \
|
||||
$(COMMON_INC)
|
||||
ifdef MUNCHNAME
|
||||
@$(RM) $(MUNCHNAME) $(LIBRARY_CTDT_SRCS) $(LIBRARY_CTDT_OBJS) $(LIBRARY_NM)
|
||||
endif
|
||||
$(COMMON_INC) $(HDEPENDS_FILES) $(PRODTARGETS)
|
||||
ifdef BAF
|
||||
@$(RM) $(PROD_BAF) $(LIB_BAF) *$(BOF)
|
||||
endif
|
||||
@@ -171,34 +180,52 @@ $(DIRECTORY_TARGETS) :
|
||||
# The order of the following rules is
|
||||
# VERY IMPORTANT !!!!
|
||||
|
||||
depends: inc $(DEPENDS_SRC_FILES)
|
||||
@$(RM) DEPENDS
|
||||
@touch DEPENDS
|
||||
ifneq (,$(strip $(DEPENDS_SRC_FILES)))
|
||||
$(DEPENDS_CMD.cpp)
|
||||
endif
|
||||
|
||||
$(TESTPRODNAME) $(PRODNAME):%$(EXE): $(PRODUCT_OBJS) $(PROD_RESS) $(PROD_DEPLIBS)
|
||||
@$(RM) $@
|
||||
$(LINK.cpp)
|
||||
$(PURIFY_$(OS_CLASS)) $(LINK.cpp)
|
||||
|
||||
# object libs for R3.13 vxWorks compatibility only
|
||||
$(OBJLIBNAME):%$(OBJ): $(OBJLIB_LD_OBJS)
|
||||
@$(RM) $@
|
||||
$(OBJLIB_LINK.cpp)
|
||||
|
||||
%_ctdt$(OBJ) : %_ctdt.c
|
||||
@$(RM) $@
|
||||
$(COMPILE.c) -traditional $<
|
||||
|
||||
%$(OBJ): %.c
|
||||
ifeq ($(HDEPENDS),YES)
|
||||
@$(RM) $*$(DEP)
|
||||
@$(HDEPENDS_CMD.c)
|
||||
@$(HDEPENDS_TARGETS_CMD) $*$(DEP)
|
||||
endif
|
||||
@$(RM) $@
|
||||
$(COMPILE.c) $<
|
||||
|
||||
%$(OBJ): %.cc
|
||||
ifeq ($(HDEPENDS),YES)
|
||||
@$(RM) $*$(DEP)
|
||||
@$(HDEPENDS_CMD.cpp)
|
||||
@$(HDEPENDS_TARGETS_CMD) $*$(DEP)
|
||||
endif
|
||||
@$(RM) $@
|
||||
$(COMPILE.cpp) $<
|
||||
|
||||
%$(OBJ): %.cpp
|
||||
ifeq ($(HDEPENDS),YES)
|
||||
@$(RM) $*$(DEP)
|
||||
@$(HDEPENDS_CMD.cpp)
|
||||
@$(HDEPENDS_TARGETS_CMD) $*$(DEP)
|
||||
endif
|
||||
@$(RM) $@
|
||||
$(COMPILE.cpp) $<
|
||||
|
||||
%$(OBJ): %.C
|
||||
ifeq ($(HDEPENDS),YES)
|
||||
@$(RM) $*$(DEP)
|
||||
@$(HDEPENDS_CMD.cpp)
|
||||
@$(HDEPENDS_TARGETS_CMD) $*$(DEP)
|
||||
endif
|
||||
@$(RM) $@
|
||||
$(COMPILE.cpp) $<
|
||||
|
||||
@@ -218,20 +245,20 @@ $(TESTPRODNAME) $(PRODNAME):%$(EXE): $(PRODUCT_OBJS) $(PROD_RESS) $(PROD_DEPLIBS
|
||||
# are creating it
|
||||
#
|
||||
ifeq ($(findstring -d, $(YACCOPT)),-d)
|
||||
%.h %.c: ../%.y
|
||||
%.h %.c: %.y
|
||||
$(RM) $*.c y.tab.c
|
||||
$(RM) $*.h y.tab.h
|
||||
$(YACC) $(YACCOPT) $<
|
||||
$(MV) y.tab.c $*.c
|
||||
$(MV) y.tab.h $*.h
|
||||
else
|
||||
%.c: ../%.y
|
||||
%.c: %.y
|
||||
$(RM) $*.c y.tab.c
|
||||
$(YACC) $(YACCOPT) $<
|
||||
$(MV) y.tab.c $*.c
|
||||
endif
|
||||
|
||||
%.c: ../%.l
|
||||
%.c: %.l
|
||||
@$(RM) lex.yy.c
|
||||
$(LEX) $(LEXOPT) $<
|
||||
@$(RM) $@
|
||||
@@ -280,6 +307,10 @@ $(SHRLIBNAME):$(LIB_PREFIX)%$(SHRLIB_SUFFIX): $(LIBRARY_OBJS) $(LIBRARY_RESS)
|
||||
$(LINK.shrlib)
|
||||
|
||||
# C++ munching for VxWorks
|
||||
%.nm : %$(EXE)
|
||||
@$(RM) $@
|
||||
$(NM) $< > $@
|
||||
|
||||
%.nm : %$(OBJ)
|
||||
@$(RM) $@
|
||||
$(NM) $< > $@
|
||||
@@ -288,20 +319,17 @@ $(SHRLIBNAME):$(LIB_PREFIX)%$(SHRLIB_SUFFIX): $(LIBRARY_OBJS) $(LIBRARY_RESS)
|
||||
@$(RM) $@
|
||||
$(PERL) $(TOOLS)/munch.pl < $< > $@
|
||||
|
||||
$(MUNCHNAME):%.munch : %_ctdt$(OBJ) %.o
|
||||
$(MUNCHNAME):%.munch : %_ctdt$(OBJ) %$(EXE)
|
||||
@$(RM) $@
|
||||
$(LDCMD)
|
||||
|
||||
$(OBJLIB_MUNCHNAME):%.munch : %_ctdt$(OBJ) %$(OBJ)
|
||||
@$(RM) $@
|
||||
$(LDCMD)
|
||||
|
||||
# Ext, app and module rules
|
||||
CONFIG_APP_INCLUDE: $(wildcard $(TOP)/configure/RELEASE*)
|
||||
@$(RM) $@
|
||||
@$(PERL) $(TOOLS)/makeConfigAppInclude.pl $(EPICS_HOST_ARCH) $(T_A) $@ $(TOP)
|
||||
|
||||
RULES_INCLUDE: $(wildcard $(TOP)/configure/RELEASE*)
|
||||
@$(RM) $@
|
||||
@$(PERL) $(TOOLS)/makeRulesInclude.pl $(EPICS_HOST_ARCH) $(T_A) $@ $(TOP)
|
||||
|
||||
RULES_INCLUDE CONFIG_APP_INCLUDE: $(wildcard $(TOP)/configure/RELEASE*)
|
||||
$(PERL) $(TOOLS)/convertRelease.pl -h $(EPICS_HOST_ARCH) $@
|
||||
|
||||
binInstalls: $(BIN_INSTALLS)
|
||||
@echo "Installing $(^F)"
|
||||
@@ -392,14 +420,12 @@ $(INSTALL_TEMPLATES_SUBDIR)/%: %
|
||||
@echo "Installing $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
.PRECIOUS: %.i %.o %.c %.nm %.cpp
|
||||
.PRECIOUS: %.i %.o %.c %.nm %.cpp %.cc
|
||||
.PRECIOUS: $(COMMON_INC)
|
||||
|
||||
-include $(CONFIG)/RULES.Db
|
||||
|
||||
-include DEPENDS
|
||||
|
||||
.PHONY: all inc depends build install clean rebuild buildInstall binInstalls
|
||||
.PHONY: all inc build install clean rebuild buildInstall binInstalls
|
||||
|
||||
endif # BASE_RULES_BUILD
|
||||
# EOF RULES_BUILD
|
||||
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
|
||||
ARCHS += $(BUILD_ARCHS)
|
||||
ACTIONS += inc build install buildInstall depends clean
|
||||
ACTIONS += inc build install buildInstall clean
|
||||
|
||||
dirPart = $(word 1, $(subst $(DIVIDER), ,$@))
|
||||
actionArchPart = $(join $(word 2, $(subst $(DIVIDER), ,$@)), \
|
||||
|
||||
@@ -68,14 +68,12 @@ help:
|
||||
@echo " in all except the O.<arch> level Makefile"
|
||||
@echo " rebuild - Same as clean install"
|
||||
@echo " inc - Installs header files"
|
||||
@echo " depends - Generates include header file dependencies"
|
||||
@echo " build - Builds all targets"
|
||||
@echo "\"Partial\" build targets supported by Makefiles:"
|
||||
@echo " inc.<arch> - Installs <arch> only header files."
|
||||
@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 "Targets supported by top level Makefile:"
|
||||
@echo " uninstall - Cleans directories created by the install."
|
||||
@echo " distclean - Same as clean uninstall."
|
||||
|
||||
@@ -8,33 +8,35 @@
|
||||
TOP = ../../..
|
||||
include $(TOP)/configure/CONFIG
|
||||
|
||||
# Add-on CFLAGS that are needed by this Makefile.
|
||||
# Add-on CPPFLAGS that are needed by this Makefile.
|
||||
# (If possible, all system specific flags should be
|
||||
# defined in configure/os/CONFIG.<host>.<target>
|
||||
#
|
||||
# These CFLAGS rules also apply to these Makefile-variables:
|
||||
# These CPPFLAGS rules also apply to these Makefile-variables:
|
||||
# CPPFLAGS C preprocessor flags
|
||||
# CFLAGS C flags
|
||||
# CXXFLAGS C++ flags
|
||||
# LDFLAGS link flags
|
||||
#
|
||||
# This is used on all systems:
|
||||
USR_CFLAGS = -DVAR=value -Ddefine_for_all_systems
|
||||
USR_CPPFLAGS = -DVAR=value -Ddefine_for_all_systems
|
||||
# ..only for WIN32:
|
||||
USR_CFLAGS_WIN32 = -DVERSION='WIN32 port'
|
||||
USR_CPPFLAGS_WIN32 = -DVERSION='WIN32 port'
|
||||
#
|
||||
# -nil- is special:
|
||||
# if USR_CFLAGS_WIN32 was undefined or empty, .._DEFAULT would have
|
||||
# if USR_CPPFLAGS_WIN32 was undefined or empty, .._DEFAULT would have
|
||||
# been used.
|
||||
# To indicate
|
||||
# "yes, there is a special USR_CFLAGS for WIN32, but it's empty"
|
||||
# "yes, there is a special USR_CPPFLAGS for WIN32, but it's empty"
|
||||
# you have to set it to -nil-:
|
||||
USR_CFLAGS_WIN32 = -nil-
|
||||
USR_CPPFLAGS_WIN32 = -nil-
|
||||
# .. for all other arch classes:
|
||||
USR_CFLAGS_DEFAULT = -DVERSION='generic Unix'
|
||||
USR_CPPFLAGS_DEFAULT = -DVERSION='generic Unix'
|
||||
|
||||
# CFLAGS that are only used to compile a_file.c or a_file.cpp:
|
||||
# CPPFLAGS that are only used to compile a_file.c or a_file.cpp:
|
||||
#
|
||||
a_file_CFLAGS = -DIN_A_FILE
|
||||
a_file_CFLAGS_WIN32 = -DVERSION='WIN32 port'
|
||||
a_file_CPPFLAGS = -DIN_A_FILE
|
||||
a_file_CPPFLAGS_WIN32 = -DVERSION='WIN32 port'
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# general rule for all .c .cpp .h .hh files and scripts:
|
||||
|
||||
@@ -29,13 +29,14 @@ include $(CONFIG.CC)
|
||||
|
||||
#-------------------------------------------------------
|
||||
# RTEMS cross-development tools
|
||||
CC = $(CC_FOR_TARGET) $(GCCSPECS) -fasm
|
||||
CC = $(RTEMS_BASE)/bin/$(CC_FOR_TARGET) $(GCCSPECS) -fasm
|
||||
CCC = $(CC)
|
||||
CPP = $(CC_FOR_TARGET) -x c -E
|
||||
AR = $(AR_FOR_TARGET)
|
||||
LD = $(LD_FOR_TARGET) -r
|
||||
CPP = $(RTEMS_BASE)/bin/$(CC_FOR_TARGET) -x c -E
|
||||
AR = $(RTEMS_BASE)/bin/$(AR_FOR_TARGET)
|
||||
LD = $(RTEMS_BASE)/bin/$(LD_FOR_TARGET) -r
|
||||
RTEMS_LDFLAGS := $(LDFLAGS)
|
||||
LINK.cpp = $(CCC) -o $@ $(RTEMS_LDFLAGS) $(LDFLAGS) $(LINK_OBJS) $(PROD_LD_OBJS) $(PROD_LD_RESS) $(LDLIBS)
|
||||
RANLIB := $(RTEMS_BASE)/bin/$(RANLIB)
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Build types
|
||||
@@ -51,12 +52,12 @@ CFLAGS = $(CONFORM_CFLAGS) $(CROSS_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS)\
|
||||
CXXFLAGS = $(CONFORM_CXXFLAGS) $(CROSS_CXXFLAGS) $(OPT_CXXFLAGS)\
|
||||
$(DEBUG_CXXFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS) $(USR_CXXFLAGS)\
|
||||
$(ARCH_DEP_CXXFLAGS) $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS)\
|
||||
$(TEMPL_INST_CXXFLAG) $(CROSS_CXXFLAGS)
|
||||
$(CROSS_CXXFLAGS)
|
||||
|
||||
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(DEPLIB_LDFLAGS)\
|
||||
$(ARCH_DEP_LDFLAGS) $(STATIC_LDFLAGS) $(OP_SYS_LDFLAGS) $(CROSS_LDFLAGS)
|
||||
|
||||
LDLIBS = $(TARGET_LDLIBS) $(USR_LDLIBS) $(DEPLIB_LDLIBS) $(STATIC_LDLIBS)\
|
||||
LDLIBS = $(DEPLIB_LDLIBS) $(STATIC_LDLIBS)\
|
||||
$(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(OP_SYS_LDLIBS)
|
||||
|
||||
CPPFLAGS += $(CROSS_CPPFLAGS) $(POSIX_CPPFLAGS) $(EPICS_BASE_CPPFLAGS)\
|
||||
@@ -74,19 +75,15 @@ OS_CLASS = RTEMS
|
||||
|
||||
#--------------------------------------------------
|
||||
# Operating system flags
|
||||
OP_SYS_CPPFLAGS = -Dfopen=rtems_fopen -Dmain=rtems_main
|
||||
OP_SYS_LDLIBS = -lreadline -lcurses -lm
|
||||
OP_SYS_LDFLAGS = $(CPU_CFLAGS) -u Init -lCom \
|
||||
OP_SYS_CPPFLAGS = -Dmain=rtems_main
|
||||
OP_SYS_LDLIBS = -lrtemsall -lrtemsCom -lreadline -lcurses -lm
|
||||
OP_SYS_LDFLAGS = $(CPU_CFLAGS) -u Init \
|
||||
$(PROJECT_RELEASE)/lib/no-dpmem.rel \
|
||||
$(PROJECT_RELEASE)/lib/no-mp.rel \
|
||||
$(PROJECT_RELEASE)/lib/no-part.rel \
|
||||
$(PROJECT_RELEASE)/lib/no-signal.rel \
|
||||
$(PROJECT_RELEASE)/lib/no-rtmon.rel
|
||||
|
||||
#--------------------------------------------------
|
||||
# c++ exceptions, YES or NO
|
||||
CXX_EXCEPTIONS = YES
|
||||
|
||||
#--------------------------------------------------
|
||||
# RTEMS has neither shared libraries nor dynamic loading
|
||||
STATIC_BUILD=YES
|
||||
|
||||
@@ -8,4 +8,8 @@
|
||||
#
|
||||
RTEMS_TARGET_CPU=i386
|
||||
include $(CONFIG)/os/CONFIG.Common.RTEMS
|
||||
|
||||
#
|
||||
# Put text segment where it will work with etherboot
|
||||
#
|
||||
OP_SYS_LDFLAGS = -Wl,-Ttext,0x100000
|
||||
|
||||
@@ -30,7 +30,7 @@ SHRLIB_SUFFIX = .so$(addprefix .,$(SHRLIB_VERSION))
|
||||
# <lib> -> lib<lib>.a
|
||||
LIBNAME = $(BUILD_LIBRARY:%=$(LIB_PREFIX)%$(LIB_SUFFIX))
|
||||
# <lib> -> lib<lib>.so.<version>
|
||||
SHRLIBNAME = $(BUILD_LIBRARY:%=$(LIB_PREFIX)%$(SHRLIB_SUFFIX))
|
||||
SHRLIBNAME_YES = $(BUILD_LIBRARY:%=$(LIB_PREFIX)%$(SHRLIB_SUFFIX))
|
||||
|
||||
#-------------------------------------------------------
|
||||
# shrlib: dependancy definitions
|
||||
@@ -46,7 +46,7 @@ SHRLIB_LDFLAGS += $(sort $(SHRLIB_DEPLIB_DIRS:%=-L%))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Prod: dependancy definitions
|
||||
PROD_DEPLIBS = $(foreach lib,$(PROD_LIBS) $(USR_LIBS),$(firstword $(wildcard \
|
||||
PROD_DEPLIBS = $(foreach lib,$(PROD_LDLIBS) $(USR_LDLIBS),$(firstword $(wildcard \
|
||||
$($(lib)_DIR)/$(LIB_PREFIX)$(lib).*)))
|
||||
|
||||
#--------------------------------------------------
|
||||
@@ -54,7 +54,7 @@ $($(lib)_DIR)/$(LIB_PREFIX)$(lib).*)))
|
||||
DEPLIB_DIRS = $(dir $($*_DEPLIBS)) $(dir $(PROD_DEPLIBS))
|
||||
DEPLIB_LDFLAGS += $(sort $(DEPLIB_DIRS:%=-L%))
|
||||
|
||||
DEPLIB_LDLIBS = $($*_LIBS:%=-l%) $(PROD_LIBS:%=-l%) $(USR_LIBS:%=-l%)\
|
||||
DEPLIB_LDLIBS = $($*_LDLIBS:%=-l%) $(PROD_LDLIBS:%=-l%) $(USR_LDLIBS:%=-l%)\
|
||||
$($*_SYS_LIBS:%=-l%) $(SYS_PROD_LIBS:%=-l%)
|
||||
|
||||
#--------------------------------------------------
|
||||
|
||||
@@ -18,12 +18,9 @@ POSIX_CPPFLAGS_NO =
|
||||
POSIX_LDLIBS_YES +=
|
||||
POSIX_LDLIBS_NO +=
|
||||
|
||||
######################################################
|
||||
# +DAportable causes portable object code to be created for execution
|
||||
# on different PA-Risc machines
|
||||
OP_SYS_CPPFLAGS = -D_HPUX_SOURCE -DHP_UX
|
||||
OP_SYS_CFLAGS = +DAportable +z
|
||||
OP_SYS_CXXFLAGS = +DAportable +z
|
||||
OP_SYS_CFLAGS = +z
|
||||
OP_SYS_CXXFLAGS = +z
|
||||
OP_SYS_LDLIBS +=
|
||||
|
||||
SHRLIB_SUFFIX = .sl
|
||||
|
||||
34
configure/os/CONFIG.Common.linux-mpc82xx
Normal file
34
configure/os/CONFIG.Common.linux-mpc82xx
Normal file
@@ -0,0 +1,34 @@
|
||||
# $Id$
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for linux-mpc82xx target builds
|
||||
# Sites may override these definitions in CONFIG_SITE.Common.linux-mpc82xx
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Include definitions common to all Unix targets
|
||||
include $(CONFIG)/os/CONFIG.Common.UnixCommon
|
||||
|
||||
OS_CLASS = Linux
|
||||
ARCH_CLASS = mpc82xx
|
||||
|
||||
CODE_CPPFLAGS = -D_REENTRANT
|
||||
|
||||
POSIX_CPPFLAGS_YES = -D_POSIX_C_SOURCE=199506L -D_POSIX_THREADS
|
||||
POSIX_CPPFLAGS_NO =
|
||||
POSIX_LDLIBS_YES = -lpthread
|
||||
POSIX_LDLIBS_NO =
|
||||
|
||||
# -D_BSD_SOURCE for gethostname() in unistd.h as needed by cacChannelIO.cpp.
|
||||
OP_SYS_CPPFLAGS += -D_BSD_SOURCE
|
||||
OP_SYS_CPPFLAGS += -Dlinux
|
||||
OP_SYS_LDFLAGS =
|
||||
OP_SYS_LDLIBS = -lreadline -lcurses -lrt
|
||||
|
||||
#ARCH_DEP_CPPFLAGS += -D_X86_
|
||||
|
||||
ifdef CROSS
|
||||
GNU_TARGET=ppc_82xx
|
||||
CMPLR_SUFFIX=
|
||||
CMPLR_PREFIX=$(addsuffix -,$(GNU_TARGET))
|
||||
endif
|
||||
|
||||
@@ -27,6 +27,7 @@ OP_SYS_LDFLAGS =
|
||||
OP_SYS_LDLIBS = -lreadline -lcurses -lrt
|
||||
|
||||
ARCH_DEP_CPPFLAGS += -D_X86_
|
||||
ARCH_DEP_CFLAGS += -mpentium
|
||||
|
||||
ifdef CROSS
|
||||
GNU_TARGET=i586-pc-linux-gnu
|
||||
|
||||
@@ -16,12 +16,12 @@ ARCH_CLASS = sparc
|
||||
CODE_CPPFLAGS = -D__EXTENSIONS__
|
||||
|
||||
# This is the only combination of posix threads flags that works with solaris 6
|
||||
POSIX_CPPFLAGS_YES = -D_REENTRANT -D_POSIX_C_SOURCE=199506L
|
||||
POSIX_LDLIBS_YES += -lposix4 -lpthread -lthread
|
||||
####POSIX_CPPFLAGS_YES = -D_REENTRANT -D_POSIX_C_SOURCE=199506L
|
||||
####POSIX_LDLIBS_YES += -lposix4 -lpthread -lthread
|
||||
|
||||
# This set of flags is recommended by sun for posix threads and works with solaris 8
|
||||
####POSIX_CPPFLAGS_YES = -D_POSIX_C_SOURCE=199506L
|
||||
####POSIX_LDLIBS_YES += -lposix4 -lpthread
|
||||
POSIX_CPPFLAGS_YES = -D_POSIX_C_SOURCE=199506L
|
||||
POSIX_LDLIBS_YES += -lposix4 -lpthread
|
||||
|
||||
POSIX_CPPFLAGS_NO =
|
||||
POSIX_LDLIBS_NO +=
|
||||
|
||||
@@ -19,22 +19,51 @@ OS_CLASS = vxWorks
|
||||
# Prefix and suffix definitions
|
||||
EXE =
|
||||
OBJ = .o
|
||||
LIB_PREFIX =
|
||||
LIB_SUFFIX = Library.o
|
||||
LIB_PREFIX =lib
|
||||
LIB_SUFFIX = .a
|
||||
MUNCH_SUFFIX = .munch
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Library definition
|
||||
# Build both *.o and *.munch libraries
|
||||
# Library definitions
|
||||
LIBNAME = $(BUILD_LIBRARY:%=$(LIB_PREFIX)%$(LIB_SUFFIX))
|
||||
MUNCHNAME = $(LIBNAME:%$(OBJ)=%$(MUNCH_SUFFIX))
|
||||
LIBRARY_CTDT_SRCS = $(LIBNAME:%$(OBJ)=%_ctdt.c)
|
||||
LIBRARY_CTDT_OBJS = $(LIBNAME:%$(OBJ)=%_ctdt$(OBJ))
|
||||
LIBRARY_NM = $(LIBNAME:%$(OBJ)=%.nm)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Library install location override
|
||||
INSTALL_LOCATION_LIB=$(INSTALL_LOCATION)/bin
|
||||
# Prod: dependancy definitions
|
||||
PROD_DEPLIBS = $(foreach lib,$(PROD_LDLIBS) $(USR_LDLIBS),$(firstword $(wildcard \
|
||||
$($(lib)_DIR)/$(LIB_PREFIX)$(lib).*)))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Prod: LDFLAGS and LDLIBS definitions
|
||||
DEPLIB_DIRS = $(dir $($*_DEPLIBS)) $(dir $(PROD_DEPLIBS))
|
||||
DEPLIB_LDFLAGS += $(sort $(DEPLIB_DIRS:%=-L%))
|
||||
|
||||
DEPLIB_LDLIBS = $($*_LDLIBS:%=-l%) $(PROD_LDLIBS:%=-l%) $(USR_LDLIBS:%=-l%)\
|
||||
$($*_SYS_LIBS:%=-l%) $(SYS_PROD_LIBS:%=-l%)
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Prod definitions
|
||||
MUNCHNAME = $(PRODNAME:%$(EXE)=%$(MUNCH_SUFFIX))
|
||||
CTDT_SRCS = $(PRODNAME:%$(EXE)=%_ctdt.c)
|
||||
CTDT_OBJS = $(PRODNAME:%$(EXE)=%_ctdt$(OBJ))
|
||||
NMS = $(PRODNAME:%$(EXE)=%.nm)
|
||||
|
||||
#-------------------------------------------------------
|
||||
# R3.13 compatability object library definitions
|
||||
OBJLIB += $(OBJLIB_$(OS_CLASS))
|
||||
OBJLIB_SUFFIX = Library.o
|
||||
OBJLIBNAME = $(addsuffix $(OBJLIB_SUFFIX),$(basename $(OBJLIB)))
|
||||
OBJLIB_LD_OBJS = $(addsuffix $(OBJ),$(basename $(OBJLIB_SRCS) $(OBJLIB_OBJS)))
|
||||
PRODTARGETS += $(OBJLIBNAME)
|
||||
INSTALL_PROD += $(OBJLIBNAME:%=$(INSTALL_BIN)/%)
|
||||
OBJLIB_MUNCHNAME += $(OBJLIBNAME:%$(OBJ)=%$(MUNCH_SUFFIX))
|
||||
INSTALL_MUNCHS += $(OBJLIB_MUNCHNAME:%=$(INSTALL_BIN)/%)
|
||||
PRODTARGETS += $(OBJLIB_MUNCHNAME)
|
||||
CTDT_SRCS += $(OBJLIBNAME:%$(OBJ)=%_ctdt.c)
|
||||
CTDT_OBJS += $(OBJLIBNAME:%$(OBJ)=%_ctdt$(OBJ))
|
||||
NMS += $(OBJLIBNAME:%$(OBJ)=%.nm)
|
||||
OBJLIB_LINK.cpp = $(LD) -o $@ $(OBJLIB_LD_OBJS)
|
||||
TARGET_SRCS += $(foreach name, $(OBJLIB), $($(name)_SRCS))
|
||||
SRC_FILES += $(OBJLIB_SRCS)
|
||||
|
||||
#--------------------------------------------------
|
||||
# vxWorks directory definitions
|
||||
@@ -42,14 +71,6 @@ INSTALL_LOCATION_LIB=$(INSTALL_LOCATION)/bin
|
||||
GNU_TARGET_INCLUDE_DIR = $(VX_DIR)/target/h
|
||||
GNU_DIR = $(VX_DIR)/host/$(WIND_HOST_TYPE)
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Command definition overrides
|
||||
|
||||
# use ld partial linking not ar to create libraries)
|
||||
AR = $(LD)
|
||||
ARFLAGS = -o
|
||||
RANLIB =
|
||||
|
||||
#--------------------------------------------------
|
||||
# C++ host processing
|
||||
NM = $(GNU_BIN)/$(CMPLR_PREFIX)nm$(CMPLR_SUFFIX)$(HOSTEXE)
|
||||
@@ -88,19 +109,16 @@ OPT_CFLAGS_NO =
|
||||
OPT_CXXFLAGS_YES = -O3
|
||||
OPT_CXXFLAGS_NO =
|
||||
|
||||
#--------------------------------------------------
|
||||
# c++ exceptions, YES or NO override
|
||||
CXX_EXCEPTIONS = NO
|
||||
|
||||
#--------------------------------------------------
|
||||
# osithead use default stack, YES or NO override
|
||||
OSITHREAD_USE_DEFAULT_STACK = NO
|
||||
|
||||
#--------------------------------------------------
|
||||
# Link definitions
|
||||
LINK.cpp = $(LD) -o $@ $(LDFLAGS) $(PROD_LD_OBJS) $(PROD_LD_RES) $(LDLIBS)
|
||||
LINK.cpp = $(LD) -o $@ $(LDFLAGS) $(PROD_LD_OBJS) $(PROD_LD_RESS) $(LDLIBS)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Allow site overrides
|
||||
-include $(CONFIG)/os/CONFIG_SITE.Common.vxWorksCommon
|
||||
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).vxWorksCommon
|
||||
|
||||
|
||||
@@ -18,7 +18,10 @@ LD = ld -r
|
||||
CONFORM_CFLAGS_ANSI = -Aa
|
||||
CONFORM_CFLAGS_STRICT = -Aa
|
||||
CONFORM_CFLAGS_TRAD = -Ac
|
||||
CODE_CFLAGS =
|
||||
######################################################
|
||||
# +DAportable causes portable object code to be created for execution
|
||||
# on different PA-Risc machines
|
||||
CODE_CFLAGS = +DAportable
|
||||
WARN_CFLAGS_YES =
|
||||
WARN_CFLAGS_NO = -w
|
||||
OPT_CFLAGS_YES = -O
|
||||
@@ -30,8 +33,10 @@ CXXCMPLR=NORMAL
|
||||
# Configure OS vendor C++ compiler
|
||||
CONFORM_CXXFLAGS_NORMAL = +W302 +W829 +W818 +W392 +W469 +W495 +W749 +W667 +W392 +W684
|
||||
CONFORM_CXXFLAGS_STRICT = +p
|
||||
CODE_CXXFLAGS =
|
||||
TEMPL_INST_CXXFLAG =
|
||||
######################################################
|
||||
# +DAportable causes portable object code to be created for execution
|
||||
# on different PA-Risc machines
|
||||
CODE_CXXFLAGS = +DAportable
|
||||
WARN_CXXFLAGS_YES = +w
|
||||
WARN_CXXFLAGS_NO =
|
||||
OPT_CXXFLAGS_YES = -O
|
||||
@@ -47,5 +52,5 @@ STATIC_LDLIBS_NO=
|
||||
|
||||
SHRLIB_LDFLAGS_YES = -G -h $@
|
||||
|
||||
DEPENDS_FLAG = +m
|
||||
HDEPENDS_FLAGS_CMPLR = +m
|
||||
|
||||
|
||||
10
configure/os/CONFIG.linux-mpc82xx.Common
Normal file
10
configure/os/CONFIG.linux-mpc82xx.Common
Normal file
@@ -0,0 +1,10 @@
|
||||
# $Id$
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for linux-mpc82xx host builds
|
||||
# Sites may override these definitions in CONFIG_SITE.linux-mpc82xx.Common
|
||||
#-------------------------------------------------------
|
||||
|
||||
#Include definitions common to unix hosts
|
||||
include $(CONFIG)/os/CONFIG.UnixCommon.Common
|
||||
|
||||
13
configure/os/CONFIG.linux-mpc82xx.linux-mpc82xx
Normal file
13
configure/os/CONFIG.linux-mpc82xx.linux-mpc82xx
Normal file
@@ -0,0 +1,13 @@
|
||||
# $Id$
|
||||
#
|
||||
# Definitions for linux-mpc82xx host - linux-mpc82xx target builds
|
||||
# Sites may override these definitions in CONFIG_SITE.linux-mpc82xx.linux-mpc82xx
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Include common gnu compiler definitions
|
||||
include $(CONFIG)/CONFIG.gnuCommon
|
||||
|
||||
GNU_DIR = /usr
|
||||
|
||||
CC = $(GNU_BIN)/gcc
|
||||
CCC = $(GNU_BIN)/g++
|
||||
17
configure/os/CONFIG.linux-x86.linux-mpc82xx
Normal file
17
configure/os/CONFIG.linux-x86.linux-mpc82xx
Normal file
@@ -0,0 +1,17 @@
|
||||
# $Id$
|
||||
#
|
||||
# Definitions for linux-x86 host - linux-mpc82xx target builds
|
||||
# Sites may override these definitions in CONFIG_SITE.linux-x86.linux-mpc82xx
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Include common gnu compiler definitions
|
||||
include $(CONFIG)/CONFIG.gnuCommon
|
||||
|
||||
GNU_DIR = /opt/hardhat/devkit/ppc/82xx
|
||||
GNU_TARGET_INCLUDE_DIR = $(GNU_DIR)/target/usr/include/
|
||||
|
||||
CC = $(GNU_BIN)/ppc_82xx-gcc
|
||||
CCC = $(GNU_BIN)/ppc_82xx-g++
|
||||
|
||||
# Override the -nostdinc flag, needed here...
|
||||
CROSS_CPPFLAGS =
|
||||
@@ -30,7 +30,6 @@ CONFORM_CXXFLAGS_STRICT =
|
||||
PROF_CXXFLAGS_YES = +p
|
||||
PROF_CXXFLAGS_NO =
|
||||
CODE_CXXFLAGS =
|
||||
TEMPL_INST_CXXFLAG =
|
||||
WARN_CXXFLAGS_YES =
|
||||
WARN_CXXFLAGS_NO =
|
||||
OPT_CXXFLAGS_YES = -O
|
||||
@@ -43,7 +42,7 @@ STATIC_LDLIBS_NO=
|
||||
|
||||
SHRLIB_LDFLAGS_YES = -shared
|
||||
|
||||
DEPENDS_FLAG =
|
||||
HDEPENDS_FLAGS_CMPLR =
|
||||
|
||||
############# ???????????
|
||||
#####ACC_SFLAGS_YES= -non_shared
|
||||
|
||||
@@ -11,6 +11,8 @@ SPARCWORKS = /opt/SUNWspro
|
||||
|
||||
CC = $(SPARCWORKS)/bin/cc
|
||||
CCC = $(SPARCWORKS)/bin/CC
|
||||
#CC = purify -max-threads=100 $(SPARCWORKS)/bin/cc
|
||||
#CCC = purify -max-threads=100 $(SPARCWORKS)/bin/CC
|
||||
# required by sun's C++ compiler
|
||||
AR = $(CCC) -xar -o
|
||||
LD = ld -r
|
||||
@@ -38,7 +40,6 @@ CONFORM_CXXFLAGS_STRICT =
|
||||
PROF_CXXFLAGS_YES = +p
|
||||
PROF_CXXFLAGS_NO =
|
||||
CODE_CXXFLAGS = -KPIC $(PROF_CXXFLAGS_$(PROFILE))
|
||||
TEMPL_INST_CXXFLAG =
|
||||
WARN_CXXFLAGS_YES = +w
|
||||
WARN_CXXFLAGS_NO =
|
||||
OPT_CXXFLAGS_YES = -O
|
||||
@@ -51,10 +52,5 @@ STATIC_LDLIBS_NO=
|
||||
|
||||
SHRLIB_LDFLAGS_YES = -G -h $@
|
||||
|
||||
|
||||
# gnu compiler used because Sun compiler output
|
||||
# includes headers from /opt/SUNWspro and does
|
||||
# not work for c++ headers without .h suffix.
|
||||
DEPENDS_FLAG = -MM
|
||||
DEPENDS.cpp = g++
|
||||
HDEPENDS_FLAGS_CMPLR = -xM1
|
||||
|
||||
|
||||
@@ -41,7 +41,6 @@ CONFORM_CXXFLAGS_STRICT =
|
||||
PROF_CXXFLAGS_YES = +p
|
||||
PROF_CXXFLAGS_NO =
|
||||
CODE_CXXFLAGS = -KPIC $(PROF_CXXFLAGS_$(PROFILE))
|
||||
TEMPL_INST_CXXFLAG =
|
||||
WARN_CXXFLAGS_YES = +w
|
||||
WARN_CXXFLAGS_NO =
|
||||
OPT_CXXFLAGS_YES = -O
|
||||
@@ -52,7 +51,7 @@ STATIC_LDFLAGS_NO=
|
||||
STATIC_LDLIBS_YES= -Bdynamic
|
||||
STATIC_LDLIBS_NO=
|
||||
|
||||
SHRLIB_LDFLAGS_YES = -G -h $@
|
||||
SHRLIB_LDFLAGS_YES = -G -h $@
|
||||
|
||||
DEPENDS_FLAG = -xM1
|
||||
HDEPENDS_FLAGS_CMPLR = -xM1
|
||||
|
||||
|
||||
@@ -30,14 +30,14 @@ WARN_CFLAGS_NO = -w
|
||||
OPT_CFLAGS_YES = -O
|
||||
OPT_CFLAGS_NO = -g
|
||||
|
||||
CONFORM_CFLAGS_NORMAL =
|
||||
CONFORM_CFLAGS_STRICT =
|
||||
CONFORM_CFLAGS_TRAD =
|
||||
CODE_CFLAGS = -pic
|
||||
WARN_CFLAGS_YES =
|
||||
WARN_CFLAGS_NO = -w
|
||||
OPT_CFLAGS_YES = -O
|
||||
OPT_CFLAGS_NO = -g
|
||||
CONFORM_CXXFLAGS_NORMAL =
|
||||
CONFORM_CXXFLAGS_STRICT =
|
||||
CONFORM_CXXFLAGS_TRAD =
|
||||
CODE_CXXFLAGS = -pic
|
||||
WARN_CXXFLAGS_YES =
|
||||
WARN_CXXFLAGS_NO = -w
|
||||
OPT_CXXFLAGS_YES = -O
|
||||
OPT_CXXFLAGS_NO = -g
|
||||
|
||||
STATIC_LDFLAGS_YES= -Bstatic
|
||||
STATIC_LDFLAGS_NO=
|
||||
@@ -46,5 +46,5 @@ STATIC_LDLIBS_NO=
|
||||
|
||||
SHRLIB_LDFLAGS_YES = -assert pure-text -h $@
|
||||
|
||||
DEPENDS_FLAG = -xM1
|
||||
HDEPENDS_FLAGS_CMPLR = -xM1
|
||||
|
||||
|
||||
@@ -61,7 +61,6 @@ CONFORM_CFLAGS_ANSI = -D__STDC__=0
|
||||
CONFORM_CFLAGS_STRICT = -D__STDC__=0
|
||||
endif
|
||||
CONFORM_CFLAGS_TRAD =
|
||||
TEMPL_INST_CXXFLAG =
|
||||
|
||||
# -w display warnings on
|
||||
# -g0 no limit to warning messages
|
||||
@@ -70,7 +69,7 @@ TEMPL_INST_CXXFLAG =
|
||||
# -w-8012 Comparing signed and unsigned values
|
||||
# -w-8060 Possibly incorrect assignment
|
||||
# -w-8071 Conversion may lose significant digits
|
||||
WARN_CFLAGS_YES = -w -g0 -w-8012 -w-8060 -w-8071
|
||||
WARN_CFLAGS_YES = -w -g0 -w-8012 -w-8060 -w-8071
|
||||
# -w- display warnings off
|
||||
WARN_CFLAGS_NO = -w-
|
||||
|
||||
@@ -108,7 +107,19 @@ endif
|
||||
# -w-8012 Comparing signed and unsigned values
|
||||
# -w-8060 Possibly incorrect assignment
|
||||
# -w-8071 Conversion may lose significant digits
|
||||
WARN_CXXFLAGS_YES = -w -g0 -w-8012 -w-8060 -w-8071
|
||||
# -w-8008 Condition is always true or always false (compile time
|
||||
# know template parameters causes this to spew garbage)
|
||||
# -w-8027 Functions containing reserved words are not expanded inline
|
||||
# (Some compilers are better than others with inline)
|
||||
# -w-8066 Unreachable code (compile time know template parameters
|
||||
# causes this to spew garbage)
|
||||
# -w-8080 'identifier' declared but never used
|
||||
# (instantiating unused static const external parameters is
|
||||
# anachronistic compiler practice)
|
||||
# -w-8004 'identifier' is assigned a value that is never used
|
||||
# (compile time know template parameters
|
||||
# causes this to spew garbage)
|
||||
WARN_CXXFLAGS_YES = -w -g0 -w-8012 -w-8060 -w-8071 -w-8008 -w-8027 -w-8066 -w-8080 -w-8004
|
||||
# -w- display warnings off
|
||||
WARN_CXXFLAGS_NO = -w-
|
||||
|
||||
@@ -171,7 +182,7 @@ OP_SYS_CFLAGS =
|
||||
#
|
||||
# Borland specific include files
|
||||
#
|
||||
#OP_SYS_INCLUDES = -I$(BORLAND_INC)
|
||||
OP_SYS_INCLUDES = -I$(BORLAND_INC)
|
||||
#
|
||||
OP_SYS_LDLIBS =
|
||||
|
||||
@@ -181,17 +192,6 @@ OP_SYS_LDLIBS =
|
||||
#DLL_DEF_FLAG = $(addprefix /def:,$(wildcard ../$(addsuffix .def,$(LIBRARY))))
|
||||
DLL_DEF_FLAG = $(subst /,\\,$(wildcard ../$(addsuffix .def,$(LIBRARY))))
|
||||
|
||||
# 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_HOST.
|
||||
# If so, we define _WINDLL so that
|
||||
# e.g. include/shareLib.h works correctly.
|
||||
#
|
||||
OPT_CFLAGS_YES += $(subst $@, /_WINDLL, $(findstring $@,$(LIBOBJS_HOST)))
|
||||
|
||||
#
|
||||
# A WIN32 dll has three parts:
|
||||
# x.dll: the real dll (SHRLIBNAME)
|
||||
@@ -209,7 +209,7 @@ LINK.shrlib+= $(DLL_DEF_FLAG),$(LIBRARY_LD_RESS)
|
||||
# in this library (may be for e.g. base/src/libCompat
|
||||
# on some archs), don't define (and build) any library!
|
||||
SHRLIB_SUFFIX=.dll
|
||||
SHRLIBNAME = $(BUILD_LIBRARY:%=%$(SHRLIB_SUFFIX))
|
||||
SHRLIBNAME_YES = $(BUILD_LIBRARY:%=%$(SHRLIB_SUFFIX))
|
||||
|
||||
|
||||
#
|
||||
@@ -237,7 +237,7 @@ OBJECT_LIB_EXT = $(OBJECT_LIB_EXT_$(STATIC_BUILD))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Products dependancy definitions
|
||||
PROD_DEPLIBS = $(foreach lib,$(PROD_LIBS) $(USR_LIBS),$(firstword \
|
||||
PROD_DEPLIBS = $(foreach lib,$(PROD_LDLIBS) $(USR_LDLIBS),$(firstword \
|
||||
$($(lib)_DIR)/$(lib)$(OBJECT_LIB_EXT)))
|
||||
DEPLIB_LDLIBS = $($*_DEPLIBS) $(PROD_DEPLIBS) \
|
||||
$($*_SYS_LIBS:%=%.lib) $(SYS_PROD_LIBS:%=%.lib)
|
||||
@@ -274,3 +274,13 @@ LINK.cpp += , $@ ,,$(LINKLIBS) $(subst /,\\,$(LDLIBS))
|
||||
# override of CONFIG_SITE default
|
||||
SHARED_LIBRARIES = YES
|
||||
|
||||
# gnu compiler used to create depends files
|
||||
HDEPENDS_FLAGS_CMPLR = -MM
|
||||
HDEPENDS.c_CMPLR = gcc
|
||||
HDEPENDS.cpp_CMPLR = g++
|
||||
|
||||
# override of CONFIG_COMMON
|
||||
HDEPENDS_INCLUDES_MKMF = $(filter-out $(BORLAND_INC),$(subst -I,,$(INCLUDES)))
|
||||
# override of CONFIG_SITE
|
||||
HOST_HDEPENDS_CMD=MKMF
|
||||
|
||||
|
||||
@@ -14,3 +14,7 @@ SHARED_LIBRARIES=NO
|
||||
|
||||
CC = $(GNU_BIN)/gcc
|
||||
CCC = $(GNU_BIN)/g++
|
||||
|
||||
CODE_CFLAGS =
|
||||
CODE_CXXFLAGS =
|
||||
|
||||
|
||||
@@ -29,10 +29,13 @@ ARCMD = lib /nologo /verbose /out:$@ $(LIBRARY_LD_OBJS)
|
||||
|
||||
BAFCMD = bscmake /nologo /o $@
|
||||
|
||||
#DEPENDS_RULE = @echo depends target not supported
|
||||
#GNU depends flag
|
||||
DEPENDS.cpp = g++
|
||||
DEPENDS_FLAG = -MM
|
||||
# gnu compiler used to create depends files
|
||||
HDEPENDS_FLAGS_CMPLR = -MM
|
||||
HDEPENDS.c_CMPLR = gcc
|
||||
HDEPENDS.cpp_CMPLR = g++
|
||||
|
||||
# override of CONFIG_SITE
|
||||
HOST_HDEPENDS_CMD=MKMF
|
||||
|
||||
#
|
||||
# Configure OS vendor C compiler
|
||||
@@ -46,8 +49,8 @@ CC = cl
|
||||
#
|
||||
# Use of /Za would dissable DLL import/export keywords which
|
||||
# include/excludes using architecture neutral macros
|
||||
CONFORM_CFLAGS_ANSI = /nologo /D__STDC__=0
|
||||
CONFORM_CFLAGS_STRICT = /nologo /D__STDC__=0
|
||||
CONFORM_CFLAGS_ANSI = /nologo /D__STDC__=0
|
||||
CONFORM_CFLAGS_STRICT = /nologo /D__STDC__=0
|
||||
CONFORM_CFLAGS_TRAD = /nologo
|
||||
|
||||
#
|
||||
@@ -62,9 +65,10 @@ WARN_CFLAGS_NO = /W1
|
||||
OPT_CFLAGS_YES = /Ox
|
||||
|
||||
#
|
||||
# /Zi include debugging info in object files
|
||||
# /Z7 include debugging info in object files
|
||||
# /Fr create source browser file
|
||||
OPT_CFLAGS_NO = /Zi /Fr
|
||||
# /GZ catch bugs occurring only in optimized code
|
||||
OPT_CFLAGS_NO = /Z7 /GZ /DEPICS_DEBUG /D_CRTDBG_MAP_ALLOC
|
||||
|
||||
#
|
||||
# the following options are required when
|
||||
@@ -105,12 +109,12 @@ CPP = gcc -x c -E
|
||||
CCC = cl
|
||||
CONFORM_CXXFLAGS_NORMAL = /nologo /D__STDC__=0 /GX /GR
|
||||
CONFORM_CXXFLAGS_STRICT = /nologo /D__STDC__=0 /GX /GR
|
||||
TEMPL_INST_CXXFLAG =
|
||||
|
||||
#
|
||||
# /W<N> use warning level N
|
||||
# (maximum lint level warnings at level 4)
|
||||
WARN_CXXFLAGS_YES = /W3
|
||||
#WARN_CXXFLAGS_YES = /W4
|
||||
WARN_CXXFLAGS_NO = /W1
|
||||
|
||||
#
|
||||
@@ -118,9 +122,10 @@ WARN_CXXFLAGS_NO = /W1
|
||||
OPT_CXXFLAGS_YES = /Ox
|
||||
|
||||
#
|
||||
# /Zi include debugging info in object files
|
||||
# /Z7 include debugging info in object files
|
||||
# /Fr create source browser file
|
||||
OPT_CXXFLAGS_NO = /Zi /Fr
|
||||
# /GZ catch bugs occurring only in optimized code
|
||||
OPT_CXXFLAGS_NO = /Z7 /GZ /DEPICS_DEBUG /D_CRTDBG_MAP_ALLOC
|
||||
|
||||
#
|
||||
# the following options are required when
|
||||
@@ -139,7 +144,8 @@ STATIC_CXXFLAGS_NO= /MD$(VISC_STATIC_CFLAGS_DEBUG) $(VISC_DLL)
|
||||
#
|
||||
STATIC_LDLIBS_YES=ws2_32.lib advapi32.lib user32.lib kernel32.lib winmm.lib
|
||||
STATIC_LDLIBS_NO=
|
||||
|
||||
|
||||
# add /profile here to run the ms profiler
|
||||
LINK_OPT_FLAGS_YES = /WARN:3 /incremental:no /opt:ref\
|
||||
/release $(PROD_VERSION:%=/version:%)
|
||||
LINK_OPT_FLAGS_NO = /WARN:3 /debug
|
||||
@@ -196,17 +202,6 @@ WIN32_DLLFLAGS = /subsystem:windows /dll $(OPT_LDFLAGS)
|
||||
#
|
||||
DLL_DEF_FLAG = $(addprefix /def:,$(wildcard ../$(addsuffix .def,$(LIBRARY))))
|
||||
|
||||
# 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_HOST.
|
||||
# If so, we define _WINDLL so that
|
||||
# e.g. include/shareLib.h works correctly.
|
||||
#
|
||||
HOST_OPT_FLAGS += $(subst $@, /_WINDLL, $(findstring $@,$(LIBOBJS_HOST)))
|
||||
|
||||
#
|
||||
# A WIN32 dll has three parts:
|
||||
# x.dll: the real dll (SHRLIBNAME)
|
||||
@@ -220,11 +215,11 @@ LDCMD = $(CCC) /Fo $@ $^
|
||||
|
||||
# adjust names of libraries to build
|
||||
#
|
||||
# But: if there are no objects LIBOBJS to include
|
||||
# But: if there are no objects LIBRARY_LD_OBJS to include
|
||||
# in this library (may be for e.g. base/src/libCompat
|
||||
# on some archs), don't define (and build) any library!
|
||||
SHRLIB_SUFFIX=.dll
|
||||
SHRLIBNAME = $(BUILD_LIBRARY:%=%$(SHRLIB_SUFFIX))
|
||||
SHRLIBNAME_YES = $(BUILD_LIBRARY:%=%$(SHRLIB_SUFFIX))
|
||||
|
||||
|
||||
#
|
||||
@@ -252,7 +247,7 @@ OBJECT_LIB_EXT = $(OBJECT_LIB_EXT_$(STATIC_BUILD))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Products dependancy definitions
|
||||
PROD_DEPLIBS = $(foreach lib,$(PROD_LIBS) $(USR_LIBS),$(firstword \
|
||||
PROD_DEPLIBS = $(foreach lib,$(PROD_LDLIBS) $(USR_LDLIBS),$(firstword \
|
||||
$($(lib)_DIR)/$(lib)$(OBJECT_LIB_EXT)))
|
||||
DEPLIB_LDLIBS = $($*_DEPLIBS) $(PROD_DEPLIBS) \
|
||||
$($*_SYS_LIBS:%=%.lib) $(SYS_PROD_LIBS:%=%.lib)
|
||||
|
||||
4
configure/os/CONFIG_SITE.Common.RTEMS-pc386
Normal file
4
configure/os/CONFIG_SITE.Common.RTEMS-pc386
Normal file
@@ -0,0 +1,4 @@
|
||||
#
|
||||
# Site-specific overrides for RTEMS-pc386 target
|
||||
#
|
||||
TARGET_CFLAGS += -DEPICS_RTEMS_NIC_3C509
|
||||
@@ -2,13 +2,11 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Site specific definitions for win32-x86 borland compiler host
|
||||
# Site specific definitions for win32-x86-borland host
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# jba overrides
|
||||
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-486
|
||||
CROSS_COMPILER_TARGET_ARCHS=
|
||||
VX_DIR = D:/tornado
|
||||
#INSTALL_LOCATION = G:\\testBaseNew
|
||||
#VX_DIR = T:/tornado20
|
||||
|
||||
BORLAND = c:\\Borland\\Bcc55
|
||||
|
||||
@@ -7,8 +7,7 @@
|
||||
|
||||
# jba test overrides
|
||||
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-486
|
||||
#VX_DIR = D:/tornado
|
||||
#VX_DIR = T:/tornado20
|
||||
#INSTALL_LOCATION = G:/testInstall
|
||||
#STATIC_BUILD=YES
|
||||
#SHARED_LIBRARIES=NO
|
||||
#CROSS_COMPILER_TARGET_ARCHS=
|
||||
|
||||
236
configure/tools/convertRelease.pl
Executable file
236
configure/tools/convertRelease.pl
Executable file
@@ -0,0 +1,236 @@
|
||||
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
|
||||
if $running_under_some_shell; # convertRelease.pl
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Parse configure/RELEASE file(s) and generate a derived output file.
|
||||
#
|
||||
# This tool replaces makeConfigAppInclude.pl, makeIocCdCommands.pl and
|
||||
# makeRulesInclude.pl and adds consistency checks for RELEASE files.
|
||||
#
|
||||
|
||||
use Cwd;
|
||||
use Getopt::Std;
|
||||
|
||||
$cwd = cwd();
|
||||
$cwd =~ s/\/tmp_mnt//; # hack for sun4
|
||||
$cwd =~ s/\\/\//g; # hack for win32
|
||||
|
||||
getopt "aht";
|
||||
|
||||
if ($opt_a) {
|
||||
$arch = $opt_a;
|
||||
} else { # Look for O.<arch> in current path
|
||||
$_ = $cwd;
|
||||
($arch) = /.*\/O.([\w-]+)$/;
|
||||
}
|
||||
|
||||
$hostarch = $arch;
|
||||
$hostarch = $opt_h if ($opt_h);
|
||||
|
||||
if ($opt_t) {
|
||||
$top = $opt_t;
|
||||
} else { # Find $top from current path
|
||||
$top = $cwd;
|
||||
$top =~ s/\/iocBoot.*//;
|
||||
$top =~ s/\/configure\/O\..*//;
|
||||
}
|
||||
|
||||
unless (@ARGV == 1) {
|
||||
print "Usage: convertRelease.pl [-a arch] [-h hostarch] [-t top] outfile\n";
|
||||
print " where outfile is be one of:\n";
|
||||
print "\tcheckRelease - checks consistency with support apps\n";
|
||||
print "\tcdCommands - generate cd path strings for IOC use\n";
|
||||
print "\tCONFIG_APP_INCLUDE - additional build variables\n";
|
||||
print "\tRULES_INCLUDE - supports installable build rules\n";
|
||||
exit 2;
|
||||
}
|
||||
$outfile = $ARGV[0];
|
||||
|
||||
# TOP refers to this application
|
||||
%macros = (TOP => $top);
|
||||
@apps = (TOP); # Records the order of definitions in RELEASE file
|
||||
|
||||
# Read the RELEASE file(s)
|
||||
$relfile = "$top/configure/RELEASE";
|
||||
die "Can't find configure/RELEASE file" unless (-r $relfile);
|
||||
&readRelease($relfile, \%macros, \@apps);
|
||||
|
||||
if ($hostarch) {
|
||||
$relfile .= ".$hostarch";
|
||||
&readRelease($relfile, \%macros, \@apps) if (-r $relfile);
|
||||
}
|
||||
&expandRelease(\%macros, \@apps);
|
||||
|
||||
|
||||
# This is a perl switch statement:
|
||||
for ($outfile) {
|
||||
/CONFIG_APP_INCLUDE/ and do { &configAppInclude; last; };
|
||||
/RULES_INCLUDE/ and do { &rulesInclude; last; };
|
||||
/cdCommands/ and do { &cdCommands; last; };
|
||||
/checkRelease/ and do { &checkRelease; last; };
|
||||
die "Output file type \'$outfile\' not supported";
|
||||
}
|
||||
|
||||
#
|
||||
# Parse a configure/RELEASE file.
|
||||
#
|
||||
# NB: This subroutine also appears in base/src/makeBaseApp/makeBaseApp.pl
|
||||
# If you make changes here, they will be needed there as well.
|
||||
#
|
||||
sub readRelease {
|
||||
my ($file, $Rmacros, $Rapps) = @_;
|
||||
# $Rmacros is a reference to a hash, $Rapps a ref to an array
|
||||
my ($pre, $var, $post, $macro, $path);
|
||||
local *IN;
|
||||
open(IN, $file) or die "Can't open $file: $!\n";
|
||||
while (<IN>) {
|
||||
chomp;
|
||||
s/\r$//; # Shouldn't need this, but sometimes...
|
||||
s/\s*#.*$//; # Remove trailing comments
|
||||
next if /^\s*$/; # Skip blank lines
|
||||
|
||||
# Expand all already-defined macros in the line:
|
||||
while (($pre,$var,$post) = /(.*)\$\((\w+)\)(.*)/) {
|
||||
last unless (exists $Rmacros->{$var});
|
||||
$_ = $pre . $Rmacros->{$var} . $post;
|
||||
}
|
||||
|
||||
# Handle "<macro> = <path>"
|
||||
($macro, $path) = /^\s*(\w+)\s*=\s*(.*)/;
|
||||
if ($macro ne "") {
|
||||
$Rmacros->{$macro} = $path;
|
||||
push @$Rapps, $macro;
|
||||
next;
|
||||
}
|
||||
# Handle "include <path>" syntax
|
||||
($path) = /^\s*include\s+(.*)/;
|
||||
&readRelease($path, $Rmacros, $Rapps) if (-r $path);
|
||||
}
|
||||
close IN;
|
||||
}
|
||||
|
||||
sub expandRelease {
|
||||
my ($Rmacros, $Rapps) = @_;
|
||||
# Expand any (possibly nested) macros that were defined after use
|
||||
while (($macro, $path) = each %$Rmacros) {
|
||||
while (($pre,$var,$post) = $path =~ /(.*)\$\((\w+)\)(.*)/) {
|
||||
$path = $pre . $Rmacros->{$var} . $post;
|
||||
$Rmacros->{$macro} = $path;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub configAppInclude {
|
||||
@includes = grep !/^(TOP|TEMPLATE_TOP)$/, @apps;
|
||||
|
||||
unlink($outfile);
|
||||
open(OUT,">$outfile") or die "$! creating $outfile";
|
||||
print OUT "# Do not modify this file, changes made here will\n";
|
||||
print OUT "# be lost when the application is next rebuilt.\n\n";
|
||||
|
||||
if ($arch) {
|
||||
foreach $app (@includes) {
|
||||
$path = $macros{$app};
|
||||
next unless (-d "$path/bin/$hostarch");
|
||||
print OUT "${app}_HOST_BIN = \$($app)/bin/\$(EPICS_HOST_ARCH)\n";
|
||||
}
|
||||
foreach $app (@includes) {
|
||||
$path = $macros{$app};
|
||||
next unless (-d "$path/lib/$hostarch");
|
||||
print OUT "${app}_HOST_LIB = \$($app)/bin/\$(EPICS_HOST_ARCH)\n";
|
||||
}
|
||||
foreach $app (@includes) {
|
||||
$path = $macros{$app};
|
||||
next unless (-d "$path/bin/$arch");
|
||||
print OUT "${app}_BIN = \$($app)/bin/$arch\n";
|
||||
}
|
||||
foreach $app (@includes) {
|
||||
$path = $macros{$app};
|
||||
next unless (-d "$path/lib/$arch");
|
||||
print OUT "${app}_LIB = \$($app)/lib/$arch\n";
|
||||
}
|
||||
}
|
||||
foreach $app (@includes) {
|
||||
$path = $macros{$app};
|
||||
next unless (-d "$path/include");
|
||||
print OUT "RELEASE_INCLUDES += -I\$($app)/include/os/\$(OS_CLASS)\n";
|
||||
print OUT "RELEASE_INCLUDES += -I\$($app)/include\n";
|
||||
}
|
||||
foreach $app (@includes) {
|
||||
$path = $macros{$app};
|
||||
next unless (-d "$path/dbd");
|
||||
print OUT "RELEASE_DBDFLAGS += -I \$($app)/dbd\n";
|
||||
}
|
||||
close OUT;
|
||||
}
|
||||
|
||||
sub rulesInclude {
|
||||
@includes = grep !/^(TOP|TEMPLATE_TOP|EPICS_BASE)$/, @apps;
|
||||
|
||||
unlink($outfile);
|
||||
open(OUT,">$outfile") or die "$! creating $outfile";
|
||||
print OUT "# Do not modify this file, changes made here will\n";
|
||||
print OUT "# be lost when the application is next rebuilt.\n\n";
|
||||
|
||||
foreach $app (@includes) {
|
||||
$path = $macros{$app};
|
||||
next unless (-r "$path/configure/RULES_BUILD");
|
||||
print OUT "-include \$($app)/configure/RULES_BUILD\n";
|
||||
}
|
||||
close OUT;
|
||||
}
|
||||
|
||||
sub cdCommands {
|
||||
die "Architecture not set (use -a option)" unless ($arch);
|
||||
@includes = grep !/^TEMPLATE_TOP$/, @apps;
|
||||
|
||||
# if -t <top> was given, substitute it in the startup path
|
||||
$startup = $cwd;
|
||||
$startup =~ s/.*(\/iocBoot\/.*)/$top$1/ if ($opt_t);
|
||||
|
||||
unlink($outfile);
|
||||
open(OUT,">$outfile") or die "$! creating $outfile";
|
||||
print OUT "startup = \"$startup\"\n";
|
||||
print OUT "appbin = \"$top/bin/$arch\"\n"; # compatibility with R3.13.1
|
||||
|
||||
foreach $app (@includes) {
|
||||
$path = $macros{$app};
|
||||
$lcapp = lc($app);
|
||||
print OUT "$lcapp = \"$path\"\n" if (-d $path);
|
||||
print OUT "${lcapp}bin = \"$path/bin/$arch\"\n" if (-d "$path/bin/$arch");
|
||||
}
|
||||
close OUT;
|
||||
}
|
||||
sub checkRelease {
|
||||
$status = 0;
|
||||
delete $macros{TOP};
|
||||
delete $macros{TEMPLATE_TOP};
|
||||
|
||||
while (($app, $path) = each %macros) {
|
||||
%check = (TOP => $path);
|
||||
@order = ();
|
||||
$relfile = "$path/configure/RELEASE";
|
||||
&readRelease($relfile, \%check, \@order) if (-r $relfile);
|
||||
if ($hostarch) {
|
||||
$relfile .= ".$hostarch";
|
||||
&readRelease($relfile, \%check, \@order) if (-r $relfile);
|
||||
}
|
||||
&expandRelease(\%check, \@order);
|
||||
delete $check{TOP};
|
||||
|
||||
while (($parent, $ppath) = each %check) {
|
||||
if (exists $macros{$parent} && ($macros{$parent} ne $ppath)) {
|
||||
print "\n" unless ($status);
|
||||
print "Definition of $parent conflicts with $app support.\n";
|
||||
print "In this application configure/RELEASE defines\n";
|
||||
print "\t$parent = $macros{$parent}\n";
|
||||
print "but $app at $path has\n";
|
||||
print "\t$parent = $ppath\n";
|
||||
$status = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
print "\n" if ($status);
|
||||
exit $status;
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
# UNIX-cp in Perl
|
||||
|
||||
use File::Copy;
|
||||
use File::Basename;
|
||||
|
||||
sub Usage
|
||||
{
|
||||
@@ -26,7 +27,8 @@ if (-d $target)
|
||||
{
|
||||
foreach $file ( @sources )
|
||||
{
|
||||
copy ($file, "$target/$file");
|
||||
$base=basename($file);
|
||||
copy ($file, "$target/$base");
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -37,7 +37,7 @@ $install_dir =~ s[/$][]; # remove trailing '/'
|
||||
$install_dir =~ s[//][/]g; # replace '//' by '/'
|
||||
|
||||
# Do we have to create the directory?
|
||||
unless (-d $install_dir)
|
||||
unless ( (-d $install_dir) || (-l $install_dir) )
|
||||
{
|
||||
# Create dir only if -d option given
|
||||
Usage ("$install_dir does not exist") unless ($opt_d);
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
|
||||
if $running_under_some_shell; # makeConfigAppInclude.pl
|
||||
|
||||
use Cwd;
|
||||
|
||||
$hostarch = $ARGV[0];
|
||||
$arch = $ARGV[1];
|
||||
$outfile = $ARGV[2];
|
||||
$top = $ARGV[3];
|
||||
$applications{TOP} = $top;
|
||||
|
||||
unlink("${outfile}");
|
||||
open(OUT,">${outfile}") or die "$! opening ${outfile}";
|
||||
print OUT "#Do not modify this file.\n";
|
||||
print OUT "#This file is created during the build.\n";
|
||||
|
||||
@files =();
|
||||
push(@files,"$top/configure/RELEASE");
|
||||
push(@files,"$top/configure/RELEASE.${hostarch}");
|
||||
foreach $file (@files) {
|
||||
if (-r "$file") {
|
||||
open(IN, "$file") or die "Cannot open $file\n";
|
||||
while ($line = <IN>) {
|
||||
next if ( $line =~ /\s*#/ );
|
||||
chomp($line);
|
||||
$line =~ s/[ ]//g; # remove blanks and tabs
|
||||
next if ( $line =~ /^$/ ); # skip empty lines
|
||||
$_ = $line;
|
||||
#the following looks for
|
||||
# prefix = $(macro)post
|
||||
($prefix,$macro,$post) = /(.*)\s*=\s*\$\((.*)\)(.*)/;
|
||||
if ($macro eq "") { # true if no macro is present
|
||||
# the following looks for
|
||||
# prefix = post
|
||||
($prefix,$post) = /(.*)\s*=\s*(.*)/;
|
||||
$app_post = $post;
|
||||
} else {
|
||||
$base = $applications{$macro};
|
||||
if ($base eq "") {
|
||||
#print "error: $macro was not previously defined\n";
|
||||
} else {
|
||||
$app_post = "\$($macro)" . $post;
|
||||
$post = $base . $post;
|
||||
}
|
||||
}
|
||||
$applications{$prefix} = $post;
|
||||
if ( -d "$post") { #check that directory exists
|
||||
print OUT "\n";
|
||||
if ( -d "$post/bin/$arch") { #check that directory exists
|
||||
print OUT "${prefix}_BIN = $app_post/bin/${arch}\n";
|
||||
}
|
||||
if ( -d "$post/bin/$arch") { #check that directory exists
|
||||
print OUT "${prefix}_HOST_BIN = $app_post/bin/\$(EPICS_HOST_ARCH)\n";
|
||||
}
|
||||
if ( -d "$post/lib/$arch") { #check that directory exists
|
||||
print OUT "${prefix}_LIB = $app_post/lib/${arch}\n";
|
||||
}
|
||||
if ( -d "$post/include") { #check that directory exists
|
||||
print OUT "INSTALL_INCLUDES += -I$app_post/include/os/\$(OS_CLASS)\n";
|
||||
}
|
||||
if ( -d "$post/include") { #check that directory exists
|
||||
print OUT "INSTALL_INCLUDES += -I$app_post/include\n";
|
||||
}
|
||||
if ( -d "$post/dbd") { #check that directory exists
|
||||
print OUT "INSTALL_DBDFLAGS += -I $app_post/dbd\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
close IN;
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
|
||||
if $running_under_some_shell; # makeDbDepends.pl
|
||||
|
||||
# Called from within the object directory.
|
||||
# Searches the .substitutions files (from the command line) for
|
||||
# "file xxx {" entries to create a DEPENDS file
|
||||
|
||||
open(OUT, ">DBDEPENDS") or die "Cannot open DBDEPENDS: $!";
|
||||
|
||||
foreach $file (@ARGV) {
|
||||
open(IN, "<$file") or die "Cannot open $file: $!";
|
||||
@substfile = <IN>;
|
||||
close IN or die "Cannot close $file: $!";
|
||||
|
||||
@depends = grep { s/^\s*file\s*(.*)\s*\{.*$/\1/ } @substfile;
|
||||
chomp @depends;
|
||||
|
||||
if (@depends) {
|
||||
$file =~ s/\.substitutions/\.t.db.raw/;
|
||||
print OUT "${file}:: @depends\n";
|
||||
}
|
||||
}
|
||||
close OUT or die "Cannot close $file: $!";
|
||||
63
configure/tools/makeDependsTargets.pl
Normal file
63
configure/tools/makeDependsTargets.pl
Normal file
@@ -0,0 +1,63 @@
|
||||
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
|
||||
if $running_under_some_shell; # makeDependsTargets.pl
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# Author: Janet Anderson
|
||||
#
|
||||
|
||||
sub Usage
|
||||
{
|
||||
my ($txt) = @_;
|
||||
|
||||
print "Usage:\n";
|
||||
print "\makeDependsTargets infile\n";
|
||||
print "\nError: $txt\n" if $txt;
|
||||
|
||||
exit 2;
|
||||
}
|
||||
|
||||
# need at least one args: ARGV[0]
|
||||
Usage("need an arg") if $#ARGV < 0;
|
||||
|
||||
use Cwd;
|
||||
use File::Path;
|
||||
use File::Copy;
|
||||
|
||||
$depfile = $ARGV[0];
|
||||
$tempfile = $ARGV[0].temp;
|
||||
|
||||
if (-f $depfile) {
|
||||
unlink("$tempfile");
|
||||
copy ($depfile, $tempfile) or die "$! copying $depfile";
|
||||
open(OUT,">> $depfile") or die "$! opening $depfile";
|
||||
open(IN,"< $tempfile") or die "$! opening $tempfile";
|
||||
print OUT "\n#Depend files must be targets to avoid 'No rule to make target ...' errors\n";
|
||||
$startline = 1;
|
||||
while ($line = <IN>) {
|
||||
next if ( $line =~ /\s*#/ ); # skip comments
|
||||
chomp($line);
|
||||
#$line =~ s/[ ]//g; # remove blanks and tabs
|
||||
next if ( $line =~ /^$/ ); # skip empty lines
|
||||
$depends = $line;
|
||||
if ( $startline ) {
|
||||
$depends =~ s/.*?://;
|
||||
}
|
||||
@dependsarray = split(//,$depends);
|
||||
if ( $dependsarray[$#dependsarray] =~ /\\/
|
||||
or ( $dependsarray[$#dependsarray-1] =~ /\\/ ) ) {
|
||||
$depends =~ s/[ ]*\\\cM?$//;
|
||||
$startline = 0;
|
||||
} else {
|
||||
$depends =~ s/[ ]*\cM?$//;
|
||||
$startline = 1;
|
||||
}
|
||||
print OUT "$depends : \n";
|
||||
}
|
||||
|
||||
print OUT "\n";
|
||||
close IN or die "Cannot close $tempfile: $!";
|
||||
close OUT or die "Cannot close $depfile: $!";
|
||||
unlink("$tempfile");
|
||||
}
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
|
||||
if $running_under_some_shell; # makeIocCdCommands.pl
|
||||
|
||||
use Cwd;
|
||||
|
||||
$cwd = cwd();
|
||||
#hack for sun4
|
||||
$cwd =~ s|/tmp_mnt||;
|
||||
#hack for win32
|
||||
$cwd =~ s|\\|\/|g;
|
||||
$arch = $ARGV[0];
|
||||
$iocsApplTop = $ARGV[1];
|
||||
#remove top parts of current working directory
|
||||
#and add ioc's appl top alias (if supplied)
|
||||
if ( $iocsApplTop ne "" ) {
|
||||
$cwd =~ s|.*(/iocBoot.*)|$1|;
|
||||
$cwd = $iocsApplTop . $cwd;
|
||||
}
|
||||
|
||||
unlink("cdCommands");
|
||||
open(OUT,">cdCommands") or die "$! opening cdCommands";
|
||||
print OUT "startup = \"$cwd\"\n";
|
||||
|
||||
#appbin is kept for compatibility with 3.13.1
|
||||
$appbin = $cwd;
|
||||
$appbin =~ s/iocBoot.*//;
|
||||
$appbin = $appbin . "/bin/${arch}";
|
||||
print OUT "appbin = \"$appbin\"\n";
|
||||
|
||||
$top = $cwd;
|
||||
$top =~ s/\/iocBoot.*//;
|
||||
$applications{TOP} = $top;
|
||||
print OUT "top = \"$top\"\n";
|
||||
$topbin = "${top}/bin/${arch}";
|
||||
#skip check that top/bin/${arch} exists; src may not have been builT
|
||||
print OUT "topbin = \"$topbin\"\n";
|
||||
$release = "$top/configure/RELEASE";
|
||||
if (-r "$release") {
|
||||
open(IN, "$release") or die "Cannot open $release\n";
|
||||
while ($line = <IN>) {
|
||||
next if ( $line =~ /\s*#/ );
|
||||
chomp($line);
|
||||
$_ = $line;
|
||||
#the following looks for
|
||||
# prefix = $(macro)post
|
||||
($prefix,$macro,$post) = /(.*)\s*=\s*\$\((.*)\)(.*)/;
|
||||
if ($macro eq "") { # true if no macro is present
|
||||
# the following looks for
|
||||
# prefix = post
|
||||
($prefix,$post) = /(.*)\s*=\s*(.*)/;
|
||||
} else {
|
||||
$base = $applications{$macro};
|
||||
if ($base eq "") {
|
||||
print "error: $macro was not previously defined\n";
|
||||
} else {
|
||||
$post = $base . $post;
|
||||
}
|
||||
}
|
||||
$applications{$prefix} = $post;
|
||||
$app = lc($prefix);
|
||||
if ( -d "$post") { #check that directory exists
|
||||
print OUT "$app = \"$post\"\n";
|
||||
}
|
||||
if ( -d "$post/bin/$arch") { #check that directory exists
|
||||
print OUT "${app}bin = \"$post/bin/$arch\"\n";
|
||||
}
|
||||
}
|
||||
close IN;
|
||||
}
|
||||
close OUT;
|
||||
@@ -53,12 +53,13 @@ foreach $name ( @nameList ) {
|
||||
print OUT "endif\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "ifneq (\$(strip \$(${name}_LIBS_\$(OS_CLASS))),)\n";
|
||||
print OUT "${name}_LIBS+=\$(subst -nil-,,\$(${name}_LIBS_\$(OS_CLASS)))\n";
|
||||
print OUT "${name}_LDLIBS+=\$(subst -nil-,,\$(${name}_LIBS_\$(OS_CLASS)))\n";
|
||||
print OUT "else\n";
|
||||
print OUT "ifdef ${name}_LIBS_DEFAULT\n";
|
||||
print OUT "${name}_LIBS+=\$(${name}_LIBS_DEFAULT)\n";
|
||||
print OUT "${name}_LDLIBS+=\$(${name}_LIBS_DEFAULT)\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "${name}_LDLIBS+=\$(${name}_LIBS)\n";
|
||||
print OUT "ifneq (\$(strip \$(${name}_SYS_LIBS_\$(OS_CLASS))),)\n";
|
||||
print OUT "${name}_SYS_LIBS+=\$(subst -nil-,,\$(${name}_SYS_LIBS_\$(OS_CLASS)))\n";
|
||||
print OUT "else\n";
|
||||
@@ -68,15 +69,13 @@ foreach $name ( @nameList ) {
|
||||
print OUT "endif\n";
|
||||
print OUT "${name}_OBJS+=\$(addsuffix \$(OBJ),\$(basename \$(${name}_SRCS)))\n";
|
||||
print OUT "\n";
|
||||
print OUT "depends: \$(${name}_SRCS)\n";
|
||||
print OUT "\n";
|
||||
print OUT "ifeq (\$(filter ${name},\$(TESTPROD)),${name})\n";
|
||||
print OUT "ifeq (,\$(strip \$(${name}_OBJS) \$(PRODUCT_OBJS)))\n";
|
||||
print OUT "${name}_OBJS+=${name}\$(OBJ)\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "${name}_RESS+=\$(addsuffix \$(RES),\$(basename \$(${name}_RCS)))\n";
|
||||
print OUT "${name}_OBJSNAME+=\$(addsuffix \$(OBJ),\$(basename \$(${name}_OBJS)))\n";
|
||||
print OUT "${name}_DEPLIBS=\$(foreach lib, \$(${name}_LIBS),\$(firstword \$(wildcard \\\n";
|
||||
print OUT "${name}_DEPLIBS=\$(foreach lib, \$(${name}_LDLIBS),\$(firstword \$(wildcard \\\n";
|
||||
print OUT " \$(\$(lib)_DIR)/\$(LIB_PREFIX)\$(lib)\*)))\n";
|
||||
print OUT "${name}\$(EXE): \$(${name}_OBJSNAME) \$(${name}_RESS) \$(${name}_DEPLIBS)\n";
|
||||
print OUT "endif\n";
|
||||
@@ -87,7 +86,7 @@ foreach $name ( @nameList ) {
|
||||
print OUT "endif\n";
|
||||
print OUT "${name}_RESS+=\$(addsuffix \$(RES),\$(basename \$(${name}_RCS)))\n";
|
||||
print OUT "${name}_OBJSNAME+=\$(addsuffix \$(OBJ),\$(basename \$(${name}_OBJS)))\n";
|
||||
print OUT "${name}_DEPLIBS=\$(foreach lib, \$(${name}_LIBS),\$(firstword \$(wildcard \\\n";
|
||||
print OUT "${name}_DEPLIBS=\$(foreach lib, \$(${name}_LDLIBS),\$(firstword \$(wildcard \\\n";
|
||||
print OUT " \$(\$(lib)_DIR)/\$(LIB_PREFIX)\$(lib)\*)))\n";
|
||||
print OUT "${name}\$(EXE): \$(${name}_OBJSNAME) \$(${name}_RESS) \$(${name}_DEPLIBS)\n";
|
||||
print OUT "endif\n";
|
||||
@@ -98,27 +97,13 @@ foreach $name ( @nameList ) {
|
||||
print OUT "endif\n";
|
||||
print OUT "${name}_RESS+=\$(addsuffix \$(RES),\$(basename \$(${name}_RCS)))\n";
|
||||
print OUT "${name}_OBJSNAME+=\$(addsuffix \$(OBJ),\$(basename \$(${name}_OBJS)))\n";
|
||||
print OUT "${name}_DEPLIBS=\$(foreach lib, \$(${name}_LIBS),\$(firstword \$(wildcard \\\n";
|
||||
print OUT "${name}_DEPLIBS=\$(foreach lib, \$(${name}_LDLIBS),\$(firstword \$(wildcard \\\n";
|
||||
print OUT " \$(\$(lib)_DIR)/\$(LIB_PREFIX)\$(lib)\*)))\n";
|
||||
print OUT "\$(LIB_PREFIX)${name}\$(LIB_SUFFIX):\$(${name}_OBJSNAME) \$(${name}_RESS)\n";
|
||||
print OUT "\$(LIB_PREFIX)${name}\$(LIB_SUFFIX):\$(${name}_DEPLIBS)\n";
|
||||
print OUT "\$(LIB_PREFIX)${name}\$(SHRLIB_SUFFIX):\$(${name}_OBJSNAME) \$(${name}_RESS)\n";
|
||||
print OUT "\$(LIB_PREFIX)${name}\$(SHRLIB_SUFFIX):\$(${name}_DEPLIBS)\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "ifneq (\$(strip \$(DBDEXPAND_\$(OS_CLASS))),)\n";
|
||||
print OUT "DBDEXPAND+=\$(subst -nil-,,\$(DBDEXPAND_\$(OS_CLASS)))\n";
|
||||
print OUT "else\n";
|
||||
print OUT "ifdef DBDEXPAND_DEFAULT\n";
|
||||
print OUT "DBDEXPAND+=\$(DBDEXPAND_DEFAULT)\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "ifneq (\$(strip \$(DBDNAME_\$(OS_CLASS))),)\n";
|
||||
print OUT "DBDNAME+=\$(subst -nil-,,\$(DBDNAME_\$(OS_CLASS)))\n";
|
||||
print OUT "else\n";
|
||||
print OUT "ifdef DBDNAME_DEFAULT\n";
|
||||
print OUT "DBDNAME+=\$(DBDNAME_DEFAULT)\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "\n";
|
||||
}
|
||||
close OUT or die "Cannot close $outfile: $!";
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
|
||||
if $running_under_some_shell; # makeConfigAppInclude.pl
|
||||
|
||||
use Cwd;
|
||||
|
||||
$hostarch = $ARGV[0];
|
||||
$arch = $ARGV[1];
|
||||
$outfile = $ARGV[2];
|
||||
$top = $ARGV[3];
|
||||
$applications{TOP} = $top;
|
||||
|
||||
unlink("${outfile}");
|
||||
open(OUT,">${outfile}") or die "$! opening ${outfile}";
|
||||
print OUT "#Do not modify this file.\n";
|
||||
print OUT "#This file is created during the build.\n";
|
||||
|
||||
@files =();
|
||||
push(@files,"$top/configure/RELEASE");
|
||||
push(@files,"$top/configure/RELEASE.${hostarch}");
|
||||
foreach $file (@files) {
|
||||
if (-r "$file") {
|
||||
open(IN, "$file") or die "Cannot open $file\n";
|
||||
while ($line = <IN>) {
|
||||
next if ( $line =~ /\s*#/ );
|
||||
chomp($line);
|
||||
$line =~ s/[ ]//g; # remove blanks and tabs
|
||||
next if ( $line =~ /^$/ ); # skip empty lines
|
||||
$_ = $line;
|
||||
#the following looks for
|
||||
# prefix = $(macro)post
|
||||
($prefix,$macro,$post) = /(.*)\s*=\s*\$\((.*)\)(.*)/;
|
||||
if ($macro eq "") { # true if no macro is present
|
||||
# the following looks for
|
||||
# prefix = post
|
||||
($prefix,$post) = /(.*)\s*=\s*(.*)/;
|
||||
$app_post = $post;
|
||||
} else {
|
||||
$base = $applications{$macro};
|
||||
if ($base eq "") {
|
||||
#print "error: $macro was not previously defined\n";
|
||||
} else {
|
||||
$app_post = "\$($macro)" . $post;
|
||||
$post = $base . $post;
|
||||
}
|
||||
}
|
||||
$applications{$prefix} = $post;
|
||||
next if ( $prefix eq "EPICS_BASE" );
|
||||
next if ( $prefix eq "TEMPLATE_TOP" );
|
||||
if ( -d "$post") { #check that directory exists
|
||||
if ( -d "$post/configure") { #check that directory exists
|
||||
print OUT "-include $app_post/configure/RULES_BUILD\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
close IN;
|
||||
}
|
||||
}
|
||||
182
configure/tools/mkmf.pl
Executable file
182
configure/tools/mkmf.pl
Executable file
@@ -0,0 +1,182 @@
|
||||
#!/usr/bin/perl
|
||||
#-----------------------------------------------------------------------
|
||||
# mkmf.pl: Perl script to create include file dependancies
|
||||
#
|
||||
# mkmf.pl is mkmf modified for the EPICS system to output only include
|
||||
# file dependancies. It is intendend as a fallback when the gnu compilers
|
||||
# gcc and g++ are not available, and it has the following limitations.
|
||||
#
|
||||
# 1) Only handles the #include preprocessor command. Does not understand
|
||||
# the preproceeor commands #define, #if, #ifdef, #ifndef, ...
|
||||
# 2) Does not know a compilers internal macro definitions e.g.
|
||||
# __cplusplus, __STDC__
|
||||
# 3) Does not keep track of the macros defined in #include files so can't
|
||||
# do #ifdefs #ifndef ...
|
||||
# 4) Does not know where system include files are located
|
||||
#
|
||||
#-----------------------------------------------------------------------
|
||||
# mkmf: Perl script for makefile construction
|
||||
#
|
||||
# AUTHOR: V. Balaji (vb@gfdl.gov)
|
||||
# SGI/GFDL Princeton University
|
||||
#
|
||||
# Full web documentation for mkmf:
|
||||
# http://www.gfdl.gov/~vb/mkmf.html
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# For the full text of the GNU General Public License,
|
||||
# write to: Free Software Foundation, Inc.,
|
||||
# 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
#-----------------------------------------------------------------------
|
||||
|
||||
require 5;
|
||||
use strict;
|
||||
use File::Basename;
|
||||
use Getopt::Std;
|
||||
use vars qw( $opt_d $opt_m $opt_v ); # declare these global to be shared with Getopt:Std
|
||||
|
||||
my $version = '$Id$ ';
|
||||
|
||||
# initialize variables: use getopts for these
|
||||
getopts( 'dm:v' ) || die "\aSyntax: $0 [-d] [-m makefile] [-v] [targets]\n";
|
||||
$opt_v = 1 if $opt_d; # debug flag turns on verbose flag also
|
||||
print "$0 $version\n" if $opt_v;
|
||||
|
||||
$opt_m = 'depends' unless $opt_m; # set default file name
|
||||
print "Making depends file $opt_m ...\n" if $opt_v;
|
||||
|
||||
my @dirs;
|
||||
my $i;
|
||||
foreach $i (0 .. $#ARGV-2) {
|
||||
push @dirs, $ARGV[$i];
|
||||
}
|
||||
#some generic declarations
|
||||
my( $file, $line);
|
||||
|
||||
my %scanned; # list of directories/files already scanned
|
||||
my $object = $ARGV[$#ARGV-1]; # object file
|
||||
my $source = $ARGV[$#ARGV]; # sourcefile from object
|
||||
|
||||
#some constants
|
||||
my $endline = $/;
|
||||
my %delim_match = ( q/'/ => q/'/, # hash to find includefile delimiter pair
|
||||
q/"/ => q/"/,
|
||||
q/</ => q/>/ );
|
||||
|
||||
#formatting command for MAKEFILE, keeps very long lines to 80 characters
|
||||
format MAKEFILE =
|
||||
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \~
|
||||
$line
|
||||
.
|
||||
|
||||
sub print_formatted_list{
|
||||
#this routine, in conjunction with the format line above, can be used to break up long lines
|
||||
# it is currently used to break up the potentially long defs of SRC, OBJ, CPPDEFS, etc.
|
||||
# not used for the dependency lists
|
||||
$line = "@_";
|
||||
local $: = " \t\n"; # the default formatting word boundary includes the hyphen, but not here
|
||||
while ( length $line > 78 ) {
|
||||
write MAKEFILE, $line;
|
||||
}
|
||||
print MAKEFILE $line unless $line eq '';
|
||||
print MAKEFILE "\n";
|
||||
}
|
||||
|
||||
#begin writing makefile
|
||||
open MAKEFILE, ">$opt_m" or die "\aERROR opening file $opt_m for writing: $!\n";
|
||||
printf MAKEFILE "# Makefile created by %s $version\n\n", basename($0);
|
||||
|
||||
if( $opt_d ) {
|
||||
print "DEBUG: dirs= @dirs\n";
|
||||
print "DEBUG: source= $source\n";
|
||||
print "DEBUG: object= $object\n";
|
||||
}
|
||||
|
||||
my %includes_in; # hash of includes in a given source file (hashed against the corresponding object)
|
||||
#subroutine to scan file for include files
|
||||
# first argument is $object, second is $file
|
||||
sub scanfile_for_keywords {
|
||||
my $object = shift;
|
||||
my $file = shift;
|
||||
local $/ = $endline;
|
||||
#if file has already been scanned, return
|
||||
return if $scanned{$file};
|
||||
print "Scanning file $file of object $object ...\n" if $opt_v;
|
||||
open FILE, $file or die "\aERROR opening file $file of object $object: $!\n";
|
||||
foreach $line ( <FILE> ) {
|
||||
next if !($line =~ m/^[ ]*\#?[ ]*include/);
|
||||
if( $line =~ /^[\#?\s]*include\s*(['""'<])([\w\.\/]*)$delim_match{\1}/ix ) {
|
||||
$includes_in{$file} .= ' ' . $2 if $2;
|
||||
}
|
||||
}
|
||||
close FILE;
|
||||
$scanned{$file} = 1;
|
||||
print " uses includes=$includes_in{$file}.\n" if $opt_d;
|
||||
}
|
||||
|
||||
&scanfile_for_keywords( $object, $source );
|
||||
|
||||
my %includes; # global list of includes
|
||||
my @cmdline;
|
||||
my %obj_of_include; # hash of includes for current object
|
||||
print "Collecting dependencies for $object ...\n" if $opt_v;
|
||||
@cmdline = "$object: $source";
|
||||
#includes: done in subroutine since it must be recursively called to look for embedded includes
|
||||
&get_include_list( $object, $source );
|
||||
#write the command line: if no file-specific command, use generic command for this suffix
|
||||
&print_formatted_list(@cmdline);
|
||||
|
||||
# subroutine to seek out includes recursively
|
||||
sub get_include_list {
|
||||
my( $incfile, $incname, $incpath );
|
||||
my @paths;
|
||||
my $object = shift;
|
||||
my $file = shift;
|
||||
my $include;
|
||||
foreach ( split /\s+/, $includes_in{$file} ) {
|
||||
print "object=$object, file=$file, include=$_.\n" if $opt_d;
|
||||
if ( $scanned{"$_"} ) {
|
||||
print "DEBUG: skipping scanned file $_\n" if $opt_d;
|
||||
next;
|
||||
}
|
||||
$include = $_;
|
||||
$incname = basename($_);
|
||||
next if ( $incname eq '' );
|
||||
$incpath = dirname($_);
|
||||
undef $incpath if $incpath eq './';
|
||||
undef $incpath if $incpath eq '.';
|
||||
if( $incpath =~ /^\// ) {
|
||||
@paths = $incpath; # exact incpath specified, use it
|
||||
} else {
|
||||
@paths = @dirs;
|
||||
}
|
||||
foreach ( @paths ) {
|
||||
local $/ = '/'; chomp; # remove trailing / if present
|
||||
my $newincpath = "$_/$incpath" if $_;
|
||||
undef $newincpath if $newincpath eq './';
|
||||
$incfile = "$newincpath$incname";
|
||||
print "DEBUG: checking for $incfile in $_\n" if $opt_d;
|
||||
if ( -f $incfile and $obj_of_include{$incfile} ne $object ) {
|
||||
push @cmdline, $incfile;
|
||||
$includes{$incfile} = 1;
|
||||
chomp( $newincpath );
|
||||
$newincpath = '.' if $newincpath eq '';
|
||||
&scanfile_for_keywords($object,$incfile);
|
||||
$obj_of_include{$incfile} = $object;
|
||||
&get_include_list($object,$incfile); # recursively look for includes
|
||||
last;
|
||||
}
|
||||
}
|
||||
$scanned{"$include"} = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ while ($line = <STDIN>)
|
||||
($adr,$type,$name) = split ' ',$line,3;
|
||||
chop $name;
|
||||
$name =~ s/^__/_/;
|
||||
next if ( $name =~ /^__?GLOBAL_.D.*\.cpp/ );
|
||||
next if ( $name =~ /^__?GLOBAL_.D.*.\.cpp/ );
|
||||
next if ( $name =~ /^__?GLOBAL_.D.\.\./ );
|
||||
@dtorlist = (@dtorlist,$name);
|
||||
};
|
||||
@@ -23,7 +23,7 @@ while ($line = <STDIN>)
|
||||
($adr,$type,$name) = split ' ',$line,3;
|
||||
chop $name;
|
||||
$name =~ s/^__/_/;
|
||||
next if ( $name =~ /^__?GLOBAL_.I.*\.cpp/ );
|
||||
next if ( $name =~ /^__?GLOBAL_.I.*.\.cpp/ );
|
||||
next if ( $name =~ /^__?GLOBAL_.I.\.\./ );
|
||||
@ctorlist = (@ctorlist,$name);
|
||||
};
|
||||
|
||||
@@ -22,6 +22,10 @@ foreach $arg ( @ARGV )
|
||||
{
|
||||
rmdir ($arg) or die "Cannot delete $arg";
|
||||
}
|
||||
if (-d $arg)
|
||||
{
|
||||
die "Failed to delete $arg";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -32,6 +32,9 @@ DIRS += iocsh
|
||||
ifeq ($(findstring vxWorks,$(BUILD_ARCHS)),vxWorks)
|
||||
DIRS += vxWorks
|
||||
endif
|
||||
ifneq (,$(findstring RTEMS,$(BUILD_ARCHS)))
|
||||
DIRS += RTEMS
|
||||
endif
|
||||
DIRS += gdd
|
||||
DIRS += cas
|
||||
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
TOP=../../..
|
||||
TOP = ../..
|
||||
|
||||
include $(TOP)/configure/CONFIG
|
||||
|
||||
DIRS = ansi old
|
||||
DIRS += base
|
||||
|
||||
include $(TOP)/configure/RULES_DIRS
|
||||
|
||||
12
src/RTEMS/base/Makefile
Normal file
12
src/RTEMS/base/Makefile
Normal file
@@ -0,0 +1,12 @@
|
||||
TOP=../../..
|
||||
include $(TOP)/configure/CONFIG
|
||||
|
||||
SRCS += rtems_init.c
|
||||
SRCS += rtems_config.c
|
||||
SRCS += rtems_netconfig.c
|
||||
SRCS += rtems_util.c
|
||||
|
||||
LIBRARY_RTEMS = rtemsCom
|
||||
LIBRARY_SRCS = $(SRCS) $(BUILD_ARCHS)
|
||||
|
||||
include $(TOP)/configure/RULES
|
||||
@@ -20,13 +20,15 @@
|
||||
#include <syslog.h>
|
||||
#include <rtems.h>
|
||||
#include <rtems/error.h>
|
||||
#include <rtems/stackchk.h>
|
||||
#include <rtems/rtems_bsdnet.h>
|
||||
#include <rtems/tftp.h>
|
||||
|
||||
#include <epicsThread.h>
|
||||
#include <logClient.h>
|
||||
#include <ioccrf.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <iocsh.h>
|
||||
|
||||
static void logReset (void);
|
||||
|
||||
/*
|
||||
***********************************************************************
|
||||
@@ -86,10 +88,10 @@ LogNetFatal (const char *msg, int err)
|
||||
***********************************************************************
|
||||
*/
|
||||
/*
|
||||
* Add TFTP server and target prefix to pathname
|
||||
* Add TFTP server and target prefix to pathnames
|
||||
*/
|
||||
static char *
|
||||
rtems_tftp_path (const char *name)
|
||||
static void
|
||||
rtems_set_directory (void)
|
||||
{
|
||||
char *path;
|
||||
int pathsize = 200;
|
||||
@@ -97,33 +99,13 @@ rtems_tftp_path (const char *name)
|
||||
|
||||
if ((path = malloc (pathsize)) == NULL)
|
||||
LogFatal ("Can't create TFTP path name -- no memory.\n");
|
||||
strcpy (path, "/TFTP/");
|
||||
strcpy (path, "/TFTP/BOOTP_HOST/epics/");
|
||||
l = strlen (path);
|
||||
if (inet_ntop (AF_INET, &rtems_bsdnet_bootp_server_address, &path[l], pathsize - l) == NULL)
|
||||
LogFatal ("Can't convert BOOTP server name");
|
||||
l = strlen (path);
|
||||
strcpy (&path[l], "/epics/");
|
||||
l = strlen (path);
|
||||
if (gethostname (&path[l], pathsize - l) || (path[l] == '\0'))
|
||||
if (gethostname (&path[l], pathsize - l - 2) || (path[l] == '\0'))
|
||||
LogFatal ("Can't get host name");
|
||||
l = strlen (path);
|
||||
path[l++] = '/';
|
||||
for (;;) {
|
||||
if (name[0] == '.') {
|
||||
if (name[1] == '/') {
|
||||
name += 2;
|
||||
continue;
|
||||
}
|
||||
if ((name[1] == '.') && (name[2] == '/')) {
|
||||
name += 3;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
path = realloc (path, l + 1 + strlen (name));
|
||||
strcpy (&path[l], name);
|
||||
return path;
|
||||
strcat (path, "/");
|
||||
if (chdir (path) < 0)
|
||||
LogFatal ("Can't set initial TFTP directory");
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -150,40 +132,22 @@ rtems_netstat (unsigned int level)
|
||||
}
|
||||
}
|
||||
|
||||
static const ioccrfArg netStatArg0 = { "level",ioccrfArgInt};
|
||||
static const ioccrfArg * const netStatArgs[1] = {&netStatArg0};
|
||||
static const ioccrfFuncDef netStatFuncDef = {"netstat",1,netStatArgs};
|
||||
static void netStatCallFunc(const ioccrfArgBuf *args)
|
||||
static const iocshArg netStatArg0 = { "level",iocshArgInt};
|
||||
static const iocshArg * const netStatArgs[1] = {&netStatArg0};
|
||||
static const iocshFuncDef netStatFuncDef = {"netstat",1,netStatArgs};
|
||||
static void netStatCallFunc(const iocshArgBuf *args)
|
||||
{
|
||||
rtems_netstat(args[0].ival);
|
||||
}
|
||||
static const ioccrfFuncDef stackCheckFuncDef = {"stackCheck",0,NULL};
|
||||
static void stackCheckCallFunc(const ioccrfArgBuf *args)
|
||||
static const iocshFuncDef stackCheckFuncDef = {"stackCheck",0,NULL};
|
||||
static void stackCheckCallFunc(const iocshArgBuf *args)
|
||||
{
|
||||
Stack_check_Dump_usage ();
|
||||
}
|
||||
static void ioccrfRegisterRTEMS (void)
|
||||
static void iocshRegisterRTEMS (void)
|
||||
{
|
||||
ioccrfRegister(&netStatFuncDef, netStatCallFunc);
|
||||
ioccrfRegister(&stackCheckFuncDef, stackCheckCallFunc);
|
||||
}
|
||||
|
||||
/*
|
||||
* Since RTEMS doesn't have NFS we fake it by making sure that
|
||||
* all paths refer to files in the TFTP area.
|
||||
*/
|
||||
#ifdef fopen
|
||||
# undef fopen
|
||||
extern FILE *fopen (const char *, const char *);
|
||||
#endif
|
||||
FILE *rtems_fopen (const char *name, const char *mode)
|
||||
{
|
||||
FILE *fp;
|
||||
char *cp = rtems_tftp_path (name);
|
||||
|
||||
fp = fopen (cp, mode);
|
||||
free (cp);
|
||||
return fp;
|
||||
iocshRegister(&netStatFuncDef, netStatCallFunc);
|
||||
iocshRegister(&stackCheckFuncDef, stackCheckCallFunc);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -240,7 +204,7 @@ Init (rtems_task_argument ignored)
|
||||
*/
|
||||
initConsole ();
|
||||
putenv ("TERM=xterm");
|
||||
putenv ("IOCSH_PS1=rtems> ");
|
||||
putenv ("IOCSH_PS1=epics> ");
|
||||
putenv ("IOCSH_HISTSIZE=20");
|
||||
|
||||
/*
|
||||
@@ -250,23 +214,78 @@ Init (rtems_task_argument ignored)
|
||||
rtems_bsdnet_initialize_network ();
|
||||
printf ("***** Initializing TFTP *****\n");
|
||||
rtems_bsdnet_initialize_tftp_filesystem ();
|
||||
printf ("***** Initializing NTP *****\n");
|
||||
rtems_bsdnet_synchronize_ntp (0, 0);
|
||||
for (;;) {
|
||||
printf ("***** Initializing NTP *****\n");
|
||||
if (rtems_bsdnet_synchronize_ntp (0, 0) >= 0)
|
||||
break;
|
||||
epicsThreadSleep (10.0);
|
||||
}
|
||||
printf ("***** Initializing syslog *****\n");
|
||||
openlog ("IOC", LOG_CONS, LOG_DAEMON);
|
||||
syslog (LOG_NOTICE, "IOC started.");
|
||||
logReset ();
|
||||
|
||||
/*
|
||||
* Run the EPICS startup script
|
||||
*/
|
||||
printf ("***** Executing EPICS startup script *****\n");
|
||||
ioccrfRegisterRTEMS ();
|
||||
ioccrf ("st.cmd");
|
||||
iocshRegisterRTEMS ();
|
||||
rtems_set_directory ();
|
||||
iocsh ("st.cmd");
|
||||
|
||||
/*
|
||||
* Everything's running!
|
||||
*/
|
||||
epicsThreadSleep (2.0);
|
||||
ioccrf (NULL);
|
||||
iocsh (NULL);
|
||||
LogFatal ("Console command interpreter terminated");
|
||||
}
|
||||
|
||||
/*
|
||||
* Architecture-dependent routines
|
||||
*/
|
||||
#ifdef __mcpu32__
|
||||
|
||||
#include <m68360.h>
|
||||
static void
|
||||
logReset (void)
|
||||
{
|
||||
int bit, rsr;
|
||||
int i;
|
||||
const char *cp;
|
||||
char cbuf[80];
|
||||
|
||||
rsr = m360.rsr;
|
||||
for (i = 0, bit = 0x80 ; bit != 0 ; bit >>= 1) {
|
||||
if (rsr & bit) {
|
||||
switch (bit) {
|
||||
case 0x80: cp = "RESETH*"; break;
|
||||
case 0x40: cp = "POWER-UP"; break;
|
||||
case 0x20: cp = "WATCHDOG"; break;
|
||||
case 0x10: cp = "DOUBLE FAULT"; break;
|
||||
case 0x04: cp = "LOST CLOCK"; break;
|
||||
case 0x02: cp = "RESET"; break;
|
||||
case 0x01: cp = "RESETS*"; break;
|
||||
default: cp = "??"; break;
|
||||
}
|
||||
i += sprintf (cbuf+i, cp);
|
||||
rsr &= ~bit;
|
||||
if (rsr)
|
||||
i += sprintf (cbuf+i, ", ");
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
syslog (LOG_NOTICE, "Startup after %s.", cbuf);
|
||||
printf ("Startup after %s.\n", cbuf);
|
||||
m360.rsr = ~0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static void
|
||||
logReset (void)
|
||||
{
|
||||
syslog (LOG_NOTICE, "Started.");
|
||||
}
|
||||
|
||||
#endif
|
||||
60
src/RTEMS/base/rtems_netconfig.c
Normal file
60
src/RTEMS/base/rtems_netconfig.c
Normal file
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* RTEMS network configuration for EPICS
|
||||
* $Id$
|
||||
* Author: W. Eric Norum
|
||||
* eric.norum@usask.ca
|
||||
* (306) 966-5394
|
||||
*
|
||||
* This file can be copied to an application source dirctory
|
||||
* and modified to override the values shown below.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <bsp.h>
|
||||
#include <rtems/rtems_bsdnet.h>
|
||||
|
||||
#define NETWORK_TASK_PRIORITY 90
|
||||
|
||||
extern void rtems_bsdnet_loopattach();
|
||||
static struct rtems_bsdnet_ifconfig loopback_config = {
|
||||
"lo0", /* name */
|
||||
(int (*)(struct rtems_bsdnet_ifconfig *, int))rtems_bsdnet_loopattach, /* attach function */
|
||||
NULL, /* link to next interface */
|
||||
"127.0.0.1", /* IP address */
|
||||
"255.0.0.0", /* IP net mask */
|
||||
};
|
||||
|
||||
/*
|
||||
* The following conditionals select the network interface card.
|
||||
*
|
||||
* By default the network interface specified by the board-support
|
||||
* package is used.
|
||||
* To use a different NIC for a particular application, copy this file to the
|
||||
* application directory and add the appropriate -Dxxxx to the compiler flag.
|
||||
* To specify a different NIC on a site-wide basis, add the appropriate
|
||||
* flags to the site configuration file for the target. For example, to
|
||||
* specify a 3COM 3C509 for all RTEMS-pc386 targets at your site, add
|
||||
* TARGET_CFLAGS += -DEPICS_RTEMS_NIC_3C509
|
||||
* to configure/os/CONFIG_SITE.Common.RTEMS-pc386.
|
||||
*/
|
||||
#if defined(EPICS_RTEMS_NIC_3C509) /* 3COM 3C509 */
|
||||
extern int rtems_3c509_driver_attach (struct rtems_bsdnet_ifconfig *, int);
|
||||
# define NIC_NAME "ep0"
|
||||
# define NIC_ATTACH rtems_3c509_driver_attach
|
||||
|
||||
#else /* Use NIC provided by BSP */
|
||||
# define NIC_NAME RTEMS_BSP_NETWORK_DRIVER_NAME
|
||||
# define NIC_ATTACH RTEMS_BSP_NETWORK_DRIVER_ATTACH
|
||||
#endif
|
||||
|
||||
static struct rtems_bsdnet_ifconfig netdriver_config = {
|
||||
NIC_NAME, /* name */
|
||||
NIC_ATTACH, /* attach function */
|
||||
&loopback_config, /* link to next interface */
|
||||
};
|
||||
struct rtems_bsdnet_config rtems_bsdnet_config = {
|
||||
&netdriver_config, /* Network interface */
|
||||
rtems_bsdnet_do_bootp, /* Use BOOTP to get network configuration */
|
||||
NETWORK_TASK_PRIORITY, /* Network task priority */
|
||||
180*1024, /* MBUF space */
|
||||
350*1024, /* MBUF cluster space */
|
||||
};
|
||||
@@ -20,23 +20,25 @@ asIoc_DLL_LIBS = dbIoc dbStaticIoc ca Com
|
||||
|
||||
asHost_DIR=.
|
||||
PROD_LIBS = asHost dbStaticHost Com
|
||||
PROD = ascheck
|
||||
PROD_HOST = ascheck
|
||||
ascheck_SRCS = ascheck.c
|
||||
|
||||
asHost_RCS_WIN32 = asHost.rc
|
||||
asIoc_RCS_WIN32 = asIoc.rc
|
||||
|
||||
# For R3.13 compatibility only
|
||||
OBJLIB_vxWorks=asIoc
|
||||
OBJLIB_SRCS = $(LIBSRCS) $(asIoc_SRCS)
|
||||
|
||||
include $(TOP)/configure/RULES
|
||||
|
||||
# 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
|
||||
asLib.c: asLib_lex.c ../asLibRoutines.c
|
||||
|
||||
$(INSTALL_INC)/asLib.h:../asLib.h
|
||||
|
||||
clean::
|
||||
@$(RM) asLib.c asLib_lex.c
|
||||
|
||||
depends: asLib.c
|
||||
asLib.c : asLib_lex.c
|
||||
|
||||
|
||||
@@ -168,14 +168,13 @@ LOCAL void eventCallback(struct event_handler_args arg)
|
||||
|
||||
LOCAL void asCaTask(void)
|
||||
{
|
||||
static const int enablePreemption = 1u;
|
||||
ASG *pasg;
|
||||
ASGINP *pasginp;
|
||||
CAPVT *pcapvt;
|
||||
int status;
|
||||
|
||||
taskwdInsert(epicsThreadGetIdSelf(),NULL,NULL);
|
||||
SEVCHK(ca_context_create(enablePreemption),
|
||||
SEVCHK(ca_context_create(ca_enable_preemptive_callback),
|
||||
"asCaTask calling ca_context_create");
|
||||
SEVCHK(ca_add_exception_event(exceptionCallback,NULL),
|
||||
"ca_add_exception_event");
|
||||
|
||||
@@ -14,8 +14,17 @@ of this distribution.
|
||||
#define INCasCah
|
||||
|
||||
#include "shareLib.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
epicsShareFunc void epicsShareAPI asCaStart(void);
|
||||
epicsShareFunc void epicsShareAPI asCaStop(void);
|
||||
epicsShareExtern int asCaDebug;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /*INCasCah*/
|
||||
|
||||
@@ -188,7 +188,7 @@ int epicsShareAPI asInitAsyn(ASDBCALLBACK *pcallback)
|
||||
return(-1);
|
||||
}
|
||||
asInitTheadId = epicsThreadCreate("asInitTask",
|
||||
(epicsThreadPriorityChannelAccessServer + 9),
|
||||
(epicsThreadPriorityCAServerHigh + 1),
|
||||
epicsThreadGetStackSize(epicsThreadStackBig),
|
||||
(EPICSTHREADFUNC)asInitTask,(void *)pcallback);
|
||||
if(asInitTheadId==0) {
|
||||
|
||||
@@ -12,10 +12,10 @@ DBD += bptTypeKdegC.dbd
|
||||
DBD += bptTypeKdegF.dbd
|
||||
|
||||
PROD_LIBS = dbStaticHost Com
|
||||
PROD += makeBpt
|
||||
PROD_HOST += makeBpt
|
||||
makeBpt_SRCS=makeBpt
|
||||
|
||||
include $(TOP)/configure/RULES
|
||||
|
||||
inc: $(INSTALL_PROD)
|
||||
$(COMMON_DBDS): $(INSTALL_PROD)
|
||||
|
||||
depends: $(INSTALL_PROD)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
menu(menuConvert) {
|
||||
choice(menuConvertNO_CONVERSION,"NO CONVERSION")
|
||||
choice(menuConvertSLOPE,"SLOPE")
|
||||
choice(menuConvertLINEAR,"LINEAR")
|
||||
choice(menuConverttypeKdegF,"typeKdegF")
|
||||
choice(menuConverttypeKdegC,"typeKdegC")
|
||||
|
||||
342
src/ca/CASG.cpp
342
src/ca/CASG.cpp
@@ -27,15 +27,33 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define epicsAssertAuthor "Jeff Hill johill@lanl.gov"
|
||||
|
||||
#include "iocinf.h"
|
||||
#include "syncGroup.h"
|
||||
#include "oldAccess.h"
|
||||
#include "autoPtrDestroy.h"
|
||||
#include "cac.h"
|
||||
|
||||
#if defined ( _MSC_VER )
|
||||
# pragma warning ( push )
|
||||
# pragma warning ( disable: 4660 )
|
||||
#endif
|
||||
|
||||
template class tsSLNode < CASG>;
|
||||
template class tsFreeList < CASG, 128, 0 >;
|
||||
template class tsFreeList < syncGroupWriteNotify, 128, 0 >;
|
||||
template class tsFreeList < syncGroupReadNotify, 128, 0 >;
|
||||
|
||||
#if defined ( _MSC_VER )
|
||||
# pragma warning ( pop )
|
||||
#endif
|
||||
|
||||
tsFreeList < struct CASG, 128 > CASG::freeList;
|
||||
epicsMutex CASG::freeListMutex;
|
||||
|
||||
CASG::CASG ( cac &cacIn ) :
|
||||
opPendCount ( 0u ), seqNo ( 0u ),
|
||||
client ( cacIn ), magic ( CASG_MAGIC )
|
||||
CASG::CASG ( oldCAC &cacIn ) :
|
||||
client ( cacIn ), magic ( CASG_MAGIC )
|
||||
{
|
||||
client.installCASG ( *this );
|
||||
}
|
||||
@@ -48,19 +66,12 @@ void CASG::destroy ()
|
||||
CASG::~CASG ()
|
||||
{
|
||||
if ( this->verify () ) {
|
||||
{
|
||||
epicsAutoMutex locker ( this->mutex );
|
||||
tsDLIterBD <syncGroupNotify> notify = this->ioList.firstIter ();
|
||||
while ( notify.valid () ) {
|
||||
notify->release ();
|
||||
notify = this->ioList.firstIter ();
|
||||
}
|
||||
}
|
||||
this->reset ();
|
||||
this->client.uninstallCASG ( *this );
|
||||
this->magic = 0;
|
||||
}
|
||||
else {
|
||||
ca_printf ("cac: attempt to destroy invalid sync group ignored\n");
|
||||
this->printf ("cac: attempt to destroy invalid sync group ignored\n");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,12 +85,17 @@ bool CASG::verify () const
|
||||
*/
|
||||
int CASG::block ( double timeout )
|
||||
{
|
||||
unsigned long initialSeqNo = this->seqNo;
|
||||
epicsTime cur_time;
|
||||
epicsTime beg_time;
|
||||
double delay;
|
||||
double remaining;
|
||||
int status;
|
||||
double delay;
|
||||
double remaining;
|
||||
int status;
|
||||
|
||||
// prevent recursion nightmares by disabling blocking
|
||||
// for IO from within a CA callback.
|
||||
if ( epicsThreadPrivateGet ( caClientCallbackThreadId ) ) {
|
||||
return ECA_EVDISALLOW;
|
||||
}
|
||||
|
||||
if ( timeout < 0.0 ) {
|
||||
return ECA_TIMEOUT;
|
||||
@@ -92,36 +108,26 @@ int CASG::block ( double timeout )
|
||||
beg_time = cur_time;
|
||||
delay = 0.0;
|
||||
|
||||
this->client.enableCallbackPreemption ();
|
||||
|
||||
status = ECA_NORMAL;
|
||||
while ( 1 ) {
|
||||
{
|
||||
epicsAutoMutex locker ( this->mutex );
|
||||
if ( this->seqNo != initialSeqNo ) {
|
||||
break;
|
||||
}
|
||||
if ( this->opPendCount == 0u ) {
|
||||
this->seqNo++;
|
||||
break;
|
||||
}
|
||||
if ( this->ioPendingList.count() == 0u ) {
|
||||
status = ECA_NORMAL;
|
||||
break;
|
||||
}
|
||||
|
||||
remaining = timeout - delay;
|
||||
if ( remaining <= CAC_SIGNIFICANT_SELECT_DELAY ) {
|
||||
if ( remaining <= CAC_SIGNIFICANT_DELAY ) {
|
||||
/*
|
||||
* Make sure that we take care of
|
||||
* recv backlog at least once
|
||||
*/
|
||||
status = ECA_TIMEOUT;
|
||||
{
|
||||
epicsAutoMutex locker ( this->mutex );
|
||||
this->seqNo++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
this->sem.wait ( remaining );
|
||||
status = this->client.blockForEventAndEnableCallbacks ( this->sem, remaining );
|
||||
if ( status != ECA_NORMAL ) {
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* force a time update
|
||||
@@ -131,7 +137,7 @@ int CASG::block ( double timeout )
|
||||
delay = cur_time - beg_time;
|
||||
}
|
||||
|
||||
this->client.disableCallbackPreemption ();
|
||||
this->reset ();
|
||||
|
||||
return status;
|
||||
}
|
||||
@@ -139,28 +145,230 @@ int CASG::block ( double timeout )
|
||||
void CASG::reset ()
|
||||
{
|
||||
epicsAutoMutex locker ( this->mutex );
|
||||
this->opPendCount = 0;
|
||||
this->seqNo++;
|
||||
this->destroyCompletedIO ();
|
||||
this->destroyPendingIO ();
|
||||
}
|
||||
|
||||
void CASG::show ( unsigned level) const
|
||||
// lock must be applied
|
||||
void CASG::destroyCompletedIO ()
|
||||
{
|
||||
printf ( "Sync Group: id=%u, magic=%u, opPend=%lu, seqNo=%lu\n",
|
||||
this->getId (), this->magic, this->opPendCount, this->seqNo );
|
||||
tsDLList < syncGroupNotify > userStillRequestingList;
|
||||
syncGroupNotify *pNotify;
|
||||
while ( ( pNotify = this->ioCompletedList.get () ) ) {
|
||||
if ( pNotify->ioInitiated() ) {
|
||||
pNotify->destroy ( * this );
|
||||
}
|
||||
else {
|
||||
userStillRequestingList.add ( *pNotify );
|
||||
}
|
||||
}
|
||||
this->ioCompletedList.add ( userStillRequestingList );
|
||||
}
|
||||
|
||||
// lock must be applied
|
||||
void CASG::destroyPendingIO ()
|
||||
{
|
||||
tsDLList < syncGroupNotify > userStillRequestingList;
|
||||
syncGroupNotify *pNotify;
|
||||
while ( ( pNotify = this->ioPendingList.get () ) ) {
|
||||
if ( pNotify->ioInitiated() ) {
|
||||
pNotify->destroy ( * this );
|
||||
}
|
||||
else {
|
||||
userStillRequestingList.add ( *pNotify );
|
||||
}
|
||||
}
|
||||
this->ioPendingList.add ( userStillRequestingList );
|
||||
}
|
||||
|
||||
void CASG::show ( unsigned level ) const
|
||||
{
|
||||
::printf ( "Sync Group: id=%u, magic=%u, opPend=%u\n",
|
||||
this->getId (), this->magic, this->ioPendingList.count () );
|
||||
if ( level ) {
|
||||
epicsAutoMutex locker ( this->mutex );
|
||||
tsDLIterConstBD < syncGroupNotify > notify = this->ioList.firstIter ();
|
||||
while ( notify.valid () ) {
|
||||
notify->show (level);
|
||||
notify++;
|
||||
::printf ( "\tPending" );
|
||||
tsDLIterConstBD < syncGroupNotify > notifyPending = this->ioPendingList.firstIter ();
|
||||
while ( notifyPending.valid () ) {
|
||||
notifyPending->show ( level - 1u );
|
||||
notifyPending++;
|
||||
}
|
||||
::printf ( "\tCompleted" );
|
||||
tsDLIterConstBD < syncGroupNotify > notifyCompleted = this->ioCompletedList.firstIter ();
|
||||
while ( notifyCompleted.valid () ) {
|
||||
notifyCompleted->show ( level - 1u );
|
||||
notifyCompleted++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CASG::ioComplete () const
|
||||
bool CASG::ioComplete ()
|
||||
{
|
||||
return ( this->opPendCount == 0u );
|
||||
bool isCompleted;
|
||||
{
|
||||
epicsAutoMutex locker ( this->mutex );
|
||||
this->destroyCompletedIO ();
|
||||
isCompleted = ( this->ioPendingList.count () == 0u );
|
||||
}
|
||||
return isCompleted;
|
||||
}
|
||||
|
||||
int CASG::put ( chid pChan, unsigned type, arrayElementCount count, const void *pValue )
|
||||
{
|
||||
syncGroupWriteNotify * pNotify = 0;
|
||||
try {
|
||||
{
|
||||
epicsAutoMutex locker ( this->mutex );
|
||||
pNotify = syncGroupWriteNotify::factory (
|
||||
this->freeListWriteOP, *this, pChan );
|
||||
if ( pNotify ) {
|
||||
this->ioPendingList.add ( *pNotify );
|
||||
}
|
||||
else {
|
||||
return ECA_ALLOCMEM;
|
||||
}
|
||||
}
|
||||
pNotify->begin ( type, count, pValue );
|
||||
return ECA_NORMAL;
|
||||
}
|
||||
catch ( cacChannel::badString & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_BADSTR;
|
||||
}
|
||||
catch ( cacChannel::badType & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_BADTYPE;
|
||||
}
|
||||
catch ( cacChannel::outOfBounds & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_BADCOUNT;
|
||||
}
|
||||
catch ( cacChannel::noWriteAccess & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_NOWTACCESS;
|
||||
}
|
||||
catch ( cacChannel::notConnected & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_DISCONN;
|
||||
}
|
||||
catch ( cacChannel::unsupportedByService & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_NOTINSERVICE;
|
||||
}
|
||||
catch ( cacChannel::requestTimedOut & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_TIMEOUT;
|
||||
}
|
||||
catch ( std::bad_alloc & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_ALLOCMEM;
|
||||
}
|
||||
catch ( ... )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_INTERNAL;
|
||||
}
|
||||
}
|
||||
|
||||
int CASG::get ( chid pChan, unsigned type, arrayElementCount count, void *pValue )
|
||||
{
|
||||
syncGroupReadNotify * pNotify = 0;
|
||||
try {
|
||||
{
|
||||
epicsAutoMutex locker ( this->mutex );
|
||||
pNotify = syncGroupReadNotify::factory (
|
||||
this->freeListReadOP, *this, pChan, pValue );
|
||||
if ( pNotify ) {
|
||||
this->ioPendingList.add ( *pNotify );
|
||||
}
|
||||
else {
|
||||
return ECA_ALLOCMEM;
|
||||
}
|
||||
}
|
||||
pNotify->begin ( type, count );
|
||||
return ECA_NORMAL;
|
||||
}
|
||||
catch ( cacChannel::badString & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_BADSTR;
|
||||
}
|
||||
catch ( cacChannel::badType & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_BADTYPE;
|
||||
}
|
||||
catch ( cacChannel::outOfBounds & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_BADCOUNT;
|
||||
}
|
||||
catch ( cacChannel::noReadAccess & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_NORDACCESS;
|
||||
}
|
||||
catch ( cacChannel::notConnected & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_DISCONN;
|
||||
}
|
||||
catch ( cacChannel::unsupportedByService & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_NOTINSERVICE;
|
||||
}
|
||||
catch ( std::bad_alloc & )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_ALLOCMEM;
|
||||
}
|
||||
catch ( ... )
|
||||
{
|
||||
destroyPendingIO ( pNotify );
|
||||
return ECA_INTERNAL;
|
||||
}
|
||||
}
|
||||
|
||||
void CASG::destroyPendingIO ( syncGroupNotify * pNotify )
|
||||
{
|
||||
epicsAutoMutex locker ( this->mutex );
|
||||
if ( pNotify ) {
|
||||
this->ioPendingList.remove ( *pNotify );
|
||||
pNotify->destroy ( *this );
|
||||
}
|
||||
}
|
||||
|
||||
void CASG::completionNotify ( syncGroupNotify & notify )
|
||||
{
|
||||
unsigned requestsIncomplete;
|
||||
{
|
||||
epicsAutoMutex locker ( this->mutex );
|
||||
this->ioPendingList.remove ( notify );
|
||||
this->ioCompletedList.add ( notify );
|
||||
requestsIncomplete = this->ioPendingList.count ();
|
||||
}
|
||||
if ( requestsIncomplete == 0u ) {
|
||||
this->sem.signal ();
|
||||
}
|
||||
}
|
||||
|
||||
void CASG::recycleSyncGroupWriteNotify ( syncGroupWriteNotify &io )
|
||||
{
|
||||
this->freeListWriteOP.release ( &io, sizeof ( io ) );
|
||||
}
|
||||
|
||||
void CASG::recycleSyncGroupReadNotify ( syncGroupReadNotify &io )
|
||||
{
|
||||
this->freeListReadOP.release ( &io, sizeof ( io ) );
|
||||
}
|
||||
|
||||
void * CASG::operator new (size_t size)
|
||||
@@ -175,29 +383,33 @@ void CASG::operator delete (void *pCadaver, size_t size)
|
||||
CASG::freeList.release ( pCadaver, size );
|
||||
}
|
||||
|
||||
int CASG::put (chid pChan, unsigned type, unsigned long count, const void *pValue)
|
||||
int CASG::printf ( const char *pformat, ... )
|
||||
{
|
||||
syncGroupNotify *pNotify = new syncGroupNotify ( *this, 0);
|
||||
if ( ! pNotify ) {
|
||||
return ECA_ALLOCMEM;
|
||||
}
|
||||
int status = pChan->write ( type, count, pValue, *pNotify );
|
||||
if ( status != ECA_NORMAL ) {
|
||||
pNotify->release ();
|
||||
}
|
||||
va_list theArgs;
|
||||
int status;
|
||||
|
||||
va_start ( theArgs, pformat );
|
||||
|
||||
status = this->client.vPrintf ( pformat, theArgs );
|
||||
|
||||
va_end ( theArgs );
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
int CASG::get (chid pChan, unsigned type, unsigned long count, void *pValue)
|
||||
void CASG::exception ( int status, const char *pContext,
|
||||
const char *pFileName, unsigned lineNo )
|
||||
{
|
||||
syncGroupNotify *pNotify = new syncGroupNotify ( *this, pValue);
|
||||
if ( ! pNotify ) {
|
||||
return ECA_ALLOCMEM;
|
||||
}
|
||||
int status = pChan->read ( type, count, *pNotify );
|
||||
if ( status != ECA_NORMAL ) {
|
||||
pNotify->release ();
|
||||
}
|
||||
return status;
|
||||
this->client.exception ( status, pContext, pFileName, lineNo );
|
||||
}
|
||||
|
||||
void CASG::exception ( int status, const char *pContext,
|
||||
const char *pFileName, unsigned lineNo, oldChannelNotify &chan,
|
||||
unsigned type, arrayElementCount count, unsigned op )
|
||||
{
|
||||
this->client.exception ( status, pContext, pFileName,
|
||||
lineNo, chan, type, count, op );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
2404
src/ca/CAref.html
Normal file
2404
src/ca/CAref.html
Normal file
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,8 @@ TOP=../..
|
||||
|
||||
include $(TOP)/configure/CONFIG
|
||||
|
||||
HTMLS += CAref.html
|
||||
|
||||
#
|
||||
# includes to install from this subproject
|
||||
#
|
||||
@@ -13,14 +15,16 @@ INC += caProto.h
|
||||
INC += db_access.h
|
||||
INC += addrList.h
|
||||
INC += cacIO.h
|
||||
INC += caDiagnostics.h
|
||||
|
||||
LIBSRCS += cacChannelIO.cpp
|
||||
LIBSRCS += cacChannel.cpp
|
||||
LIBSRCS += cacChannelNotify.cpp
|
||||
LIBSRCS += cacNotify.cpp
|
||||
LIBSRCS += cacNotifyIO.cpp
|
||||
LIBSRCS += cacReadNotify.cpp
|
||||
LIBSRCS += cacWriteNotify.cpp
|
||||
LIBSRCS += cacStateNotify.cpp
|
||||
LIBSRCS += cacServiceList.cpp
|
||||
LIBSRCS += access.cpp
|
||||
LIBSRCS += recvProcessThread.cpp
|
||||
LIBSRCS += iocinf.cpp
|
||||
LIBSRCS += convert.cpp
|
||||
LIBSRCS += test_event.cpp
|
||||
@@ -39,6 +43,7 @@ LIBSRCS += cac.cpp
|
||||
LIBSRCS += tcpSendWatchdog.cpp
|
||||
LIBSRCS += tcpRecvWatchdog.cpp
|
||||
LIBSRCS += bhe.cpp
|
||||
LIBSRCS += oldCAC.cpp
|
||||
LIBSRCS += oldChannelNotify.cpp
|
||||
LIBSRCS += oldSubscription.cpp
|
||||
LIBSRCS += getCallback.cpp
|
||||
@@ -47,20 +52,23 @@ LIBSRCS += putCallback.cpp
|
||||
LIBSRCS += syncgrp.cpp
|
||||
LIBSRCS += CASG.cpp
|
||||
LIBSRCS += syncGroupNotify.cpp
|
||||
LIBSRCS += syncGroupReadNotify.cpp
|
||||
LIBSRCS += syncGroupWriteNotify.cpp
|
||||
LIBSRCS += localHostName.cpp
|
||||
LIBSRCS += comQueRecv.cpp
|
||||
LIBSRCS += comQueSend.cpp
|
||||
LIBSRCS += comBuf.cpp
|
||||
LIBSRCS += hostNameCache.cpp
|
||||
LIBSRCS += ioCounterNet.cpp
|
||||
LIBSRCS += msgForMultiplyDefinedPV.cpp
|
||||
LIBSRCS += limboiiu.cpp
|
||||
|
||||
LIBRARY=ca
|
||||
|
||||
# For R3.13 compatibility only
|
||||
OBJLIB_vxWorks=ca
|
||||
OBJLIB_SRCS = $(LIBSRCS)
|
||||
|
||||
# only for WIN32:
|
||||
# build LIBRARY as a DLL, use the specified def file
|
||||
LIBTYPE := SHARED
|
||||
SYS_DLL_LIBS = ws2_32
|
||||
DLL_LIBS = Com
|
||||
|
||||
@@ -75,9 +83,9 @@ ca_DIR = .
|
||||
Com_DIR = $(INSTALL_LIB)
|
||||
|
||||
caRepeater_SRCS = caRepeater.cpp
|
||||
PROD += caRepeater
|
||||
PROD_HOST += caRepeater
|
||||
|
||||
PROD_DEFAULT += catime acctst caConnTest casw caEventRate
|
||||
PROD_HOST += catime acctst caConnTest casw caEventRate
|
||||
OBJS_IOC += catime acctst caConnTest casw caEventRate
|
||||
catime_SRCS = catimeMain.c catime.c
|
||||
acctst_SRCS = acctstMain.c acctst.c
|
||||
@@ -85,8 +93,5 @@ caEventRate_SRCS = caEventRateMain.cpp caEventRate.cpp
|
||||
casw_SRCS = casw.cpp
|
||||
caConnTest_SRCS = caConnTestMain.cpp caConnTest.cpp
|
||||
|
||||
PROD_vxWorks = catime acctst caConnTest caEventRate
|
||||
|
||||
include $(TOP)/configure/RULES
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
752
src/ca/acctst.c
752
src/ca/acctst.c
File diff suppressed because it is too large
Load Diff
@@ -10,7 +10,7 @@ int main ( int argc, char **argv )
|
||||
unsigned repetitionCount;
|
||||
|
||||
if ( argc < 2 || argc > 4 ) {
|
||||
printf ( "usage: %s <chan name> [channel count] [repetition count]\n", argv[0] );
|
||||
printf ( "usage: %s <PV name> [channel count] [repetition count]\n", argv[0] );
|
||||
}
|
||||
|
||||
if ( argc >= 3 ) {
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
|
||||
#ifndef addrListh
|
||||
#define addrListh
|
||||
|
||||
#include "shareLib.h"
|
||||
#include "envDefs.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -22,3 +25,5 @@ epicsShareFunc void epicsShareAPI removeDuplicatesAddresses
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* ifndef addrListh */
|
||||
|
||||
|
||||
72
src/ca/autoPtrDestroy.h
Normal file
72
src/ca/autoPtrDestroy.h
Normal file
@@ -0,0 +1,72 @@
|
||||
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
*
|
||||
* L O S A L A M O S
|
||||
* Los Alamos National Laboratory
|
||||
* Los Alamos, New Mexico 87545
|
||||
*
|
||||
* Copyright, The Regents of the University of California.
|
||||
*
|
||||
*
|
||||
* Author Jeffrey O. Hill
|
||||
* johill@lanl.gov
|
||||
* 505 665 1831
|
||||
*/
|
||||
|
||||
#ifndef autoPtrDestroyh
|
||||
#define autoPtrDestroyh
|
||||
|
||||
template < class T >
|
||||
class autoPtrDestroy {
|
||||
public:
|
||||
autoPtrDestroy ( T * );
|
||||
~autoPtrDestroy ();
|
||||
T & operator * () const;
|
||||
T * operator -> () const;
|
||||
T * get () const;
|
||||
T * release ();
|
||||
private:
|
||||
T *p;
|
||||
};
|
||||
|
||||
template < class T >
|
||||
inline autoPtrDestroy<T>::autoPtrDestroy ( T *pIn ) :
|
||||
p ( pIn ) {}
|
||||
|
||||
template < class T >
|
||||
inline autoPtrDestroy<T>::~autoPtrDestroy ()
|
||||
{
|
||||
if ( this->p ) {
|
||||
p->destroy ();
|
||||
}
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T & autoPtrDestroy<T>::operator * () const
|
||||
{
|
||||
return * this->p;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T * autoPtrDestroy<T>::operator -> () const
|
||||
{
|
||||
return this->p;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T * autoPtrDestroy<T>::get () const
|
||||
{
|
||||
return this->p;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T * autoPtrDestroy<T>::release ()
|
||||
{
|
||||
T *pTmp = this->p;
|
||||
this->p = 0;
|
||||
return pTmp;
|
||||
}
|
||||
|
||||
#endif // #ifdef autoPtrDestroyh
|
||||
80
src/ca/autoPtrRecycle.h
Normal file
80
src/ca/autoPtrRecycle.h
Normal file
@@ -0,0 +1,80 @@
|
||||
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
*
|
||||
* L O S A L A M O S
|
||||
* Los Alamos National Laboratory
|
||||
* Los Alamos, New Mexico 87545
|
||||
*
|
||||
* Copyright, The Regents of the University of California.
|
||||
*
|
||||
*
|
||||
* Author Jeffrey O. Hill
|
||||
* johill@lanl.gov
|
||||
* 505 665 1831
|
||||
*/
|
||||
|
||||
#ifndef autoPtrRecycleh
|
||||
#define autoPtrRecycleh
|
||||
|
||||
template < class T >
|
||||
class autoPtrRecycle {
|
||||
public:
|
||||
autoPtrRecycle ( chronIntIdResTable < baseNMIU > &,
|
||||
tsDLList < class baseNMIU > &, cacRecycle &, T * );
|
||||
~autoPtrRecycle ();
|
||||
T & operator * () const;
|
||||
T * operator -> () const;
|
||||
T * get () const;
|
||||
T * release ();
|
||||
private:
|
||||
T *p;
|
||||
cacRecycle &r;
|
||||
tsDLList < class baseNMIU > &eventq;
|
||||
chronIntIdResTable < baseNMIU > &ioTable;
|
||||
};
|
||||
|
||||
template < class T >
|
||||
inline autoPtrRecycle<T>::autoPtrRecycle ( chronIntIdResTable < baseNMIU > &tbl,
|
||||
tsDLList < class baseNMIU > &list, cacRecycle &rIn, T *pIn ) :
|
||||
p ( pIn ), r ( rIn ), eventq ( list ), ioTable ( tbl ) {}
|
||||
|
||||
template < class T >
|
||||
inline autoPtrRecycle<T>::~autoPtrRecycle ()
|
||||
{
|
||||
if ( this->p ) {
|
||||
baseNMIU *pb = this->p;
|
||||
this->ioTable.remove ( *pb );
|
||||
this->eventq.remove ( *pb );
|
||||
pb->destroy ( this->r );
|
||||
}
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T & autoPtrRecycle<T>::operator * () const
|
||||
{
|
||||
return * this->p;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T * autoPtrRecycle<T>::operator -> () const
|
||||
{
|
||||
return this->p;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T * autoPtrRecycle<T>::get () const
|
||||
{
|
||||
return this->p;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T * autoPtrRecycle<T>::release ()
|
||||
{
|
||||
T *pTmp = this->p;
|
||||
this->p = 0;
|
||||
return pTmp;
|
||||
}
|
||||
|
||||
#endif // #ifdef autoPtrRecycleh
|
||||
@@ -10,12 +10,14 @@
|
||||
* Author: Jeff Hill
|
||||
*/
|
||||
|
||||
#include "iocinf.h"
|
||||
#include "nciu_IL.h"
|
||||
#include "baseNMIU_IL.h"
|
||||
#define epicsAssertAuthor "Jeff Hill johill@lanl.gov"
|
||||
|
||||
baseNMIU::baseNMIU ( cacNotify ¬ifyIn, nciu &chanIn ) :
|
||||
cacNotifyIO ( notifyIn ), chan ( chanIn )
|
||||
#include "iocinf.h"
|
||||
#include "nciu.h"
|
||||
#include "netIO.h"
|
||||
|
||||
baseNMIU::baseNMIU ( nciu &chanIn ) :
|
||||
chan ( chanIn )
|
||||
{
|
||||
}
|
||||
|
||||
@@ -30,13 +32,7 @@ class netSubscription * baseNMIU::isSubscription ()
|
||||
|
||||
void baseNMIU::show ( unsigned /* level */ ) const
|
||||
{
|
||||
printf ( "CA IO primitive at %p for channel %s\n",
|
||||
static_cast <const void *> ( this ), this->chan.pName () );
|
||||
::printf ( "CA IO primitive at %p\n",
|
||||
static_cast <const void *> ( this ) );
|
||||
}
|
||||
|
||||
cacChannelIO & baseNMIU::channelIO () const
|
||||
{
|
||||
return this->chan;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
*
|
||||
* L O S A L A M O S
|
||||
* Los Alamos National Laboratory
|
||||
* Los Alamos, New Mexico 87545
|
||||
*
|
||||
* Copyright, 1986, The Regents of the University of California.
|
||||
*
|
||||
*
|
||||
* Author Jeffrey O. Hill
|
||||
* johill@lanl.gov
|
||||
* 505 665 1831
|
||||
*/
|
||||
|
||||
#ifndef baseNMIU_ILh
|
||||
#define baseNMIU_ILh
|
||||
|
||||
inline ca_uint32_t baseNMIU::getID () const
|
||||
{
|
||||
return this->id;
|
||||
}
|
||||
|
||||
inline nciu & baseNMIU::channel () const
|
||||
{
|
||||
return this->chan;
|
||||
}
|
||||
|
||||
#endif // baseNMIU
|
||||
@@ -10,9 +10,26 @@
|
||||
* Author: Jeff Hill
|
||||
*/
|
||||
|
||||
#define epicsAssertAuthor "Jeff Hill johill@lanl.gov"
|
||||
|
||||
#include "iocinf.h"
|
||||
#include "bhe_IL.h"
|
||||
#include "tcpiiu_IL.h"
|
||||
#include "virtualCircuit.h"
|
||||
|
||||
#define epicsExportSharedSymbols
|
||||
#include "bhe.h"
|
||||
#undef epicsExportSharedSymbols
|
||||
|
||||
#if defined ( _MSC_VER )
|
||||
# pragma warning ( push )
|
||||
# pragma warning ( disable: 4660 )
|
||||
#endif
|
||||
|
||||
template class tsDLNode < tcpiiu >;
|
||||
template class tsFreeList < class bhe, 1024 >;
|
||||
|
||||
#if defined ( _MSC_VER )
|
||||
# pragma warning ( pop )
|
||||
#endif
|
||||
|
||||
tsFreeList < class bhe, 1024 > bhe::freeList;
|
||||
epicsMutex bhe::freeListMutex;
|
||||
@@ -33,22 +50,29 @@ bhe::~bhe ()
|
||||
{
|
||||
}
|
||||
|
||||
void bhe::beaconAnomalyNotify ()
|
||||
{
|
||||
tsDLIterBD < tcpiiu > iter = this->iiuList.firstIter ();
|
||||
while ( iter.valid() ) {
|
||||
iter->beaconAnomalyNotify ();
|
||||
iter++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* update beacon period
|
||||
*
|
||||
* updates beacon period, and looks for beacon anomalies
|
||||
*/
|
||||
bool bhe::updatePeriod ( epicsTime programBeginTime )
|
||||
bool bhe::updatePeriod ( const epicsTime & programBeginTime,
|
||||
const epicsTime & currentTime )
|
||||
{
|
||||
double currentPeriod;
|
||||
bool netChange = false;
|
||||
epicsTime current = epicsTime::getCurrent ();
|
||||
|
||||
if ( this->timeStamp == epicsTime () ) {
|
||||
|
||||
if ( this->piiu ) {
|
||||
this->piiu->beaconAnomalyNotify ();
|
||||
}
|
||||
this->beaconAnomalyNotify ();
|
||||
|
||||
/*
|
||||
* this is the 1st beacon seen - the beacon time stamp
|
||||
@@ -56,7 +80,7 @@ bool bhe::updatePeriod ( epicsTime programBeginTime )
|
||||
* a TCP/IP connection created the beacon.
|
||||
* (nothing to do but set the beacon time stamp and return)
|
||||
*/
|
||||
this->timeStamp = current;
|
||||
this->timeStamp = currentTime;
|
||||
|
||||
return netChange;
|
||||
}
|
||||
@@ -64,13 +88,11 @@ bool bhe::updatePeriod ( epicsTime programBeginTime )
|
||||
/*
|
||||
* compute the beacon period (if we have seen at least two beacons)
|
||||
*/
|
||||
currentPeriod = current - this->timeStamp;
|
||||
currentPeriod = currentTime - this->timeStamp;
|
||||
if ( this->averagePeriod < 0.0 ) {
|
||||
ca_real totalRunningTime;
|
||||
double totalRunningTime;
|
||||
|
||||
if ( this->piiu ) {
|
||||
this->piiu->beaconAnomalyNotify ();
|
||||
}
|
||||
this->beaconAnomalyNotify ();
|
||||
|
||||
/*
|
||||
* this is the 2nd beacon seen. We cant tell about
|
||||
@@ -107,9 +129,7 @@ bool bhe::updatePeriod ( epicsTime programBeginTime )
|
||||
* trigger on any missing beacon
|
||||
* if connected to this server
|
||||
*/
|
||||
if ( this->piiu ) {
|
||||
this->piiu->beaconAnomalyNotify ();
|
||||
}
|
||||
this->beaconAnomalyNotify ();
|
||||
|
||||
if ( currentPeriod >= this->averagePeriod * 3.25 ) {
|
||||
/*
|
||||
@@ -132,9 +152,7 @@ bool bhe::updatePeriod ( epicsTime programBeginTime )
|
||||
* that the server is available
|
||||
*/
|
||||
else if ( currentPeriod <= this->averagePeriod * 0.80 ) {
|
||||
if ( this->piiu ) {
|
||||
this->piiu->beaconAnomalyNotify ();
|
||||
}
|
||||
this->beaconAnomalyNotify ();
|
||||
netChange = true;
|
||||
}
|
||||
else {
|
||||
@@ -142,8 +160,10 @@ bool bhe::updatePeriod ( epicsTime programBeginTime )
|
||||
* update state of health for active virtual circuits
|
||||
* if the beacon looks ok
|
||||
*/
|
||||
if ( this->piiu ) {
|
||||
piiu->beaconArrivalNotify (); // reset connection activity watchdog
|
||||
tsDLIterBD < tcpiiu > iter = this->iiuList.firstIter ();
|
||||
while ( iter.valid() ) {
|
||||
iter->beaconArrivalNotify ();
|
||||
iter++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,19 +173,23 @@ bool bhe::updatePeriod ( epicsTime programBeginTime )
|
||||
this->averagePeriod = currentPeriod * 0.125 + this->averagePeriod * 0.875;
|
||||
}
|
||||
|
||||
this->timeStamp = current;
|
||||
//{
|
||||
// char name[64];
|
||||
// this->name ( name, sizeof ( name ) );
|
||||
//
|
||||
// printf ( "new beacon period %f for %s\n",
|
||||
// this->averagePeriod, name );
|
||||
//}
|
||||
|
||||
this->timeStamp = currentTime;
|
||||
|
||||
return netChange;
|
||||
}
|
||||
|
||||
void bhe::show ( unsigned level ) const
|
||||
void bhe::show ( unsigned /* level */ ) const
|
||||
{
|
||||
printf ( "CA beacon hash entry at %p with average period %f\n",
|
||||
::printf ( "CA beacon hash entry at %p with average period %f\n",
|
||||
static_cast <const void *> ( this ), this->averagePeriod );
|
||||
if ( level > 0u ) {
|
||||
printf ( "network IO pointer %p\n",
|
||||
static_cast <void *> ( this->piiu ) );
|
||||
}
|
||||
}
|
||||
|
||||
void bhe::destroy ()
|
||||
@@ -178,4 +202,15 @@ double bhe::period () const
|
||||
return this->averagePeriod;
|
||||
}
|
||||
|
||||
void bhe::registerIIU ( tcpiiu & iiu )
|
||||
{
|
||||
this->iiuList.add ( iiu );
|
||||
}
|
||||
|
||||
void bhe::unregisterIIU ( tcpiiu & iiu )
|
||||
{
|
||||
this->iiuList.remove ( iiu );
|
||||
this->timeStamp = epicsTime();
|
||||
this->averagePeriod = - DBL_MAX;
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user