Compare commits
559 Commits
R3.14.0-be
...
R3.14.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f0ccd685ad | ||
|
|
403413ac1c | ||
|
|
9b8f6a34fb | ||
|
|
940590c882 | ||
|
|
2ed228e2f7 | ||
|
|
48ebbb4ab4 | ||
|
|
09d516ff05 | ||
|
|
b99f97e95e | ||
|
|
7fe3d28c8e | ||
|
|
da5690d637 | ||
|
|
4c551c5587 | ||
|
|
9c648d7ab3 | ||
|
|
a07395e47e | ||
|
|
46e369608d | ||
|
|
181caf02d5 | ||
|
|
addeab1e7e | ||
|
|
38e32a9d89 | ||
|
|
5a5e388c55 | ||
|
|
2b4baa2b68 | ||
|
|
10138d9238 | ||
|
|
c40903e260 | ||
|
|
605c1fb8fe | ||
|
|
8d318d9a99 | ||
|
|
6a32e216f7 | ||
|
|
f6c13478ab | ||
|
|
117c5a7d6d | ||
|
|
b2ff9f1094 | ||
|
|
ada93e313d | ||
|
|
b970279a82 | ||
|
|
625883f248 | ||
|
|
3203754b52 | ||
|
|
a22835e835 | ||
|
|
69f584ac9d | ||
|
|
979ab32d9a | ||
|
|
894930b58b | ||
|
|
448010b6ad | ||
|
|
ce3bbc453d | ||
|
|
4d872b9ca9 | ||
|
|
6a1ab8221d | ||
|
|
9d57d57ed0 | ||
|
|
0ec42a9dae | ||
|
|
8e807bf6b4 | ||
|
|
789d7fe5d0 | ||
|
|
6759cb7f65 | ||
|
|
b3282bb58f | ||
|
|
b86a21ed57 | ||
|
|
cc699b74df | ||
|
|
2c94593c8c | ||
|
|
46111a9065 | ||
|
|
4a730a5b88 | ||
|
|
b488eb54ad | ||
|
|
e06090bb99 | ||
|
|
ba6ce39c67 | ||
|
|
9c0e801674 | ||
|
|
ed92859eaf | ||
|
|
483d1ea3f0 | ||
|
|
5b84bd81b1 | ||
|
|
e53adb99cf | ||
|
|
256836fe59 | ||
|
|
2b1fd2f6f1 | ||
|
|
3ee40c3321 | ||
|
|
06aa996962 | ||
|
|
3e1af8ce08 | ||
|
|
8d73716fbd | ||
|
|
1589c1c3ec | ||
|
|
97caf300d3 | ||
|
|
4dcbc1b278 | ||
|
|
20cbc2583e | ||
|
|
a863314254 | ||
|
|
7aac2ec883 | ||
|
|
2f2d4bfae7 | ||
|
|
e0c75e80bc | ||
|
|
a612619458 | ||
|
|
d0116a0669 | ||
|
|
6b439d6b97 | ||
|
|
f0b9b606d5 | ||
|
|
737211aff7 | ||
|
|
648f60656a | ||
|
|
fa1b9181cb | ||
|
|
3c136f74d8 | ||
|
|
5aa8fbb3c9 | ||
|
|
50d6a77ce1 | ||
|
|
8ce8820ecd | ||
|
|
e8d03dc4d6 | ||
|
|
43eae2b3c3 | ||
|
|
dc5f217493 | ||
|
|
2ad0b9e362 | ||
|
|
b631253c9d | ||
|
|
f4b01c2d59 | ||
|
|
55d3b8a9f0 | ||
|
|
8ed40e2118 | ||
|
|
5b1087379f | ||
|
|
63abcb5e96 | ||
|
|
8cb253154e | ||
|
|
be1b93bca0 | ||
|
|
057dc7e2b2 | ||
|
|
416dd6bfda | ||
|
|
02de364dff | ||
|
|
d70ba845e5 | ||
|
|
9286244343 | ||
|
|
4552e55f18 | ||
|
|
0438779bf8 | ||
|
|
2904307894 | ||
|
|
0c02e3df3f | ||
|
|
57a288d912 | ||
|
|
e90e86aadd | ||
|
|
54ee23afb9 | ||
|
|
6f8cadf2d2 | ||
|
|
f838df514a | ||
|
|
b9fc36e754 | ||
|
|
81e366791a | ||
|
|
eaf3d04e51 | ||
|
|
c041b69848 | ||
|
|
b075effc76 | ||
|
|
7082532001 | ||
|
|
cd52995cfa | ||
|
|
467ff91c4f | ||
|
|
ad61c92957 | ||
|
|
234cb25dbe | ||
|
|
a9cb77f196 | ||
|
|
e5684a3296 | ||
|
|
62b4c55d25 | ||
|
|
58dea0cea9 | ||
|
|
fd2e9764a4 | ||
|
|
bdc11782b9 | ||
|
|
e7ca950fbb | ||
|
|
59a8a70d4a | ||
|
|
da20240ba4 | ||
|
|
f9a30fac96 | ||
|
|
33ffc42b15 | ||
|
|
9c4495df3b | ||
|
|
0b4a32c6bc | ||
|
|
ace4e5a9f6 | ||
|
|
faed748404 | ||
|
|
4572c756f3 | ||
|
|
7581247789 | ||
|
|
eb157872bd | ||
|
|
a2b7674eb1 | ||
|
|
ae9b0cd3bd | ||
|
|
500c0e22ba | ||
|
|
5af2e2bb18 | ||
|
|
a5e80e7872 | ||
|
|
d773c5c10c | ||
|
|
22898be749 | ||
|
|
c0d22b1e1d | ||
|
|
8ed89fe9ce | ||
|
|
d37c75c9e9 | ||
|
|
d8c932a6ca | ||
|
|
8d75c8baed | ||
|
|
384e3af4b5 | ||
|
|
208aa3ce0b | ||
|
|
38596ab6cd | ||
|
|
f131fe59ac | ||
|
|
6f7ecedea4 | ||
|
|
defcf41b0d | ||
|
|
cd56605b19 | ||
|
|
539da2f37e | ||
|
|
883924dda6 | ||
|
|
bf9491592c | ||
|
|
a05353b351 | ||
|
|
9052d64be3 | ||
|
|
b59f8a3759 | ||
|
|
f73e968d77 | ||
|
|
520ac60771 | ||
|
|
e4bc78f4cf | ||
|
|
a91ff3f031 | ||
|
|
22e557ffad | ||
|
|
cff2c0d5f8 | ||
|
|
74e7c6eb0e | ||
|
|
40e6553dcc | ||
|
|
f81bff13fa | ||
|
|
e29d86de0b | ||
|
|
11f5331576 | ||
|
|
0ae4e0fb16 | ||
|
|
1c7428c1cf | ||
|
|
1e14394d92 | ||
|
|
938a80e092 | ||
|
|
bd211590b3 | ||
|
|
0482c55599 | ||
|
|
6195077e19 | ||
|
|
f4b94967a8 | ||
|
|
151d115378 | ||
|
|
d8aa4eb679 | ||
|
|
6a04e56e60 | ||
|
|
d5d63e0ebd | ||
|
|
8579ce2e26 | ||
|
|
d5685073ad | ||
|
|
a5c21db367 | ||
|
|
f301c33faf | ||
|
|
b562b9557f | ||
|
|
cd6a141f37 | ||
|
|
77085e368c | ||
|
|
9de520c77b | ||
|
|
29ad70d2bc | ||
|
|
43997a4387 | ||
|
|
d7ff4f71e4 | ||
|
|
508c077175 | ||
|
|
0c61b40bc0 | ||
|
|
9fa57de689 | ||
|
|
0af674eb45 | ||
|
|
58a05643b3 | ||
|
|
7d39a87442 | ||
|
|
6f8f059de7 | ||
|
|
d429387e8a | ||
|
|
140bf4a89a | ||
|
|
0a517a4fa4 | ||
|
|
3317eae19d | ||
|
|
6ea50e50e6 | ||
|
|
9990225f23 | ||
|
|
3bab48bdb7 | ||
|
|
e062860774 | ||
|
|
98a88d9d74 | ||
|
|
d7fe8efef6 | ||
|
|
89c4e229da | ||
|
|
81a7a8cc85 | ||
|
|
75ed51dc1c | ||
|
|
e6501454af | ||
|
|
8c936886e8 | ||
|
|
3bcc880e73 | ||
|
|
721c6f3fde | ||
|
|
f637fd1c72 | ||
|
|
1d69254f73 | ||
|
|
a9250069de | ||
|
|
83a6109f04 | ||
|
|
903361a3fd | ||
|
|
51cda206ca | ||
|
|
394d66fcdd | ||
|
|
65d9d03e2b | ||
|
|
6e2262aecf | ||
|
|
a1e29d53e3 | ||
|
|
9bdba43fc7 | ||
|
|
620c1da354 | ||
|
|
542a84f00b | ||
|
|
f44a64ed4c | ||
|
|
a9be8e8c52 | ||
|
|
44eb9fcbf4 | ||
|
|
c5e9ed8311 | ||
|
|
5aba97c580 | ||
|
|
08ba669094 | ||
|
|
8fdf6c18dc | ||
|
|
5402eabe08 | ||
|
|
2f70fd09b4 | ||
|
|
81674af9bb | ||
|
|
ee810d4b0b | ||
|
|
c9d2317f31 | ||
|
|
c983a4887c | ||
|
|
5494603e75 | ||
|
|
e772ce948c | ||
|
|
250a5418c1 | ||
|
|
2daf1edf51 | ||
|
|
c9468cdf8e | ||
|
|
e29727f600 | ||
|
|
fd98efb6f8 | ||
|
|
915e30388c | ||
|
|
6dc74193df | ||
|
|
5b92ba519c | ||
|
|
4a4560e90c | ||
|
|
0ba0ac4493 | ||
|
|
b5535d714b | ||
|
|
92eb209d79 | ||
|
|
72d9af82ea | ||
|
|
405e7d73c4 | ||
|
|
7bef9698b0 | ||
|
|
5b23570d27 | ||
|
|
d4cb389a5d | ||
|
|
0dce06f4cf | ||
|
|
f0b5bbf467 | ||
|
|
19edff269e | ||
|
|
4a2d2fea92 | ||
|
|
e047408dc6 | ||
|
|
ccef3eddd2 | ||
|
|
da9309e338 | ||
|
|
0e4addbc35 | ||
|
|
2860ca9b51 | ||
|
|
dc3bbeb16f | ||
|
|
784a5f815f | ||
|
|
4feb5bd493 | ||
|
|
f9c38bc224 | ||
|
|
763934a30d | ||
|
|
2ddee70fe3 | ||
|
|
c3e9d6928c | ||
|
|
b022718190 | ||
|
|
66a58406cc | ||
|
|
61b6f8cdd9 | ||
|
|
92d73f2760 | ||
|
|
e96e511876 | ||
|
|
ae17d37d85 | ||
|
|
e5486ab9e1 | ||
|
|
39b7631c16 | ||
|
|
d9919861f4 | ||
|
|
f7be65a315 | ||
|
|
dda1e0e2aa | ||
|
|
83368d1bc2 | ||
|
|
bd36b053a1 | ||
|
|
223b7fbe2a | ||
|
|
ff07566b66 | ||
|
|
7e92fa0ca0 | ||
|
|
8e8f95c0de | ||
|
|
5c63caef2a | ||
|
|
89d8b224cf | ||
|
|
0339023aa5 | ||
|
|
2daf173aeb | ||
|
|
2c78fef14d | ||
|
|
05dd1e2732 | ||
|
|
03a018c077 | ||
|
|
aafbb17d67 | ||
|
|
4c7bcf077b | ||
|
|
0cf90ce7c2 | ||
|
|
2011c3c7ba | ||
|
|
3e884afdff | ||
|
|
c3ee505816 | ||
|
|
cf8e3c07f2 | ||
|
|
3714092f09 | ||
|
|
d4cf198ce8 | ||
|
|
a7930cdaa0 | ||
|
|
64da98ffd3 | ||
|
|
8dc8be9ad7 | ||
|
|
c7a8baee1a | ||
|
|
ea2d06560e | ||
|
|
777c2c77be | ||
|
|
43ceffad94 | ||
|
|
843c958bf0 | ||
|
|
4401de7cd0 | ||
|
|
77176a6218 | ||
|
|
b023f081eb | ||
|
|
4697963387 | ||
|
|
3e5557b211 | ||
|
|
d9e6116d00 | ||
|
|
92dcf72a89 | ||
|
|
e36083d5ef | ||
|
|
340e0c1d58 | ||
|
|
bfe985e7aa | ||
|
|
8a0504616e | ||
|
|
4cd67a4e27 | ||
|
|
6026533aeb | ||
|
|
37d239eb88 | ||
|
|
0817ad51ba | ||
|
|
9d07afdbfd | ||
|
|
39f180ffd1 | ||
|
|
d859a43492 | ||
|
|
a89f2eff3d | ||
|
|
6f8c6cb0a2 | ||
|
|
3facf84411 | ||
|
|
a955d5ebb6 | ||
|
|
3e9909b4dd | ||
|
|
1e976b7eed | ||
|
|
0b66cd3811 | ||
|
|
d468c989d7 | ||
|
|
ba2cb54762 | ||
|
|
0fce80a352 | ||
|
|
0817236127 | ||
|
|
c034d5f9a4 | ||
|
|
c288011b87 | ||
|
|
e1e2df53ad | ||
|
|
f2ccfaf1de | ||
|
|
d42af1ff85 | ||
|
|
6b3c5002ec | ||
|
|
1af30b1d48 | ||
|
|
2074b99342 | ||
|
|
8b83921bdf | ||
|
|
fd5b08caf1 | ||
|
|
7fdc295d9d | ||
|
|
205cbb69fe | ||
|
|
6b8dbc5355 | ||
|
|
eba7732c3b | ||
|
|
eab19edd24 | ||
|
|
1ea0bcb7f3 | ||
|
|
7bf43f6dcc | ||
|
|
c0aa7861e6 | ||
|
|
8657179346 | ||
|
|
838489ae4b | ||
|
|
dc3d8296cc | ||
|
|
c6c28baab8 | ||
|
|
9a173a46d9 | ||
|
|
1c27d187c1 | ||
|
|
790e77bc25 | ||
|
|
bc9d1414a9 | ||
|
|
f730559ac1 | ||
|
|
fd85d0d319 | ||
|
|
2fd82ded26 | ||
|
|
3a83f64b10 | ||
|
|
dff44268b0 | ||
|
|
ad3be7f90a | ||
|
|
aa0238adf2 | ||
|
|
556c9e44dc | ||
|
|
31ceef441d | ||
|
|
137b10f7a8 | ||
|
|
9481cf9649 | ||
|
|
55f563b959 | ||
|
|
7d2d368033 | ||
|
|
dff960b3c3 | ||
|
|
ac2f19b8b3 | ||
|
|
79bb94b1ea | ||
|
|
8133681a48 | ||
|
|
4a0334796c | ||
|
|
bad7bd373e | ||
|
|
c28bb13e9a | ||
|
|
ad3c2b2a5c | ||
|
|
f57df209ab | ||
|
|
03717d7944 | ||
|
|
a37ff40ce8 | ||
|
|
5fab011222 | ||
|
|
da7706be23 | ||
|
|
4254028028 | ||
|
|
ce32de55ae | ||
|
|
50fea19f26 | ||
|
|
17e5a0b98d | ||
|
|
ef5b5013a5 | ||
|
|
6ec62c5496 | ||
|
|
41fd1ff1f8 | ||
|
|
7cc7d596b3 | ||
|
|
48bb66d586 | ||
|
|
8c3d560ca8 | ||
|
|
04a3d585d4 | ||
|
|
ce6ec6c0db | ||
|
|
aeeac23037 | ||
|
|
f03db482fd | ||
|
|
c8d5854fcf | ||
|
|
021e060853 | ||
|
|
6433d3699b | ||
|
|
efbdda83ce | ||
|
|
bb8fa4fd10 | ||
|
|
dd04436293 | ||
|
|
8f3394d317 | ||
|
|
84ba44a8e8 | ||
|
|
5f8619bb6b | ||
|
|
a9c15d34e7 | ||
|
|
0c0c3d6d94 | ||
|
|
fd7e40b223 | ||
|
|
539d3478c8 | ||
|
|
761a87ea73 | ||
|
|
abcbaeca9c | ||
|
|
aec31f89a2 | ||
|
|
308055d41e | ||
|
|
4c04096ce9 | ||
|
|
9af78b1d37 | ||
|
|
ef84d2398d | ||
|
|
cb2d75392e | ||
|
|
8870cf48b6 | ||
|
|
849b5e094e | ||
|
|
928e63fd8f | ||
|
|
d207412921 | ||
|
|
aa13eb03ba | ||
|
|
49953640bd | ||
|
|
0bb346a212 | ||
|
|
913e6713c6 | ||
|
|
25acc515c4 | ||
|
|
593ee10818 | ||
|
|
d0e406457d | ||
|
|
ef5b5ec276 | ||
|
|
f3226be0b9 | ||
|
|
5962c69c12 | ||
|
|
b3104bbc2b | ||
|
|
7c337a7257 | ||
|
|
296c629c19 | ||
|
|
6ec7ac0e16 | ||
|
|
f5cbac744e | ||
|
|
722b8bdf01 | ||
|
|
9d780b0fdd | ||
|
|
bdba13c2a2 | ||
|
|
5ffc6d7914 | ||
|
|
9a5ca9203c | ||
|
|
f958bd3ab0 | ||
|
|
8bba4da432 | ||
|
|
51f853ccb5 | ||
|
|
75f52f8833 | ||
|
|
da21bbf308 | ||
|
|
67f2ac78ed | ||
|
|
6dff6348fe | ||
|
|
0d4d2560e6 | ||
|
|
59a7ebd78c | ||
|
|
950d2c0b9d | ||
|
|
75081c3947 | ||
|
|
bef0109bb7 | ||
|
|
28b1ad5284 | ||
|
|
2872f190e8 | ||
|
|
76199859f6 | ||
|
|
d0ab8f3305 | ||
|
|
d08b6251f1 | ||
|
|
31d1fca0d6 | ||
|
|
3ea121a119 | ||
|
|
69790213e3 | ||
|
|
a5b1beb9da | ||
|
|
f0a6010a3f | ||
|
|
9a7ab7b0de | ||
|
|
8338c1bb3e | ||
|
|
0f70d78803 | ||
|
|
ebe7870015 | ||
|
|
84863a577c | ||
|
|
dbd2d00699 | ||
|
|
cb9b81cdad | ||
|
|
b566183c2f | ||
|
|
0058debd45 | ||
|
|
2bb26522e0 | ||
|
|
a15af6a1d5 | ||
|
|
23225348d6 | ||
|
|
d1ddd2627b | ||
|
|
dd67086dc9 | ||
|
|
17070c70c8 | ||
|
|
4c7134933d | ||
|
|
f44597e923 | ||
|
|
cbb652bcce | ||
|
|
a3b726f105 | ||
|
|
82ba4f0a1f | ||
|
|
dd43dfc717 | ||
|
|
7af6a05a5a | ||
|
|
f328cd0e6b | ||
|
|
c986b56e5d | ||
|
|
17f55b29c7 | ||
|
|
98db216df3 | ||
|
|
b907ff8ee8 | ||
|
|
0d57270496 | ||
|
|
7754a0ecae | ||
|
|
aa54a26c8b | ||
|
|
936053422b | ||
|
|
24b175c01c | ||
|
|
c897ad3af0 | ||
|
|
9a1b51ce10 | ||
|
|
c07a6e1cab | ||
|
|
6caf14c190 | ||
|
|
12f1ed8639 | ||
|
|
f0b7c5a46c | ||
|
|
235f23a322 | ||
|
|
16e8c85da8 | ||
|
|
c0f90bd568 | ||
|
|
eb3b394238 | ||
|
|
b24e0fe1c5 | ||
|
|
2e0e640ad3 | ||
|
|
d73ac2c107 | ||
|
|
7cc5842830 | ||
|
|
a630ecefc9 | ||
|
|
dcdd9c2247 | ||
|
|
62b8f02fef | ||
|
|
732f5f33e5 | ||
|
|
bf25c38562 | ||
|
|
99213bfbea | ||
|
|
7cc8d84e1d | ||
|
|
8d9c3f7ff4 | ||
|
|
996672b285 | ||
|
|
6d03df6a9b | ||
|
|
c2d4515e90 | ||
|
|
40a3dab60c | ||
|
|
75c1d4a21e | ||
|
|
44660156f5 | ||
|
|
ba5e5dc007 | ||
|
|
9d7c670397 | ||
|
|
5ba7ce818c | ||
|
|
de60b1f5d7 | ||
|
|
6432302866 | ||
|
|
997e9bb995 | ||
|
|
dca801e344 | ||
|
|
0e0004f526 | ||
|
|
d39580e6ee | ||
|
|
bc097f5b7f | ||
|
|
d9a6ffcc10 | ||
|
|
0a1aca0795 | ||
|
|
b0932d91f2 | ||
|
|
21b90ed84f | ||
|
|
1a7e79ace1 |
@@ -18,20 +18,27 @@ ARCH_CLASS = Darwin
|
||||
include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
|
||||
|
||||
#
|
||||
# The config files are a real mess. The following set of definitions
|
||||
# seems to work for all the weird ways in which the extensions makefile
|
||||
# fragments use them.
|
||||
# The config files are a real mess. The following definitions seem to work
|
||||
# for all the weird ways in which the extensions makefile fragments use them.
|
||||
#
|
||||
ANSI = GCC
|
||||
CPLUSPLUS = c++
|
||||
CC = cc
|
||||
CXX= c++
|
||||
GCC = cc
|
||||
AR = ar
|
||||
ARCMD = $(AR) -rc $@
|
||||
ARFLAGS = rcv
|
||||
RANLIB = ranlib
|
||||
|
||||
ANSI=GCC
|
||||
CPLUSPLUS=G++
|
||||
|
||||
OP_SYS_CFLAGS += -no-cpp-precomp
|
||||
OP_SYS_INCLUDES = -I/sw/include -I/usr/X11R6/include
|
||||
OP_SYS_LDFLAGS += -L/sw/lib -L/usr/X11R6/lib
|
||||
|
||||
# Uncomment this if you're using the GNU readline library
|
||||
#ARCH_DEP_LDLIBS += -lreadline
|
||||
|
||||
# Uncomment this if you're using the libtecla library
|
||||
ARCH_DEP_LDLIBS += -ltecla_r -ltermcap
|
||||
|
||||
#
|
||||
# Compiler/linker problems prevent the use of shared libraries at the moment
|
||||
#
|
||||
@@ -41,8 +48,8 @@ SHARED_LIBRARIES_Darwin = NO
|
||||
# Something like this will be needed once shared libraries are built
|
||||
#
|
||||
SHRLIB_SUFFIX = .dylib$(SHARED_LIBRARIES)
|
||||
GCC_SHRLIB_LDFLAGS_YES += -dynamiclib -flat_namespace
|
||||
G++_SHRLIB_LDFLAGS_YES += -dynamiclib -flat_namespace
|
||||
GCC_SHRLIB_LDFLAGS_YES += -dynamiclib
|
||||
G++_SHRLIB_LDFLAGS_YES += -dynamiclib
|
||||
|
||||
#
|
||||
# Java
|
||||
|
||||
@@ -32,7 +32,7 @@ ARCMD = lib /nologo /verbose /out:$@
|
||||
|
||||
#
|
||||
# Configure OS vendor C compiler
|
||||
ACC = cl
|
||||
ACC = cl
|
||||
|
||||
#
|
||||
# __STDC__=0 is a real great idea of Jeff that gives us both:
|
||||
@@ -60,7 +60,7 @@ ACC_OPT_YES = /Ox
|
||||
#
|
||||
# /Zi include debugging info in object files
|
||||
# /Fr create source browser file
|
||||
ACC_OPT_NO = /Zi /Fr
|
||||
ACC_OPT_NO = /Zi
|
||||
|
||||
#
|
||||
# the following options are required when
|
||||
@@ -95,7 +95,11 @@ ACC_SLIBS_NO=
|
||||
#
|
||||
# Use of /Za would dissable DLL import/export keywords which
|
||||
# EPICS include/excludes using architecture neutral macros
|
||||
CCC = cl
|
||||
#
|
||||
# /GX support C++ exceptions
|
||||
# /GR generate RTTI information
|
||||
#
|
||||
CCC = cl /GX /GR
|
||||
CCC_NORMAL = $(CCC) /nologo /D__STDC__=0
|
||||
CCC_STRICT = $(CCC) /nologo /D__STDC__=0
|
||||
CCC_TEMPL_INST_FLAG =
|
||||
@@ -113,7 +117,7 @@ CCC_OPT_YES = /Ox
|
||||
#
|
||||
# /Zi include debugging info in object files
|
||||
# /Fr create source browser file
|
||||
CCC_OPT_NO = /Zi /Fr
|
||||
CCC_OPT_NO = /Zi
|
||||
|
||||
#
|
||||
# the following options are required when
|
||||
@@ -135,7 +139,7 @@ CCC_SLIBS_NO=
|
||||
|
||||
LINK_OPT_FLAGS_YES = /warn:3 /incremental:no /opt:ref\
|
||||
/release $(PROD_VERSION:%=/version:%)
|
||||
LINK_OPT_FLAGS_NO = /warn:3 /debug
|
||||
LINK_OPT_FLAGS_NO = /warn:3 /debug /incremental:no
|
||||
OPT_LDFLAGS = $(LINK_OPT_FLAGS_$(HOST_OPT))
|
||||
|
||||
ARCH_DEP_CFLAGS=
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.Host.hp700
|
||||
|
||||
ARCH_CLASS = hp700
|
||||
ARCH_CLASS = hpux
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
|
||||
|
||||
@@ -9,5 +9,5 @@
|
||||
#*************************************************************************
|
||||
# $Id$
|
||||
|
||||
# hpux-m68k is the new name for hp700
|
||||
# hpux-parisc is the new name for hp700
|
||||
-include $(EPICS_BASE)/config/CONFIG.Host.hp700
|
||||
@@ -36,7 +36,6 @@ ACC_ANSI = $(ACC) -Xa -v
|
||||
ACC_STRICT = $(ACC) -Xc -v
|
||||
ACC_TRAD = $(ACC) -Xs
|
||||
ACC_DEP_CFLAGS = -KPIC
|
||||
|
||||
ACC_WARN_YES =
|
||||
ACC_WARN_NO = -w
|
||||
ACC_OPT_YES = -O
|
||||
@@ -66,14 +65,16 @@ CCC_DEPENDS_FLAG = -xM1
|
||||
CCC_SHRLIB_CFLAGS_YES =
|
||||
CCC_SHRLIB_LDFLAGS_YES = -G -h $@ -z ignore -z combreloc -z lazyload
|
||||
|
||||
|
||||
ARCH_DEP_CFLAGS = -DSOLARIS=$(subst 5.,,$(shell uname -r))
|
||||
SOLARIS_VERSION = $(subst 5.,,$(shell uname -r))
|
||||
ARCH_DEP_CPPFLAGS += -DSOLARIS=$(SOLARIS_VERSION)
|
||||
POSIX_CPPFLAGS_YES += -D__EXTENSIONS__
|
||||
|
||||
# socket and nsl needed by libca.a
|
||||
ARCH_DEP_LDLIBS += -lsocket -lnsl
|
||||
ARCH_DEP_LDLIBS += -lposix4 -lpthread
|
||||
ARCH_DEP_LDLIBS_8 = -lCrun
|
||||
ARCH_DEP_LDLIBS += $(ARCH_DEP_LDLIBS_$(SOLARIS_VERSION))
|
||||
|
||||
#Allows R3.13 built extensions to load R3.14 shared libs
|
||||
SYS_DLL_LIBS_solaris += posix4 pthread Crun
|
||||
|
||||
SYS_DLL_LIBS_solaris_8 = Crun
|
||||
SYS_DLL_LIBS_solaris += posix4 pthread $(SYS_DLL_LIBS_solaris_$(SOLARIS_VERSION))
|
||||
|
||||
@@ -10,8 +10,5 @@
|
||||
# $Id$
|
||||
|
||||
# solaris-sparc is the new name for solaris
|
||||
-include $(EPICS_BASE)/config/CONFIG.Host.solaris
|
||||
|
||||
ANSI=GCC
|
||||
CPLUSPLUS=G++
|
||||
-include $(EPICS_BASE)/config/CONFIG.Host.solarisGnu
|
||||
|
||||
|
||||
@@ -15,8 +15,5 @@
|
||||
-include $(EPICS_BASE)/config/CONFIG.Host.solaris
|
||||
|
||||
# Solaris on x86
|
||||
ARCH_DEP_CFLAGS = -DSOLARIS=$(subst 5.,,$(shell uname -r)) -D_X86_ -D__EXTENSIONS__
|
||||
|
||||
GCC = gcc
|
||||
G++ = g++
|
||||
ARCH_DEP_CPPFLAGS += -D_X86_
|
||||
|
||||
|
||||
@@ -12,14 +12,8 @@
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.Host.solaris-x86
|
||||
|
||||
-include $(EPICS_BASE)/config/CONFIG.Host.solaris
|
||||
-include $(EPICS_BASE)/config/CONFIG.Host.solarisGnu
|
||||
|
||||
# Solaris on x86
|
||||
ARCH_DEP_CFLAGS = -DSOLARIS -D_X86_
|
||||
|
||||
GCC = gcc
|
||||
G++ = g++
|
||||
|
||||
ANSI=GCC
|
||||
CPLUSPLUS=G++
|
||||
ARCH_DEP_CPPFLAGS += -D_X86_
|
||||
|
||||
|
||||
48
config/CONFIG.Host.solarisGnu
Normal file
48
config/CONFIG.Host.solarisGnu
Normal file
@@ -0,0 +1,48 @@
|
||||
#*************************************************************************
|
||||
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
# National Laboratory.
|
||||
# Copyright (c) 2002 The Regents of the University of California, as
|
||||
# Operator of Los Alamos National Laboratory.
|
||||
# EPICS BASE Versions 3.13.7
|
||||
# and higher are distributed subject to a Software License Agreement found
|
||||
# in file LICENSE that is included with this distribution.
|
||||
#*************************************************************************
|
||||
# CONFIG.Host.solarisGnu
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
# Sites may override these definitions in CONFIG_SITE.Host.solarisGnu
|
||||
|
||||
ARCH_CLASS = solaris
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
|
||||
|
||||
#
|
||||
# required by sun's C++ compiler
|
||||
#
|
||||
AR = ar
|
||||
_AR = $(AR) $(ARFLAGS)
|
||||
G++_AR = $(_AR)
|
||||
CCC_AR = $(CCC) -xar -o
|
||||
ARCMD = $($(CPLUSPLUS)_AR) $@
|
||||
RANLIB =
|
||||
|
||||
#==========================
|
||||
# These are overrides of ANSI and CPLUSPLUS values in CONFIG_SITE
|
||||
ANSI=GCC
|
||||
CPLUSPLUS=G++
|
||||
#==========================
|
||||
|
||||
SOLARIS_VERSION = $(subst 5.,,$(shell uname -r))
|
||||
ARCH_DEP_CPPFLAGS += -DSOLARIS=$(SOLARIS_VERSION)
|
||||
POSIX_CPPFLAGS_YES += -D__EXTENSIONS__
|
||||
|
||||
# socket and nsl needed by libca.a
|
||||
ARCH_DEP_LDLIBS += -lsocket -lnsl
|
||||
ARCH_DEP_LDLIBS += -lposix4 -lpthread
|
||||
ARCH_DEP_LDLIBS_8 = -lCrun
|
||||
ARCH_DEP_LDLIBS += $(ARCH_DEP_LDLIBS_$(SOLARIS_VERSION))
|
||||
|
||||
#Allows R3.13 built extensions to load R3.14 shared libs
|
||||
SYS_DLL_LIBS_solaris_8 = Crun
|
||||
SYS_DLL_LIBS_solaris += posix4 pthread $(SYS_DLL_LIBS_solaris_$(SOLARIS_VERSION))
|
||||
@@ -22,4 +22,4 @@ ARCH_CLASS = ppc
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=PPC603 -DTRUE=1
|
||||
ARCH_DEP_CFLAGS = -mcpu=603 --no-builtin -mstrict-align
|
||||
|
||||
# ARCH_DEP_CFLAGS== -fsigned-char #May need for calcPerform.c
|
||||
# ARCH_DEP_CFLAGS+= -fsigned-char #May need for calcPerform.c
|
||||
|
||||
16
config/CONFIG.Vx.ppc603_long
Normal file
16
config/CONFIG.Vx.ppc603_long
Normal file
@@ -0,0 +1,16 @@
|
||||
# $Id$
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = ppc
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=PPC603 -DTRUE=1
|
||||
ARCH_DEP_CFLAGS = -mcpu=603 --no-builtin -mstrict-align -mlongcall
|
||||
|
||||
# ARCH_DEP_CFLAGS+= -fsigned-char #May need for calcPerform.c
|
||||
@@ -22,5 +22,5 @@ ARCH_CLASS = ppc
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=PPC604 -D_GNU_TOOL -DTRUE=1
|
||||
ARCH_DEP_CFLAGS = -mcpu=604 --no-builtin -mstrict-align
|
||||
|
||||
# ARCH_DEP_CFLAGS== -fsigned-char #May need for calcPerform.c
|
||||
# ARCH_DEP_CFLAGS+= -fsigned-char #May need for calcPerform.c
|
||||
|
||||
|
||||
17
config/CONFIG.Vx.ppc604_long
Normal file
17
config/CONFIG.Vx.ppc604_long
Normal file
@@ -0,0 +1,17 @@
|
||||
# $Id$
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = ppc
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=PPC604 -D_GNU_TOOL -DTRUE=1
|
||||
ARCH_DEP_CFLAGS = -mcpu=604 --no-builtin -mstrict-align -mlongcall
|
||||
|
||||
# ARCH_DEP_CFLAGS+= -fsigned-char #May need for calcPerform.c
|
||||
|
||||
16
config/CONFIG.Vx.sbs_pc6
Normal file
16
config/CONFIG.Vx.sbs_pc6
Normal file
@@ -0,0 +1,16 @@
|
||||
# Created by Korobov for SBS PC6
|
||||
# CONFIG.Vx.sbs_pc6
|
||||
#
|
||||
# This file is maintained by the EPICS community.
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = 386
|
||||
|
||||
# For Vx directories of form:
|
||||
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
|
||||
ARCH_CLASS = sbs_pc6
|
||||
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=PENTIUM -DCPU_VARIANT=PENTIUM -D_X86_
|
||||
ARCH_DEP_CFLAGS = -mpentium
|
||||
ARCH_DEP_CXXFLAGS += -x 'c++'
|
||||
ARCH_DEP_CFLAGS += -fno-builtin -fno-defer-pop
|
||||
13
config/CONFIG.Vx.vxWorks-ppc603
Normal file
13
config/CONFIG.Vx.vxWorks-ppc603
Normal file
@@ -0,0 +1,13 @@
|
||||
#*************************************************************************
|
||||
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
# National Laboratory.
|
||||
# Copyright (c) 2002 The Regents of the University of California, as
|
||||
# Operator of Los Alamos National Laboratory.
|
||||
# EPICS BASE Versions 3.13.7
|
||||
# and higher are distributed subject to a Software License Agreement found
|
||||
# in file LICENSE that is included with this distribution.
|
||||
#*************************************************************************
|
||||
# $Id$
|
||||
|
||||
# vxWorks-ppc603 is the new R3.14 name for ppc603
|
||||
include $(EPICS_BASE)/config/CONFIG.Vx.ppc603
|
||||
@@ -18,9 +18,9 @@
|
||||
|
||||
EPICS_VERSION=3
|
||||
EPICS_REVISION=14
|
||||
EPICS_MODIFICATION=0
|
||||
EPICS_UPDATE_NAME=beta
|
||||
EPICS_UPDATE_LEVEL=2
|
||||
EPICS_MODIFICATION=1
|
||||
EPICS_UPDATE_NAME=
|
||||
EPICS_UPDATE_LEVEL=0
|
||||
|
||||
EPICS_LOCAL_NAME=B
|
||||
EPICS_LOCAL_VERSION=0
|
||||
|
||||
@@ -9,5 +9,5 @@
|
||||
#*************************************************************************
|
||||
# $Id$
|
||||
|
||||
# hpux-m68k is the new name for hp700
|
||||
# hpux-parisc is the new name for hp700
|
||||
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.hp700
|
||||
9
config/CONFIG_HOST_ARCH.solarisGnu
Normal file
9
config/CONFIG_HOST_ARCH.solarisGnu
Normal file
@@ -0,0 +1,9 @@
|
||||
# CONFIG_HOST_ARCH.solaris
|
||||
#
|
||||
# Override values in CONFIG.Vx
|
||||
|
||||
# Include definitions common to all Unix archs
|
||||
include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.UnixCommon
|
||||
|
||||
WIND_HOST_TYPE = sun4-solaris2
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
# hp700
|
||||
# sgi
|
||||
# solaris
|
||||
# solarisGnu (GNU compiler)
|
||||
# solaris-x86
|
||||
# sun4
|
||||
#
|
||||
@@ -46,10 +47,14 @@ endif
|
||||
# mv2700
|
||||
# niCpu030
|
||||
# pc486
|
||||
# ppc603
|
||||
# ppc604
|
||||
# ppc603_long (over 32MB)
|
||||
# ppc604_long (over 32MB)
|
||||
# sbs_pc6
|
||||
# vxipc
|
||||
#
|
||||
CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040 vxWorks-ppc604
|
||||
CROSS_COMPILER_TARGET_ARCHS=
|
||||
|
||||
|
||||
# If only a subset of the host architectures perform
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $Id$
|
||||
|
||||
# hpux-m68k is the new name for hp700
|
||||
# hpux-parisc is the new name for hp700
|
||||
-include $(EPICS_BASE)/config/CONFIG_SITE.Host.hp700
|
||||
@@ -4,7 +4,6 @@
|
||||
|
||||
# ORNL SNS overrides for cross compilers
|
||||
#VX_DIR_YES = /opt/tornado20/
|
||||
#VX_CONFIG_DIR_YES = $(VX_DIR)/target/config
|
||||
#VX_INCLUDE_YES = /usr/local/crossgcc/ppc/powerpc-wrs-vxworks/sys-include
|
||||
#VX_GNU_YES = /usr/local/crossgcc/ppc/
|
||||
#VX_GNU_BIN_YES = $(VX_GNU)/bin
|
||||
|
||||
@@ -40,6 +40,7 @@ vpath %.c $(USER_VPATH) ../os/$(ARCH_CLASS) ../os/generic ..
|
||||
vpath %.cc $(USER_VPATH) ../os/$(ARCH_CLASS) ../os/generic ..
|
||||
vpath %.cpp $(USER_VPATH) ../os/$(ARCH_CLASS) ../os/generic ..
|
||||
vpath %.rc $(USER_VPATH) ../os/$(ARCH_CLASS) ../os/generic ..
|
||||
vpath %.jar $(USER_VPATH) ..
|
||||
|
||||
# check for add-on CFLAGS and CXXFLAGS
|
||||
#
|
||||
@@ -363,7 +364,7 @@ buildInstall :: build $(TARGETS) \
|
||||
clean::
|
||||
@echo "Cleaning"
|
||||
@$(RM) *.i *$(OBJ) *.a $(PROD) $(TESTPROD) $(LIBNAME) $(SHRLIBNAME) $(INC) \
|
||||
*$(RES) $(TARGETS) $(DBDINSTALL) $(MENUS) $(RECTYPES) $(BPTS)
|
||||
*$(RES) $(TARGETS) *.dbd $(MENUS) $(RECTYPES) $(BPTS)
|
||||
ifdef DBDEXPAND
|
||||
@$(RM) $(DBDNAME)
|
||||
endif
|
||||
@@ -388,6 +389,14 @@ PRODNAME_SRCS += $(PRODNAME_SRCS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(PRODNAME_OBJS_$(ARCH_CLASS))),)
|
||||
PRODNAME_OBJS += $(subst -nil-,,$(PRODNAME_OBJS_$(ARCH_CLASS)))
|
||||
else
|
||||
ifdef PRODNAME_OBJS_DEFAULT
|
||||
PRODNAME_OBJS += $(PRODNAME_OBJS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(PRODNAME_RCS_$(ARCH_CLASS))),)
|
||||
PRODNAME_RCS += $(subst -nil-,,$(PRODNAME_RCS_$(ARCH_CLASS)))
|
||||
else
|
||||
@@ -406,8 +415,8 @@ else
|
||||
PRODNAME_LINKER = $(LINK.c)
|
||||
endif
|
||||
|
||||
PRODNAME_OBJS=$(addsuffix $(OBJ), $(basename $(PRODNAME_SRCS)))
|
||||
PRODNAME_RESS=$(addsuffix $(RES), $(basename $(PRODNAME_RCS)))
|
||||
PRODNAME_OBJS+=$(addsuffix $(OBJ), $(basename $(PRODNAME_SRCS)))
|
||||
PRODNAME_RESS+=$(addsuffix $(RES), $(basename $(PRODNAME_RCS)))
|
||||
|
||||
ifdef BORLANDC
|
||||
$(PRODNAME): $(PRODNAME_OBJS) $(PRODNAME_RESS)
|
||||
@@ -466,6 +475,15 @@ TESTCLASSES += $(subst .java,.class,$(TESTJAVA))
|
||||
INSTALL_CLASSES =$(CLASSES:%=$(INSTALL_JAVA)/$(PACKAGE)/%)
|
||||
INSTALL_JAR =$(JAR:%=$(INSTALL_JAVA)/%)
|
||||
|
||||
ifeq ($(strip $(JAVADOC)),YES)
|
||||
DIRECTORY_TARGETS += $(INSTALL_HTML)
|
||||
INSTALL_JAVADOC = $(CLASSES:%.class=$(INSTALL_HTML)/%.html)
|
||||
ifdef PACKAGE
|
||||
DIRECTORY_TARGETS += $(INSTALL_HTML)/$(PACKAGE)
|
||||
INSTALL_JAVADOC = $(CLASSES:%.class=$(INSTALL_HTML)/$(PACKAGE)/$(PACKAGE)/%.html)
|
||||
endif
|
||||
endif
|
||||
|
||||
JAR_OPTIONS = cvf
|
||||
ifdef MANIFEST
|
||||
JAR_OPTIONS = cvmf
|
||||
@@ -478,10 +496,10 @@ $(DIRECTORY_TARGETS) :
|
||||
|
||||
build:: $(TESTCLASSES) $(JAR)
|
||||
|
||||
buildInstall :: $(DIRECTORY_TARGETS) $(INSTALL_CLASSES) $(INSTALL_JAR)
|
||||
buildInstall :: $(DIRECTORY_TARGETS) $(INSTALL_CLASSES) $(INSTALL_JAR) $(INSTALL_JAVADOC)
|
||||
|
||||
clean::
|
||||
@$(RM) $(TESTCLASSES) $(JAR)
|
||||
@$(RM) $(TESTCLASSES) $(JAR) $(INSTALL_CLASSES) $(INSTALL_JAVADOC)
|
||||
|
||||
%.class:%.java
|
||||
@echo Creating java class file $@
|
||||
@@ -493,6 +511,11 @@ $(INSTALL_JAVA)/$(PACKAGE)/%.class:%.java
|
||||
@$(RM) $@
|
||||
$(JAVACCMD) -d $(INSTALL_JAVA) $<
|
||||
|
||||
$(INSTALL_JAVADOC):$(JAVA)
|
||||
@echo Creating javadoc html files $@
|
||||
@$(RM) $@
|
||||
$(JAVADOCCMD) -d $(INSTALL_HTML)/$(PACKAGE) $(PACKAGE)
|
||||
|
||||
$(JAR):%.jar: $(JAR_DEPFILES)
|
||||
@echo Creating java jar file $@
|
||||
@$(RM) $@
|
||||
@@ -505,7 +528,7 @@ $(INSTALL_JAVA)/%.jar: %.jar
|
||||
$(PACKAGE)_%.h:$(INSTALL_JAVA)/$(PACKAGE)/%.class
|
||||
$(JAVAHCMD) $(PACKAGE).$*
|
||||
|
||||
.PRECIOUS: $(INSTALL_CLASSES)
|
||||
.PRECIOUS: $(INSTALL_CLASSES) $(INSTALL_JAVADOC)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
#---------------------------------------------------------------
|
||||
|
||||
@@ -23,7 +23,6 @@ GNU_TARGET_LIB_DIR = $(GNU_DIR)/$(GNU_TARGET)/lib
|
||||
|
||||
export GCC_EXEC_PREFIX = $(GNU_LIB)/gcc-lib/
|
||||
|
||||
CROSS_CPPFLAGS = -nostdinc
|
||||
CROSS_INCLUDES = $(addprefix -I,$(GNU_TARGET_INCLUDE_DIR))
|
||||
CROSS_LDFLAGS = $(addprefix -L,$(GNU_TARGET_LIB_DIR))
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
#--------------------------------------------------
|
||||
# GNU compiler defaults
|
||||
|
||||
GNU = YES
|
||||
|
||||
GNU_BIN = $(GNU_DIR)/bin
|
||||
GNU_LIB = $(GNU_DIR)/lib
|
||||
|
||||
@@ -41,6 +43,6 @@ OPT_CXXFLAGS_NO = -g
|
||||
STATIC_LDFLAGS_YES = -static
|
||||
STATIC_LDFLAGS_NO =
|
||||
|
||||
SHRLIB_LDFLAGS_YES = -shared
|
||||
SHRLIB_LDFLAGS_NO =
|
||||
SHRLIB_LDFLAGS_YES += -shared
|
||||
SHRLIB_LDFLAGS_NO +=
|
||||
|
||||
|
||||
@@ -23,6 +23,19 @@
|
||||
# USR_CFLAGS_sun4 = -nil-
|
||||
# USR_CFLAGS_DEFAULT = <defines for most systems, not sun4>
|
||||
#
|
||||
# Additional target architecture, T_A, Rules for USR_CFLAGS, USR_CXXFLAGS,
|
||||
# and USR_CPPFLAGS which are applied before the above os_class Rules:
|
||||
# 1) USR_CFLAGS_$(OS_CLASS) is used
|
||||
# 2) if there is a special $(USR_CFLAGS_$(T_A)), it's
|
||||
# appended to 1)
|
||||
# 3) if there is no special defined, but a generic USR_CFLAGS_$(OS_CLASS)_DEFAULT,
|
||||
# this one is appended
|
||||
# 4) if you have the special case that your $(USR_CFLAGS_$(T_A)) is
|
||||
# empty but you don't want 3), you have to define it as '-nil-', e.g.:
|
||||
# USR_CFLAGS_vxWorks = <defines for all OS_CLASS=vxWorks target systems>
|
||||
# USR_CFLAGS_vxWorks-68040 = -nil-
|
||||
# USR_CFLAGS_vxWorks_DEFAULT = <defines for most vxWorks systems, not 68040>
|
||||
#
|
||||
# These rules apply to these Makefile-variables:
|
||||
# USR_CFLAGS C flags
|
||||
# USR_CXXFLAGS C++ flags
|
||||
@@ -46,6 +59,14 @@
|
||||
# The INC source files cannot be created by the build.
|
||||
#
|
||||
|
||||
ifneq ($(strip $(USR_CFLAGS_$(T_A))),)
|
||||
USR_CFLAGS_$(OS_CLASS)+=$(subst -nil-,,$(USR_CFLAGS_$(T_A)))
|
||||
else
|
||||
ifdef USR_CFLAGS_$(OS_CLASS)_DEFAULT
|
||||
USR_CFLAGS_$(OS_CLASS)+=$(USR_CFLAGS_$(OS_CLASS)_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(USR_CFLAGS_$(OS_CLASS))),)
|
||||
USR_CFLAGS+=$(subst -nil-,,$(USR_CFLAGS_$(OS_CLASS)))
|
||||
else
|
||||
@@ -62,6 +83,14 @@ USR_INCLUDES+=$(USR_INCLUDES_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(USR_CXXFLAGS_$(T_A))),)
|
||||
USR_CXXFLAGS_$(OS_CLASS)+=$(subst -nil-,,$(USR_CXXFLAGS_$(T_A)))
|
||||
else
|
||||
ifdef USR_CXXFLAGS_$(OS_CLASS)_DEFAULT
|
||||
USR_CXXFLAGS_$(OS_CLASS)+=$(USR_CXXFLAGS_$(OS_CLASS)_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(USR_CXXFLAGS_$(OS_CLASS))),)
|
||||
USR_CXXFLAGS+=$(subst -nil-,,$(USR_CXXFLAGS_$(OS_CLASS)))
|
||||
else
|
||||
@@ -70,6 +99,14 @@ USR_CXXFLAGS+=$(USR_CXXFLAGS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(USR_CPPFLAGS_$(T_A))),)
|
||||
USR_CPPFLAGS_$(OS_CLASS)+=$(subst -nil-,,$(USR_CPPFLAGS_$(T_A)))
|
||||
else
|
||||
ifdef USR_CPPFLAGS_$(OS_CLASS)_DEFAULT
|
||||
USR_CPPFLAGS_$(OS_CLASS)+=$(USR_CPPFLAGS_$(OS_CLASS)_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(USR_CPPFLAGS_$(OS_CLASS))),)
|
||||
USR_CPPFLAGS+=$(subst -nil-,,$(USR_CPPFLAGS_$(OS_CLASS)))
|
||||
else
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
|
||||
EPICS_VERSION=3
|
||||
EPICS_REVISION=14
|
||||
EPICS_MODIFICATION=0
|
||||
EPICS_UPDATE_NAME=beta
|
||||
EPICS_UPDATE_LEVEL=2
|
||||
EPICS_MODIFICATION=1
|
||||
EPICS_UPDATE_NAME=
|
||||
EPICS_UPDATE_LEVEL=0
|
||||
|
||||
EPICS_VERSION_STRING="EPICS Version ${EPICS_VERSION}.${EPICS_REVISION}.${EPICS_MODIFICATION}.${EPICS_UPDATE_NAME}${EPICS_UPDATE_LEVEL}"
|
||||
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
#
|
||||
# Common Configuration Information
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Divider symbol
|
||||
DIVIDER = .
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Build architectures
|
||||
|
||||
@@ -28,54 +32,15 @@ CROSS2 = $(CROSS_COMPILER_TARGET_ARCHS$(filter-out 1,$(words $(filter $(EPICS_HO
|
||||
|
||||
BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Ext, app, and module configure dir targets
|
||||
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
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Build defaults, CONFIG_SITE, CONFIG, or os/CONFIG* will override
|
||||
CMPLR=STRICT
|
||||
CXXCMPLR=STRICT
|
||||
STATIC_BUILD=NO
|
||||
SHARED_LIBRARIES=NO
|
||||
HDEPENDS=YES
|
||||
HOST_OPT=YES
|
||||
CROSS_OPT=YES
|
||||
HOST_WARN=YES
|
||||
CROSS_WARN=YES
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Prefix and suffix
|
||||
DEP=.depends
|
||||
DIVIDER = .
|
||||
OBJ = .
|
||||
RES = .
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Default for perl if it's on the PATH,
|
||||
# otherwise override this in os/CONFIG_SITE.<host_arch>.Common
|
||||
PERL=perl
|
||||
|
||||
#-------------------------------------------------------
|
||||
# tools for installing libraries and products
|
||||
INSTALL = $(PERL) $(TOOLS)/installEpics.pl
|
||||
INSTALL_PRODUCT = $(INSTALL)
|
||||
INSTALL_LIBRARY = $(INSTALL)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# tools for making header dependancies and variable replacement
|
||||
MKMF = $(PERL) $(TOOLS)/mkmf.pl
|
||||
REPLACEVAR = $(PERL) $(TOOLS)/replaceVAR.pl
|
||||
# Check configure/RELEASE file for consistency
|
||||
CHECK_RELEASE_YES = checkRelease
|
||||
CHECK_RELEASE_NO =
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Directories
|
||||
@@ -108,6 +73,45 @@ INSTALL_SHRLIB = $(INSTALL_LOCATION_LIB)/$(T_A)
|
||||
INSTALL_TCLLIB = $(INSTALL_LOCATION_LIB)/$(T_A)
|
||||
INSTALL_BIN = $(INSTALL_LOCATION_BIN)/$(T_A)
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Ext, app, and module configure dir targets
|
||||
CONFIG_TARGETS += CONFIG_APP_INCLUDE RULES_INCLUDE
|
||||
CONFIG_INSTALLS += ../RULES_BUILD
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Cross compile default, HOST or CROSS, CONFIG.crossCommon will override
|
||||
BUILD_CLASS = HOST
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Build defaults, CONFIG_SITE, CONFIG, or os/CONFIG* will override
|
||||
CMPLR=STRICT
|
||||
CXXCMPLR=STRICT
|
||||
STATIC_BUILD=NO
|
||||
SHARED_LIBRARIES=NO
|
||||
HDEPENDS=YES
|
||||
HOST_OPT=YES
|
||||
CROSS_OPT=YES
|
||||
HOST_WARN=YES
|
||||
CROSS_WARN=YES
|
||||
GNU=NO
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Prefix and suffix
|
||||
DEP=.depends
|
||||
OBJ = .
|
||||
RES = .
|
||||
|
||||
#-------------------------------------------------------
|
||||
# tools for installing libraries and products
|
||||
INSTALL = $(PERL) $(TOOLS)/installEpics.pl
|
||||
INSTALL_PRODUCT = $(INSTALL)
|
||||
INSTALL_LIBRARY = $(INSTALL)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# tools for making header dependancies and variable replacement
|
||||
MKMF = $(PERL) $(TOOLS)/mkmf.pl
|
||||
REPLACEVAR = $(PERL) $(TOOLS)/replaceVAR.pl
|
||||
|
||||
#--------------------------------------------------
|
||||
# vpath directories
|
||||
GENERIC_SRC_DIRS = .. $(SRC_DIRS)
|
||||
@@ -193,11 +197,11 @@ USR_DBDFLAGS =
|
||||
USR_ARFLAGS =
|
||||
|
||||
# Target specific options
|
||||
TARGET_INCLUDES = $($(basename $@)_INCLUDES_$(T_A)) $($(basename $@)_INCLUDES)
|
||||
TARGET_CFLAGS = $($(basename $@)_CFLAGS_$(T_A)) $($(basename $@)_CFLAGS)
|
||||
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS_$(T_A)) $($(basename $@)_CXXFLAGS)
|
||||
TARGET_LDFLAGS = $($(basename $@)_LDFLAGS_$(T_A)) $($(basename $@)_LDFLAGS)
|
||||
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS_$(T_A)) $($(basename $@)_CPPFLAGS)
|
||||
TARGET_INCLUDES = $($(basename $@)_INCLUDES_$(T_A))
|
||||
TARGET_CFLAGS = $($(basename $@)_CFLAGS_$(T_A))
|
||||
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS_$(T_A))
|
||||
TARGET_LDFLAGS = $($(basename $@)_LDFLAGS_$(T_A))
|
||||
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS_$(T_A))
|
||||
|
||||
TARGET_INCLUDES += $($(basename $@)_INCLUDES_$(OS_CLASS)) $($(basename $@)_INCLUDES)
|
||||
TARGET_CFLAGS += $($(basename $@)_CFLAGS_$(OS_CLASS)) $($(basename $@)_CFLAGS)
|
||||
@@ -206,24 +210,17 @@ TARGET_LDFLAGS += $($(basename $@)_LDFLAGS_$(OS_CLASS)) $($(basename $@)_LDFLAGS
|
||||
TARGET_CPPFLAGS += $($(basename $@)_CPPFLAGS_$(OS_CLASS)) $($(basename $@)_CPPFLAGS)
|
||||
|
||||
# Level of ansi conformance flags
|
||||
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)))
|
||||
CONFORM_CPPFLAGS = $(CONFORM_CPPFLAGS_$(CMPLR))
|
||||
CONFORM_CFLAGS = $(CONFORM_CFLAGS_$(CMPLR))
|
||||
CONFORM_CXXFLAGS = $(CONFORM_CXXFLAGS_$(CMPLR))
|
||||
|
||||
# Warnings flags
|
||||
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)))
|
||||
WARN_CFLAGS = $(WARN_CFLAGS_$($(BUILD_CLASS)_WARN))
|
||||
WARN_CXXFLAGS = $(WARN_CXXFLAGS_$($(BUILD_CLASS)_WARN))
|
||||
|
||||
# Optimization flags
|
||||
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)))
|
||||
OPT_CFLAGS = $(OPT_CFLAGS_$($(BUILD_CLASS)_OPT))
|
||||
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$($(BUILD_CLASS)_OPT))
|
||||
|
||||
# Posix flags
|
||||
POSIX=YES
|
||||
@@ -236,6 +233,11 @@ STATIC_CXXCFLAGS = $(STATIC_CXXFLAGS_$(STATIC_BUILD))
|
||||
STATIC_LDFLAGS = $(STATIC_LDFLAGS_$(STATIC_BUILD))
|
||||
STATIC_LDLIBS = $(STATIC_LDLIBS_$(STATIC_BUILD))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Command-line input support default
|
||||
COMMANDLINE_LIBRARY = EPICS
|
||||
OP_SYS_LDLIBS += $(LDLIBS_$(COMMANDLINE_LIBRARY))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Flags
|
||||
|
||||
@@ -251,7 +253,7 @@ CXXFLAGS = $(CONFORM_CXXFLAGS) $(CROSS_CXXFLAGS) $(OPT_CXXFLAGS)\
|
||||
$(ARCH_DEP_CXXFLAGS) $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS)
|
||||
|
||||
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(PROD_LDFLAGS)\
|
||||
$(ARCH_DEP_LDFLAGS) $(STATIC_LDFLAGS) $(OP_SYS_LDFLAGS) $(CROSS_LDFLAGS)
|
||||
$(ARCH_DEP_LDFLAGS) $(OP_SYS_LDFLAGS) $(CROSS_LDFLAGS)
|
||||
|
||||
LDLIBS = $(PROD_LDLIBS) $(STATIC_LDLIBS)\
|
||||
$(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(OP_SYS_LDLIBS)
|
||||
@@ -364,5 +366,5 @@ COMMON_INC += $(filter $(COMMON_DIR)/%, $(foreach file, $(INC), \
|
||||
SOURCE_INC = $(wildcard $(file) $(SOURCE_INC_bbb) )
|
||||
SOURCE_INC_bbb = $(foreach dir, $(ALL_SRC_DIRS), $(SOURCE_INC_aaa) )
|
||||
SOURCE_INC_aaa = $(addsuffix /$(file), $(dir) )
|
||||
|
||||
|
||||
endif
|
||||
|
||||
@@ -29,140 +29,22 @@
|
||||
# Default environment settings
|
||||
|
||||
# Channel Access:
|
||||
# EPICS_CA_ADDR_LIST
|
||||
# Augment beacon/search dest ip addr list
|
||||
# from white space separated ip addresses in this
|
||||
# environment variable. "Quote" if more than one addr.
|
||||
#
|
||||
# EPICS_CA_AUTO_ADDR_LIST
|
||||
# YES = augment beacon/search dest ip
|
||||
# addr list from 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.
|
||||
#
|
||||
|
||||
# Details are in the CA reference manual
|
||||
# (see CAref.html in this distribution)
|
||||
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
|
||||
#
|
||||
# EPICS_CA_BEACON_PERIOD
|
||||
# The quiescent sec between server beacons.
|
||||
#
|
||||
# EPICS_CAS_INTF_ADDR_LIST
|
||||
# This specifies a list of IP addresses identifying
|
||||
# a limited set of network interfaces for server communication.
|
||||
#
|
||||
# Specifically, this parameter specifies the interfaces from
|
||||
# which the server will accept TCP/IP connections. It also
|
||||
# specifies that UDP search messages addressed to both
|
||||
# the IP addresses in EPICS_CAS_INTF_ADDR_LIST and also to
|
||||
# the broadcast addresses of corresponding LAN interfaces
|
||||
# will be accepted by the server. If this parameter is empty
|
||||
# then all UDP search messages and TCP connection requests
|
||||
# addressed to the host are accepted.
|
||||
#
|
||||
# If EPICS_CA_AUTO_ADDR_LIST is NO, then the beacon address list
|
||||
# is not auto configured.
|
||||
#
|
||||
# If EPICS_CA_AUTO_ADDR_LIST is YES and EPICS_CAS_INTF_ADDR_LIST
|
||||
# has _not_ been specified then beacons are sent to the broadcast
|
||||
# addresses of all LAN interfaces and the destination addresses of
|
||||
# all point-to-point serial interfaces.
|
||||
#
|
||||
# If EPICS_CA_AUTO_ADDR_LIST is YES and EPICS_CAS_INTF_ADDR_LIST
|
||||
# _has_ been specified then beacons are sent to the broadcast address
|
||||
# of each LAN interface corresponding to an IP address in
|
||||
# EPICS_CAS_INTF_ADDR_LIST or the destination address of
|
||||
# a point-to-point serial interfaces corresponding to an IP
|
||||
# address in EPICS_CAS_INTF_ADDR_LIST.
|
||||
#
|
||||
# Beacons may be sent to additional hand configured addresses
|
||||
# (see the notes below under EPICS_CAS_BEACON_ADDR_LIST).
|
||||
#
|
||||
# EPICS_CAS_BEACON_ADDR_LIST
|
||||
# If this parameter is specified, or if EPICS_CAS_INTF_ADDR_LIST
|
||||
# isnt empty, then this parameter is used by the server library to
|
||||
# augment the list of addresses beacons are sent to. Otherwise
|
||||
# EPICS_CA_ADDR_LIST is used to augment the list of addresses
|
||||
# beacons are sent to.
|
||||
#
|
||||
# EPICS_CAS_SERVER_PORT
|
||||
# If this parameter is specified then it
|
||||
# and not EPICS_CA_SERVER_PORT is used to determine the server's
|
||||
# port number. It is possible to have multiple servers on the
|
||||
# same host on the same EPICS_CAS_SERVER_PORT port if the IP
|
||||
# kernel is modern (if it has multicast enhancements). In this
|
||||
# situation all servers will share the same user specified
|
||||
# UDP port number and will be assigned unique TCP port numbers.
|
||||
#
|
||||
# The fact that the servers may not be using the user specified
|
||||
# port number for TCP will be nearly transparent to EPICS
|
||||
# 3.13 or higher clients that will be locating the servers
|
||||
# using the user specified UDP port number, but will be connecting
|
||||
# to the servers using whatever TCP port has been assigned.
|
||||
# Unfortunately, a severe limitation exists in most IP
|
||||
# kernels: if multiple servers are listening for search requests
|
||||
# addressed to the same UDP port then they will all receive a copy
|
||||
# of each UDP message received by the IP kernel that has a broadcast
|
||||
# destination address. Unfortunately, in many IP kernel
|
||||
# implementations only one of the servers will receive UDP
|
||||
# messages with a single host (unicast) destination address.
|
||||
#
|
||||
# If experiencing trouble getting clients to connect
|
||||
# --------------------------------------------------
|
||||
#
|
||||
# o Make sure that the broadcast addresses are identical on the
|
||||
# server's host and on the client's host. This can be checked
|
||||
# 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.
|
||||
#
|
||||
# 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 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_PERIOD=
|
||||
EPICS_CAS_BEACON_PORT=
|
||||
EPICS_CAS_AUTO_BEACON_ADDR_LIST=""
|
||||
EPICS_CAS_BEACON_ADDR_LIST=""
|
||||
EPICS_CAS_SERVER_PORT=
|
||||
EPICS_CAS_INTF_ADDR_LIST=""
|
||||
EPICS_CAS_IGNORE_ADDR_LIST=""
|
||||
|
||||
# Log Server:
|
||||
# EPICS_IOC_LOG_PORT Log server port number etc.
|
||||
|
||||
@@ -34,10 +34,13 @@
|
||||
# win32-x86 (MS Visual C++ compiler used for host builds)
|
||||
# win32-x86-borland (Borland C++ compiler used for host builds)
|
||||
# lynxos-x86
|
||||
#
|
||||
# EPICS_HOST_ARCH is an environment variable
|
||||
# EPICS_HOST_ARCH=$(shell /usr/local/epics/startup/EpicsHostArch)
|
||||
# darwin-ppc
|
||||
# linux-mpc82xx
|
||||
|
||||
# EPICS_HOST_ARCH is a required environment variable
|
||||
# Do not set EPICS_HOST_ARCH in this file.
|
||||
# Use base/startup files to set EPICS_HOST_ARCH or
|
||||
# set EPICS_HOST_ARCH on the GNU make command line.
|
||||
|
||||
# The cross-compiler architectures to build EPICS for
|
||||
#
|
||||
@@ -57,8 +60,7 @@
|
||||
# configure/os/CONFIG_SITE.<host>.Common files will
|
||||
# override
|
||||
#
|
||||
#CROSS_COMPILER_TARGET_ARCHS=
|
||||
CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040 vxWorks-ppc604
|
||||
CROSS_COMPILER_TARGET_ARCHS=
|
||||
|
||||
|
||||
# If only a subset of the host architectures perform
|
||||
@@ -121,3 +123,4 @@ CROSS_WARN=YES
|
||||
|
||||
# Installation directory
|
||||
INSTALL_LOCATION=$(TOP)
|
||||
|
||||
|
||||
@@ -31,9 +31,11 @@
|
||||
# EPICS_TIMEZONE needed for vxWorks
|
||||
# EPICS_TIMEZONE=<name>::<minutesWest>:<start daylight>:<end daylight>
|
||||
# eg EPICS_TIMEZONE=CUS::360:033102:102802
|
||||
# DST for 2003 US: Apr 6 - Oct 26
|
||||
# EU: Mar 30 - Oct 26
|
||||
# EPICS_TS_NTP_INET ntp or Unix time server ip addr.
|
||||
|
||||
EPICS_TIMEZONE=CUS::360:033102:102802
|
||||
EPICS_TIMEZONE=CUS::360:040602:102602
|
||||
EPICS_TS_NTP_INET=
|
||||
|
||||
|
||||
|
||||
@@ -13,3 +13,5 @@
|
||||
|
||||
# Tornado directory
|
||||
VX_DIR = /usr/local/vw/tornado202
|
||||
# Is Tornado version >= 2.2 ? must be either YES or NO
|
||||
TORNADO_VERSION_2_2 = NO
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
|
||||
vpath %.dbd $(USR_VPATH) $(GENERIC_SRC_DIRS) $(dir $(DBD)) $(COMMON_DIR)
|
||||
vpath %.db $(USR_VPATH) $(GENERIC_SRC_DIRS) $(dir $(DB)) $(COMMON_DIR)
|
||||
vpath %.vdb $(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
|
||||
@@ -51,7 +51,22 @@ SOURCE_DB_aaa = $(addsuffix /$(file), $(dir) )
|
||||
COMMONS = $(COMMON_DIR)/*.dbd $(COMMON_DIR)/*.db $(COMMON_DIR)/*.h \
|
||||
$(COMMON_DIR)/*.substitutions $(COMMON_DIR)/*.template
|
||||
|
||||
PREFIX=$(shell echo $* | sed -e 's-[0-9]--g' | sed -e 's-\.db--g')
|
||||
# Remove trailing numbers (to 99) on stem
|
||||
TEMPLATE1=$(patsubst %0,%,$(patsubst %1,%,$(patsubst %2,%,$(patsubst %3,%,$(patsubst %4,%, \
|
||||
$(patsubst %5,%,$(patsubst %6,%,$(patsubst %7,%,$(patsubst %8,%,$(patsubst %9,%, \
|
||||
$*))))))))))
|
||||
TEMPLATE2=$(patsubst %0,%,$(patsubst %1,%,$(patsubst %2,%,$(patsubst %3,%,$(patsubst %4,%, \
|
||||
$(patsubst %5,%,$(patsubst %6,%,$(patsubst %7,%,$(patsubst %8,%,$(patsubst %9,%, \
|
||||
$(TEMPLATE1)))))))))))
|
||||
TEMPLATE3=$(addsuffix .template,$(addprefix ../,$(TEMPLATE2)))
|
||||
TEMPLATE_FILENAME=$(firstword $(wildcard ../$*.template) $(TEMPLATE3))
|
||||
|
||||
# dbst based database optimization
|
||||
ifeq '$(DB_OPT)' 'YES'
|
||||
RAW=.raw
|
||||
COMMON_DBS = $(addprefix $(COMMON_DIR)/,$(filter %.db,$(DB)))
|
||||
COMMON_DBS += $(addsuffix $(RAW),$(addprefix $(COMMON_DIR)/,$(filter %.db,$(DB))))
|
||||
endif
|
||||
|
||||
##################################################### dependancies
|
||||
|
||||
@@ -79,10 +94,10 @@ COMMONS = $(DBD) $(DB)
|
||||
|
||||
all: install
|
||||
|
||||
buildInstall : build
|
||||
|
||||
install: buildInstall
|
||||
|
||||
buildInstall : build
|
||||
|
||||
rebuild: clean install
|
||||
|
||||
.PHONY: all inc build install clean rebuild buildInstall
|
||||
@@ -133,7 +148,7 @@ endif
|
||||
$(COMMON_DIR)/%.edf: ../%.sch $(DEPSCHS)
|
||||
@$(RM) $@
|
||||
@if [ ! -f cad.rc -a -r ../cad.rc ] ; then ln -s ../cad.rc ; fi
|
||||
$(SCH2EDIF) $(SCH2EDIF_SYSFLAGS) $(SCH2EDIF_FLAGS) $<
|
||||
$(SCH2EDIF) $(SCH2EDIF_SYSFLAGS) $(SCH2EDIF_FLAGS) -o $@ $<
|
||||
|
||||
##################################################### Substitution files
|
||||
|
||||
@@ -145,17 +160,25 @@ $(COMMON_DIR)/%.substitutions:
|
||||
@$(CREATESUBSTITUTIONS) $(COMMON_DIR)/$*
|
||||
endif
|
||||
|
||||
.PRECIOUS: $(DB:%.db=$(COMMON_DIR)/%.substitutions)
|
||||
$(INSTALL_DB)/%.substitutions: %.substitutions
|
||||
@echo "Installing db file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
.PRECIOUS: $(COMMON_DIR)/%.substitutions
|
||||
|
||||
##################################################### Template files
|
||||
|
||||
$(COMMON_DIR)/%.template: %.edf
|
||||
$(COMMON_DIR)/%.template: $(COMMON_DIR)/%.edf
|
||||
@$(RM) $@
|
||||
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $@.VAR $<
|
||||
@$(REPLACEVAR) < $@.VAR > $@
|
||||
@$(RM) $@.VAR
|
||||
|
||||
.PRECIOUS: $(DB:%.db=$(COMMON_DIR)/%.template)
|
||||
$(INSTALL_DB)/%.template: %.template
|
||||
@echo "Installing db file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
.PRECIOUS: $(COMMON_DIR)/%.template
|
||||
|
||||
##################################################### INC files
|
||||
|
||||
@@ -188,22 +211,23 @@ $(INSTALL_DBD)/%: %
|
||||
|
||||
##################################################### DB files
|
||||
|
||||
$(COMMON_DIR)/%.db$(RAW): %.edf
|
||||
$(COMMON_DIR)/%.db$(RAW): $(COMMON_DIR)/%.edf
|
||||
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $@.VAR $<
|
||||
@$(REPLACEVAR) < $@.VAR > $@
|
||||
@$(RM) $@.VAR
|
||||
|
||||
$(COMMON_DIR)/%.db$(RAW): %.substitutions %.template
|
||||
$(COMMON_DIR)/%.db$(RAW): %.substitutions
|
||||
@$(RM) $@$(DEP)
|
||||
@$(DBDDEPENDS_CMD)
|
||||
@echo "$@:$(TEMPLATE_FILENAME)" >> $@$(DEP)
|
||||
@echo "Inflating database from $<"
|
||||
@$(RM) $@
|
||||
$(MSI) -S $^ > $@
|
||||
$(MSI) -S$< $(TEMPLATE_FILENAME) > $@
|
||||
|
||||
# dbst based database optimization
|
||||
ifeq '$(DB_OPT)' 'YES'
|
||||
|
||||
$(COMMON_DIR)/%.db$(RAW): %.db
|
||||
$(COMMON_DIR)/%.db$(RAW): ../%.db
|
||||
@$(RM) $@
|
||||
$(CP) $< $@
|
||||
|
||||
@@ -212,21 +236,20 @@ $(COMMON_DIR)/%.db: $(COMMON_DIR)/%.db$(RAW)
|
||||
@$(RM) $@
|
||||
$(DBST) . $< -d > $@
|
||||
|
||||
$(INDDBFROMTEMPLATE):%.db: %.substitutions
|
||||
$(RM) $@
|
||||
ifndef WIN32
|
||||
$(MSI) -S$*.substitutions $(PREFIX).template > $@
|
||||
endif
|
||||
|
||||
RAW=.raw
|
||||
$(INSTALL_DB)/%.db: $(COMMON_DIR)/%.db
|
||||
@echo "Installing db file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
.PRECIOUS: $(COMMON_DIR)/%.db
|
||||
.PRECIOUS: $(DB:%=$(COMMON_DIR)/%$(RAW))
|
||||
endif
|
||||
else
|
||||
|
||||
$(INSTALL_DB)/%: %
|
||||
@echo "Installing db file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
endif
|
||||
|
||||
.PRECIOUS: $(COMMON_DIR)/%.edf
|
||||
.PRECIOUS: $(COMMON_DBS)
|
||||
|
||||
##################################################### register record,device,driver support
|
||||
|
||||
@@ -15,7 +15,7 @@ all: install
|
||||
|
||||
build install buildInstall: $(CHECK_RELEASE_$(CHECK_RELEASE))
|
||||
|
||||
rebuild: clean all
|
||||
rebuild: clean install
|
||||
|
||||
ACTIONS = inc
|
||||
ACTIONS += build
|
||||
@@ -29,6 +29,8 @@ archPart = $(word 2, $(subst $(DIVIDER), ,$@))
|
||||
actionArchTargets = $(foreach x, $(ACTIONS),\
|
||||
$(foreach arch,$(BUILD_ARCHS), $(x)$(DIVIDER)$(arch)))
|
||||
|
||||
cleanArchTargets = $(foreach arch,$(BUILD_ARCHS), clean$(DIVIDER)$(arch))
|
||||
|
||||
buildDirs = $(addprefix O.,$(BUILD_ARCHS))
|
||||
|
||||
$(actionArchTargets) : $(buildDirs) O.Common
|
||||
@@ -54,15 +56,15 @@ checkRelease: $(wildcard $(TOP)/configure/RELEASE*)
|
||||
clean ::
|
||||
$(RMDIR) $(addprefix O.,$(BUILD_ARCHS)) O.Common
|
||||
|
||||
clean$(DIVIDER)% ::
|
||||
$(RMDIR) O.$*
|
||||
$(cleanArchTargets) ::
|
||||
$(RMDIR) O.$(archPart)
|
||||
|
||||
realclean ::
|
||||
$(RMDIR) O.*
|
||||
|
||||
.PHONY : $(buildActionTargets)
|
||||
.PHONY : $(buildActionArchTargets)
|
||||
.PHONY : $(buildArchs)
|
||||
.PHONY : $(actionArchTargets)
|
||||
.PHONY : $(cleanArchTargets)
|
||||
.PHONY : $(BUILD_ARCHS)
|
||||
.PHONY : $(ACTIONS) clean realclean all
|
||||
.PHONY : checkRelease
|
||||
|
||||
|
||||
@@ -130,19 +130,19 @@ endif
|
||||
|
||||
# Main targets
|
||||
|
||||
inc : $(COMMON_INC) $(INSTALL_INC)
|
||||
|
||||
build : inc
|
||||
install: buildInstall
|
||||
|
||||
buildInstall : build
|
||||
|
||||
install: buildInstall
|
||||
|
||||
rebuild: clean install
|
||||
|
||||
build : inc
|
||||
|
||||
build: $(OBJSNAME) $(LIBTARGETS) $(PRODTARGETS) $(TESTPRODNAME) \
|
||||
$(TARGETS)
|
||||
|
||||
inc : $(COMMON_INC) $(INSTALL_INC)
|
||||
|
||||
buildInstall : \
|
||||
$(INSTALL_SCRIPTS) $(INSTALL_PROD) $(INSTALL_MUNCHS) \
|
||||
$(INSTALL_TCLLIBS) $(INSTALL_TCLINDEX) \
|
||||
@@ -201,7 +201,7 @@ $(OBJLIBNAME):%$(OBJ): $(OBJLIB_LD_OBJS)
|
||||
|
||||
%_ctdt$(OBJ) : %_ctdt.c
|
||||
@$(RM) $@
|
||||
$(COMPILE.c) -traditional $<
|
||||
$(COMPILE.ctdt) $<
|
||||
|
||||
%$(OBJ): %.c
|
||||
@$(HDEPENDS_CMD)
|
||||
|
||||
@@ -33,9 +33,9 @@ actionArchTargets = $(foreach action, $(ACTIONS),\
|
||||
$(foreach arch, $(ARCHS), \
|
||||
$(action)$(DIVIDER)$(arch)))
|
||||
|
||||
all : buildInstall
|
||||
all : install
|
||||
|
||||
rebuild : clean all
|
||||
rebuild : clean install
|
||||
|
||||
$(DIRS) $(dirActionTargets) $(dirArchTargets) $(dirActionArchTargets) :
|
||||
$(MAKE) -C $(dirPart) $(actionArchPart)
|
||||
|
||||
@@ -68,29 +68,37 @@ else
|
||||
JAR_OPTIONS = cvf
|
||||
endif
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Java doc definitions
|
||||
ifeq ($(JAVADOC),YES)
|
||||
JAVADOCFLAGS += $(USR_JAVADOCFLAGS)
|
||||
JAVADOCCMD = $(subst \,/,$(JAVA_BIN)/javadoc$(EXE) $(CLASSPATH) $(SOURCEPATH) $(JAVADOCFLAGS))
|
||||
INSTALL_JAVADOC = $(CLASSES:%.class=$(INSTALL_HTML)/%.html)
|
||||
endif
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Java rules
|
||||
|
||||
all: install
|
||||
|
||||
install: buildInstall
|
||||
|
||||
buildInstall : build
|
||||
|
||||
rebuild: clean install
|
||||
|
||||
inc: $(JAVA_DIRECTORY_TARGETS) $(INSTALL_CLASSES) $(COMMON_JAVAINC)
|
||||
|
||||
build: inc
|
||||
|
||||
build: $(COMMON_TESTCLASSES) $(COMMON_JAR)
|
||||
|
||||
buildInstall : build
|
||||
|
||||
buildInstall : $(INSTALL_JAR)
|
||||
|
||||
install: buildInstall
|
||||
|
||||
rebuild: clean install
|
||||
buildInstall : $(INSTALL_JAR) $(INSTALL_JAVADOC)
|
||||
|
||||
#This clean works only from O.* dirs.
|
||||
clean::
|
||||
@$(RMDIR) $(INSTALL_CLASSES)
|
||||
@$(RM) $(INSTALL_JAR)
|
||||
@$(RM) $(INSTALL_JAR) $(INSTALL_JAVADOC)
|
||||
@$(RM) $(COMMON_TESTCLASSES) $(COMMON_JAR) $(COMMON_JAVAINC)
|
||||
|
||||
$(JAVA_DIRECTORY_TARGETS):
|
||||
@@ -111,6 +119,11 @@ $(INSTALL_CLASSES): $(addprefix ../,$(DEPJAVA))
|
||||
@$(RM) $@
|
||||
$(JAVACCMD) -d $(INSTALL_JAVA) $^
|
||||
|
||||
$(INSTALL_JAVADOC): $(addprefix ../,$(DEPJAVA))
|
||||
@echo Creating java class files
|
||||
@$(RM) $@
|
||||
$(JAVADOCCMD) -d $(INSTALL_JAVA) $^
|
||||
|
||||
$(COMMON_DIR)/%.jar: $(JARDEPFILES)
|
||||
@echo Creating java jar file $@
|
||||
@$(RM) $@
|
||||
@@ -120,3 +133,4 @@ $(INSTALL_JAVA)/%.jar: $(COMMON_DIR)/%.jar
|
||||
@echo "Installing java jar file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
.PHONY: all install buildInstall rebuild clean build inc
|
||||
|
||||
@@ -13,8 +13,11 @@
|
||||
|
||||
include $(CONFIG)/RULES_DIRS
|
||||
|
||||
uninstall$(DIVIDER)%: uninstallDirs
|
||||
@$(RMDIR) $(INSTALL_LOCATION_BIN)/$* $(INSTALL_LOCATION_LIB)/$*
|
||||
uninstallArchTargets = $(foreach arch,$(BUILD_ARCHS), uninstall$(DIVIDER)$(arch))
|
||||
archPart = $(word 2, $(subst $(DIVIDER), ,$@))
|
||||
|
||||
$(uninstallArchTargets): uninstallDirs
|
||||
@$(RMDIR) $(INSTALL_LOCATION_BIN)/$(archPart) $(INSTALL_LOCATION_LIB)/$(archPart)
|
||||
|
||||
cleandirs:
|
||||
@echo " " #stops "nothing to be done for cleandirs" message
|
||||
@@ -67,5 +70,6 @@ help:
|
||||
@echo "Indiv. object targets are supported by O.<arch> level Makefile .e.g"
|
||||
@echo " xxxRecord.o"
|
||||
|
||||
.PHONY : uninstall help cleandirs distclean uninstallDirs realuninstall realclean distclean
|
||||
.PHONY : $(uninstallArchTargets)
|
||||
.PHONY : uninstall help cleandirs distclean uninstallDirs realuninstall
|
||||
|
||||
|
||||
@@ -34,8 +34,9 @@ CCC = $(RTEMS_BASE)/bin/$(CXX)
|
||||
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)
|
||||
RTEMS_LDFLAGS := $(STATIC_LDFLAGS) $(LDFLAGS)
|
||||
LINK.cpp = $(CCC) -o $@ $(RTEMS_LDFLAGS) $(LDFLAGS) $(PROD_LD_OBJS) $(PROD_LD_RESS) $(LDLIBS)
|
||||
|
||||
RANLIB := $(RTEMS_BASE)/bin/$(RANLIB)
|
||||
|
||||
#-------------------------------------------------------
|
||||
@@ -55,7 +56,7 @@ CXXFLAGS = $(CONFORM_CXXFLAGS) $(CROSS_CXXFLAGS) $(OPT_CXXFLAGS)\
|
||||
$(CROSS_CXXFLAGS)
|
||||
|
||||
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(PROD_LDFLAGS)\
|
||||
$(ARCH_DEP_LDFLAGS) $(STATIC_LDFLAGS) $(OP_SYS_LDFLAGS) $(CROSS_LDFLAGS)
|
||||
$(ARCH_DEP_LDFLAGS) $(OP_SYS_LDFLAGS) $(CROSS_LDFLAGS)
|
||||
|
||||
LDLIBS = $(PROD_LDLIBS) $(STATIC_LDLIBS)\
|
||||
$(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(OP_SYS_LDLIBS)
|
||||
@@ -75,8 +76,8 @@ OS_CLASS = RTEMS
|
||||
|
||||
#--------------------------------------------------
|
||||
# Operating system flags
|
||||
OP_SYS_LDLIBS = -lrtemscpu -lrtemsCom -lreadline -lcurses -lm
|
||||
OP_SYS_LDFLAGS = $(CPU_CFLAGS) -u Init \
|
||||
OP_SYS_LDLIBS += -lrtemsCom -lrtemscpu -lCom -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 \
|
||||
@@ -95,6 +96,11 @@ CODE_CXXFLAGS =
|
||||
CONFORM_CFLAGS_STRICT = -ansi
|
||||
CONFORM_CXXFLAGS_STRICT = -ansi
|
||||
|
||||
#--------------------------------------------------
|
||||
# Command-line input support
|
||||
COMMANDLINE_LIBRARY = LIBTECLA
|
||||
LDLIBS_LIBTECLA = -ltecla_r -lncurses
|
||||
|
||||
#--------------------------------------------------
|
||||
# Allow site overrides
|
||||
-include $(CONFIG)/os/CONFIG_SITE.Common.RTEMS
|
||||
|
||||
10
configure/os/CONFIG.Common.RTEMS-mcp750
Normal file
10
configure/os/CONFIG.Common.RTEMS-mcp750
Normal file
@@ -0,0 +1,10 @@
|
||||
#
|
||||
# $Id$
|
||||
# Author: W. Eric Norum
|
||||
# Canadian Light Source
|
||||
# eric@cls.usask.ca
|
||||
#
|
||||
# All RTEMS targets use the same Makefile fragment
|
||||
#
|
||||
RTEMS_TARGET_CPU=ppc
|
||||
include $(CONFIG)/os/CONFIG.Common.RTEMS
|
||||
10
configure/os/CONFIG.Common.RTEMS-psim
Normal file
10
configure/os/CONFIG.Common.RTEMS-psim
Normal file
@@ -0,0 +1,10 @@
|
||||
#
|
||||
# $Id$
|
||||
# Author: W. Eric Norum
|
||||
# University of Saskatchewan
|
||||
# eric.norum@usask.ca
|
||||
#
|
||||
# All RTEMS targets use the same Makefile fragment
|
||||
#
|
||||
RTEMS_TARGET_CPU=ppc
|
||||
include $(CONFIG)/os/CONFIG.Common.RTEMS
|
||||
@@ -62,7 +62,7 @@ OP_SYS_LDLIBS += -lm
|
||||
|
||||
#--------------------------------------------------
|
||||
# Link definitions
|
||||
LINK.cpp = $(CCC) -o $@ $(LDFLAGS) $(PROD_LD_OBJS) $(PROD_LD_RESS) $(LDLIBS)
|
||||
LINK.cpp = $(CCC) -o $@ $(STATIC_LDFLAGS) $(LDFLAGS) $(PROD_LD_OBJS) $(PROD_LD_RESS) $(LDLIBS)
|
||||
LINK.shrlib = $(CCC) -o $@ $(SHRLIB_LDFLAGS) $(LDFLAGS) $(LIBRARY_LD_OBJS) $(LIBRARY_LD_RESS) $(SHRLIB_LDLIBS)
|
||||
|
||||
#--------------------------------------------------
|
||||
|
||||
@@ -25,21 +25,23 @@ OP_SYS_CFLAGS += -fno-common
|
||||
CPPSNCFLAGS += -no-cpp-precomp
|
||||
|
||||
#
|
||||
# Need to get some fink-installed packages (readline, etc.).
|
||||
# If you don't have readline on your system you must remove
|
||||
# or comment out these lines and make the appropriate changes
|
||||
# to src/libCom/osi/os/Darwin/osdReadline.h
|
||||
# Need to get some fink-installed packages
|
||||
#
|
||||
OP_SYS_CPPFLAGS += -I$(FINK_DIR)/include
|
||||
OP_SYS_LDFLAGS += -L$(FINK_DIR)/lib
|
||||
OP_SYS_LDLIBS += -lreadline
|
||||
OP_SYS_LDLIBS +=
|
||||
|
||||
#
|
||||
# Stuff that will be needed when going to shared libraries
|
||||
#
|
||||
SHRLIB_LDFLAGS = -dynamiclib -flat_namespace -undefined suppress \
|
||||
-install_name $(EPICS_BASE)/lib/$(HOST_ARCH)/$@ \
|
||||
-install_name $(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/$@ \
|
||||
-compatibility_version $(EPICS_VERSION).$(EPICS_REVISION) \
|
||||
-current_version $(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)
|
||||
SHRLIB_SUFFIX = $(addprefix .,$(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)).dylib
|
||||
SHRLIB_VERSION = $(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)
|
||||
|
||||
# Command-line input support
|
||||
COMMANDLINE_LIBRARY=LIBTECLA
|
||||
LDLIBS_LIBTECLA = -ltecla_r -lncurses
|
||||
|
||||
|
||||
@@ -13,17 +13,17 @@ include $(CONFIG)/os/CONFIG.Common.UnixCommon
|
||||
OS_CLASS = hpux
|
||||
ARCH_CLASS = parisc
|
||||
|
||||
POSIX_CPPFLAGS_YES = -D_POSIX_C_SOURCE=199506L
|
||||
POSIX_CPPFLAGS_YES = -D_POSIX_C_SOURCE=199506L -D_XOPEN_SOURCE=500
|
||||
POSIX_CPPFLAGS_NO =
|
||||
POSIX_LDLIBS_YES +=
|
||||
POSIX_LDLIBS_NO +=
|
||||
# When compiling with gcc, static builds need two more libraries (*sigh*)
|
||||
POSIX_LDLIBS_GNU_YES_STATIC_YES += -lpthread -l:libdld.sl
|
||||
POSIX_LDLIBS_YES = $(POSIX_LDLIBS_GNU_$(GNU)_STATIC_$(STATIC_BUILD))
|
||||
|
||||
OP_SYS_CPPFLAGS = -D_HPUX_SOURCE -DHP_UX
|
||||
OP_SYS_CFLAGS = +z
|
||||
OP_SYS_CXXFLAGS = +z
|
||||
OP_SYS_LDLIBS += -lpthread
|
||||
|
||||
SHRLIB_SUFFIX = .sl
|
||||
SHARED_LIBRARIES=YES
|
||||
SHRLIB_SUFFIX = .sl$(addprefix .,$(SHRLIB_VERSION))
|
||||
|
||||
ifdef CROSS
|
||||
GNU_TARGET=parisc-hp-unix
|
||||
|
||||
11
configure/os/CONFIG.Common.hpux-parisc-gnu
Normal file
11
configure/os/CONFIG.Common.hpux-parisc-gnu
Normal file
@@ -0,0 +1,11 @@
|
||||
# CONFIG.Common.hpux-parisc-gnu
|
||||
#
|
||||
# $Id$
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for hpux-parisc gnu compiler target archs
|
||||
# Sites may override these definitions in CONFIG_SITE.Common.hpux-parisc-gnu
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Include definitions common to all hpux-parisc target archs
|
||||
include $(CONFIG)/os/CONFIG.Common.hpux-parisc
|
||||
@@ -13,7 +13,7 @@ ARCH_CLASS = mpc82xx
|
||||
|
||||
CODE_CPPFLAGS = -D_REENTRANT
|
||||
|
||||
POSIX_CPPFLAGS_YES = -D_POSIX_C_SOURCE=199506L -D_POSIX_THREADS
|
||||
POSIX_CPPFLAGS_YES = -D_POSIX_C_SOURCE=199506L -D_POSIX_THREADS -D_XOPEN_SOURCE=500
|
||||
POSIX_CPPFLAGS_NO =
|
||||
POSIX_LDLIBS_YES = -lpthread
|
||||
POSIX_LDLIBS_NO =
|
||||
@@ -21,8 +21,8 @@ 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
|
||||
OP_SYS_LDFLAGS +=
|
||||
OP_SYS_LDLIBS = -lrt
|
||||
|
||||
#ARCH_DEP_CPPFLAGS += -D_X86_
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ ARCH_CLASS = x86
|
||||
|
||||
CODE_CPPFLAGS = -D_REENTRANT
|
||||
|
||||
POSIX_CPPFLAGS_YES = -D_POSIX_C_SOURCE=199506L -D_POSIX_THREADS
|
||||
POSIX_CPPFLAGS_YES = -D_POSIX_C_SOURCE=199506L -D_POSIX_THREADS -D_XOPEN_SOURCE=500
|
||||
POSIX_CPPFLAGS_NO =
|
||||
POSIX_LDLIBS_YES = -lpthread
|
||||
POSIX_LDLIBS_NO =
|
||||
@@ -23,12 +23,17 @@ 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
|
||||
OP_SYS_LDFLAGS +=
|
||||
OP_SYS_LDLIBS += -lrt
|
||||
|
||||
ARCH_DEP_CPPFLAGS += -D_X86_
|
||||
ARCH_DEP_CFLAGS += -mcpu=pentium
|
||||
|
||||
# Set runtime path for shared libraries
|
||||
PROD_LDFLAGS_YES += $(sort $(SHRLIB_SEARCH_DIRS:%=-Wl,-rpath,%/lib/$(T_A)))
|
||||
SHRLIB_LDFLAGS_YES += $(sort $(SHRLIB_SEARCH_DIRS:%=-Wl,-rpath,%/lib/$(T_A)))
|
||||
PROD_LDFLAGS += $(PROD_LDFLAGS_$(SHARED_LIBRARIES))
|
||||
|
||||
ifdef CROSS
|
||||
GNU_TARGET=i586-pc-linux-gnu
|
||||
CMPLR_SUFFIX=
|
||||
@@ -36,4 +41,6 @@ ifdef CROSS
|
||||
endif
|
||||
|
||||
#Allow R3.13 built extensions to load R3.14 shared libs
|
||||
SYS_SHRLIB_LIBS += pthread readline curses rt
|
||||
SYS_SHRLIB_LIBS += pthread rt
|
||||
|
||||
|
||||
|
||||
@@ -13,20 +13,22 @@ include $(CONFIG)/os/CONFIG.Common.UnixCommon
|
||||
OS_CLASS = solaris
|
||||
ARCH_CLASS = sparc
|
||||
|
||||
CODE_CPPFLAGS = -D__EXTENSIONS__
|
||||
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
|
||||
SOLARIS_VERSION = $(subst 5.,,$(shell uname -r))
|
||||
|
||||
# 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
|
||||
# Flags for solaris 6
|
||||
POSIX_CPPFLAGS_YES_6 += -D_REENTRANT
|
||||
POSIX_LDLIBS_YES_6 += -lthread
|
||||
|
||||
POSIX_CPPFLAGS_NO =
|
||||
POSIX_CPPFLAGS_YES += -D_POSIX_C_SOURCE=199506L $(POSIX_CPPFLAGS_YES_$(SOLARIS_VERSION))
|
||||
POSIX_CPPFLAGS_YES += -D_XOPEN_SOURCE=500
|
||||
POSIX_LDLIBS_YES += -lposix4 -lpthread $(POSIX_LDLIBS_YES_$(SOLARIS_VERSION))
|
||||
|
||||
POSIX_CPPFLAGS_NO +=
|
||||
POSIX_LDLIBS_NO +=
|
||||
|
||||
OP_SYS_CPPFLAGS = -DSOLARIS=$(subst 5.,,$(shell uname -r))
|
||||
OP_SYS_CPPFLAGS += -DSOLARIS=$(SOLARIS_VERSION)
|
||||
# socket and nsl needed by libca.a
|
||||
OP_SYS_LDLIBS += -lsocket -lnsl
|
||||
|
||||
@@ -40,6 +42,9 @@ ifdef CROSS
|
||||
CMPLR_PREFIX=$(addsuffix -,$(GNU_TARGET))
|
||||
endif
|
||||
|
||||
#Allow R3.13 built extensions to load R3.14 shared libs
|
||||
SYS_SHRLIB_LIBS += posix4 pthread Crun
|
||||
# Lib for solaris 8
|
||||
SYS_SHRLIB_LIBS_8 += Crun
|
||||
|
||||
#Allow R3.13 built extensions to load R3.14 shared libs
|
||||
SYS_SHRLIB_LIBS += posix4 pthread $(SYS_SHRLIB_LIBS_$(SOLARIS_VERSION))
|
||||
|
||||
|
||||
@@ -15,28 +15,37 @@ ARCH_CLASS = x86
|
||||
|
||||
CODE_CPPFLAGS = -D__EXTENSIONS__
|
||||
|
||||
# This is the only combination of posix threads flags that works on solaris-sparc with solaris 6
|
||||
#POSIX_CPPFLAGS_YES = -D_REENTRANT -D_POSIX_C_SOURCE=199506L
|
||||
#POSIX_LDLIBS_YES += -lposix4 -lpthread -lthread
|
||||
SOLARIS_VERSION = $(subst 5.,,$(shell uname -r))
|
||||
|
||||
# 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
|
||||
# Flags for solaris 6
|
||||
POSIX_CPPFLAGS_YES_6 += -D_REENTRANT
|
||||
POSIX_LDLIBS_YES_6 += -lthread
|
||||
|
||||
POSIX_CPPFLAGS_NO =
|
||||
POSIX_CPPFLAGS_YES += -D_POSIX_C_SOURCE=199506L $(POSIX_CPPFLAGS_YES_$(SOLARIS_VERSION))
|
||||
POSIX_CPPFLAGS_YES += -D_XOPEN_SOURCE=500
|
||||
POSIX_LDLIBS_YES += -lposix4 -lpthread $(POSIX_LDLIBS_YES_$(SOLARIS_VERSION))
|
||||
|
||||
POSIX_CPPFLAGS_NO +=
|
||||
POSIX_LDLIBS_NO +=
|
||||
|
||||
OP_SYS_CPPFLAGS = -DSOLARIS=$(subst 5.,,$(shell uname -r))
|
||||
OP_SYS_CPPFLAGS += -DSOLARIS=$(SOLARIS_VERSION)
|
||||
ARCH_DEP_CPPFLAGS = -D_X86_
|
||||
# socket and nsl needed by libca.a
|
||||
OP_SYS_LDLIBS += -lsocket -lnsl
|
||||
|
||||
# -R does not work unless full path names are specified
|
||||
# use loader's -R option
|
||||
#PROD_LDFLAGS += $(sort $(DEPLIB_DIRS:%=-R%))
|
||||
|
||||
ifdef CROSS
|
||||
GNU_TARGET=x86-sun-solaris2
|
||||
CMPLR_SUFFIX=
|
||||
CMPLR_PREFIX=$(addsuffix -,$(GNU_TARGET))
|
||||
endif
|
||||
|
||||
#Allow R3.13 built extensions to load R3.14 shared libs
|
||||
SYS_SHRLIB_LIBS += posix4 pthread Crun
|
||||
# Lib for solaris 8
|
||||
SYS_SHRLIB_LIBS_8 += Crun
|
||||
|
||||
#Allow R3.13 built extensions to load R3.14 shared libs
|
||||
SYS_SHRLIB_LIBS += posix4 pthread $(SYS_SHRLIB_LIBS_$(SOLARIS_VERSION))
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ ARCH_CLASS = x86
|
||||
|
||||
CODE_CPPFLAGS = -D__EXTENSIONS__
|
||||
|
||||
POSIX_CPPFLAGS_YES = -D_POSIX_C_SOURCE=199506L
|
||||
POSIX_CPPFLAGS_YES = -D_POSIX_C_SOURCE=199506L -D_XOPEN_SOURCE=500
|
||||
POSIX_LDLIBS_YES += -lpthread -lthread
|
||||
POSIX_CPPFLAGS_NO =
|
||||
POSIX_LDLIBS_NO +=
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
# $Id$
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for vxWorks-ppc604 target archs
|
||||
# Sites may override these definitions in CONFIG_SITE.Common.vxWorks-ppc604
|
||||
# Definitions for vxWorks-ppc603 target archs
|
||||
# Sites may override these definitions in CONFIG_SITE.Common.vxWorks-ppc603
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Include definitions common to all vxWorks target archs
|
||||
|
||||
21
configure/os/CONFIG.Common.vxWorks-ppc603_long
Normal file
21
configure/os/CONFIG.Common.vxWorks-ppc603_long
Normal file
@@ -0,0 +1,21 @@
|
||||
# CONFIG.Common.vxWorks-ppc603_long
|
||||
#
|
||||
# $Id$
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for vxWorks-ppc603 target archs with at least 32MB
|
||||
# Sites may override these definitions in CONFIG_SITE.Common.vxWorks-ppc603_long
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Include definitions common to all vxWorks target archs
|
||||
include $(CONFIG)/os/CONFIG.Common.vxWorksCommon
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = ppc
|
||||
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=PPC603
|
||||
ARCH_DEP_CFLAGS = -mcpu=603 -mstrict-align -mlongcall
|
||||
|
||||
@@ -16,6 +16,6 @@ CMPLR_SUFFIX = ppc
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=PPC604
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=PPC604
|
||||
ARCH_DEP_CFLAGS = -mcpu=604 -mstrict-align
|
||||
|
||||
|
||||
21
configure/os/CONFIG.Common.vxWorks-ppc604_long
Normal file
21
configure/os/CONFIG.Common.vxWorks-ppc604_long
Normal file
@@ -0,0 +1,21 @@
|
||||
# CONFIG.Common.vxWorks-ppc604_long
|
||||
#
|
||||
# $Id
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for vxWorks-ppc604 target archs with at least 32MB
|
||||
# Sites may override these definitions in CONFIG_SITE.Common.vxWorks-ppc604_long
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Include definitions common to all vxWorks target archs
|
||||
include $(CONFIG)/os/CONFIG.Common.vxWorksCommon
|
||||
|
||||
# Vx GNU cross compiler suffix
|
||||
CMPLR_SUFFIX = ppc
|
||||
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
# Architecture specific build flags
|
||||
ARCH_DEP_CPPFLAGS = -DCPU=PPC604
|
||||
ARCH_DEP_CFLAGS = -mcpu=604 -mstrict-align -mlongcall
|
||||
|
||||
@@ -79,13 +79,18 @@ NM = $(GNU_BIN)/$(CMPLR_PREFIX)nm$(CMPLR_SUFFIX)$(HOSTEXE)
|
||||
export WIND_BASE = $(VX_DIR)
|
||||
export WIND_HOST_TYPE
|
||||
|
||||
#--------------------------------------------------
|
||||
# Tornado2.2
|
||||
# The follow export allows vxWorks.h to include gnu header files
|
||||
export TOOL_FAMILY = GNU
|
||||
|
||||
#--------------------------------------------------
|
||||
# Operating system flags
|
||||
OP_SYS_CPPFLAGS = -DvxWorks
|
||||
OP_SYS_CFLAGS = -fno-builtin
|
||||
#OP_SYS_CFLAGS = -fno-builtin -fdollars-in-identifiers
|
||||
OP_SYS_LDFLAGS =
|
||||
OP_SYS_LDLIBS =
|
||||
OP_SYS_CPPFLAGS += -DvxWorks
|
||||
OP_SYS_CFLAGS += -fno-builtin
|
||||
#OP_SYS_CFLAGS += -fno-builtin -fdollars-in-identifiers
|
||||
OP_SYS_LDFLAGS +=
|
||||
OP_SYS_LDLIBS +=
|
||||
|
||||
# Fix for vxWorks headers using macros defined in
|
||||
# vxWorks.h but not including vxWorks.h
|
||||
@@ -112,7 +117,12 @@ OSITHREAD_USE_DEFAULT_STACK = NO
|
||||
|
||||
#--------------------------------------------------
|
||||
# Link definitions
|
||||
LINK.cpp = $(LD) -o $@ $(LDFLAGS) $(PROD_LD_OBJS) $(PROD_LD_RESS) $(LDLIBS)
|
||||
LINK.cpp = $(LD) -o $@ $(STATIC_LDFLAGS) $(LDFLAGS) $(PROD_LD_OBJS) $(PROD_LD_RESS) $(LDLIBS)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Definitions for compile of *_ctdt.c file
|
||||
CFLAGS_ctdt = $(filter-out -pedantic,$(CFLAGS)) -fdollars-in-identifiers
|
||||
COMPILE.ctdt = $(CC) -c $(CPPFLAGS) $(CFLAGS_ctdt) $(call PATH_FILTER,$(INCLUDES)) $(SOURCE_FLAG)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Allow site overrides
|
||||
|
||||
@@ -15,16 +15,15 @@ ARCH_CLASS = x86
|
||||
|
||||
EXE=.exe
|
||||
|
||||
POSIX_CPPFLAGS_YES = -D_POSIX_SOURCE=199506L -D_POSIX_THREADS
|
||||
POSIX_CPPFLAGS_YES = -D_POSIX_SOURCE=199506L -D_POSIX_THREADS -D_POSIX_TIMERS
|
||||
POSIX_CPPFLAGS_NO =
|
||||
#####POSIX_LDLIBS_YES = -lpthread
|
||||
#####POSIX_LDLIBS_YES = -lthread
|
||||
#POSIX_LDLIBS_YES += -lpthread
|
||||
POSIX_LDLIBS_NO =
|
||||
|
||||
# -D_BSD_SOURCE for gethostname() in unistd.h as needed by cacChannelIO.cpp.
|
||||
OP_SYS_CPPFLAGS += -DCYGWIN32 -U_WIN32
|
||||
OP_SYS_LDFLAGS =
|
||||
####OP_SYS_LDLIBS = -lreadline -lcurses -lrt
|
||||
|
||||
ARCH_DEP_CPPFLAGS += -D_X86_
|
||||
|
||||
OP_SYS_CPPFLAGS += -DCYGWIN32 -U_WIN32
|
||||
OP_SYS_LDFLAGS +=
|
||||
OP_SYS_LDLIBS +=
|
||||
####OP_SYS_LDLIBS += -lrt
|
||||
|
||||
|
||||
@@ -21,7 +21,14 @@ CODE_CFLAGS =
|
||||
CODE_CXXFLAGS =
|
||||
|
||||
#
|
||||
# -O3 is too agressive on Darwin with the April, 2002 Developer Tools
|
||||
# -O3 is too agressive on Darwin with the April 2002 Developer Tools
|
||||
# and causes problems with undefined references to non-virtual thunks
|
||||
# with the August 2002 Developer Tools.
|
||||
#
|
||||
OPT_CFLAGS_YES = -O2
|
||||
OPT_CXXFLAGS_YES = -O2
|
||||
|
||||
#
|
||||
# Static linking fails on OS X (missing crt0.o)
|
||||
#
|
||||
STATIC_LDFLAGS_YES =
|
||||
|
||||
12
configure/os/CONFIG.hpux-parisc-gnu.Common
Normal file
12
configure/os/CONFIG.hpux-parisc-gnu.Common
Normal file
@@ -0,0 +1,12 @@
|
||||
# CONFIG.hpux-parisc-gnu.Common
|
||||
#
|
||||
# $Id$
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for hpux-parisc gnu compiler host builds
|
||||
# Sites may override these definitions in CONFIG_SITE.hpux-parisc-gnu.Common
|
||||
#-------------------------------------------------------
|
||||
|
||||
#Include definitions common to hpux-parisc hosts
|
||||
include $(CONFIG)/os/CONFIG.hpux-parisc.Common
|
||||
|
||||
21
configure/os/CONFIG.hpux-parisc-gnu.hpux-parisc-gnu
Normal file
21
configure/os/CONFIG.hpux-parisc-gnu.hpux-parisc-gnu
Normal file
@@ -0,0 +1,21 @@
|
||||
# CONFIG.hpux-parisc-gnu.hpux-parisc-gnu
|
||||
#
|
||||
# $Id$
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for hpux-parisc gnu compiler host - hpux-parisc gnu compiler target builds
|
||||
# Sites may override these definitions in CONFIG_SITE.hpux-parisc-gnu.hpux-parisc-gnu
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Include common gnu compiler definitions
|
||||
include $(CONFIG)/CONFIG.gnuCommon
|
||||
|
||||
#GNU_DIR = /opt/gnu
|
||||
|
||||
CC = $(GNU_BIN)/gcc
|
||||
CCC = $(GNU_BIN)/g++
|
||||
AR = ar -rc
|
||||
RANLIB=
|
||||
LD = ld -r
|
||||
|
||||
SHRLIB_LDFLAGS_YES += -fPIC
|
||||
@@ -21,7 +21,7 @@ CONFORM_CFLAGS_TRAD = -Ac
|
||||
######################################################
|
||||
# +DAportable causes portable object code to be created for execution
|
||||
# on different PA-Risc machines
|
||||
CODE_CFLAGS = +DAportable
|
||||
CODE_CFLAGS = +DAportable +z
|
||||
WARN_CFLAGS_YES =
|
||||
WARN_CFLAGS_NO = -w
|
||||
OPT_CFLAGS_YES = -O
|
||||
@@ -39,20 +39,18 @@ CONFORM_CXXFLAGS_STRICT = -AA -mt -Aa
|
||||
######################################################
|
||||
# +DAportable causes portable object code to be created for execution
|
||||
# on different PA-Risc machines
|
||||
CODE_CXXFLAGS = +DAportable
|
||||
CODE_CXXFLAGS = +DAportable +z
|
||||
WARN_CXXFLAGS_YES = +w
|
||||
WARN_CXXFLAGS_NO =
|
||||
OPT_CXXFLAGS_YES = +O3
|
||||
OPT_CXXFLAGS_NO = -g
|
||||
|
||||
STATIC_LDFLAGS_YES= -Wl,-a,archive -l:libc.sl +A
|
||||
STATIC_LDFLAGS_YES= -Wl,-a,archive -l:libc.sl
|
||||
# shared libs will be found by searching environment variable SHLIB_PATH,
|
||||
# then by searching the specified path (see below)
|
||||
STATIC_LDFLAGS_YES+= -b
|
||||
STATIC_LDFLAGS_NO = -Wl,+b$(DEFAULT_SHRLIB_SEARCH_PATH),+s
|
||||
STATIC_LDLIBS_YES=
|
||||
STATIC_LDLIBS_NO=
|
||||
TARGET_LDFLAGS += -AA -mt
|
||||
|
||||
SHRLIB_LDFLAGS_YES = -G -h $@
|
||||
|
||||
SHRLIB_LDFLAGS_YES = -b
|
||||
|
||||
@@ -18,3 +18,10 @@ AR = ar -rc
|
||||
RANLIB=
|
||||
LD = ld -r
|
||||
|
||||
STATIC_LDFLAGS_YES= -Bstatic
|
||||
STATIC_LDFLAGS_NO=
|
||||
STATIC_LDLIBS_YES= -Bdynamic
|
||||
STATIC_LDLIBS_NO=
|
||||
|
||||
#SHRLIB_LDFLAGS_YES = -G -h $@ -z ignore -z combreloc -z lazyload
|
||||
|
||||
|
||||
@@ -11,8 +11,6 @@ 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
|
||||
@@ -20,15 +18,15 @@ CPP = gcc -x c -E
|
||||
RANLIB =
|
||||
|
||||
#Prepare the object code for profiling with prof. (YES or NO)
|
||||
PROFILE=YES
|
||||
PROFILE=NO
|
||||
|
||||
# Configure OS vendor C compiler
|
||||
CONFORM_CFLAGS_ANSI = -Xa -v
|
||||
CONFORM_CFLAGS_STRICT = -Xc -v
|
||||
CONFORM_CFLAGS_TRAD = -Xs
|
||||
PROF_CFLAGS_YES =
|
||||
PROF_CFLAGS_YES = -p
|
||||
PROF_CFLAGS_NO =
|
||||
CODE_CFLAGS = -KPIC $(PROF_CFLAGS_$(PROFILE))
|
||||
CODE_CFLAGS = -KPIC $(PROF_CFLAGS_$(PROFILE))
|
||||
WARN_CFLAGS_YES =
|
||||
WARN_CFLAGS_NO = -w
|
||||
OPT_CFLAGS_YES = -xO4
|
||||
@@ -37,7 +35,7 @@ OPT_CFLAGS_NO = -g
|
||||
# Configure OS vendor C++ compiler
|
||||
CONFORM_CXXFLAGS_NORMAL =
|
||||
CONFORM_CXXFLAGS_STRICT =
|
||||
PROF_CXXFLAGS_YES = +p
|
||||
PROF_CXXFLAGS_YES = -p
|
||||
PROF_CXXFLAGS_NO =
|
||||
CODE_CXXFLAGS = -KPIC $(PROF_CXXFLAGS_$(PROFILE))
|
||||
WARN_CXXFLAGS_YES = +w
|
||||
|
||||
@@ -21,13 +21,13 @@ AR = $(CCC) -xar -o
|
||||
LD = ld -r
|
||||
|
||||
#Prepare the object code for profiling with prof. (YES or NO)
|
||||
PROFILE=YES
|
||||
PROFILE=NO
|
||||
|
||||
# Configure OS vendor C compiler
|
||||
CONFORM_CFLAGS_ANSI = -Xa -v
|
||||
CONFORM_CFLAGS_STRICT = -Xc -v
|
||||
CONFORM_CFLAGS_TRAD = -Xs
|
||||
PROF_CFLAGS_YES =
|
||||
PROF_CFLAGS_YES = -p
|
||||
PROF_CFLAGS_NO =
|
||||
CODE_CFLAGS = -KPIC $(PROF_CFLAGS_$(PROFILE))
|
||||
WARN_CFLAGS_YES =
|
||||
@@ -36,9 +36,9 @@ OPT_CFLAGS_YES = -xO4
|
||||
OPT_CFLAGS_NO = -g
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
CONFORM_CXXFLAGS_NORMAL =
|
||||
CONFORM_CXXFLAGS_STRICT =
|
||||
PROF_CXXFLAGS_YES = +p
|
||||
CONFORM_CXXFLAGS_NORMAL =
|
||||
CONFORM_CXXFLAGS_STRICT =
|
||||
PROF_CXXFLAGS_YES = -p
|
||||
PROF_CXXFLAGS_NO =
|
||||
CODE_CXXFLAGS = -KPIC $(PROF_CXXFLAGS_$(PROFILE))
|
||||
WARN_CXXFLAGS_YES = +w
|
||||
|
||||
@@ -65,7 +65,7 @@ CONFORM_CFLAGS_TRAD =
|
||||
# -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-
|
||||
|
||||
@@ -115,7 +115,9 @@ endif
|
||||
# -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-8026 Functions with exception specifications are not expanded inline
|
||||
#
|
||||
WARN_CXXFLAGS_YES = -w -g0 -w-8012 -w-8060 -w-8071 -w-8008 -w-8027 -w-8066 -w-8080 -w-8004 -w-8026
|
||||
# -w- display warnings off
|
||||
WARN_CXXFLAGS_NO = -w-
|
||||
|
||||
@@ -136,8 +138,7 @@ OPT_CXXFLAGS_NO =
|
||||
#
|
||||
STATIC_LDLIBS_YES=
|
||||
STATIC_LDLIBS_NO=
|
||||
|
||||
PROD_VERSION=3.13
|
||||
|
||||
# -c case sensitive linking
|
||||
# -C clear state before linking
|
||||
# -Gi generate import library
|
||||
@@ -262,7 +263,7 @@ LDFLAGS += -c -C -Gn -Tpe -x -w -L$(BORLAND_LIB) -L$(BORLAND_LIB)\\Psdk
|
||||
LINKSTARTUP = c0x32.obj
|
||||
LINKLIBS=import32.lib cw32$(LIBSUF).lib
|
||||
|
||||
LINK.cpp = $(WINLINK) $(LDFLAGS) $(LINKSTARTUP) $(subst /,\\,$(PROD_LD_OBJS))
|
||||
LINK.cpp = $(WINLINK) $(STATIC_LDFLAGS) $(LDFLAGS) $(LINKSTARTUP) $(subst /,\\,$(PROD_LD_OBJS))
|
||||
LINK.cpp += , $@ ,,$(LINKLIBS) $(subst /,\\,$(LDLIBS))
|
||||
|
||||
#--------------------------------------------------
|
||||
|
||||
@@ -12,8 +12,12 @@ include $(CONFIG)/CONFIG.gnuCommon
|
||||
## Shared libraries for cygwin not implemented yet
|
||||
SHARED_LIBRARIES=NO
|
||||
|
||||
CC = $(GNU_BIN)/gcc
|
||||
CCC = $(GNU_BIN)/g++
|
||||
# cygwin's gcc, g++, ar, ld, and ranlib must be in user's path
|
||||
CC = gcc
|
||||
CCC = g++
|
||||
AR = ar -rc
|
||||
LD = ld -r
|
||||
RANLIB = ranlib
|
||||
|
||||
CODE_CFLAGS =
|
||||
CODE_CXXFLAGS =
|
||||
|
||||
@@ -54,7 +54,7 @@ WARN_CFLAGS_NO = /W1
|
||||
# /Ox maximum optimizations
|
||||
# /MD use MSVCRT (run-time as DLL, multi-thread support)
|
||||
# /GL whole program optimization
|
||||
OPT_CFLAGS_YES = /Ox /GL
|
||||
OPT_CFLAGS_YES = /Ox /GL
|
||||
|
||||
#
|
||||
# /Zi generate program database for debugging information
|
||||
@@ -116,7 +116,7 @@ WARN_CXXFLAGS_NO = /W1
|
||||
#
|
||||
# /Ox maximum optimizations
|
||||
# /GL whole program optimization
|
||||
OPT_CXXFLAGS_YES = /Ox /GL
|
||||
OPT_CXXFLAGS_YES = /Ox /GL
|
||||
|
||||
#
|
||||
# /Zi generate program database for debugging information
|
||||
@@ -265,11 +265,11 @@ SHRLIB_LDLIBS = $(DLL_DEPLIBS) $($*_SYS_DLL_LIBS:%=%.lib) \
|
||||
|
||||
#--------------------------------------------------
|
||||
# Linker definition
|
||||
LINK.cpp = $(WINLINK) -nologo $(LDFLAGS) -out:$@ $(PROD_LD_OBJS) $(PROD_LD_RESS) $(LDLIBS)
|
||||
LINK.cpp = $(WINLINK) -nologo $(STATIC_LDFLAGS) $(LDFLAGS) -out:$@ \
|
||||
$(PROD_LD_OBJS) $(PROD_LD_RESS) $(LDLIBS)
|
||||
|
||||
|
||||
#--------------------------------------------------
|
||||
|
||||
# override of CONFIG_SITE
|
||||
SHARED_LIBRARIES = YES
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ ARCH_solaris = solaris-sparc
|
||||
ARCH_solarisGnu = solaris-sparc-gnu
|
||||
ARCH_sun4 = sun4-sparc
|
||||
ARCH_Linux = linux-x86
|
||||
ARCH_Darwin = darwin-ppc
|
||||
ARCH_WIN32 = win32-x86
|
||||
ARCH_hp700 = hpux-parisc
|
||||
ARCH_alpha = osf-alpha
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
#
|
||||
# Site-specific overrides for RTEMS-pc386 target
|
||||
#
|
||||
#TARGET_CFLAGS += -DEPICS_RTEMS_NIC_3C509
|
||||
TARGET_CFLAGS += -DEPICS_RTEMS_NIC_EEPRO
|
||||
|
||||
25
configure/os/CONFIG_SITE.Common.linux-x86
Normal file
25
configure/os/CONFIG_SITE.Common.linux-x86
Normal file
@@ -0,0 +1,25 @@
|
||||
# CONFIG_SITE.Common.linux-x86
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Site Specific definitions for linux-x86 target
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# NOTE for SHARED_LIBRARIES: If YES then either
|
||||
# a) LD_LIBRARY_PATH must include the full absolute pathname to
|
||||
# $(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH) when invoking base
|
||||
# executables.
|
||||
# b) Add the path to SHRLIB_SEARCH_DIRS below, which will burn
|
||||
# the runtime search path into the executables.
|
||||
# c) the full pathname above can be added to /etc/ld.so.conf
|
||||
# and ldconfig run to inform the system of the shared libraries.
|
||||
SHARED_LIBRARIES=YES
|
||||
|
||||
# This is the absolute path to INSTALL_LOCATION, for SHARED_LIBRARY searches.
|
||||
#SHRLIB_SEARCH_DIRS += /usr/local/epics/R3.14.1/base
|
||||
|
||||
# If readline is installed uncomment the following lines
|
||||
# to get command-line editing and history support
|
||||
#COMMANDLINE_LIBRARY = READLINE
|
||||
#LDLIBS_READLINE = -lreadline -lncurses
|
||||
|
||||
30
configure/os/CONFIG_SITE.hpux-parisc.hpux-parisc
Normal file
30
configure/os/CONFIG_SITE.hpux-parisc.hpux-parisc
Normal file
@@ -0,0 +1,30 @@
|
||||
# CONFIG_SITE.hpux-parisc.hpux-parisc
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Site Specific Configuration Information
|
||||
# Only the local epics system manager should modify this file
|
||||
|
||||
# by default, build and use shared libraries
|
||||
SHARED_LIBRARIES=YES
|
||||
|
||||
# where we expect to find shared libraries if not found elsewhere
|
||||
# No special action should be required to build or use shared libraries.
|
||||
# However, when a new shared library is built using the above configuration,
|
||||
# it should be copied into the location specified by DEFAULT_SHRLIB_SEARCH_PATH
|
||||
# which in this specific case is: /cs/lib/R3.13.1.1/
|
||||
|
||||
# JLab version
|
||||
#DEFAULT_SHRLIB_SEARCH_PATH = /cs/lib/R$(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION).$(EPICS_UPDATE_NAME)$(EPICS_UPDATE_LEVEL):$(INSTALL_LIB)
|
||||
|
||||
# BESSY version
|
||||
DEFAULT_SHRLIB_SEARCH_PATH = /opt/epics/R$(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)/support/base/$(EPICS_VERSION)-$(EPICS_REVISION)-$(EPICS_MODIFICATION)-$(EPICS_UPDATE_NAME)$(EPICS_UPDATE_LEVEL)/lib/hpux-parisc
|
||||
|
||||
# cal added this so that libraries can be built with position
|
||||
# independent code even if shared libraries aren't being built.
|
||||
# Otherwise you would have to recompile everything when switching from
|
||||
# static to shared.
|
||||
ifeq ($(RELOCATABLE), YES)
|
||||
ARCH_DEP_CFLAGS += +z
|
||||
ARCH_DEP_CXXFLAGS += +z
|
||||
endif
|
||||
@@ -5,15 +5,7 @@
|
||||
#
|
||||
# Site override definitions for linux-x86 host builds
|
||||
#-------------------------------------------------------
|
||||
|
||||
|
||||
# JBA test override values
|
||||
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040 solaris-sparc
|
||||
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040
|
||||
|
||||
# NOTE: If YES then LD_LIBRARY_PATH must include the full
|
||||
# pathname $(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH) for
|
||||
# both the base # build and when invoking base executables.
|
||||
# Alternatively the full pathname can be added to /etc/ld.so.conf
|
||||
# and ldconfig run to inform the system of the shared libraries.
|
||||
SHARED_LIBRARIES=YES
|
||||
|
||||
|
||||
7
configure/os/CONFIG_SITE.linux-x86.linux-x86
Normal file
7
configure/os/CONFIG_SITE.linux-x86.linux-x86
Normal file
@@ -0,0 +1,7 @@
|
||||
# CONFIG_SITE.linux-x86.linux-x86
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Site specific definitions for linux-x86 host - linux-x86 target builds
|
||||
#-------------------------------------------------------
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
# Site override definitions for win32-x86-cygwin host - win32-x86-cygwin target builds
|
||||
#-------------------------------------------------------
|
||||
|
||||
GNU_DIR=C:/cygwin
|
||||
##GNU_DIR=C:/cygwin
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
|
||||
# jba test overrides
|
||||
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-486
|
||||
#CROSS_COMPILER_TARGET_ARCHS+=vxWorks-68040
|
||||
#VX_DIR = T:/tornado20
|
||||
#INSTALL_LOCATION = G:/testInstall
|
||||
#STATIC_BUILD=YES
|
||||
#SHARED_LIBRARIES=NO
|
||||
|
||||
@@ -18,49 +18,67 @@ eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
|
||||
|
||||
while ($line = <STDIN>)
|
||||
{
|
||||
chomp;
|
||||
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);
|
||||
};
|
||||
}
|
||||
|
||||
foreach $ctor (@ctorlist)
|
||||
{
|
||||
printf "void %s();\n",$ctor;
|
||||
if ( $ctor =~ /\./ ) {
|
||||
printf "void %s() __asm__ (\"_%s\");\n",convertName($ctor),$ctor;
|
||||
} else {
|
||||
printf "void %s();\n",$ctor;
|
||||
}
|
||||
}
|
||||
|
||||
print "extern void (*_ctors[])();\n";
|
||||
print "void (*_ctors[])() = {\n";
|
||||
foreach $ctor (@ctorlist)
|
||||
{
|
||||
printf " %s,\n",$ctor;
|
||||
if ( $ctor =~ /\./ ) {
|
||||
printf " %s,\n",convertName($ctor);
|
||||
} else {
|
||||
printf " %s,\n",$ctor;
|
||||
}
|
||||
}
|
||||
print " 0};\n";
|
||||
|
||||
|
||||
foreach $dtor (@dtorlist)
|
||||
{
|
||||
printf "void %s();\n",$dtor;
|
||||
if ( $dtor =~ /\./ ) {
|
||||
printf "void %s() __asm__ (\"_%s\");\n",convertName($dtor),$dtor;
|
||||
} else {
|
||||
printf "void %s();\n",$dtor;
|
||||
}
|
||||
}
|
||||
|
||||
print "extern void (*_ctors[])();\n";
|
||||
print "void (*_dtors[])() = {\n";
|
||||
foreach $dtor (@dtorlist)
|
||||
{
|
||||
printf " %s,\n",$dtor;
|
||||
if ( $dtor =~ /\./ ) {
|
||||
printf " %s,\n",convertName($dtor);
|
||||
} else {
|
||||
printf " %s,\n",$dtor;
|
||||
}
|
||||
}
|
||||
print " 0};\n";
|
||||
|
||||
sub convertName {
|
||||
my ($name) = @_;
|
||||
$name =~ s/\./\$/g;
|
||||
return $name;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
<body>
|
||||
|
||||
<center>
|
||||
<h2>Building EPICS R3.13 applications with R3.14.0beta2 base</h2>
|
||||
<h2>Building EPICS R3.13 applications with R3.14.1 base</h2>
|
||||
</center>
|
||||
|
||||
<p><br>
|
||||
This document describes how to modify a R3.13 vxWorks application so that it
|
||||
builds with release R3.14.0beta2. It describes an easy way to modify
|
||||
builds with release R3.14.1. It describes an easy way to modify
|
||||
applications subject to the following restrictions:</p>
|
||||
<ul>
|
||||
<li>The application still uses config rules rather than the configure rules
|
||||
@@ -69,7 +69,7 @@ however, has a config directory. Makesure that config/RELEASE has the same
|
||||
location for base as configure/RELEASE.</p>
|
||||
|
||||
<p>snc is no longer in base. If snc is used in your application, you must
|
||||
download and build the seq module with baseR3.14.0beta2. See the Application
|
||||
download and build the seq module with baseR3.14.1. See the Application
|
||||
Developer's Guide to see how to build sequence programs.</p>
|
||||
|
||||
<p>If you build sequencer programs add the lines</p>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<body>
|
||||
|
||||
<center>
|
||||
<h2>Building EPICS R3.13 extensions with R3.14.0beta2 base</h2>
|
||||
<h2>Building EPICS R3.13 extensions with R3.14.1 base</h2>
|
||||
</center>
|
||||
|
||||
<p><br>
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
<body>
|
||||
|
||||
<center>
|
||||
<h2>Converting an EPICS R3.13 application to R3.14.0.beta2</h2>
|
||||
<h2>Converting an EPICS R3.13 application to R3.14.1</h2>
|
||||
</center>
|
||||
|
||||
<p><br>
|
||||
This document describes how to convert a R3.13 vxWorks application so that it
|
||||
builds with release R3.14.0beta2. It describes procedures such that:</p>
|
||||
builds with release R3.14.1. It describes procedures such that:</p>
|
||||
<ul>
|
||||
<li>The application uses the configure rules which are new to R3.14.</li>
|
||||
</ul>
|
||||
@@ -49,7 +49,7 @@ If sequence programs (*.st or *.stt files) exist in your application, add the
|
||||
SNCSEQ location definition for the R3.14 seq external module</p>
|
||||
|
||||
<p><tt>SNCSEQ =<full path to seq module top></tt></p>
|
||||
The R3.14 seq module must exist and be built with EPICS base R3.14.0beta2
|
||||
The R3.14 seq module must exist and be built with EPICS base R3.14.1
|
||||
|
||||
<h3>Modify the Makefiles in <top>/*App directories.</h3>
|
||||
|
||||
|
||||
@@ -8,13 +8,23 @@
|
||||
<body>
|
||||
|
||||
<center>
|
||||
<h2>
|
||||
Converting an EPICS R3.14.0 beta1 application to beta2</h2></center>
|
||||
<h2> Converting an EPICS R3.14.0 beta1 application to beta2</h2></center>
|
||||
|
||||
<p><br>This document describes how to convert a R3.14.0beta1 application
|
||||
so that it builds with release R3.14.0beta2.
|
||||
<h3>
|
||||
No changes necessary</h3>
|
||||
|
||||
</body>
|
||||
<h3>Update Unix LD_LIBRARY_PATH</h3>
|
||||
|
||||
If you build EPICS base shared libraries instead of archive
|
||||
libraries on Unix systems you will need to update your
|
||||
LD_LIBRARY_PATH environment variable to include fullpathname
|
||||
to the NEW base $(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH).
|
||||
|
||||
<h3>Update Win32 PATH</h3>
|
||||
|
||||
On WIN32 systems, building shared libraries is the default
|
||||
setting so, unless SHARED_LIBRARIES was changed to NO, you will
|
||||
need to update your path to include fullpathname to the NEW
|
||||
base $(INSTALL_LOCATION)/bin/$(EPICS_HOST_ARCH).
|
||||
|
||||
</html>
|
||||
|
||||
15
documentation/ConvertingR3.14.0beta2AppsToR3.14.1.html
Normal file
15
documentation/ConvertingR3.14.0beta2AppsToR3.14.1.html
Normal file
@@ -0,0 +1,15 @@
|
||||
<!DOCTYPE doctype 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 beta2 application to R3.14.1</h2></center>
|
||||
|
||||
<p><br>This document describes how to convert a R3.14.0beta2 application
|
||||
so that it builds with release R3.14.1.
|
||||
|
||||
</p><h3>No changes required.</h3>
|
||||
|
||||
@@ -5,17 +5,26 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<title>No title</title>
|
||||
<meta name="GENERATOR" content="amaya 5.3, see http://www.w3.org/Amaya/" />
|
||||
<meta name="GENERATOR" content="amaya 5.1" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1 style="text-align: center">EPICS base R3.14.0beta2: Known Problems</h1>
|
||||
<h1 style="text-align: center">EPICS base R3.14.1: Known Problems</h1>
|
||||
|
||||
<h2>vxWorks TIMEZONE pentium</h2>
|
||||
<h3>Known Bugs</h3>
|
||||
|
||||
<p>If the name of the timezone has more than a few characters a crash can
|
||||
occur on pentium vxWorks iocs. See ansiTime in the vxWorks reference manual
|
||||
for details about TIMEZONE.</p>
|
||||
<p>The portable CA server does not work on solaris.</p>
|
||||
|
||||
<h3>To Do Posix</h3>
|
||||
<ul>
|
||||
<li>Currently thread priorities are not turned on, i.e. all threads run at
|
||||
the same priority.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Build Rules</h3>
|
||||
<ul>
|
||||
<li>A SHRLIB_SEARCH_DIRS += should be generated for everything found in
|
||||
configure/RELEASE</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -4,7 +4,7 @@ README
|
||||
|
||||
EPICS base
|
||||
|
||||
Release 3.14.0beta2
|
||||
Release 3.14.1
|
||||
|
||||
What is EPICS base?
|
||||
|
||||
@@ -79,7 +79,7 @@ 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.
|
||||
path so that a gnumake version 3.78.1 or later is available.
|
||||
|
||||
Perl
|
||||
You must have perl version 5.0 or later installed. The configure files do
|
||||
@@ -114,7 +114,7 @@ Host system storage requirements
|
||||
Documentation
|
||||
|
||||
EPICS documentation is available on the WWW via the EPICS home
|
||||
page at APS: URL http://www.aps.anl.gov/Epics
|
||||
page at APS: URL http://www.aps.anl.gov/epics
|
||||
|
||||
This README.1st is in the base distribution file and will be available
|
||||
on the IOC software R3.14 EPICS WWW page which can be accessed
|
||||
@@ -133,8 +133,9 @@ WWW pages
|
||||
|
||||
Mailing Lists
|
||||
|
||||
There are five EPICS mailing lists provided by APS. See The
|
||||
EPICS home page for subscription instructions.
|
||||
There is an EPICS mailing list called tech-talk which is hosted at
|
||||
APS, with a list repeater at BESSY. See The EPICS home page for
|
||||
subscription instructions.
|
||||
|
||||
Directory Structure
|
||||
|
||||
@@ -147,6 +148,7 @@ Directory Structure
|
||||
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/documentation Distributation build documentation
|
||||
base/src All epics base source code in subdirectories
|
||||
base/src/as Access security
|
||||
base/src/bpt Break point table
|
||||
@@ -191,6 +193,7 @@ Directory Structure
|
||||
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/src/RTEMS Code to configure RTEMS for EPICS
|
||||
base/startup Scripts for setting up path and environment
|
||||
|
||||
Install directories created by the build:
|
||||
@@ -201,6 +204,8 @@ Directory Structure
|
||||
base/include Installed header files
|
||||
base/include/os Installed os specific header files
|
||||
base/templates Installed templates
|
||||
base/javalib Installed java class files
|
||||
base/html Installed html documentation
|
||||
|
||||
Build related components
|
||||
|
||||
@@ -211,6 +216,10 @@ Build related components
|
||||
README.cxxTemplates Information about C++ templates in EPICS base
|
||||
README.niCpu030 NI cpu030 specific instructions
|
||||
README.darwin Installation notes for Mac OS X (Darwin)
|
||||
RELEASE_NOTES.html Notes on release changes.
|
||||
KnownProblems.html List of know problems and workarounds.
|
||||
Converting*To*.html Release specific conversion instructions.
|
||||
Building*With*.html Release specific build instructions.
|
||||
|
||||
base/startup directory - contains scripts to set environment and path
|
||||
EpicsHostArch c shell script to set EPICS_HOST_ARCH env variable
|
||||
@@ -234,6 +243,7 @@ Build related components
|
||||
RELEASE Location of external products such as Tornado II
|
||||
RULES Includes appropriate rules file
|
||||
RULES.Db Rules for database and database definition files
|
||||
RULES.ioc Rules for application iocBoot/ioc* directory
|
||||
RULES_ARCHS Definitions and rules for building architectures
|
||||
RULES_BUILD Build and install rules and definitions
|
||||
RULES_DIRS Definitions and rules for building subdirectories
|
||||
@@ -253,11 +263,10 @@ Build related components
|
||||
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
|
||||
filterWarnings.pl Filters warning messages during HP builds.
|
||||
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)
|
||||
@@ -306,12 +315,14 @@ Building EPICS base (Unix and Win32)
|
||||
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.
|
||||
On solaris systems you need uname 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.
|
||||
your LD_LIBRARY_PATH environment variable. On Linux systems,
|
||||
building shared libraries is the default setting.
|
||||
|
||||
Win32 PATH
|
||||
On WIN32 systems, building shared libraries is the default
|
||||
@@ -407,7 +418,7 @@ Example application and extension
|
||||
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.0beta2". The "Example Application" section briefly explains
|
||||
R3.14.1". 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
|
||||
|
||||
58
documentation/README.hpux
Normal file
58
documentation/README.hpux
Normal file
@@ -0,0 +1,58 @@
|
||||
Compiling EPICS and Building IOC Applications on HPUX 11 (hpux-parisc)
|
||||
======================================================================
|
||||
|
||||
Please mail questions, comments, corrections, additional examples, etc.
|
||||
to Ralph.Lange@mail.bessy.de
|
||||
|
||||
NOTE: 3.14 will ONLY compile on HPUX 11 systems. HPUX 10 does not have
|
||||
the necessary thread support and will never ever be supported for
|
||||
EPICS base versions >= 3.14.
|
||||
|
||||
|
||||
Tools needed
|
||||
------------
|
||||
|
||||
o HP's ANSI C compiler (cc)
|
||||
|
||||
For compiling with the HP C++ compiler (hpux-parisc)
|
||||
o Recent version of HP's aCC C++ compiler aCC (we use A.03.39)
|
||||
|
||||
For compiling with GNU g++
|
||||
o GNU g++ >= 2.95 (we use 3.2)
|
||||
|
||||
|
||||
Environment
|
||||
-----------
|
||||
|
||||
Default is compiling with the generic HP aCC compiler. To use the GNU compiler,
|
||||
set the environment variable EPICS_HOST_ARCH to hpux-parisc-gnu before starting
|
||||
to compile base.
|
||||
|
||||
|
||||
Shared Libraries
|
||||
----------------
|
||||
|
||||
Generating shared libraries is supported, suggested and the default.
|
||||
You have to set the appropriate search path variable in
|
||||
../configure/os/CONFIG_SITE.hpux-parisc.hpux-parisc to make shared
|
||||
libraries work properly. (You can always override with setting the
|
||||
SHLIB_PATH environment variable when executiong the binaries.)
|
||||
|
||||
|
||||
Known Problems
|
||||
--------------
|
||||
|
||||
o There is a problem with a CA client not detecting a network
|
||||
connection going down. This only happens with some clients, though.
|
||||
|
||||
o Statically built binaries don't work properly (yet).
|
||||
|
||||
o GNU built binaries don't work properly (yet).
|
||||
|
||||
o The 3.13 compatibility mode isn't thoroughly tested yet.
|
||||
|
||||
|
||||
Please feel free to contact me if you encounter serious problems.
|
||||
|
||||
Enjoy!
|
||||
Ralph
|
||||
@@ -17,7 +17,7 @@ EPICS base</h2></center>
|
||||
|
||||
<center>
|
||||
<h2>
|
||||
Release 3.14.0beta2</h2></center>
|
||||
Release 3.14.1</h2></center>
|
||||
|
||||
<h3>
|
||||
What is EPICS base?</h3>
|
||||
@@ -62,7 +62,8 @@ c++ compiler>)</b>
|
||||
<br><tt>solaris-sparc-gnu</tt>
|
||||
<br><tt>linux-x86</tt>
|
||||
<br><tt>win32-x86</tt>
|
||||
<br><tt>win32-x86-borland</tt></blockquote>
|
||||
<br><tt>win32-x86-borland</tt>
|
||||
<br><tt>darwin-ppc (Mac OS X)</tt></blockquote>
|
||||
</blockquote>
|
||||
|
||||
<blockquote>
|
||||
@@ -98,26 +99,26 @@ in CONFIG_SITE.</blockquote>
|
||||
Software requirements</h3>
|
||||
|
||||
<blockquote><b>GNU make</b>
|
||||
<br>You must use GNU make, gnumake, for any EPICS builds. Set your
|
||||
path so that a gnumake version 3.70 or later is available.
|
||||
<br>You must use GNU make, gnumake, for any EPICS builds. Set your
|
||||
path so that a gnumake version 3.78.1 or later is available.
|
||||
<p><b>Perl</b>
|
||||
<br>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
|
||||
do not specify the perl full pathname. You need the perl executable
|
||||
in your search path.
|
||||
<p><b>Unzip and tar (Winzip on WIN32 systems)</b>
|
||||
<br>You must have tools available to unzip and untar the EPICS base distribution
|
||||
file.
|
||||
<p><b>Tornado 2.0</b>
|
||||
<br>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
|
||||
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.
|
||||
<p><b>Optional GNU compiler requirement for solaris-sparc and win32-x86
|
||||
<p><b>Optional GNU compiler requirement for solaris-sparc and win32-x86
|
||||
hosts</b>
|
||||
<br>If you have state notation language source files (*.st files) which
|
||||
require c preprocessing before conversion to c source, gcc must be
|
||||
require c preprocessing before conversion to c source, gcc must be
|
||||
in your path.</blockquote>
|
||||
|
||||
<h3>
|
||||
@@ -132,7 +133,7 @@ files for each target take approximately 10 MB.</blockquote>
|
||||
Documentation</h3>
|
||||
|
||||
<blockquote>EPICS documentation is available on the WWW via the EPICS home
|
||||
page at APS: URL <a href="http://www.aps.anl.gov/epics">http://www.aps.anl.gov/epics</a></blockquote>
|
||||
page at APS: URL <a href="http://www.aps.anl.gov/epics">http://www.aps.anl.gov/epics</a></blockquote>
|
||||
|
||||
<blockquote>This README.html is in the base distribution file and will be
|
||||
available on the IOC software R3.14 EPICS WWW page which can be accessed
|
||||
@@ -154,11 +155,11 @@ Other WWW sites</h4>
|
||||
other WWW links on the EPICS home page at APS.</blockquote>
|
||||
|
||||
<h4>
|
||||
Mailing Lists</h4>
|
||||
Mailing List</h4>
|
||||
|
||||
<blockquote>There are five EPICS mailing lists provided by APS. See The
|
||||
EPICS home page for subscription instructions.</blockquote>
|
||||
</blockquote>
|
||||
<blockquote>There is an EPICS mailing list called tech-talk which is hosted at
|
||||
APS with a list repeater at BESSY. See The EPICS home page for subscription
|
||||
instructions.</blockquote> </blockquote>
|
||||
|
||||
<h3>
|
||||
Directory Structure</h3>
|
||||
@@ -427,10 +428,10 @@ 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 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
|
||||
<br>On WIN32, some versions of Perl require that the environment
|
||||
variable PERLLIB be set to <perl directory location>.</blockquote>
|
||||
|
||||
<blockquote><b>PATH</b>
|
||||
@@ -439,14 +440,16 @@ 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.
|
||||
and the c compiler may require ld in your path. On solaris systems you
|
||||
need uname 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)
|
||||
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 linux systems, building shared libraries is the default setting.
|
||||
<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)
|
||||
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>
|
||||
@@ -479,7 +482,7 @@ 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 must modify the default definitions in the base/config/CONFIG_SITE*
|
||||
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>
|
||||
|
||||
@@ -495,7 +498,7 @@ 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.
|
||||
<br>It is recommended that you do a "gnumake clean uninstall" at the root
|
||||
directory of an EPICS directory structure before each complete rebuild
|
||||
directory of an EPICS directory structure before each complete rebuild
|
||||
to ensure that all components will be rebuilt.</blockquote>
|
||||
</blockquote>
|
||||
|
||||
@@ -530,7 +533,7 @@ during the base build.</blockquote>
|
||||
|
||||
<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.0beta2".
|
||||
for 3.14", in the "IOC Application Developer's Guide R3.14.1".
|
||||
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
|
||||
|
||||
@@ -9,11 +9,119 @@
|
||||
<body lang="en">
|
||||
|
||||
<center>
|
||||
<h1>EPICS Release base 3.14.0beta2</h1>
|
||||
<h1>EPICS Release base 3.14.1</h1>
|
||||
|
||||
<h1>Aug 01 2002</h1>
|
||||
<h1>Dec 20 2002</h1>
|
||||
|
||||
<h2>Changes since beta2</h2>
|
||||
</center>
|
||||
|
||||
<p><strong>function - New Database Definition Keyword</strong></p>
|
||||
|
||||
<p>dbStaticLib and related programs now accept a new keyword in DBD files:</p>
|
||||
<pre>function(name)</pre>
|
||||
|
||||
<p>Where '<span style="font-family: courier">name</span>' is the name of a
|
||||
function with "C" linkage that is included in the IOC binary. This function
|
||||
will be automatically registered with the registry at the same time as the
|
||||
record/device/driver tables, and is intended to make using subroutine records
|
||||
much easier on non-vxWorks systems.. Prior R3.14 releases required there to
|
||||
be a static registration routine for such subroutines.</p>
|
||||
|
||||
<p>dbStaticLib has two additional routines to support this, dbDumpFunction()
|
||||
and dbWriteFunctionFP(). dbDumpFunction has been added to the iocsh command
|
||||
table.</p>
|
||||
|
||||
<p><strong>iocsh</strong></p>
|
||||
|
||||
<p>When executing commands from a script file, iocsh now echoes each command
|
||||
to the terminal before execution. This makes it much easier to see where
|
||||
errors are being reported.</p>
|
||||
|
||||
<p><strong>Solaris build requirement</strong></p>
|
||||
|
||||
<p><span style="font-family: courier">uname</span> must be defined for builds
|
||||
on solaris hosts because it is used to determine the solaris version.</p>
|
||||
|
||||
<p><strong>Linux build note</strong></p>
|
||||
|
||||
<p>Under linux-x86 only, when SHARED_LIBRARIES=YES it is now possible to have
|
||||
one or more directory paths burned into products as run-time locations for
|
||||
the shared libraries. In configure/os/CONFIG_SITE.Common.linux-x86 add any
|
||||
such absolute paths to the new make variable SHRLIB_SEARCH_DIRS
|
||||
(lib/<arch> will be automatically appended to each directory given).</p>
|
||||
|
||||
<p><strong>RULES.Db</strong></p>
|
||||
|
||||
<p>A <span style="font-family: courier">*[</span><span
|
||||
style="font-family: courier">nn</span><span
|
||||
style="font-family: courier">].</span><span
|
||||
style="font-family: courier">db</span> file will be created from an <span
|
||||
style="font-family: courier">*.template</span> and a <span
|
||||
style="font-family: courier">*[nn].substitutions</span> file ,where <span
|
||||
style="font-family: courier">nn</span> has a value between 0 and 99.</p>
|
||||
|
||||
<p><strong>Support for 64 bit long</strong></p>
|
||||
|
||||
<p>Many changes were made to support architectures on which a long is a 64
|
||||
bit integer. The basic change was to change:</p>
|
||||
<ul>
|
||||
<li>long => epicsInt32 for anything that might get transfered to/from
|
||||
network buffers</li>
|
||||
<li>unsigned long => epicsUInt32 for anything that might get transfered
|
||||
to/from network buffers</li>
|
||||
</ul>
|
||||
|
||||
<p>The changes include the following:</p>
|
||||
<ul>
|
||||
<li>cvtFast</li>
|
||||
<li>xxxRecord.h NOTE: In addition to the changes for long all enum fields
|
||||
are now epicsEnum16</li>
|
||||
<li>dbStaticLib</li>
|
||||
<li>db_access</li>
|
||||
<li>dbConvert and dbFastLinkConv</li>
|
||||
</ul>
|
||||
|
||||
<p><strong>Hardware Link Definitions</strong></p>
|
||||
|
||||
<p>The various parts of hardware link definitions now accept HEX values,
|
||||
e.g.</p>
|
||||
<pre>field(INP,"L0 A1 C0 S0xa @")</pre>
|
||||
|
||||
<p>NOTES:</p>
|
||||
<ul>
|
||||
<li>This may not be compatible with Database Configuration Tools</li>
|
||||
<li>If records are written via dbStaticLib the falues will NOT be written
|
||||
in HEX.</li>
|
||||
</ul>
|
||||
|
||||
<p><strong>dbDumpFldDes</strong></p>
|
||||
|
||||
<p>A macro has been defined so that client code can be written that is
|
||||
compatible between 3.13 and 3.14.</p>
|
||||
|
||||
<p><span style="font-weight: bold">epicsMutex for posix</span></p>
|
||||
<ul>
|
||||
<li>No longer supports epicsMutexLockWithTimeout. This was done to allow a
|
||||
more efficient posix implementation.</li>
|
||||
<li>If PTHREAD_MUTEX_RECURSIVE is provided then the implementation uses
|
||||
only pthread_mutex. This is much faster (2 to 3 times as fast) as the
|
||||
previous implementation.</li>
|
||||
</ul>
|
||||
|
||||
<p><strong>Mac OS X</strong></p>
|
||||
|
||||
<p>Now supported as development platform and as IOC.</p>
|
||||
|
||||
<p><strong>RTEMS</strong></p>
|
||||
|
||||
<p>Additional RTEMS-pc386 network drivers are available</p>
|
||||
|
||||
<p><strong>iocsh</strong></p>
|
||||
|
||||
<p>Configurable iocsh command-line editing support (none, readline,
|
||||
libtecla)</p>
|
||||
|
||||
<center>
|
||||
<h2>Changes since beta1</h2>
|
||||
</center>
|
||||
@@ -26,8 +134,8 @@ DCTs.</p>
|
||||
<p><strong>errlog</strong></p>
|
||||
|
||||
<p>errlog no longer contains an atexit that calls errlogFlush. This did not
|
||||
work on all operating systems. cantProceed, iocsh, and ca_task_exit all
|
||||
call errlogFlush. Other applications may also have to call if before
|
||||
work on all operating systems. cantProceed, iocsh, and ca_task_exit all call
|
||||
errlogFlush. Other applications may also have to call if before
|
||||
terminating.</p>
|
||||
|
||||
<p><strong>mbboRecord</strong></p>
|
||||
@@ -47,23 +155,19 @@ to DBF_USHORT.</p>
|
||||
|
||||
<p>epicsTime.h now has the definitions:</p>
|
||||
<pre>#define epicsTimeEventBestTime -1
|
||||
#define epicsTimeEventDeviceTime -2
|
||||
|
||||
</pre>
|
||||
#define epicsTimeEventDeviceTime -2</pre>
|
||||
|
||||
<p>These are values for the TSE field of dbCommon.</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>epicsTimeEventBestTime</strong> means that code supplying the time
|
||||
stamp should get the most accurate time possible. Currently this only has
|
||||
meaning on vxWorks and if drvTS is supplying the time via some hardware
|
||||
timing system. It means get the latest time from the hardware system rather
|
||||
than from the vxWorks tick time. drvTs previously accepted a hardcoded value
|
||||
of -1.</li>
|
||||
|
||||
<li><strong>epicsTimeEventDeviceTime</strong> means that
|
||||
recGblGetTimeStamp doesn't modify the time field.
|
||||
This allows device support to supply the time stamp.</li>
|
||||
<li><strong>epicsTimeEventBestTime</strong> means that code supplying the
|
||||
time stamp should get the most accurate time possible. Currently this
|
||||
only has meaning on vxWorks and if drvTS is supplying the time via some
|
||||
hardware timing system. It means get the latest time from the hardware
|
||||
system rather than from the vxWorks tick time. drvTs previously accepted
|
||||
a hardcoded value of -1.</li>
|
||||
<li><strong>epicsTimeEventDeviceTime</strong> means that recGblGetTimeStamp
|
||||
doesn't modify the time field. This allows device support to supply the
|
||||
time stamp.</li>
|
||||
</ul>
|
||||
|
||||
<p>If the <strong>TSEL</strong> field refers to the <strong>TIME</strong>
|
||||
@@ -173,8 +277,8 @@ in the cdCommands file.</p>
|
||||
|
||||
<p><strong>dbStaticLib</strong></p>
|
||||
|
||||
<p>All routines with Recdes of Fielddes in their name are obsolete and removed.
|
||||
A new routine dbDumpField replaces dbDumpFldDes.</p>
|
||||
<p>All routines with Recdes of Fielddes in their name are obsolete and
|
||||
removed. A new routine dbDumpField replaces dbDumpFldDes.</p>
|
||||
|
||||
<center>
|
||||
<h2>Changes since alpha2</h2>
|
||||
@@ -229,42 +333,42 @@ release.</p>
|
||||
Build modifications in alpha2 require the following changes to existing R3.14
|
||||
applications.
|
||||
<ul>
|
||||
<li> Remove the now unused RULES files</li>
|
||||
<li> Remove the now unused RULES files</li>
|
||||
<li><ul>
|
||||
./configure/RULES.Db <br>
|
||||
./configure/RULES.registerRecordDeviceDriver <br>
|
||||
</ul>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Delete the following line in ./configure/RULES
|
||||
<ul>
|
||||
<br>
|
||||
<br>
|
||||
include $(TOP)/configure/RULES.registerRecordDeviceDriver</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li> In <top>/configure/Makefile change
|
||||
<li> In <top>/configure/Makefile change
|
||||
<ul>
|
||||
<br>
|
||||
<br>
|
||||
@$(PERL) $(TOOLS)/makeConfigAppInclude.pl $(T_A) $@ $(TOP)</ul>
|
||||
</li>
|
||||
to
|
||||
<ul>
|
||||
@$(PERL) $(TOOLS)/makeConfigAppInclude.pl $(EPICS_HOST_ARCH) $(T_A) $@
|
||||
$(TOP) <br>
|
||||
</ul>
|
||||
</ul>
|
||||
and add the line
|
||||
<ul>
|
||||
<br>
|
||||
<br>
|
||||
depends: install <br>
|
||||
</ul>
|
||||
</ul>
|
||||
to the bottom of the Makefile.
|
||||
<ul>
|
||||
</ul>
|
||||
</ul>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>In all *App/*Db/Makefileschange
|
||||
<ul>
|
||||
<br>
|
||||
<br>
|
||||
include $(TOP)/configure/RULES.Db</ul>
|
||||
</li>
|
||||
to
|
||||
@@ -272,62 +376,68 @@ applications.
|
||||
include $(TOP)/configure/RULES</ul>
|
||||
<li>In all *App/src/Makefile files
|
||||
<ul>
|
||||
</ul>
|
||||
</ul>
|
||||
</li>
|
||||
change DBDNAME = <name>App to DBD += <name>
|
||||
change DBDNAME = <name>App
|
||||
to DBD += <name>
|
||||
<ul>
|
||||
</ul>
|
||||
</ul>
|
||||
and remove the line <br>
|
||||
|
||||
|
||||
<ul>
|
||||
DBDEXPAND = <name>Include.dbd <br>
|
||||
</ul>
|
||||
</ul>
|
||||
NOTE: If any of your *App/*Db/Makefiles contain "DBDNAME =" lines you
|
||||
should make these same changes in that *Db dirctory. <br>
|
||||
|
||||
|
||||
<ul>
|
||||
<li>In all *App/src/Makefile Makefiles</li>
|
||||
</ul>
|
||||
<ul>
|
||||
</ul>
|
||||
change RECTYPES=<name>.h to DBDINC+=<name>
|
||||
</ul>
|
||||
change RECTYPES=<name>.h
|
||||
to DBDINC+=<name>
|
||||
<ul>
|
||||
</ul>
|
||||
change MENUS=<name>.h to DBDINC+=<name></ul>
|
||||
</ul>
|
||||
change MENUS=<name>.h
|
||||
to DBDINC+=<name></ul>
|
||||
<ul>
|
||||
change BPTS to DBD
|
||||
change BPTS
|
||||
to DBD
|
||||
|
||||
<p>change INSTALLDB to DB</p>
|
||||
<p>change INSTALLDB
|
||||
to DB</p>
|
||||
|
||||
<p>change DBDINSTALL to DBD <br>
|
||||
</p>
|
||||
<p>change DBDINSTALL
|
||||
to DBD <br>
|
||||
</p>
|
||||
<li>In all example *App/src/Makefile files change
|
||||
<ul>
|
||||
<br>
|
||||
<br>
|
||||
example_SRCS_DEFAULT += registerRecordDeviceDriver.c</ul>
|
||||
</li>
|
||||
to
|
||||
<ul>
|
||||
example_SRCS_DEFAULT += <name>_registerRecordDeviceDriver.cpp <br>
|
||||
</ul>
|
||||
</ul>
|
||||
where <name> is the base name of a <name>.dbd file which was
|
||||
created from a <name>Include.dbd file and which will be loaded in a
|
||||
st.cmd or stcmd.host script (e.g. example). <br>
|
||||
|
||||
|
||||
<ul>
|
||||
<li>In ./iocBoot/ioc<name>/st.cmd files change</li>
|
||||
</ul>
|
||||
<br>
|
||||
|
||||
|
||||
<ul>
|
||||
dbLoadDatabase("dbd/exampleApp.dbd")</ul>
|
||||
to
|
||||
<ul>
|
||||
dbLoadDatabase("dbd/example.dbd") <br>
|
||||
</ul>
|
||||
</ul>
|
||||
<li>In <top>/iocBoot/ioc<name>/stcmd.host files change
|
||||
<ul>
|
||||
<br>
|
||||
<br>
|
||||
dbLoadDatabase("../../dbd/exampleApp.dbd",0,0)</ul>
|
||||
</li>
|
||||
to
|
||||
@@ -337,16 +447,16 @@ applications.
|
||||
|
||||
<h3>EPICS_HOST_ARCH changes</h3>
|
||||
GNU compiler builds are now determined by the value of EPICS_HOST_ARCH and
|
||||
are no longer specified in CONFIG_SITE. All references to the ANSI (ACC/GCC)
|
||||
and CPLUSPLUS (CCC/G++) macros have been removed. <br>
|
||||
|
||||
are no longer specified in CONFIG_SITE. All references to the ANSI
|
||||
(ACC/GCC) and CPLUSPLUS (CCC/G++) macros have been removed. <br>
|
||||
|
||||
|
||||
<h3>libCom</h3>
|
||||
Most of the library routines and files starting with the prefix osi have been
|
||||
changed to start with epics. Several also had major changes to their user
|
||||
interface. See the latest version of the Application Developer's Guide for
|
||||
details. <br>
|
||||
|
||||
|
||||
|
||||
<center>
|
||||
<h2>EPICS Release base 3.14.0alpha1 Notes</h2>
|
||||
|
||||
@@ -17,13 +17,11 @@
|
||||
#include <ctype.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <syslog.h>
|
||||
#include <sys/termios.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <syslog.h>
|
||||
#include <rtems.h>
|
||||
#include <rtems/error.h>
|
||||
#include <rtems/stackchk.h>
|
||||
@@ -31,10 +29,75 @@
|
||||
#include <rtems/tftp.h>
|
||||
|
||||
#include <epicsThread.h>
|
||||
#include <errlog.h>
|
||||
#include <logClient.h>
|
||||
#include <iocsh.h>
|
||||
|
||||
static void logReset (void);
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
errlogPrintf ("Startup after %s.\n", cbuf);
|
||||
m360.rsr = ~0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static void
|
||||
logReset (void)
|
||||
{
|
||||
errlogPrintf ("Started.\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __i386__
|
||||
/*
|
||||
* Remote debugger support
|
||||
*
|
||||
* i386-rtems-gdb -b 38400 example(binary from EPICS build -- not netbootable image!)
|
||||
* (gdb) target remote /dev/ttyS0
|
||||
*/
|
||||
int enableRemoteDebugging = 0; /* Global so gdb can set before download */
|
||||
static void
|
||||
initRemoteGdb(int ticksPerSecond)
|
||||
{
|
||||
if (enableRemoteDebugging) {
|
||||
init_remote_gdb();
|
||||
rtems_task_wake_after(ticksPerSecond);
|
||||
breakpoint();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
***********************************************************************
|
||||
@@ -63,7 +126,7 @@ LogFatal (const char *msg, ...)
|
||||
va_list ap;
|
||||
|
||||
va_start (ap, msg);
|
||||
vsyslog (LOG_ALERT, msg, ap);
|
||||
errlogVprintf (msg, ap);
|
||||
va_end (ap);
|
||||
delayedPanic (msg);
|
||||
}
|
||||
@@ -74,7 +137,7 @@ LogFatal (const char *msg, ...)
|
||||
void
|
||||
LogRtemsFatal (const char *msg, rtems_status_code sc)
|
||||
{
|
||||
syslog (LOG_ALERT, "%s: %s", msg, rtems_status_text (sc));
|
||||
errlogPrintf ("%s: %s\n", msg, rtems_status_text (sc));
|
||||
delayedPanic (msg);
|
||||
}
|
||||
|
||||
@@ -84,7 +147,7 @@ LogRtemsFatal (const char *msg, rtems_status_code sc)
|
||||
void
|
||||
LogNetFatal (const char *msg, int err)
|
||||
{
|
||||
syslog (LOG_ALERT, "%s: %d", msg, err);
|
||||
errlogPrintf ("%s: %d\n", msg, err);
|
||||
delayedPanic (msg);
|
||||
}
|
||||
|
||||
@@ -201,12 +264,28 @@ Init (rtems_task_argument ignored)
|
||||
char arg1[] = "st.cmd";
|
||||
char *argv[3] = { arg0, arg1, NULL };
|
||||
rtems_interval ticksPerSecond;
|
||||
rtems_task_priority newpri;
|
||||
|
||||
/*
|
||||
* Get configuration
|
||||
*/
|
||||
rtems_clock_get (RTEMS_CLOCK_GET_TICKS_PER_SECOND, &ticksPerSecond);
|
||||
|
||||
/*
|
||||
* Architecture-specific hooks
|
||||
*/
|
||||
#if defined(__i386__)
|
||||
initRemoteGdb(ticksPerSecond);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Override RTEMS configuration
|
||||
*/
|
||||
rtems_task_set_priority (
|
||||
RTEMS_SELF,
|
||||
epicsThreadGetOssPriorityValue(epicsThreadPriorityIocsh),
|
||||
&newpri);
|
||||
|
||||
/*
|
||||
* Create a reasonable environment
|
||||
*/
|
||||
@@ -218,6 +297,12 @@ Init (rtems_task_argument ignored)
|
||||
/*
|
||||
* Start network
|
||||
*/
|
||||
if (rtems_bsdnet_config.network_task_priority == 0) {
|
||||
unsigned int p;
|
||||
if (epicsThreadHighestPriorityLevelBelow(epicsThreadPriorityScanLow, &p)
|
||||
== epicsThreadBooleanStatusSuccess)
|
||||
rtems_bsdnet_config.network_task_priority = epicsThreadGetOssPriorityValue(p);
|
||||
}
|
||||
printf ("***** Initializing network *****\n");
|
||||
rtems_bsdnet_initialize_network ();
|
||||
printf ("***** Initializing TFTP *****\n");
|
||||
@@ -246,9 +331,6 @@ Init (rtems_task_argument ignored)
|
||||
break;
|
||||
}
|
||||
}
|
||||
printf ("***** Initializing syslog *****\n");
|
||||
openlog ("IOC", LOG_CONS, LOG_DAEMON);
|
||||
logReset ();
|
||||
|
||||
/*
|
||||
* Run the EPICS startup script
|
||||
@@ -260,53 +342,3 @@ Init (rtems_task_argument ignored)
|
||||
printf ("***** IOC application terminating *****\n");
|
||||
exit (i);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
#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 */
|
||||
@@ -32,40 +30,57 @@ static struct rtems_bsdnet_ifconfig loopback_config = {
|
||||
/*
|
||||
* The following conditionals select the network interface card.
|
||||
*
|
||||
* By default the network interface specified by the board-support
|
||||
* On RTEMS-pc386 targets all network drivers which support run-time
|
||||
* probing are linked.
|
||||
* On other targets 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.
|
||||
* application directory and make the appropriate changes.
|
||||
*/
|
||||
#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
|
||||
#if defined(__i386__)
|
||||
|
||||
#elif defined(EPICS_RTEMS_NIC_EEPRO) /* Intel EtherExpressPr (82559ER) */
|
||||
extern int rtems_fxp_attach (struct rtems_bsdnet_ifconfig *, int);
|
||||
# define NIC_NAME "fxp1"
|
||||
# define NIC_ATTACH rtems_fxp_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 */
|
||||
extern int rtems_fxp_attach (struct rtems_bsdnet_ifconfig *, int);
|
||||
static struct rtems_bsdnet_ifconfig fxp_driver_config = {
|
||||
"fxp1", /* name */
|
||||
rtems_fxp_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 */
|
||||
extern int rtems_3c509_driver_attach (struct rtems_bsdnet_ifconfig *, int);
|
||||
static struct rtems_bsdnet_ifconfig e3c509_driver_config = {
|
||||
"ep0", /* name */
|
||||
rtems_3c509_driver_attach, /* attach function */
|
||||
&fxp_driver_config, /* link to next interface */
|
||||
};
|
||||
#define FIRST_DRIVER_CONFIG &e3c509_driver_config
|
||||
|
||||
#else
|
||||
|
||||
/*
|
||||
* FIXME: This really belongs in the mcp750 BSP
|
||||
*/
|
||||
#if defined(__PPC) && defined(mpc750) && !defined(RTEMS_BSP_NETWORK_DRIVER_NAME) && !defined(RTEMS_BSP_NETWORK_DRIVER_ATTACH)
|
||||
# define RTEMS_BSP_NETWORK_DRIVER_NAME "dc1"
|
||||
# define RTEMS_BSP_NETWORK_DRIVER_ATTACH rtems_dec21140_driver_attach
|
||||
extern int rtems_dec21140_driver_attach();
|
||||
#endif
|
||||
|
||||
static struct rtems_bsdnet_ifconfig bsp_driver_config = {
|
||||
RTEMS_BSP_NETWORK_DRIVER_NAME, /* name */
|
||||
RTEMS_BSP_NETWORK_DRIVER_ATTACH, /* attach function */
|
||||
&loopback_config, /* link to next interface */
|
||||
};
|
||||
#define FIRST_DRIVER_CONFIG &bsp_driver_config
|
||||
|
||||
#endif
|
||||
|
||||
struct rtems_bsdnet_config rtems_bsdnet_config = {
|
||||
FIRST_DRIVER_CONFIG, /* Link to next interface */
|
||||
rtems_bsdnet_do_bootp, /* Use BOOTP to get network configuration */
|
||||
0, /* If 0 then the network daemons will run at a */
|
||||
/* priority just less than the lowest-priority */
|
||||
/* EPICS scan thread. */
|
||||
/* If non-zero then the network daemons will run */
|
||||
/* at this *RTEMS* priority */
|
||||
180*1024, /* MBUF space */
|
||||
350*1024, /* MBUF cluster space */
|
||||
};
|
||||
|
||||
@@ -230,6 +230,8 @@ int epicsShareAPI astac(char *pname,char *user,char *location)
|
||||
ASCLIENTPVT *pasclientpvt=NULL;
|
||||
dbCommon *precord;
|
||||
dbFldDes *pflddes;
|
||||
char *puser;
|
||||
char *plocation;
|
||||
|
||||
paddr = dbCalloc(1,sizeof(DBADDR) + sizeof(ASCLIENTPVT));
|
||||
pasclientpvt = (ASCLIENTPVT *)(paddr + 1);
|
||||
@@ -240,8 +242,13 @@ int epicsShareAPI astac(char *pname,char *user,char *location)
|
||||
}
|
||||
precord = paddr->precord;
|
||||
pflddes = paddr->pfldDes;
|
||||
puser = asCalloc(1,strlen(user)+1);
|
||||
strcpy(puser,user);
|
||||
plocation = asCalloc(1,strlen(location)+1);
|
||||
strcpy(plocation,location);
|
||||
|
||||
status = asAddClient(pasclientpvt,(ASMEMBERPVT)precord->asp,
|
||||
(int)pflddes->as_level,user,location);
|
||||
(int)pflddes->as_level,puser,plocation);
|
||||
if(status) {
|
||||
errMessage(status,"asAddClient error");
|
||||
return(1);
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
* (505) 665 1831
|
||||
*/
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
#define epicsAssertAuthor "Jeff Hill johill@lanl.gov"
|
||||
|
||||
#define epicsExportSharedSymbols
|
||||
@@ -24,7 +26,7 @@
|
||||
#include "cac.h"
|
||||
#include "sgAutoPtr.h"
|
||||
|
||||
epicsSingleton < tsFreeList < struct CASG, 128 > > CASG::pFreeList;
|
||||
casgRecycle::~casgRecycle () {}
|
||||
|
||||
CASG::CASG ( ca_client_context &cacIn ) :
|
||||
client ( cacIn ), magic ( CASG_MAGIC )
|
||||
@@ -32,11 +34,6 @@ CASG::CASG ( ca_client_context &cacIn ) :
|
||||
client.installCASG ( *this );
|
||||
}
|
||||
|
||||
void CASG::destroy ()
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
CASG::~CASG ()
|
||||
{
|
||||
if ( this->verify () ) {
|
||||
@@ -243,24 +240,14 @@ void CASG::completionNotify ( syncGroupNotify & notify )
|
||||
}
|
||||
}
|
||||
|
||||
void CASG::recycleSyncGroupWriteNotify ( syncGroupWriteNotify &io )
|
||||
void CASG::recycleSyncGroupWriteNotify ( syncGroupWriteNotify & io )
|
||||
{
|
||||
this->freeListWriteOP.release ( &io, sizeof ( io ) );
|
||||
this->freeListWriteOP.release ( & io );
|
||||
}
|
||||
|
||||
void CASG::recycleSyncGroupReadNotify ( syncGroupReadNotify &io )
|
||||
void CASG::recycleSyncGroupReadNotify ( syncGroupReadNotify & io )
|
||||
{
|
||||
this->freeListReadOP.release ( &io, sizeof ( io ) );
|
||||
}
|
||||
|
||||
void * CASG::operator new (size_t size)
|
||||
{
|
||||
return CASG::pFreeList->allocate ( size );
|
||||
}
|
||||
|
||||
void CASG::operator delete (void *pCadaver, size_t size)
|
||||
{
|
||||
CASG::pFreeList->release ( pCadaver, size );
|
||||
this->freeListReadOP.release ( & io );
|
||||
}
|
||||
|
||||
int CASG::printf ( const char *pformat, ... )
|
||||
@@ -291,5 +278,23 @@ void CASG::exception ( int status, const char *pContext,
|
||||
lineNo, chan, type, count, op );
|
||||
}
|
||||
|
||||
void * CASG::operator new ( size_t ) // X aCC 361
|
||||
{
|
||||
// The HPUX compiler seems to require this even though no code
|
||||
// calls it directly
|
||||
throw std::logic_error ( "why is the compiler calling private operator new" );
|
||||
}
|
||||
|
||||
void CASG::operator delete ( void * )
|
||||
{
|
||||
// Visual C++ .net appears to require operator delete if
|
||||
// placement operator delete is defined? I smell a ms rat
|
||||
// because if I declare placement new and delete, but
|
||||
// comment out the placement delete definition there are
|
||||
// no undefined symbols.
|
||||
errlogPrintf ( "%s:%d this compiler is confused about placement delete - memory was probably leaked",
|
||||
__FILE__, __LINE__ );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
1810
src/ca/CAref.html
1810
src/ca/CAref.html
File diff suppressed because it is too large
Load Diff
@@ -69,7 +69,6 @@ LIBSRCS += comQueSend.cpp
|
||||
LIBSRCS += comBuf.cpp
|
||||
LIBSRCS += hostNameCache.cpp
|
||||
LIBSRCS += msgForMultiplyDefinedPV.cpp
|
||||
LIBSRCS += limboiiu.cpp
|
||||
LIBSRCS += callbackMutex.cpp
|
||||
LIBSRCS += templateInstances.cpp
|
||||
|
||||
|
||||
@@ -44,6 +44,81 @@
|
||||
|
||||
epicsThreadPrivateId caClientContextId;
|
||||
|
||||
const char * ca_message_text []
|
||||
=
|
||||
{
|
||||
"Normal successful completion",
|
||||
"Maximum simultaneous IOC connections exceeded",
|
||||
"Unknown internet host",
|
||||
"Unknown internet service",
|
||||
"Unable to allocate a new socket",
|
||||
|
||||
"Unable to connect to internet host or service",
|
||||
"Unable to allocate additional dynamic memory",
|
||||
"Unknown IO channel",
|
||||
"Record field specified inappropriate for channel specified",
|
||||
"The requested data transfer is greater than available memory or EPICS_CA_MAX_ARRAY_BYTES",
|
||||
|
||||
"User specified timeout on IO operation expired",
|
||||
"Sorry, that feature is planned but not supported at this time",
|
||||
"The supplied string is unusually large",
|
||||
"The request was ignored because the specified channel is disconnected",
|
||||
"The data type specifed is invalid",
|
||||
|
||||
"Remote Channel not found",
|
||||
"Unable to locate all user specified channels",
|
||||
"Channel Access Internal Failure",
|
||||
"The requested local DB operation failed",
|
||||
"Channel read request failed",
|
||||
|
||||
"Channel write request failed",
|
||||
"Channel subscription request failed",
|
||||
"Invalid element count requested",
|
||||
"Invalid string",
|
||||
"Virtual circuit disconnect",
|
||||
|
||||
"Identical process variable name on multiple servers",
|
||||
"Request inappropriate within subscription (monitor) update callback",
|
||||
"Database value get for that channel failed during channel search",
|
||||
"Unable to initialize without the vxWorks VX_FP_TASK task option set",
|
||||
"Event queue overflow has prevented first pass event after event add",
|
||||
|
||||
"Bad event subscription (monitor) identifier",
|
||||
"Remote channel has new network address",
|
||||
"New or resumed network connection",
|
||||
"Specified task isnt a member of a CA context",
|
||||
"Attempt to use defunct CA feature failed",
|
||||
|
||||
"The supplied string is empty",
|
||||
"Unable to spawn the CA repeater thread- auto reconnect will fail",
|
||||
"No channel id match for search reply- search reply ignored",
|
||||
"Reseting dead connection- will try to reconnect",
|
||||
"Server (IOC) has fallen behind or is not responding- still waiting",
|
||||
|
||||
"No internet interface with broadcast available",
|
||||
"Invalid event selection mask",
|
||||
"IO operations have completed",
|
||||
"IO operations are in progress",
|
||||
"Invalid synchronous group identifier",
|
||||
|
||||
"Put callback timed out",
|
||||
"Read access denied",
|
||||
"Write access denied",
|
||||
"Requested feature is no longer supported",
|
||||
"Empty PV search address list",
|
||||
|
||||
"No reasonable data conversion between client and server types",
|
||||
"Invalid channel identifier",
|
||||
"Invalid function pointer",
|
||||
"Thread is already attached to a client context",
|
||||
"Not supported by attached service",
|
||||
|
||||
"User destroyed channel",
|
||||
"Invalid channel priority",
|
||||
"Preemptive callback not enabled - additional threads may not join context",
|
||||
"Client's protocol revision does not support transfers exceeding 16k bytes"
|
||||
};
|
||||
|
||||
static epicsThreadOnceId caClientContextIdOnce = EPICS_THREAD_ONCE_INIT;
|
||||
|
||||
extern "C" void ca_client_exit_handler ()
|
||||
@@ -68,11 +143,9 @@ extern "C" void ca_init_client_context ( void * )
|
||||
*/
|
||||
int fetchClientContext ( ca_client_context **ppcac )
|
||||
{
|
||||
epicsThreadOnce ( &caClientContextIdOnce, ca_init_client_context, 0 );
|
||||
if ( caClientContextId == 0 ) {
|
||||
epicsThreadOnce ( &caClientContextIdOnce, ca_init_client_context, 0 );
|
||||
if ( caClientContextId == 0 ) {
|
||||
return ECA_ALLOCMEM;
|
||||
}
|
||||
return ECA_ALLOCMEM;
|
||||
}
|
||||
|
||||
int status;
|
||||
@@ -233,18 +306,20 @@ int epicsShareAPI ca_search_and_connect (
|
||||
|
||||
// extern "C"
|
||||
int epicsShareAPI ca_create_channel (
|
||||
const char *name_str, caCh * conn_func, void * puser,
|
||||
const char * name_str, caCh * conn_func, void * puser,
|
||||
capri priority, chid * chanptr )
|
||||
{
|
||||
ca_client_context *pcac;
|
||||
int caStatus = fetchClientContext ( &pcac );
|
||||
ca_client_context * pcac;
|
||||
int caStatus = fetchClientContext ( & pcac );
|
||||
if ( caStatus != ECA_NORMAL ) {
|
||||
return caStatus;
|
||||
}
|
||||
|
||||
try {
|
||||
oldChannelNotify * pChanNotify = new oldChannelNotify (
|
||||
* pcac, name_str, conn_func, puser, priority );
|
||||
oldChannelNotify * pChanNotify =
|
||||
new ( pcac->oldChannelNotifyFreeList )
|
||||
oldChannelNotify ( *pcac, name_str,
|
||||
conn_func, puser, priority );
|
||||
// make sure that their chan pointer is set prior to
|
||||
// calling connection call backs
|
||||
*chanptr = pChanNotify;
|
||||
@@ -272,9 +347,11 @@ int epicsShareAPI ca_create_channel (
|
||||
// extern "C"
|
||||
int epicsShareAPI ca_clear_channel ( chid pChan )
|
||||
{
|
||||
pChan->destroy ();
|
||||
ca_client_context & cac = pChan->getClientCtx ();
|
||||
cac.destroyChannel ( *pChan );
|
||||
return ECA_NORMAL;
|
||||
}
|
||||
#include "autoPtrFreeList.h"
|
||||
|
||||
/*
|
||||
* ca_array_get ()
|
||||
@@ -283,24 +360,17 @@ int epicsShareAPI ca_clear_channel ( chid pChan )
|
||||
int epicsShareAPI ca_array_get ( chtype type,
|
||||
arrayElementCount count, chid pChan, void *pValue )
|
||||
{
|
||||
ca_client_context *pcac;
|
||||
int caStatus = fetchClientContext ( &pcac );
|
||||
if ( caStatus != ECA_NORMAL ) {
|
||||
return caStatus;
|
||||
}
|
||||
|
||||
if ( type < 0 ) {
|
||||
return ECA_BADTYPE;
|
||||
}
|
||||
unsigned tmpType = static_cast < unsigned > ( type );
|
||||
|
||||
autoPtrDestroy < getCopy > pNotify
|
||||
( new getCopy ( *pcac, *pChan, tmpType, count, pValue ) );
|
||||
if ( ! pNotify.get() ) {
|
||||
return ECA_ALLOCMEM;
|
||||
}
|
||||
|
||||
int caStatus;
|
||||
try {
|
||||
if ( type < 0 ) {
|
||||
return ECA_BADTYPE;
|
||||
}
|
||||
unsigned tmpType = static_cast < unsigned > ( type );
|
||||
autoPtrFreeList < getCopy > pNotify
|
||||
( pChan->getClientCtx().getCopyFreeList,
|
||||
new ( pChan->getClientCtx().getCopyFreeList )
|
||||
getCopy ( pChan->getClientCtx(), *pChan,
|
||||
tmpType, count, pValue ) );
|
||||
pChan->read ( type, count, *pNotify );
|
||||
pNotify.release ();
|
||||
caStatus = ECA_NORMAL;
|
||||
@@ -327,7 +397,7 @@ int epicsShareAPI ca_array_get ( chtype type,
|
||||
}
|
||||
catch ( cacChannel::unsupportedByService & )
|
||||
{
|
||||
caStatus = ECA_NOTINSERVICE;
|
||||
caStatus = ECA_UNAVAILINSERV;
|
||||
}
|
||||
catch ( cacChannel::requestTimedOut & )
|
||||
{
|
||||
@@ -355,19 +425,16 @@ int epicsShareAPI ca_array_get_callback ( chtype type,
|
||||
arrayElementCount count, chid pChan,
|
||||
caEventCallBackFunc *pfunc, void *arg )
|
||||
{
|
||||
if ( type < 0 ) {
|
||||
return ECA_BADTYPE;
|
||||
}
|
||||
unsigned tmpType = static_cast < unsigned > ( type );
|
||||
|
||||
autoPtrDestroy < getCallback > pNotify
|
||||
( new getCallback ( *pChan, pfunc, arg ) );
|
||||
if ( ! pNotify.get() ) {
|
||||
return ECA_ALLOCMEM;
|
||||
}
|
||||
|
||||
int caStatus;
|
||||
try {
|
||||
if ( type < 0 ) {
|
||||
return ECA_BADTYPE;
|
||||
}
|
||||
unsigned tmpType = static_cast < unsigned > ( type );
|
||||
|
||||
autoPtrDestroy < getCallback > pNotify
|
||||
( new ( pChan->getClientCtx().getCallbackFreeList )
|
||||
getCallback ( *pChan, pfunc, arg ) );
|
||||
pChan->read ( tmpType, count, *pNotify );
|
||||
pNotify.release ();
|
||||
caStatus = ECA_NORMAL;
|
||||
@@ -394,7 +461,7 @@ int epicsShareAPI ca_array_get_callback ( chtype type,
|
||||
}
|
||||
catch ( cacChannel::unsupportedByService & )
|
||||
{
|
||||
caStatus = ECA_NOTINSERVICE;
|
||||
caStatus = ECA_UNAVAILINSERV;
|
||||
}
|
||||
catch ( cacChannel::requestTimedOut & )
|
||||
{
|
||||
@@ -421,19 +488,16 @@ int epicsShareAPI ca_array_get_callback ( chtype type,
|
||||
int epicsShareAPI ca_array_put_callback ( chtype type, arrayElementCount count,
|
||||
chid pChan, const void *pValue, caEventCallBackFunc *pfunc, void *usrarg )
|
||||
{
|
||||
if ( type < 0 ) {
|
||||
return ECA_BADTYPE;
|
||||
}
|
||||
unsigned tmpType = static_cast < unsigned > ( type );
|
||||
|
||||
autoPtrDestroy < putCallback > pNotify
|
||||
( new putCallback ( *pChan, pfunc, usrarg ) );
|
||||
if ( ! pNotify.get() ) {
|
||||
return ECA_ALLOCMEM;
|
||||
}
|
||||
|
||||
int caStatus;
|
||||
try {
|
||||
if ( type < 0 ) {
|
||||
return ECA_BADTYPE;
|
||||
}
|
||||
unsigned tmpType = static_cast < unsigned > ( type );
|
||||
autoPtrFreeList < putCallback > pNotify
|
||||
( pChan->getClientCtx().putCallbackFreeList,
|
||||
new ( pChan->getClientCtx().putCallbackFreeList )
|
||||
putCallback ( *pChan, pfunc, usrarg ) );
|
||||
pChan->write ( tmpType, count, pValue, *pNotify );
|
||||
pNotify.release ();
|
||||
caStatus = ECA_NORMAL;
|
||||
@@ -460,7 +524,7 @@ int epicsShareAPI ca_array_put_callback ( chtype type, arrayElementCount count,
|
||||
}
|
||||
catch ( cacChannel::unsupportedByService & )
|
||||
{
|
||||
caStatus = ECA_NOTINSERVICE;
|
||||
caStatus = ECA_UNAVAILINSERV;
|
||||
}
|
||||
catch ( cacChannel::requestTimedOut & )
|
||||
{
|
||||
@@ -516,7 +580,7 @@ int epicsShareAPI ca_array_put ( chtype type, arrayElementCount count,
|
||||
}
|
||||
catch ( cacChannel::unsupportedByService & )
|
||||
{
|
||||
caStatus = ECA_NOTINSERVICE;
|
||||
caStatus = ECA_UNAVAILINSERV;
|
||||
}
|
||||
catch ( cacChannel::requestTimedOut & )
|
||||
{
|
||||
@@ -540,7 +604,6 @@ int epicsShareAPI ca_array_put ( chtype type, arrayElementCount count,
|
||||
int epicsShareAPI ca_change_connection_event ( chid pChan, caCh *pfunc )
|
||||
{
|
||||
return pChan->changeConnCallBack ( pfunc );
|
||||
return ECA_INTERNAL;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -602,21 +665,19 @@ int epicsShareAPI ca_add_masked_array_event (
|
||||
}
|
||||
|
||||
try {
|
||||
autoPtrDestroy < oldSubscription > pSubsr
|
||||
( new oldSubscription ( *pChan, pCallBack, pCallBackArg ) );
|
||||
if ( pSubsr.get () ) {
|
||||
evid pTmp = pSubsr.release ();
|
||||
if ( monixptr ) {
|
||||
*monixptr = pTmp;
|
||||
}
|
||||
pTmp->begin ( tmpType, count, mask );
|
||||
// dont touch pTmp after this because
|
||||
// the first callback might have canceled it
|
||||
return ECA_NORMAL;
|
||||
}
|
||||
else {
|
||||
return ECA_ALLOCMEM;
|
||||
autoPtrFreeList < oldSubscription > pSubsr
|
||||
( pChan->getClientCtx().subscriptionFreeList,
|
||||
new ( pChan->getClientCtx().subscriptionFreeList )
|
||||
oldSubscription ( *pChan,
|
||||
pCallBack, pCallBackArg ) );
|
||||
evid pTmp = pSubsr.release ();
|
||||
if ( monixptr ) {
|
||||
*monixptr = pTmp;
|
||||
}
|
||||
pTmp->begin ( tmpType, count, mask );
|
||||
// dont touch pTmp after this because
|
||||
// the first callback might have canceled it
|
||||
return ECA_NORMAL;
|
||||
}
|
||||
catch ( cacChannel::badType & )
|
||||
{
|
||||
@@ -636,7 +697,7 @@ int epicsShareAPI ca_add_masked_array_event (
|
||||
}
|
||||
catch ( cacChannel::unsupportedByService & )
|
||||
{
|
||||
return ECA_NOTINSERVICE;
|
||||
return ECA_UNAVAILINSERV;
|
||||
}
|
||||
catch ( std::bad_alloc & )
|
||||
{
|
||||
@@ -657,7 +718,10 @@ int epicsShareAPI ca_add_masked_array_event (
|
||||
// extern "C"
|
||||
int epicsShareAPI ca_clear_event ( evid pMon )
|
||||
{
|
||||
pMon->destroy ();
|
||||
oldChannelNotify & chan = pMon->channel ();
|
||||
ca_client_context & cac = chan.getClientCtx ();
|
||||
pMon->ioCancel ();
|
||||
cac.destroySubscription ( *pMon );
|
||||
return ECA_NORMAL;
|
||||
}
|
||||
|
||||
@@ -787,7 +851,7 @@ void epicsShareAPI ca_signal ( long ca_status, const char *message )
|
||||
* (if they call this routine again).
|
||||
*/
|
||||
// extern "C"
|
||||
const char * epicsShareAPI ca_message ( long ca_status )
|
||||
const char * epicsShareAPI ca_message ( long ca_status ) // X aCC 361
|
||||
{
|
||||
unsigned msgNo = CA_EXTRACT_MSG_NO ( ca_status );
|
||||
|
||||
@@ -1181,36 +1245,43 @@ epicsShareDef const unsigned short dbr_size[LAST_BUFFER_TYPE+1] = {
|
||||
sizeof(dbr_float_t), /* IEEE Float */
|
||||
sizeof(dbr_enum_t), /* item number */
|
||||
sizeof(dbr_char_t), /* character */
|
||||
|
||||
sizeof(dbr_long_t), /* long */
|
||||
sizeof(dbr_double_t), /* double */
|
||||
sizeof(struct dbr_sts_string), /* string field with status */
|
||||
sizeof(struct dbr_sts_short), /* short field with status */
|
||||
sizeof(struct dbr_sts_float), /* float field with status */
|
||||
|
||||
sizeof(struct dbr_sts_enum), /* item number with status */
|
||||
sizeof(struct dbr_sts_char), /* char field with status */
|
||||
sizeof(struct dbr_sts_long), /* long field with status */
|
||||
sizeof(struct dbr_sts_double), /* double field with time */
|
||||
sizeof(struct dbr_time_string), /* string field with time */
|
||||
|
||||
sizeof(struct dbr_time_short), /* short field with time */
|
||||
sizeof(struct dbr_time_float), /* float field with time */
|
||||
sizeof(struct dbr_time_enum), /* item number with time */
|
||||
sizeof(struct dbr_time_char), /* char field with time */
|
||||
sizeof(struct dbr_time_long), /* long field with time */
|
||||
|
||||
sizeof(struct dbr_time_double), /* double field with time */
|
||||
sizeof(struct dbr_sts_string), /* graphic string info */
|
||||
sizeof(struct dbr_gr_short), /* graphic short info */
|
||||
sizeof(struct dbr_gr_float), /* graphic float info */
|
||||
sizeof(struct dbr_gr_enum), /* graphic item info */
|
||||
|
||||
sizeof(struct dbr_gr_char), /* graphic char info */
|
||||
sizeof(struct dbr_gr_long), /* graphic long info */
|
||||
sizeof(struct dbr_gr_double), /* graphic double info */
|
||||
sizeof(struct dbr_sts_string), /* control string info */
|
||||
sizeof(struct dbr_ctrl_short), /* control short info */
|
||||
|
||||
sizeof(struct dbr_ctrl_float), /* control float info */
|
||||
sizeof(struct dbr_ctrl_enum), /* control item info */
|
||||
sizeof(struct dbr_ctrl_char), /* control char info */
|
||||
sizeof(struct dbr_ctrl_long), /* control long info */
|
||||
sizeof(struct dbr_ctrl_double), /* control double info */
|
||||
|
||||
sizeof(dbr_put_ackt_t), /* put ackt */
|
||||
sizeof(dbr_put_acks_t), /* put acks */
|
||||
sizeof(struct dbr_stsack_string),/* string field with status/ack*/
|
||||
@@ -1224,36 +1295,43 @@ epicsShareDef const unsigned short dbr_value_size[LAST_BUFFER_TYPE+1] = {
|
||||
sizeof(dbr_float_t), /* IEEE Float */
|
||||
sizeof(dbr_enum_t), /* item number */
|
||||
sizeof(dbr_char_t), /* character */
|
||||
|
||||
sizeof(dbr_long_t), /* long */
|
||||
sizeof(dbr_double_t), /* double */
|
||||
sizeof(dbr_string_t), /* string max size */
|
||||
sizeof(dbr_short_t), /* short */
|
||||
sizeof(dbr_float_t), /* IEEE Float */
|
||||
|
||||
sizeof(dbr_enum_t), /* item number */
|
||||
sizeof(dbr_char_t), /* character */
|
||||
sizeof(dbr_long_t), /* long */
|
||||
sizeof(dbr_double_t), /* double */
|
||||
sizeof(dbr_string_t), /* string max size */
|
||||
|
||||
sizeof(dbr_short_t), /* short */
|
||||
sizeof(dbr_float_t), /* IEEE Float */
|
||||
sizeof(dbr_enum_t), /* item number */
|
||||
sizeof(dbr_char_t), /* character */
|
||||
sizeof(dbr_long_t), /* long */
|
||||
|
||||
sizeof(dbr_double_t), /* double */
|
||||
sizeof(dbr_string_t), /* string max size */
|
||||
sizeof(dbr_short_t), /* short */
|
||||
sizeof(dbr_float_t), /* IEEE Float */
|
||||
sizeof(dbr_enum_t), /* item number */
|
||||
|
||||
sizeof(dbr_char_t), /* character */
|
||||
sizeof(dbr_long_t), /* long */
|
||||
sizeof(dbr_double_t), /* double */
|
||||
sizeof(dbr_string_t), /* string max size */
|
||||
sizeof(dbr_short_t), /* short */
|
||||
|
||||
sizeof(dbr_float_t), /* IEEE Float */
|
||||
sizeof(dbr_enum_t), /* item number */
|
||||
sizeof(dbr_char_t), /* character */
|
||||
sizeof(dbr_long_t), /* long */
|
||||
sizeof(dbr_double_t), /* double */
|
||||
|
||||
sizeof(dbr_ushort_t), /* put_ackt */
|
||||
sizeof(dbr_ushort_t), /* put_acks */
|
||||
sizeof(dbr_string_t), /* string max size */
|
||||
|
||||
276
src/ca/acctst.c
276
src/ca/acctst.c
@@ -56,11 +56,17 @@ unsigned accessUpdateCount;
|
||||
unsigned connectionUpdateCount;
|
||||
unsigned getCallbackCount;
|
||||
|
||||
static epicsTimeStamp showProgressBeginTime;
|
||||
|
||||
static double timeoutToPendIO = 1e20;
|
||||
|
||||
void showProgressBegin ( const char *pTestName, unsigned interestLevel )
|
||||
{
|
||||
|
||||
if ( interestLevel > 0 ) {
|
||||
if ( interestLevel > 1 ) {
|
||||
printf ( "%s ", pTestName );
|
||||
epicsTimeGetCurrent ( & showProgressBeginTime );
|
||||
}
|
||||
printf ( "{" );
|
||||
}
|
||||
@@ -69,10 +75,15 @@ void showProgressBegin ( const char *pTestName, unsigned interestLevel )
|
||||
|
||||
void showProgressEnd ( unsigned interestLevel )
|
||||
{
|
||||
|
||||
if ( interestLevel > 0 ) {
|
||||
printf ( "}" );
|
||||
if ( interestLevel > 1 ) {
|
||||
printf ( "\n" );
|
||||
epicsTimeStamp showProgressEndTime;
|
||||
double delay;
|
||||
epicsTimeGetCurrent ( & showProgressEndTime );
|
||||
delay = epicsTimeDiffInSeconds ( &showProgressEndTime, &showProgressBeginTime );
|
||||
printf ( " %f sec\n", delay );
|
||||
}
|
||||
else {
|
||||
fflush ( stdout );
|
||||
@@ -137,7 +148,7 @@ void monitorSubscriptionFirstUpdateTest ( const char *pName, chid chan, unsigned
|
||||
/* this may fail if there is an unusual deadband */
|
||||
status = ca_get ( DBR_CTRL_DOUBLE, chan, ¤tVal );
|
||||
SEVCHK ( status, NULL );
|
||||
status = ca_pend_io ( 100.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, NULL );
|
||||
eventCount = 0u;
|
||||
waitCount = 0u;
|
||||
@@ -178,7 +189,7 @@ void monitorSubscriptionFirstUpdateTest ( const char *pName, chid chan, unsigned
|
||||
status = ca_add_event ( DBR_FLOAT, chan2,
|
||||
nUpdatesTester, &eventCount, 0 );
|
||||
SEVCHK ( status, 0 );
|
||||
status = ca_pend_io ( 20.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK (status, 0);
|
||||
epicsThreadSleep ( 0.1 );
|
||||
ca_poll ();
|
||||
@@ -194,7 +205,7 @@ void monitorSubscriptionFirstUpdateTest ( const char *pName, chid chan, unsigned
|
||||
/* this may fail if there is an unusual deadband */
|
||||
status = ca_get ( DBR_CTRL_DOUBLE, chan2, ¤tVal );
|
||||
SEVCHK ( status, NULL );
|
||||
status = ca_pend_io ( 100.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, NULL );
|
||||
eventCount = 0u;
|
||||
waitCount = 0u;
|
||||
@@ -553,7 +564,7 @@ void verifyBlockingConnect ( appChan *pChans, unsigned chanCount,
|
||||
SEVCHK ( status, NULL );
|
||||
}
|
||||
|
||||
status = ca_pend_io ( 1000.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, NULL );
|
||||
|
||||
ca_self_test ();
|
||||
@@ -703,7 +714,7 @@ void grEnumTest ( chid chan, unsigned interestLevel )
|
||||
status = ca_get (DBR_GR_ENUM, chan, &ge);
|
||||
SEVCHK (status, "DBR_GR_ENUM ca_get()");
|
||||
|
||||
status = ca_pend_io (2.0);
|
||||
status = ca_pend_io (timeoutToPendIO);
|
||||
assert (status == ECA_NORMAL);
|
||||
|
||||
assert ( ge.no_str >= 0 && ge.no_str < NELEMENTS(ge.strs) );
|
||||
@@ -713,7 +724,7 @@ void grEnumTest ( chid chan, unsigned interestLevel )
|
||||
for (i=0; i<count; i++) {
|
||||
printf ("\"%s\" ", ge.strs[i]);
|
||||
}
|
||||
printf ("}\n");
|
||||
printf ("}");
|
||||
}
|
||||
showProgressEnd ( interestLevel );
|
||||
}
|
||||
@@ -774,7 +785,7 @@ void ctrlDoubleTest ( chid chan, unsigned interestLevel )
|
||||
ca_element_count(chan),
|
||||
chan, pCtrlDbl);
|
||||
SEVCHK (status, "ctrlDoubleTest, ca_array_get");
|
||||
status = ca_pend_io (30.0);
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
assert (status==ECA_NORMAL);
|
||||
|
||||
/*
|
||||
@@ -825,7 +836,7 @@ void verifyBlockInPendIO ( chid chan, unsigned interestLevel )
|
||||
resp = -99.99f;
|
||||
SEVCHK ( ca_put (DBR_FLOAT, chan, &req), NULL );
|
||||
SEVCHK ( ca_get (DBR_FLOAT, chan, &resp), NULL );
|
||||
SEVCHK ( ca_pend_io (2000.0) , NULL );
|
||||
SEVCHK ( ca_pend_io (timeoutToPendIO) , NULL );
|
||||
if ( resp != req ) {
|
||||
printf (
|
||||
"get block test failed - val written %f\n", req);
|
||||
@@ -858,7 +869,7 @@ void floatTest ( chid chan, dbr_float_t beginValue, dbr_float_t increment,
|
||||
SEVCHK ( status, NULL );
|
||||
status = ca_get ( DBR_FLOAT, chan, &fretval );
|
||||
SEVCHK ( status, NULL );
|
||||
status = ca_pend_io ( 10.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK (status, NULL);
|
||||
if ( fabs ( fval - fretval ) > epsilon ) {
|
||||
printf ( "float test failed val written %f\n", fval );
|
||||
@@ -888,7 +899,7 @@ void doubleTest ( chid chan, dbr_double_t beginValue,
|
||||
SEVCHK ( status, NULL );
|
||||
status = ca_get ( DBR_DOUBLE, chan, &fretval );
|
||||
SEVCHK ( status, NULL );
|
||||
status = ca_pend_io ( 100.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, NULL );
|
||||
if ( fabs ( fval - fretval ) > epsilon ) {
|
||||
printf ( "double test failed val written %f\n", fval );
|
||||
@@ -1010,7 +1021,7 @@ void verifyLongIO ( chid chan, unsigned interestLevel )
|
||||
|
||||
status = ca_get ( DBR_CTRL_LONG, chan, &cl );
|
||||
SEVCHK ( status, "control long fetch failed\n" );
|
||||
status = ca_pend_io ( 10.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, "control long pend failed\n" );
|
||||
|
||||
incr = ( cl.upper_ctrl_limit - cl.lower_ctrl_limit );
|
||||
@@ -1025,7 +1036,7 @@ void verifyLongIO ( chid chan, unsigned interestLevel )
|
||||
|
||||
ca_put ( DBR_LONG, chan, &iter );
|
||||
ca_get ( DBR_LONG, chan, &rdbk );
|
||||
status = ca_pend_io ( 10.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, "get pend failed\n" );
|
||||
assert ( iter == rdbk );
|
||||
}
|
||||
@@ -1053,7 +1064,7 @@ void verifyShortIO ( chid chan, unsigned interestLevel )
|
||||
|
||||
status = ca_get ( DBR_CTRL_SHORT, chan, &cl );
|
||||
SEVCHK ( status, "control short fetch failed\n" );
|
||||
status = ca_pend_io ( 10.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, "control short pend failed\n" );
|
||||
|
||||
incr = (dbr_short_t) ( cl.upper_ctrl_limit - cl.lower_ctrl_limit );
|
||||
@@ -1070,7 +1081,7 @@ void verifyShortIO ( chid chan, unsigned interestLevel )
|
||||
|
||||
ca_put ( DBR_SHORT, chan, &iter );
|
||||
ca_get ( DBR_SHORT, chan, &rdbk );
|
||||
status = ca_pend_io ( 10.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, "get pend failed\n" );
|
||||
assert ( iter == rdbk );
|
||||
}
|
||||
@@ -1097,7 +1108,7 @@ void verifyHighThroughputRead ( chid chan, unsigned interestLevel )
|
||||
status = ca_get ( DBR_FLOAT, chan, &temp );
|
||||
SEVCHK ( status ,NULL );
|
||||
}
|
||||
status = ca_pend_io (2000.0);
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, NULL );
|
||||
showProgressEnd ( interestLevel );
|
||||
}
|
||||
@@ -1118,7 +1129,7 @@ void verifyHighThroughputWrite ( chid chan, unsigned interestLevel )
|
||||
status = ca_put ( DBR_DOUBLE, chan, &fval );
|
||||
SEVCHK ( status, NULL );
|
||||
}
|
||||
SEVCHK ( ca_pend_io (2000.0), NULL );
|
||||
SEVCHK ( ca_pend_io (timeoutToPendIO), NULL );
|
||||
showProgressEnd ( interestLevel );
|
||||
}
|
||||
else{
|
||||
@@ -1205,7 +1216,7 @@ void verifyBadString ( chid chan, unsigned interestLevel )
|
||||
assert ( status == ECA_NORMAL );
|
||||
status = ca_array_get ( DBR_STRING, 1u, chan, respStr );
|
||||
assert ( status == ECA_NORMAL );
|
||||
status = ca_pend_io ( 0.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
assert ( status == ECA_NORMAL );
|
||||
if ( strcmp ( stimStr, respStr ) ) {
|
||||
printf (
|
||||
@@ -1287,9 +1298,9 @@ void test_sync_groups ( chid chan, unsigned interestLevel )
|
||||
|
||||
multiple_sg_requests ( chan, gid1 );
|
||||
multiple_sg_requests ( chan, gid2 );
|
||||
status = ca_sg_block ( gid1, 15.0 );
|
||||
status = ca_sg_block ( gid1, 500.0 );
|
||||
SEVCHK ( status, "SYNC GRP1" );
|
||||
status = ca_sg_block ( gid2, 15.0 );
|
||||
status = ca_sg_block ( gid2, 500.0 );
|
||||
SEVCHK ( status, "SYNC GRP2" );
|
||||
status = ca_sg_delete ( gid1 );
|
||||
SEVCHK ( status, NULL );
|
||||
@@ -1331,7 +1342,7 @@ void multiSubscriptionDeleteTest ( chid chan, unsigned interestLevel )
|
||||
* is still able to punch through with a request.
|
||||
*/
|
||||
SEVCHK ( ca_get ( DBR_FLOAT,chan,&getResp ), NULL );
|
||||
SEVCHK ( ca_pend_io ( 1000.0 ), NULL );
|
||||
SEVCHK ( ca_pend_io ( timeoutToPendIO ), NULL );
|
||||
|
||||
showProgress ( interestLevel );
|
||||
|
||||
@@ -1371,7 +1382,7 @@ void multiSubscriptionDeleteTest ( chid chan, unsigned interestLevel )
|
||||
* force all of the clear event requests to complete
|
||||
*/
|
||||
SEVCHK ( ca_get (DBR_FLOAT,chan,&temp), NULL );
|
||||
SEVCHK ( ca_pend_io (1000.0), NULL );
|
||||
SEVCHK ( ca_pend_io (timeoutToPendIO), NULL );
|
||||
|
||||
showProgressEnd ( interestLevel );
|
||||
}
|
||||
@@ -1402,7 +1413,7 @@ void singleSubscriptionDeleteTest ( chid chan, unsigned interestLevel )
|
||||
* force the subscription request to complete
|
||||
*/
|
||||
SEVCHK ( ca_get ( DBR_FLOAT, chan, &getResp ), NULL );
|
||||
SEVCHK ( ca_pend_io ( 1000.0 ), NULL );
|
||||
SEVCHK ( ca_pend_io ( timeoutToPendIO ), NULL );
|
||||
|
||||
/*
|
||||
* attempt to generate heavy event traffic before initiating
|
||||
@@ -1447,7 +1458,7 @@ void channelClearWithEventTrafficTest ( const char *pName, unsigned interestLeve
|
||||
|
||||
int status = ca_create_channel ( pName, 0, 0,
|
||||
CA_PRIORITY_DEFAULT, &chan );
|
||||
status = ca_pend_io ( 100.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, "channelClearWithEventTrafficTest: channel connect failed" );
|
||||
assert ( status == ECA_NORMAL );
|
||||
|
||||
@@ -1459,7 +1470,7 @@ void channelClearWithEventTrafficTest ( const char *pName, unsigned interestLeve
|
||||
* force the subscription request to complete
|
||||
*/
|
||||
SEVCHK ( ca_get ( DBR_FLOAT, chan, &getResp ), NULL );
|
||||
SEVCHK ( ca_pend_io ( 1000.0 ), NULL );
|
||||
SEVCHK ( ca_pend_io ( timeoutToPendIO ), NULL );
|
||||
|
||||
/*
|
||||
* attempt to generate heavy event traffic before initiating
|
||||
@@ -1550,8 +1561,8 @@ static unsigned arrayEventExceptionNotifyComplete = 0;
|
||||
void arrayEventExceptionNotify ( struct event_handler_args args )
|
||||
{
|
||||
if ( args.status == ECA_NORMAL ) {
|
||||
printf ( "arrayEventExceptionNotify: expected exception but didnt receive one \"%s\" because \"%s\"",
|
||||
ca_name ( args.chid ), ca_message ( args.status ) );
|
||||
printf ( "arrayEventExceptionNotify: expected exception but didnt receive one against \"%s\" \n",
|
||||
ca_name ( args.chid ) );
|
||||
}
|
||||
else {
|
||||
arrayEventExceptionNotifyComplete = 1;
|
||||
@@ -1776,7 +1787,7 @@ void arrayTest ( chid chan, unsigned maxArrayBytes, unsigned interestLevel )
|
||||
status = ca_array_get ( DBR_DOUBLE, ca_element_count (chan),
|
||||
chan, pRF );
|
||||
SEVCHK ( status, "array read request failed" );
|
||||
status = ca_pend_io ( 30.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, "array read failed" );
|
||||
|
||||
/*
|
||||
@@ -1800,7 +1811,7 @@ void arrayTest ( chid chan, unsigned maxArrayBytes, unsigned interestLevel )
|
||||
status = ca_array_get ( DBR_STRING,
|
||||
ca_element_count (chan), chan, pRS );
|
||||
SEVCHK ( status, "array read request failed" );
|
||||
status = ca_pend_io ( 300.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, "array read failed" );
|
||||
free ( pRS );
|
||||
}
|
||||
@@ -1891,52 +1902,54 @@ void arrayTest ( chid chan, unsigned maxArrayBytes, unsigned interestLevel )
|
||||
void unequalServerBufferSizeTest ( const char * pName, unsigned interestLevel )
|
||||
{
|
||||
dbr_double_t *pRF, *pWF;
|
||||
unsigned connections;
|
||||
chid newChan;
|
||||
int status;
|
||||
|
||||
showProgressBegin ( "unequalServerBufferSizeTest", interestLevel );
|
||||
|
||||
{
|
||||
chid newChan;
|
||||
/* this test must be run when no channels are connected */
|
||||
connections = ca_get_ioc_connection_count ();
|
||||
assert ( connections == 0u );
|
||||
|
||||
status = ca_create_channel ( pName, 0, 0, 0, & newChan );
|
||||
assert ( status == ECA_NORMAL );
|
||||
status = ca_pend_io ( 100.0 );
|
||||
assert ( status == ECA_NORMAL );
|
||||
status = ca_create_channel ( pName, 0, 0, 0, & newChan );
|
||||
assert ( status == ECA_NORMAL );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
assert ( status == ECA_NORMAL );
|
||||
|
||||
if ( ! ca_write_access ( newChan ) ) {
|
||||
printf ( "skipping unequal buffer size test - no write access\n" );
|
||||
status = ca_clear_channel ( newChan );
|
||||
assert ( status == ECA_NORMAL );
|
||||
return;
|
||||
}
|
||||
|
||||
pRF = (dbr_double_t *) calloc ( ca_element_count (newChan), sizeof (*pRF) );
|
||||
assert ( pRF != NULL );
|
||||
|
||||
pWF = (dbr_double_t *) calloc ( ca_element_count (newChan), sizeof (*pWF) );
|
||||
assert ( pWF != NULL );
|
||||
|
||||
status = ca_array_get ( DBR_DOUBLE, ca_element_count ( newChan ),
|
||||
newChan, pRF );
|
||||
status = ca_pend_io ( 100.0 );
|
||||
assert ( status == ECA_NORMAL );
|
||||
status = ca_clear_channel ( newChan );
|
||||
assert ( status == ECA_NORMAL );
|
||||
|
||||
status = ca_create_channel ( pName, 0, 0, 0, &newChan );
|
||||
assert ( status == ECA_NORMAL );
|
||||
status = ca_pend_io ( 100.0 );
|
||||
assert ( status == ECA_NORMAL );
|
||||
status = ca_array_put ( DBR_DOUBLE, ca_element_count ( newChan ),
|
||||
newChan, pWF );
|
||||
status = ca_array_get ( DBR_DOUBLE, 1,
|
||||
newChan, pRF );
|
||||
status = ca_pend_io ( 100.0 );
|
||||
assert ( status == ECA_NORMAL );
|
||||
if ( ! ca_write_access ( newChan ) ) {
|
||||
printf ( "skipping unequal buffer size test - no write access\n" );
|
||||
status = ca_clear_channel ( newChan );
|
||||
assert ( status == ECA_NORMAL );
|
||||
return;
|
||||
}
|
||||
|
||||
pRF = (dbr_double_t *) calloc ( ca_element_count (newChan), sizeof (*pRF) );
|
||||
assert ( pRF != NULL );
|
||||
|
||||
pWF = (dbr_double_t *) calloc ( ca_element_count (newChan), sizeof (*pWF) );
|
||||
assert ( pWF != NULL );
|
||||
|
||||
status = ca_array_get ( DBR_DOUBLE, ca_element_count ( newChan ),
|
||||
newChan, pRF );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
assert ( status == ECA_NORMAL );
|
||||
status = ca_clear_channel ( newChan );
|
||||
assert ( status == ECA_NORMAL );
|
||||
|
||||
status = ca_create_channel ( pName, 0, 0, 0, &newChan );
|
||||
assert ( status == ECA_NORMAL );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
assert ( status == ECA_NORMAL );
|
||||
status = ca_array_put ( DBR_DOUBLE, ca_element_count ( newChan ),
|
||||
newChan, pWF );
|
||||
status = ca_array_get ( DBR_DOUBLE, 1,
|
||||
newChan, pRF );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
assert ( status == ECA_NORMAL );
|
||||
status = ca_clear_channel ( newChan );
|
||||
assert ( status == ECA_NORMAL );
|
||||
|
||||
free ( pRF );
|
||||
free ( pWF );
|
||||
|
||||
@@ -2079,7 +2092,7 @@ void monitorUpdateTest ( chid chan, unsigned interestLevel )
|
||||
* is still able to punch through with a request.
|
||||
*/
|
||||
SEVCHK ( ca_get ( DBR_FLOAT, chan, &getResp) ,NULL );
|
||||
SEVCHK ( ca_pend_io ( 1000.0 ) ,NULL );
|
||||
SEVCHK ( ca_pend_io ( timeoutToPendIO ) ,NULL );
|
||||
|
||||
showProgress ( interestLevel );
|
||||
|
||||
@@ -2135,7 +2148,7 @@ void monitorUpdateTest ( chid chan, unsigned interestLevel )
|
||||
*/
|
||||
getResp = -1;
|
||||
SEVCHK ( ca_get ( DBR_FLOAT, chan, &getResp ), NULL );
|
||||
SEVCHK ( ca_pend_io ( 1000.0 ), NULL );
|
||||
SEVCHK ( ca_pend_io ( timeoutToPendIO ), NULL );
|
||||
|
||||
assert ( getResp == temp );
|
||||
|
||||
@@ -2201,7 +2214,7 @@ void monitorUpdateTest ( chid chan, unsigned interestLevel )
|
||||
* complete
|
||||
*/
|
||||
SEVCHK ( ca_get ( DBR_FLOAT, chan, &temp ), NULL );
|
||||
SEVCHK ( ca_pend_io ( 1000.0 ), NULL );
|
||||
SEVCHK ( ca_pend_io ( timeoutToPendIO ), NULL );
|
||||
|
||||
/* printf ( "flow control bypassed %u events\n", flowCtrlCount ); */
|
||||
|
||||
@@ -2214,8 +2227,15 @@ void verifyReasonableBeaconPeriod ( chid chan )
|
||||
double beaconPeriod, expectedBeaconPeriod, error, percentError;
|
||||
unsigned attempts = 0u;
|
||||
|
||||
long status = envGetDoubleConfigParam (
|
||||
&EPICS_CA_BEACON_PERIOD, &expectedBeaconPeriod );
|
||||
int status;
|
||||
if ( envGetConfigParamPtr ( & EPICS_CAS_BEACON_PERIOD ) ) {
|
||||
status = envGetDoubleConfigParam ( & EPICS_CAS_BEACON_PERIOD,
|
||||
& expectedBeaconPeriod );
|
||||
}
|
||||
else {
|
||||
status = envGetDoubleConfigParam ( & EPICS_CA_BEACON_PERIOD,
|
||||
& expectedBeaconPeriod );
|
||||
}
|
||||
assert ( status >=0 );
|
||||
|
||||
while ( 1 ) {
|
||||
@@ -2242,9 +2262,12 @@ void verifyReasonableBeaconPeriod ( chid chan )
|
||||
}
|
||||
}
|
||||
|
||||
void verifyOldPend ()
|
||||
void verifyOldPend ( unsigned interestLevel)
|
||||
{
|
||||
int status;
|
||||
|
||||
showProgressBegin ( "verifyOldPend", interestLevel );
|
||||
|
||||
/*
|
||||
* verify that the old ca_pend() is in the symbol table
|
||||
*/
|
||||
@@ -2252,9 +2275,11 @@ void verifyOldPend ()
|
||||
assert ( status == ECA_NORMAL );
|
||||
status = ca_pend ( 1e-12, 0 );
|
||||
assert ( status == ECA_TIMEOUT );
|
||||
|
||||
showProgressEnd ( interestLevel );
|
||||
}
|
||||
|
||||
void verifyTimeStamps ( chid chan )
|
||||
void verifyTimeStamps ( chid chan, unsigned interestLevel )
|
||||
{
|
||||
struct dbr_time_double first;
|
||||
struct dbr_time_double last;
|
||||
@@ -2264,17 +2289,19 @@ void verifyTimeStamps ( chid chan )
|
||||
double diff;
|
||||
int status;
|
||||
|
||||
showProgressBegin ( "verifyTimeStamps", interestLevel );
|
||||
|
||||
status = epicsTimeGetCurrent ( & localTime );
|
||||
assert ( status >= 0 );
|
||||
|
||||
status = ca_get ( DBR_TIME_DOUBLE, chan, & first );
|
||||
SEVCHK ( status, "fetch of dbr time double failed\n" );
|
||||
status = ca_pend_io ( 20.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
assert ( status == ECA_NORMAL );
|
||||
|
||||
status = ca_get ( DBR_TIME_DOUBLE, chan, & last );
|
||||
SEVCHK ( status, "fetch of dbr time double failed\n" );
|
||||
status = ca_pend_io ( 20.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
assert ( status == ECA_NORMAL );
|
||||
|
||||
length = epicsTimeToStrftime ( buf, sizeof ( buf ),
|
||||
@@ -2290,51 +2317,75 @@ void verifyTimeStamps ( chid chan )
|
||||
diff = epicsTimeDiffInSeconds ( & first.stamp, & localTime );
|
||||
printf ("Time difference between client and server %g sec\n",
|
||||
diff );
|
||||
|
||||
showProgressEnd ( interestLevel );
|
||||
}
|
||||
|
||||
/*
|
||||
* attempts to verify from the client side that
|
||||
* channel priorities work correctly
|
||||
*/
|
||||
void verifyChannelPriorities ( const char *pName )
|
||||
void verifyChannelPriorities ( const char *pName, unsigned interestLevel )
|
||||
{
|
||||
static const unsigned nPrio = 30;
|
||||
chid chanArray[ 30 ];
|
||||
double value;
|
||||
unsigned i;
|
||||
int status;
|
||||
|
||||
showProgressBegin ( "verifyChannelPriorities", interestLevel );
|
||||
|
||||
for ( i = 0u; i < nPrio; i++ ) {
|
||||
unsigned priority =
|
||||
( i * ( CA_PRIORITY_MAX - CA_PRIORITY_MIN ) ) / nPrio;
|
||||
priority += CA_PRIORITY_MIN;
|
||||
int status;
|
||||
double value;
|
||||
chid chan0, chan1;
|
||||
unsigned priority0, priority1;
|
||||
|
||||
priority0 = ( i * ( CA_PRIORITY_MAX - CA_PRIORITY_MIN ) ) / nPrio;
|
||||
priority0 += CA_PRIORITY_MIN;
|
||||
if ( priority0 > CA_PRIORITY_MAX ) {
|
||||
priority0 = CA_PRIORITY_MAX;
|
||||
}
|
||||
|
||||
priority1 = ( (i+1) * ( CA_PRIORITY_MAX - CA_PRIORITY_MIN ) ) / nPrio;
|
||||
priority1 += CA_PRIORITY_MIN;
|
||||
if ( priority1 > CA_PRIORITY_MAX ) {
|
||||
priority1 = CA_PRIORITY_MAX;
|
||||
}
|
||||
|
||||
status = ca_create_channel ( pName, 0, 0,
|
||||
priority, &chanArray[i] );
|
||||
priority0, &chan0 );
|
||||
SEVCHK ( status, "prioritized channel create failed" );
|
||||
}
|
||||
status = ca_pend_io ( 100.0 );
|
||||
SEVCHK ( status, "prioritized channel connect failed" );
|
||||
assert ( status == ECA_NORMAL );
|
||||
|
||||
for ( i = 0u; i < nPrio; i++ ) {
|
||||
status = ca_create_channel ( pName, 0, 0,
|
||||
priority1, &chan1 );
|
||||
SEVCHK ( status, "prioritized channel create failed" );
|
||||
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, "prioritized channel connect failed" );
|
||||
assert ( status == ECA_NORMAL );
|
||||
|
||||
value = i;
|
||||
status = ca_put ( DBR_DOUBLE, chanArray[i], &value );
|
||||
status = ca_put ( DBR_DOUBLE, chan0, &value );
|
||||
SEVCHK ( status, "prioritized channel put failed" );
|
||||
status = ca_put ( DBR_DOUBLE, chan1, &value );
|
||||
SEVCHK ( status, "prioritized channel put failed" );
|
||||
}
|
||||
status = ca_flush_io ();
|
||||
SEVCHK ( status, "prioritized channel flush failed" );
|
||||
|
||||
for ( i = 0u; i < nPrio; i++ ) {
|
||||
status = ca_get ( DBR_DOUBLE, chanArray[i], &value );
|
||||
status = ca_flush_io ();
|
||||
SEVCHK ( status, "prioritized channel flush failed" );
|
||||
|
||||
status = ca_get ( DBR_DOUBLE, chan0, &value );
|
||||
SEVCHK ( status, "prioritized channel get failed" );
|
||||
status = ca_get ( DBR_DOUBLE, chan1, &value );
|
||||
SEVCHK ( status, "prioritized channel get failed" );
|
||||
}
|
||||
status = ca_pend_io ( 10.0 );
|
||||
SEVCHK ( status, "prioritized channel pen io failed" );
|
||||
|
||||
for ( i = 0u; i < nPrio; i++ ) {
|
||||
status = ca_clear_channel ( chanArray[i] );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, "prioritized channel pend io failed" );
|
||||
|
||||
status = ca_clear_channel ( chan0 );
|
||||
SEVCHK ( status, "prioritized channel clear failed" );
|
||||
status = ca_clear_channel ( chan1 );
|
||||
SEVCHK ( status, "prioritized channel clear failed" );
|
||||
}
|
||||
|
||||
showProgressEnd ( interestLevel );
|
||||
}
|
||||
|
||||
void verifyImmediateTearDown ()
|
||||
@@ -2357,13 +2408,23 @@ int acctst ( char *pName, unsigned interestLevel, unsigned channelCount,
|
||||
{
|
||||
chid chan;
|
||||
int status;
|
||||
long lstatus;
|
||||
unsigned i;
|
||||
appChan *pChans;
|
||||
unsigned connections;
|
||||
unsigned maxArrayBytes = 10000000;
|
||||
|
||||
printf ( "CA Client V%s, channel name \"%s\"\n",
|
||||
ca_version (), pName );
|
||||
lstatus = envGetDoubleConfigParam ( &EPICS_CA_CONN_TMO, &timeoutToPendIO );
|
||||
if ( lstatus ) {
|
||||
timeoutToPendIO = 1e10;
|
||||
printf ( "EPICS \"%s\" double fetch failed\n",
|
||||
EPICS_CA_CONN_TMO.name);
|
||||
printf ( "Defaulting \"%s\" = %f\n",
|
||||
EPICS_CA_CONN_TMO.name, timeoutToPendIO );
|
||||
}
|
||||
|
||||
printf ( "CA Client V%s, channel name \"%s\", timeout %g\n",
|
||||
ca_version (), pName, timeoutToPendIO );
|
||||
if ( select == ca_enable_preemptive_callback ) {
|
||||
printf ( "Preemptive call back is enabled.\n" );
|
||||
}
|
||||
@@ -2384,14 +2445,15 @@ int acctst ( char *pName, unsigned interestLevel, unsigned channelCount,
|
||||
connections = ca_get_ioc_connection_count ();
|
||||
assert ( connections == 0u );
|
||||
|
||||
/* this test must be run when no channels are connected */
|
||||
unequalServerBufferSizeTest ( pName, interestLevel );
|
||||
|
||||
showProgressBegin ( "connecting to test channel", interestLevel );
|
||||
status = ca_search ( pName, & chan );
|
||||
SEVCHK ( status, NULL );
|
||||
assert ( strcmp ( pName, ca_name ( chan ) ) == 0 );
|
||||
status = ca_pend_io ( 100.0 );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, NULL );
|
||||
showProgressEnd ( interestLevel );
|
||||
|
||||
printf ( "native type was %s, native count was %lu\n",
|
||||
dbf_type_to_text ( ca_field_type ( chan ) ),
|
||||
@@ -2403,15 +2465,15 @@ int acctst ( char *pName, unsigned interestLevel, unsigned channelCount,
|
||||
printf ( "testing with a local channel\n" );
|
||||
}
|
||||
|
||||
grEnumTest ( chan, interestLevel );
|
||||
test_sync_groups ( chan, interestLevel );
|
||||
verifyChannelPriorities ( pName );
|
||||
verifyTimeStamps ( chan );
|
||||
verifyOldPend ();
|
||||
verifyChannelPriorities ( pName, interestLevel );
|
||||
verifyTimeStamps ( chan, interestLevel );
|
||||
verifyOldPend ( interestLevel );
|
||||
exceptionTest ( chan, interestLevel );
|
||||
arrayTest ( chan, maxArrayBytes, interestLevel );
|
||||
verifyMonitorSubscriptionFlushIO ( chan, interestLevel );
|
||||
monitorSubscriptionFirstUpdateTest ( pName, chan, interestLevel );
|
||||
grEnumTest ( chan, interestLevel );
|
||||
ctrlDoubleTest ( chan, interestLevel );
|
||||
verifyBlockInPendIO ( chan, interestLevel );
|
||||
verifyAnalogIO ( chan, DBR_FLOAT, FLT_MIN, FLT_MAX,
|
||||
@@ -2470,7 +2532,7 @@ int acctst ( char *pName, unsigned interestLevel, unsigned channelCount,
|
||||
SEVCHK ( ca_put ( DBR_PUT_ACKT, chan, &acktIn ), NULL );
|
||||
SEVCHK ( ca_put ( DBR_PUT_ACKS, chan, &acksIn ), NULL );
|
||||
SEVCHK ( ca_get ( DBR_STSACK_STRING, chan, &stsackOut ), NULL );
|
||||
SEVCHK ( ca_pend_io ( 2000.0 ), NULL );
|
||||
SEVCHK ( ca_pend_io ( timeoutToPendIO ), NULL );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -12,23 +12,24 @@
|
||||
#define addrListh
|
||||
|
||||
#include "shareLib.h"
|
||||
#include "envDefs.h"
|
||||
#include "envDefs.h"
|
||||
#include "osiSock.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
epicsShareFunc void epicsShareAPI configureChannelAccessAddressList
|
||||
( ELLLIST *pList, SOCKET sock, unsigned short port );
|
||||
( struct ELLLIST *pList, SOCKET sock, unsigned short port );
|
||||
|
||||
epicsShareFunc void epicsShareAPI addAddrToChannelAccessAddressList
|
||||
( ELLLIST *pList, const ENV_PARAM *pEnv, unsigned short port );
|
||||
( struct ELLLIST *pList, const ENV_PARAM *pEnv, unsigned short port );
|
||||
|
||||
epicsShareFunc void epicsShareAPI printChannelAccessAddressList
|
||||
( const ELLLIST *pList );
|
||||
( const struct ELLLIST *pList );
|
||||
|
||||
epicsShareFunc void epicsShareAPI removeDuplicateAddresses
|
||||
( ELLLIST *pDestList, ELLLIST *pSrcList, int silent);
|
||||
( struct ELLLIST *pDestList, ELLLIST *pSrcList, int silent);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -34,10 +34,14 @@ public:
|
||||
~autoPtrDestroy ();
|
||||
T & operator * () const;
|
||||
T * operator -> () const;
|
||||
autoPtrDestroy<T> & operator = ( T * );
|
||||
T * get () const;
|
||||
T * release ();
|
||||
private:
|
||||
T *p;
|
||||
// not implemented
|
||||
autoPtrDestroy<T> & operator = ( const autoPtrDestroy<T> & );
|
||||
autoPtrDestroy ( const autoPtrDestroy<T> & );
|
||||
};
|
||||
|
||||
template < class T >
|
||||
@@ -48,7 +52,7 @@ template < class T >
|
||||
inline autoPtrDestroy<T>::~autoPtrDestroy ()
|
||||
{
|
||||
if ( this->p ) {
|
||||
p->destroy ();
|
||||
this->p->destroy ();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,6 +68,16 @@ inline T * autoPtrDestroy<T>::operator -> () const
|
||||
return this->p;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline autoPtrDestroy<T> & autoPtrDestroy<T>::operator = ( T * pIn )
|
||||
{
|
||||
if ( this->p ) {
|
||||
this->p->destroy ();
|
||||
}
|
||||
this->p = pIn;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T * autoPtrDestroy<T>::get () const
|
||||
{
|
||||
|
||||
104
src/ca/autoPtrFreeList.h
Normal file
104
src/ca/autoPtrFreeList.h
Normal file
@@ -0,0 +1,104 @@
|
||||
/*************************************************************************\
|
||||
* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
* National Laboratory.
|
||||
* Copyright (c) 2002 The Regents of the University of California, as
|
||||
* Operator of Los Alamos National Laboratory.
|
||||
* EPICS BASE Versions 3.13.7
|
||||
* and higher are distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
|
||||
/*
|
||||
* $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 autoPtrFreeListh
|
||||
#define autoPtrFreeListh
|
||||
|
||||
#ifdef epicsExportSharedSymbols
|
||||
# define autoPtrFreeListh_epicsExportSharedSymbols
|
||||
# undef epicsExportSharedSymbols
|
||||
#endif
|
||||
|
||||
#include "tsFreeList.h"
|
||||
#include "cxxCompilerDependencies.h"
|
||||
|
||||
#ifdef autoPtrFreeListh_epicsExportSharedSymbols
|
||||
# define epicsExportSharedSymbols
|
||||
#endif
|
||||
|
||||
template < class T >
|
||||
class autoPtrFreeList {
|
||||
public:
|
||||
autoPtrFreeList ( tsFreeList < T > &, T * );
|
||||
~autoPtrFreeList ();
|
||||
T & operator * () const;
|
||||
T * operator -> () const;
|
||||
T * get () const;
|
||||
T * release ();
|
||||
private:
|
||||
T * p;
|
||||
tsFreeList < T > & freeList;
|
||||
// not implemented
|
||||
autoPtrFreeList & operator = ( const autoPtrFreeList & );
|
||||
autoPtrFreeList ( const autoPtrFreeList<T> & );
|
||||
};
|
||||
|
||||
template < class T >
|
||||
inline autoPtrFreeList<T>::autoPtrFreeList ( tsFreeList < T > & freeListIn, T * pIn ) :
|
||||
p ( pIn ), freeList ( freeListIn ) {}
|
||||
|
||||
template < class T >
|
||||
inline autoPtrFreeList<T>::~autoPtrFreeList ()
|
||||
{
|
||||
if ( this->p ) {
|
||||
this->p->~T();
|
||||
// its probably a good idea to require that the class has placement delete
|
||||
// by calling it during cleanup if the compiler supports it
|
||||
# if defined ( CXX_PLACEMENT_DELETE )
|
||||
T::operator delete ( this->p, this->freeList );
|
||||
# else
|
||||
this->freeList.release ( this->p );
|
||||
# endif
|
||||
}
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T & autoPtrFreeList<T>::operator * () const
|
||||
{
|
||||
return * this->p;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T * autoPtrFreeList<T>::operator -> () const
|
||||
{
|
||||
return this->p;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T * autoPtrFreeList<T>::get () const
|
||||
{
|
||||
return this->p;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T * autoPtrFreeList<T>::release ()
|
||||
{
|
||||
T *pTmp = this->p;
|
||||
this->p = 0;
|
||||
return pTmp;
|
||||
}
|
||||
|
||||
#endif // #ifdef autoPtrFreeListh
|
||||
@@ -42,6 +42,7 @@ private:
|
||||
cacRecycle &r;
|
||||
tsDLList < class baseNMIU > &eventq;
|
||||
chronIntIdResTable < baseNMIU > &ioTable;
|
||||
// not implemented
|
||||
autoPtrRecycle ( const autoPtrRecycle & );
|
||||
autoPtrRecycle & operator = ( const autoPtrRecycle & );
|
||||
};
|
||||
|
||||
118
src/ca/bhe.cpp
118
src/ca/bhe.cpp
@@ -19,7 +19,7 @@
|
||||
* Author: Jeff Hill
|
||||
*/
|
||||
|
||||
|
||||
#include <stdexcept>
|
||||
#include <limits.h>
|
||||
#include <float.h>
|
||||
|
||||
@@ -30,18 +30,6 @@
|
||||
#include "virtualCircuit.h"
|
||||
#include "bhe.h"
|
||||
|
||||
epicsSingleton < tsFreeList < class bhe, 1024 > > bhe::pFreeList;
|
||||
|
||||
void * bhe::operator new ( size_t size )
|
||||
{
|
||||
return bhe::pFreeList->allocate ( size );
|
||||
}
|
||||
|
||||
void bhe::operator delete ( void *pCadaver, size_t size )
|
||||
{
|
||||
bhe::pFreeList->release ( pCadaver, size );
|
||||
}
|
||||
|
||||
/*
|
||||
* set average to -1.0 so that when the next beacon
|
||||
* occurs we can distinguish between:
|
||||
@@ -56,9 +44,10 @@ void bhe::operator delete ( void *pCadaver, size_t size )
|
||||
* zero (so we can correctly compute the period
|
||||
* between the 1st and 2nd beacons)
|
||||
*/
|
||||
bhe::bhe ( const epicsTime & initialTimeStamp, const inetAddrID & addr ) :
|
||||
bhe::bhe ( const epicsTime & initialTimeStamp,
|
||||
unsigned initialBeaconNumber, const inetAddrID & addr ) epicsThrows (()) :
|
||||
inetAddrID ( addr ), timeStamp ( initialTimeStamp ), averagePeriod ( - DBL_MAX ),
|
||||
lastBeaconNumber ( UINT_MAX )
|
||||
lastBeaconNumber ( initialBeaconNumber )
|
||||
{
|
||||
# ifdef DEBUG
|
||||
{
|
||||
@@ -88,11 +77,15 @@ void bhe::beaconAnomalyNotify ()
|
||||
* updates beacon period, and looks for beacon anomalies
|
||||
*/
|
||||
bool bhe::updatePeriod ( const epicsTime & programBeginTime,
|
||||
const epicsTime & currentTime, unsigned beaconNumber,
|
||||
const epicsTime & currentTime, ca_uint32_t beaconNumber,
|
||||
unsigned protocolRevision )
|
||||
{
|
||||
//
|
||||
// this block is enetered if the beacon was created as a side effect of
|
||||
// creating a connection and so we dont yet know the first beacon time
|
||||
// and sequence number
|
||||
//
|
||||
if ( this->timeStamp == epicsTime () ) {
|
||||
|
||||
if ( CA_V410 ( protocolRevision ) ) {
|
||||
this->lastBeaconNumber = beaconNumber;
|
||||
}
|
||||
@@ -110,18 +103,33 @@ bool bhe::updatePeriod ( const epicsTime & programBeginTime,
|
||||
return false;
|
||||
}
|
||||
|
||||
// detect beacon duplications due to IP redundant packet routes
|
||||
// 1) detect beacon duplications due to redundant routes
|
||||
// 2) detect lost beacons due to input queue overrun or damage
|
||||
if ( CA_V410 ( protocolRevision ) ) {
|
||||
unsigned lastBeaconNumberSave = this->lastBeaconNumber;
|
||||
unsigned beaconSeqAdvance;
|
||||
if ( beaconNumber > this->lastBeaconNumber ) {
|
||||
beaconSeqAdvance = beaconNumber - this->lastBeaconNumber;
|
||||
}
|
||||
else {
|
||||
beaconSeqAdvance = ( ca_uint32_max - this->lastBeaconNumber ) + beaconNumber;
|
||||
}
|
||||
this->lastBeaconNumber = beaconNumber;
|
||||
if ( beaconNumber != lastBeaconNumberSave + 1 ) {
|
||||
|
||||
// throw out sequence numbers just prior to, or the same as, the last one received
|
||||
// (this situation is probably caused by a temporary duplicate route )
|
||||
if ( beaconSeqAdvance == 0 || beaconSeqAdvance > ca_uint32_max - 256 ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// throw out sequence numbers that jump forward by only a few numbers
|
||||
// (this situation is probably caused by a duplicate route
|
||||
// or a beacon due to input queue overun)
|
||||
if ( beaconSeqAdvance > 1 && beaconSeqAdvance < 4 ) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* compute the beacon period (if we have seen at least two beacons)
|
||||
*/
|
||||
// compute the beacon period (if we have seen at least two beacons)
|
||||
bool netChange = false;
|
||||
double currentPeriod = currentTime - this->timeStamp;
|
||||
if ( this->averagePeriod < 0.0 ) {
|
||||
@@ -191,10 +199,8 @@ bool bhe::updatePeriod ( const epicsTime & programBeginTime,
|
||||
netChange = true;
|
||||
}
|
||||
else {
|
||||
/*
|
||||
* update state of health for active virtual circuits
|
||||
* if the beacon looks ok
|
||||
*/
|
||||
// update state of health for active virtual circuits
|
||||
// if the beacon looks ok
|
||||
tsDLIter < tcpiiu > iter = this->iiuList.firstIter ();
|
||||
while ( iter.valid() ) {
|
||||
iter->beaconArrivalNotify ();
|
||||
@@ -202,20 +208,11 @@ bool bhe::updatePeriod ( const epicsTime & programBeginTime,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* update a running average period
|
||||
*/
|
||||
this->averagePeriod = currentPeriod * 0.125 + this->averagePeriod * 0.875;
|
||||
// update a running average period
|
||||
this->averagePeriod = currentPeriod * 0.125 +
|
||||
this->averagePeriod * 0.875;
|
||||
}
|
||||
|
||||
//{
|
||||
// char name[64];
|
||||
// this->name ( name, sizeof ( name ) );
|
||||
//
|
||||
// printf ( "new beacon period %f for %s\n",
|
||||
// this->averagePeriod, name );
|
||||
//}
|
||||
|
||||
this->timeStamp = currentTime;
|
||||
|
||||
return netChange;
|
||||
@@ -227,16 +224,16 @@ void bhe::show ( unsigned /* level */ ) const
|
||||
static_cast <const void *> ( this ), this->averagePeriod );
|
||||
}
|
||||
|
||||
void bhe::destroy ()
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
double bhe::period () const
|
||||
double bhe::period () const epicsThrows (())
|
||||
{
|
||||
return this->averagePeriod;
|
||||
}
|
||||
|
||||
epicsTime bhe::updateTime () const
|
||||
{
|
||||
return this->timeStamp;
|
||||
}
|
||||
|
||||
void bhe::registerIIU ( tcpiiu & iiu )
|
||||
{
|
||||
this->iiuList.add ( iiu );
|
||||
@@ -249,3 +246,34 @@ void bhe::unregisterIIU ( tcpiiu & iiu )
|
||||
this->averagePeriod = - DBL_MAX;
|
||||
}
|
||||
|
||||
void * bhe::operator new ( size_t ) // X aCC 361
|
||||
{
|
||||
// The HPUX compiler seems to require this even though no code
|
||||
// calls it directly
|
||||
throw std::logic_error ( "why is the compiler calling private operator new" );
|
||||
}
|
||||
|
||||
void bhe::operator delete ( void * )
|
||||
{
|
||||
// Visual C++ .net appears to require operator delete if
|
||||
// placement operator delete is defined? I smell a ms rat
|
||||
// because if I declare placement new and delete, but
|
||||
// comment out the placement delete definition there are
|
||||
// no undefined symbols.
|
||||
errlogPrintf ( "%s:%d this compiler is confused about placement delete - memory was probably leaked",
|
||||
__FILE__, __LINE__ );
|
||||
}
|
||||
|
||||
void * bheFreeStore::allocate ( size_t size )
|
||||
{
|
||||
return freeList.allocate ( size );
|
||||
}
|
||||
|
||||
void bheFreeStore::release ( void * pCadaver )
|
||||
{
|
||||
freeList.release ( pCadaver );
|
||||
}
|
||||
|
||||
epicsShareFunc bheMemoryManager::~bheMemoryManager () {}
|
||||
|
||||
|
||||
|
||||
67
src/ca/bhe.h
67
src/ca/bhe.h
@@ -28,48 +28,85 @@
|
||||
# undef epicsExportSharedSymbols
|
||||
#endif
|
||||
|
||||
#include "shareLib.h"
|
||||
|
||||
#include "tsDLList.h"
|
||||
#include "tsFreeList.h"
|
||||
#include "epicsSingleton.h"
|
||||
#include "epicsTime.h"
|
||||
#include "cxxCompilerDependencies.h"
|
||||
|
||||
#ifdef bhehEpicsExportSharedSymbols
|
||||
# define epicsExportSharedSymbols
|
||||
# include "shareLib.h"
|
||||
#endif
|
||||
|
||||
#include "inetAddrID.h"
|
||||
|
||||
#include "shareLib.h"
|
||||
#include "caProto.h"
|
||||
|
||||
class tcpiiu;
|
||||
class bheMemoryManager;
|
||||
|
||||
// using a pure abstract wrapper class around the free list avoids
|
||||
// Tornado 2.0.1 GNU compiler bugs
|
||||
class bheMemoryManager {
|
||||
public:
|
||||
epicsShareFunc virtual ~bheMemoryManager ();
|
||||
virtual void * allocate ( size_t ) = 0;
|
||||
virtual void release ( void * ) = 0;
|
||||
};
|
||||
|
||||
class bhe : public tsSLNode < bhe >, public inetAddrID {
|
||||
public:
|
||||
epicsShareFunc bhe ( const epicsTime &initialTimeStamp, const inetAddrID &addr );
|
||||
epicsShareFunc bhe ( const epicsTime & initialTimeStamp,
|
||||
unsigned initialBeaconNumber, const inetAddrID & addr ) epicsThrows (());
|
||||
epicsShareFunc ~bhe ();
|
||||
epicsShareFunc void destroy ();
|
||||
epicsShareFunc bool updatePeriod ( const epicsTime & programBeginTime,
|
||||
const epicsTime & currentTime, unsigned beaconNumber,
|
||||
unsigned protocolRevision );
|
||||
epicsShareFunc double period () const;
|
||||
epicsShareFunc bool updatePeriod (
|
||||
const epicsTime & programBeginTime,
|
||||
const epicsTime & currentTime, ca_uint32_t beaconNumber,
|
||||
unsigned protocolRevision );
|
||||
epicsShareFunc double period () const epicsThrows (());
|
||||
epicsShareFunc epicsTime updateTime () const;
|
||||
epicsShareFunc void show ( unsigned level) const;
|
||||
epicsShareFunc void registerIIU ( tcpiiu & );
|
||||
epicsShareFunc void unregisterIIU ( tcpiiu & );
|
||||
epicsShareFunc void * operator new ( size_t size );
|
||||
epicsShareFunc void operator delete ( void *pCadaver, size_t size );
|
||||
epicsShareFunc void * operator new ( size_t size, bheMemoryManager & );
|
||||
#ifdef CXX_PLACEMENT_DELETE
|
||||
epicsShareFunc void operator delete ( void *, bheMemoryManager & ) epicsThrows (());
|
||||
#endif
|
||||
private:
|
||||
tsDLList < tcpiiu > iiuList;
|
||||
epicsTime timeStamp;
|
||||
double averagePeriod;
|
||||
unsigned lastBeaconNumber;
|
||||
ca_uint32_t lastBeaconNumber;
|
||||
void beaconAnomalyNotify ();
|
||||
static epicsSingleton < tsFreeList < class bhe, 1024 > > pFreeList;
|
||||
bhe ( const bhe & );
|
||||
bhe & operator = ( const bhe & );
|
||||
void * operator new ( size_t size );
|
||||
epicsShareFunc void operator delete ( void * );
|
||||
};
|
||||
|
||||
// using a wrapper class around the free list avoids
|
||||
// Tornado 2.0.1 GNU compiler bugs
|
||||
class bheFreeStore : public bheMemoryManager {
|
||||
public:
|
||||
void * allocate ( size_t );
|
||||
void release ( void * );
|
||||
private:
|
||||
tsFreeList < bhe, 0x100 > freeList;
|
||||
};
|
||||
|
||||
inline void * bhe::operator new ( size_t size,
|
||||
bheMemoryManager & mgr )
|
||||
{
|
||||
return mgr.allocate ( size );
|
||||
}
|
||||
|
||||
#ifdef CXX_PLACEMENT_DELETE
|
||||
inline void bhe::operator delete ( void * pCadaver,
|
||||
bheMemoryManager & mgr ) epicsThrows(())
|
||||
{
|
||||
mgr.release ( pCadaver );
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // ifdef bheh
|
||||
|
||||
|
||||
|
||||
@@ -20,8 +20,9 @@ extern "C" {
|
||||
enum appendNumberFlag {appendNumber, dontAppendNumber};
|
||||
int catime ( char *channelName, unsigned channelCount, enum appendNumberFlag appNF );
|
||||
|
||||
int acctst ( char *pname, unsigned logggingInterestLevel, unsigned channelCount,
|
||||
unsigned repititionCount, enum ca_preemptive_callback_select select );
|
||||
int acctst ( char *pname, unsigned logggingInterestLevel,
|
||||
unsigned channelCount, unsigned repititionCount,
|
||||
enum ca_preemptive_callback_select select );
|
||||
|
||||
#define CATIME_OK 0
|
||||
#define CATIME_ERROR -1
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "cadef.h"
|
||||
#include "dbDefs.h"
|
||||
@@ -25,44 +26,68 @@ extern "C" void eventCallBack ( struct event_handler_args args )
|
||||
(*pCount)++;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* caEventRate ()
|
||||
*/
|
||||
void caEventRate ( const char *pName )
|
||||
void caEventRate ( const char *pName, unsigned count )
|
||||
{
|
||||
static const double initialSamplePeriod = 1.0;
|
||||
static const double maxSamplePeriod = 60.0 * 60.0;
|
||||
|
||||
printf ( "Connecting to CA Channel \"%s\".", pName );
|
||||
fflush ( stdout );
|
||||
|
||||
chid chan;
|
||||
int status = ca_search ( pName, &chan );
|
||||
SEVCHK(status, NULL);
|
||||
|
||||
unsigned eventCount = 0u;
|
||||
status = ca_add_event ( DBR_FLOAT, chan, eventCallBack, &eventCount, NULL);
|
||||
SEVCHK ( status, __FILE__ );
|
||||
|
||||
status = ca_pend_io ( 10.0 );
|
||||
if ( status != ECA_NORMAL ) {
|
||||
errlogPrintf ( "caEventRate: %s not found\n", pName );
|
||||
fprintf ( stderr, " not found.\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
printf ( " done.\n" );
|
||||
|
||||
printf ( "Subscribing %u times.", count );
|
||||
fflush ( stdout );
|
||||
|
||||
unsigned eventCount = 0u;
|
||||
for ( unsigned i = 0u; i < count; i++ ) {
|
||||
status = ca_add_event ( DBR_FLOAT, chan, eventCallBack, &eventCount, NULL);
|
||||
SEVCHK ( status, __FILE__ );
|
||||
}
|
||||
|
||||
status = ca_flush_io ();
|
||||
SEVCHK ( status, __FILE__ );
|
||||
|
||||
printf ( " done.\n" );
|
||||
|
||||
printf ( "Waiting for initial value events." );
|
||||
fflush ( stdout );
|
||||
|
||||
// let the first one go by
|
||||
while ( eventCount < 1u ) {
|
||||
while ( eventCount < count ) {
|
||||
status = ca_pend_event ( 0.01 );
|
||||
if ( status != ECA_TIMEOUT ) {
|
||||
SEVCHK ( status, NULL );
|
||||
}
|
||||
}
|
||||
|
||||
printf ( " done.\n" );
|
||||
|
||||
double samplePeriod = initialSamplePeriod;
|
||||
double X = 0.0;
|
||||
double XX = 0.0;
|
||||
unsigned N = 0u;
|
||||
while ( true ) {
|
||||
unsigned nEvents, lastEventCount, curEventCount;
|
||||
|
||||
epicsTime begin = epicsTime::getCurrent ();
|
||||
lastEventCount = eventCount;
|
||||
status = ca_pend_event ( samplePeriod );
|
||||
curEventCount = eventCount;
|
||||
epicsTime end = epicsTime::getCurrent ();
|
||||
if ( status != ECA_TIMEOUT ) {
|
||||
SEVCHK ( status, NULL );
|
||||
}
|
||||
@@ -71,11 +96,22 @@ void caEventRate ( const char *pName )
|
||||
nEvents = curEventCount - lastEventCount;
|
||||
}
|
||||
else {
|
||||
nEvents = ( UINT_MAX - lastEventCount ) + curEventCount +1u;
|
||||
nEvents = ( UINT_MAX - lastEventCount ) + curEventCount + 1u;
|
||||
}
|
||||
|
||||
errlogPrintf ( "CA Channel \"%s\" is producing %g subscription update events per second.\n",
|
||||
pName, nEvents / samplePeriod );
|
||||
N++;
|
||||
|
||||
double period = end - begin;
|
||||
double Hz = nEvents / period;
|
||||
|
||||
X += Hz;
|
||||
XX += Hz * Hz;
|
||||
|
||||
double mean = X / N;
|
||||
double stdDev = sqrt ( XX / N - mean * mean );
|
||||
|
||||
printf ( "CA Event Rate (Hz): current %g mean %g std dev %g\n",
|
||||
Hz, mean, stdDev );
|
||||
|
||||
if ( samplePeriod < maxSamplePeriod ) {
|
||||
samplePeriod += samplePeriod;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user