1*66bae5e7Schristos#### Nonstop configurations
2*66bae5e7Schristos    # Common for all
3*66bae5e7Schristos    'nonstop-common' => {
4*66bae5e7Schristos        inherit_from     => [ 'BASE_unix' ],
5*66bae5e7Schristos        template         => 1,
6*66bae5e7Schristos        cc               => 'c99',
7*66bae5e7Schristos        cflags           => add_before(picker(debug   => '-g -O0',
8*66bae5e7Schristos                                              release => '-g -O2'),
9*66bae5e7Schristos                                       '-Wextensions',
10*66bae5e7Schristos                                       '-Wnowarn=203,220,272,734,770,1506',
11*66bae5e7Schristos                                       '-Wbuild_neutral_library',
12*66bae5e7Schristos                                       '-Wverbose'),
13*66bae5e7Schristos        defines          => add('OPENSSL_VPROC=$(OPENSSL_VPROC)',
14*66bae5e7Schristos                                '_XOPEN_SOURCE',
15*66bae5e7Schristos                                '_XOPEN_SOURCE_EXTENDED=1',
16*66bae5e7Schristos                                '_TANDEM_SOURCE',
17*66bae5e7Schristos                                'B_ENDIAN'),
18*66bae5e7Schristos        perl             => '/usr/bin/perl',
19*66bae5e7Schristos        shared_target    => 'nonstop-shared',
20*66bae5e7Schristos        shared_extension => ".so",
21*66bae5e7Schristos        ex_libs          => add('-lrld'),
22*66bae5e7Schristos        enable           => ['egd'],
23*66bae5e7Schristos        dso_scheme       => 'DLFCN',
24*66bae5e7Schristos        sys_id           => 'TANDEM',
25*66bae5e7Schristos    },
26*66bae5e7Schristos
27*66bae5e7Schristos    ######################################################################
28*66bae5e7Schristos    # Additional variant settings, to be combined with nonstop-common
29*66bae5e7Schristos    # Note that these do not inherit anything.  However, the diverse values
30*66bae5e7Schristos    # are merged with other entries in an 'inherit_from'.
31*66bae5e7Schristos    #
32*66bae5e7Schristos    # These combine:
33*66bae5e7Schristos    # - System architecture (MIPS, Itanium, or x86)
34*66bae5e7Schristos    # - Execution environment (oss [default] or guardian)
35*66bae5e7Schristos    #
36*66bae5e7Schristos    # Unfortunately, they can't be separated into independent templates, because
37*66bae5e7Schristos    # a number of the above are encoded as different linkers, and by consequence,
38*66bae5e7Schristos    # different c99 linker flags (-Wld, -Weld, and -Wxld)
39*66bae5e7Schristos    #
40*66bae5e7Schristos    # In addition, the are modifiers for:
41*66bae5e7Schristos    # - Size of long + pointer (ilp32 [default] and lp64)
42*66bae5e7Schristos    # - Float type (neutral and tandem)
43*66bae5e7Schristos    #
44*66bae5e7Schristos    # Unfortunately, because the float types affect the linker settings, those
45*66bae5e7Schristos    # are divided per system architecture
46*66bae5e7Schristos    #
47*66bae5e7Schristos    # MIPS + guardian (unused but present for convenience):
48*66bae5e7Schristos    'nonstop-archenv-mips-guardian' => {
49*66bae5e7Schristos        template         => 1,
50*66bae5e7Schristos        defines          => ['NO_GETPID'],
51*66bae5e7Schristos        cflags           => '-Wtarget=tns/r -Wsystype=guardian',
52*66bae5e7Schristos        lflags           => '-Wld="-set systype guardian"',
53*66bae5e7Schristos        shared_ldflag    => '-Wshared -Wld="-soname $(@:lib%.so=%)"',
54*66bae5e7Schristos        shared_defflag   => '-Wld_obey=',
55*66bae5e7Schristos        shared_argfileflag => '-Wld_obey=',
56*66bae5e7Schristos    },
57*66bae5e7Schristos
58*66bae5e7Schristos    # Itanium + guardian:
59*66bae5e7Schristos    'nonstop-archenv-itanium-guardian' => {
60*66bae5e7Schristos        template         => 1,
61*66bae5e7Schristos        defines          => ['NO_GETPID', '_TANDEM_ARCH=2'],
62*66bae5e7Schristos        cflags           => '-Wtarget=tns/e -Wsystype=guardian',
63*66bae5e7Schristos        lflags           => '-Weld="-set systype guardian"',
64*66bae5e7Schristos        shared_ldflag    => '-Wshared -Weld="-soname $(@:lib%.so=%)"',
65*66bae5e7Schristos        shared_defflag   => '-Weld_obey=',
66*66bae5e7Schristos        shared_argfileflag => '-Weld_obey=',
67*66bae5e7Schristos    },
68*66bae5e7Schristos
69*66bae5e7Schristos    # x86 + guardian:
70*66bae5e7Schristos    'nonstop-archenv-x86_64-guardian' => {
71*66bae5e7Schristos        template         => 1,
72*66bae5e7Schristos        defines          => ['NO_GETPID', '_TANDEM_ARCH=3'],
73*66bae5e7Schristos        cflags           => '-Wtarget=tns/x -Wsystype=guardian',
74*66bae5e7Schristos        lflags           => '-Wxld="-set systype guardian"',
75*66bae5e7Schristos        shared_ldflag    => '-Wshared -Wxld="-soname $(@:lib%.so=%)"',
76*66bae5e7Schristos        shared_defflag   => '-Wxld_obey=',
77*66bae5e7Schristos        shared_argfileflag => '-Wxld_obey=',
78*66bae5e7Schristos    },
79*66bae5e7Schristos
80*66bae5e7Schristos    # MIPS + oss (unused but present for convenience):
81*66bae5e7Schristos    'nonstop-archenv-mips-oss' => {
82*66bae5e7Schristos        template         => 1,
83*66bae5e7Schristos        cflags           => '-Wtarget=tns/r -Wsystype=oss',
84*66bae5e7Schristos        lflags           => '-Wld="-set systype oss"',
85*66bae5e7Schristos        shared_ldflag    => '-Wshared',
86*66bae5e7Schristos        shared_defflag   => '-Wld_obey=',
87*66bae5e7Schristos        shared_argfileflag => '-Wld_obey=',
88*66bae5e7Schristos    },
89*66bae5e7Schristos    # Itanium + oss:
90*66bae5e7Schristos    'nonstop-archenv-itanium-oss' => {
91*66bae5e7Schristos        template         => 1,
92*66bae5e7Schristos        defines          => ['_TANDEM_ARCH=2'],
93*66bae5e7Schristos        cflags           => '-Wtarget=tns/e -Wsystype=oss',
94*66bae5e7Schristos        lflags           => '-Weld="-set systype oss"',
95*66bae5e7Schristos        shared_ldflag    => '-Wshared',
96*66bae5e7Schristos        shared_defflag   => '-Weld_obey=',
97*66bae5e7Schristos        shared_argfileflag => '-Weld_obey=',
98*66bae5e7Schristos    },
99*66bae5e7Schristos    # x86_64 + oss:
100*66bae5e7Schristos    'nonstop-archenv-x86_64-oss' => {
101*66bae5e7Schristos        template         => 1,
102*66bae5e7Schristos        defines          => ['_TANDEM_ARCH=3'],
103*66bae5e7Schristos        cflags           => '-Wtarget=tns/x -Wsystype=oss',
104*66bae5e7Schristos        lflags           => '-Wxld="-set systype oss"',
105*66bae5e7Schristos        shared_ldflag    => '-Wshared',
106*66bae5e7Schristos        shared_defflag   => '-Wxld_obey=',
107*66bae5e7Schristos        shared_argfileflag => '-Wxld_obey=',
108*66bae5e7Schristos    },
109*66bae5e7Schristos
110*66bae5e7Schristos    # Size variants
111*66bae5e7Schristos    'nonstop-ilp32' => {
112*66bae5e7Schristos        template         => 1,
113*66bae5e7Schristos        cflags           => '-Wilp32',
114*66bae5e7Schristos        bn_ops           => 'THIRTY_TWO_BIT',
115*66bae5e7Schristos    },
116*66bae5e7Schristos    'nonstop-lp64-itanium' => {
117*66bae5e7Schristos        template         => 1,
118*66bae5e7Schristos        cflags           => '-Wlp64',
119*66bae5e7Schristos        bn_ops           => 'SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR',
120*66bae5e7Schristos    },
121*66bae5e7Schristos    'nonstop-lp64-x86_64' => {
122*66bae5e7Schristos        template         => 1,
123*66bae5e7Schristos        cflags           => '-Wlp64',
124*66bae5e7Schristos        lflags           => '-Wxld="-set data_model lp64"',
125*66bae5e7Schristos        bn_ops           => 'SIXTY_FOUR_BIT',
126*66bae5e7Schristos    },
127*66bae5e7Schristos
128*66bae5e7Schristos    # Float variants
129*66bae5e7Schristos    'nonstop-nfloat-mips' => {
130*66bae5e7Schristos        template         => 1,
131*66bae5e7Schristos        lflags           => '-Wld="-set floattype neutral_float"',
132*66bae5e7Schristos    },
133*66bae5e7Schristos    'nonstop-tfloat-mips' => {
134*66bae5e7Schristos        template         => 1,
135*66bae5e7Schristos        lflags           => '-Wld="-set floattype tandem_float"',
136*66bae5e7Schristos    },
137*66bae5e7Schristos    'nonstop-efloat-itanium' => {
138*66bae5e7Schristos        template         => 1,
139*66bae5e7Schristos        cflags           => '-WIEEE_float',
140*66bae5e7Schristos        lflags           => '-Weld="-set floattype ieee_float"',
141*66bae5e7Schristos    },
142*66bae5e7Schristos    'nonstop-nfloat-itanium' => {
143*66bae5e7Schristos        template         => 1,
144*66bae5e7Schristos        lflags           => '-Weld="-set floattype neutral_float"',
145*66bae5e7Schristos    },
146*66bae5e7Schristos    'nonstop-tfloat-itanium' => {
147*66bae5e7Schristos        template         => 1,
148*66bae5e7Schristos        cflags           => '-WTandem_float',
149*66bae5e7Schristos        lflags           => '-Weld="-set floattype tandem_float"',
150*66bae5e7Schristos    },
151*66bae5e7Schristos    'nonstop-efloat-x86_64' => {
152*66bae5e7Schristos        template         => 1,
153*66bae5e7Schristos        cflags           => '-WIEEE_float',
154*66bae5e7Schristos        lflags           => '-Wxld="-set floattype ieee_float"',
155*66bae5e7Schristos    },
156*66bae5e7Schristos    'nonstop-nfloat-x86_64' => {
157*66bae5e7Schristos        template         => 1,
158*66bae5e7Schristos        lflags           => '-Wxld="-set floattype neutral_float"',
159*66bae5e7Schristos    },
160*66bae5e7Schristos    'nonstop-tfloat-x86_64' => {
161*66bae5e7Schristos        template         => 1,
162*66bae5e7Schristos        cflags           => '-WTandem_float',
163*66bae5e7Schristos        lflags           => '-Wxld="-set floattype tandem_float"',
164*66bae5e7Schristos    },
165*66bae5e7Schristos
166*66bae5e7Schristos    ######################################################################
167*66bae5e7Schristos    # Build models
168*66bae5e7Schristos    'nonstop-model-put' => {
169*66bae5e7Schristos        template         => 1,
170*66bae5e7Schristos        defines          => ['_PUT_MODEL_',
171*66bae5e7Schristos                             '_REENTRANT', '_THREAD_SUPPORT_FUNCTIONS'],
172*66bae5e7Schristos        ex_libs          => '-lput',
173*66bae5e7Schristos    },
174*66bae5e7Schristos    'nonstop-model-spt' => {
175*66bae5e7Schristos        template         => 1,
176*66bae5e7Schristos        defines          => ['_SPT_MODEL_',
177*66bae5e7Schristos                             '_REENTRANT', '_ENABLE_FLOSS_THREADS'],
178*66bae5e7Schristos        ex_libs          => '-lspt',
179*66bae5e7Schristos    },
180*66bae5e7Schristos
181*66bae5e7Schristos    # Additional floss model that can be combined with any of the other models.
182*66bae5e7Schristos    # If used without any of the other models, the entry that does so must
183*66bae5e7Schristos    # disable threads.
184*66bae5e7Schristos    'nonstop-model-floss' => {
185*66bae5e7Schristos        template         => 1,
186*66bae5e7Schristos        defines          => ['OPENSSL_TANDEM_FLOSS'],
187*66bae5e7Schristos        includes         => ['/usr/local/include'],
188*66bae5e7Schristos        ex_libs          => '-lfloss',
189*66bae5e7Schristos    },
190*66bae5e7Schristos
191*66bae5e7Schristos    ######################################################################
192*66bae5e7Schristos    # Now for the entries themselves, let's combine things!
193*66bae5e7Schristos    'nonstop-nsx' => {
194*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
195*66bae5e7Schristos                              'nonstop-archenv-x86_64-oss',
196*66bae5e7Schristos                              'nonstop-ilp32',
197*66bae5e7Schristos                              'nonstop-efloat-x86_64' ],
198*66bae5e7Schristos        disable          => ['threads'],
199*66bae5e7Schristos    },
200*66bae5e7Schristos    'nonstop-nsx_put' => {
201*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
202*66bae5e7Schristos                              'nonstop-archenv-x86_64-oss',
203*66bae5e7Schristos                              'nonstop-ilp32',
204*66bae5e7Schristos                              'nonstop-efloat-x86_64',
205*66bae5e7Schristos                              'nonstop-model-put' ],
206*66bae5e7Schristos        multilib         => '-put',
207*66bae5e7Schristos    },
208*66bae5e7Schristos    'nonstop-nsx_64' => {
209*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
210*66bae5e7Schristos                              'nonstop-archenv-x86_64-oss',
211*66bae5e7Schristos                              'nonstop-lp64-x86_64',
212*66bae5e7Schristos                              'nonstop-efloat-x86_64' ],
213*66bae5e7Schristos        multilib         => '64',
214*66bae5e7Schristos        disable          => ['threads'],
215*66bae5e7Schristos    },
216*66bae5e7Schristos    'nonstop-nsx_64_put' => {
217*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
218*66bae5e7Schristos                              'nonstop-archenv-x86_64-oss',
219*66bae5e7Schristos                              'nonstop-lp64-x86_64',
220*66bae5e7Schristos                              'nonstop-efloat-x86_64',
221*66bae5e7Schristos                              'nonstop-model-put' ],
222*66bae5e7Schristos        multilib         => '64-put',
223*66bae5e7Schristos    },
224*66bae5e7Schristos    'nonstop-nsx_spt' => {
225*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
226*66bae5e7Schristos                              'nonstop-archenv-x86_64-oss',
227*66bae5e7Schristos                              'nonstop-ilp32',
228*66bae5e7Schristos                              'nonstop-efloat-x86_64',
229*66bae5e7Schristos                              'nonstop-model-spt' ],
230*66bae5e7Schristos        multilib         => '-spt',
231*66bae5e7Schristos    },
232*66bae5e7Schristos    'nonstop-nsx_spt_floss' => {
233*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
234*66bae5e7Schristos                              'nonstop-archenv-x86_64-oss',
235*66bae5e7Schristos                              'nonstop-ilp32',
236*66bae5e7Schristos                              'nonstop-efloat-x86_64',
237*66bae5e7Schristos                              'nonstop-model-floss',
238*66bae5e7Schristos                              'nonstop-model-spt'],
239*66bae5e7Schristos        multilib         => '-spt',
240*66bae5e7Schristos    },
241*66bae5e7Schristos    'nonstop-nsx_g' => {
242*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
243*66bae5e7Schristos                              'nonstop-archenv-x86_64-guardian',
244*66bae5e7Schristos                              'nonstop-ilp32', 'nonstop-nfloat-x86_64' ],
245*66bae5e7Schristos        disable          => ['threads'],
246*66bae5e7Schristos    },
247*66bae5e7Schristos    'nonstop-nsx_g_tandem' => {
248*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
249*66bae5e7Schristos                              'nonstop-archenv-x86_64-guardian',
250*66bae5e7Schristos                              'nonstop-ilp32', 'nonstop-tfloat-x86_64' ],
251*66bae5e7Schristos        disable          => ['threads'],
252*66bae5e7Schristos    },
253*66bae5e7Schristos    'nonstop-nsv' => {
254*66bae5e7Schristos        inherit_from     => [ 'nonstop-nsx' ],
255*66bae5e7Schristos    },
256*66bae5e7Schristos    'nonstop-nse' => {
257*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
258*66bae5e7Schristos                              'nonstop-archenv-itanium-oss',
259*66bae5e7Schristos                              'nonstop-ilp32',
260*66bae5e7Schristos                              'nonstop-efloat-itanium' ],
261*66bae5e7Schristos        disable          => ['threads'],
262*66bae5e7Schristos    },
263*66bae5e7Schristos    'nonstop-nse_put' => {
264*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
265*66bae5e7Schristos                              'nonstop-archenv-itanium-oss',
266*66bae5e7Schristos                              'nonstop-ilp32',
267*66bae5e7Schristos                              'nonstop-efloat-itanium',
268*66bae5e7Schristos                              'nonstop-model-put' ],
269*66bae5e7Schristos        multilib         => '-put',
270*66bae5e7Schristos    },
271*66bae5e7Schristos    'nonstop-nse_64' => {
272*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
273*66bae5e7Schristos                              'nonstop-archenv-itanium-oss',
274*66bae5e7Schristos                              'nonstop-lp64-itanium',
275*66bae5e7Schristos                              'nonstop-efloat-itanium' ],
276*66bae5e7Schristos        multilib         => '64',
277*66bae5e7Schristos        disable          => ['threads'],
278*66bae5e7Schristos    },
279*66bae5e7Schristos    'nonstop-nse_64_put' => {
280*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
281*66bae5e7Schristos                              'nonstop-archenv-itanium-oss',
282*66bae5e7Schristos                              'nonstop-lp64-itanium',
283*66bae5e7Schristos                              'nonstop-efloat-itanium',
284*66bae5e7Schristos                              'nonstop-model-put' ],
285*66bae5e7Schristos        multilib         => '64-put',
286*66bae5e7Schristos    },
287*66bae5e7Schristos    'nonstop-nse_spt' => {
288*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
289*66bae5e7Schristos                              'nonstop-archenv-itanium-oss',
290*66bae5e7Schristos                              'nonstop-ilp32',
291*66bae5e7Schristos                              'nonstop-efloat-itanium',
292*66bae5e7Schristos                              'nonstop-model-spt' ],
293*66bae5e7Schristos        multilib         => '-spt',
294*66bae5e7Schristos    },
295*66bae5e7Schristos    'nonstop-nse_spt_floss' => {
296*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
297*66bae5e7Schristos                              'nonstop-archenv-itanium-oss',
298*66bae5e7Schristos                              'nonstop-ilp32',
299*66bae5e7Schristos                              'nonstop-efloat-itanium',
300*66bae5e7Schristos                              'nonstop-model-floss', 'nonstop-model-spt' ],
301*66bae5e7Schristos        multilib         => '-spt',
302*66bae5e7Schristos    },
303*66bae5e7Schristos    'nonstop-nse_g' => {
304*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
305*66bae5e7Schristos                              'nonstop-archenv-itanium-guardian',
306*66bae5e7Schristos                              'nonstop-ilp32', 'nonstop-nfloat-itanium' ],
307*66bae5e7Schristos        disable          => ['threads'],
308*66bae5e7Schristos    },
309*66bae5e7Schristos
310*66bae5e7Schristos    'nonstop-nse_g_tandem' => {
311*66bae5e7Schristos        inherit_from     => [ 'nonstop-common',
312*66bae5e7Schristos                              'nonstop-archenv-itanium-guardian',
313*66bae5e7Schristos                              'nonstop-ilp32', 'nonstop-tfloat-itanium' ],
314*66bae5e7Schristos        disable          => ['threads'],
315*66bae5e7Schristos    },
316