1#############################################################################
2# Software Testing Automation Framework (STAF)                              #
3# (C) Copyright IBM Corp. 2001, 2005                                        #
4#                                                                           #
5# This software is licensed under the Eclipse Public License (EPL) V1.0.    #
6#############################################################################
7
8################################################################################
9#                             Master Variables                                 #
10################################################################################
11
12.SUFFIXES: .o .obj .d .cpp .rxp .rxl .cfg
13SUBSYS := staf
14
15ifndef BUILD_TYPE
16    BUILD_TYPE := retail
17endif
18
19MAKEDIR := $(shell pwd)
20SPACE := $(EMPTY) $(EMPTY)
21INIT_INCLUDE := $(INCLUDE)
22
23################################################################################
24#                          Configuration Settings                              #
25################################################################################
26
27ifneq ($(wildcard makefile.cfg),)
28    include makefile.cfg
29endif
30
31################################################################################
32#                             Projects to build                                #
33################################################################################
34
35ifndef PROJECTS
36    PROJECTS := staf connprov_tcp connprov_localipc
37endif
38
39ifeq ($(PROJECTS),all)
40    PROJECTS := staf connprov_tcp connprov_localipc zip java perl python tcl ant demo
41endif
42
43# Here's a list of all possible projects to build, including external Java services
44# PROJECTS := staf connprov_tcp connprov_localipc zip java perl python tcl ant demo rexx docs authsample lite device jython stax event eventmanager cron http whoami email fsext sxe timer namedcounter namespace ftp
45
46################################################################################
47#                         Operating System Makefile                            #
48################################################################################
49
50ifndef OS_NAME
51    OS_NAME := UNKNOWN_OPERATING_SYSTEM
52    $(error Unknown operating system.  Please set the OS_NAME environment variable)
53endif
54
55include build/makefile.$(OS_NAME)
56
57################################################################################
58#                             Compiler Makefile                                #
59################################################################################
60
61ifndef CC_NAME
62    CC_NAME := UNKNOWN_COMPILER
63    $(error Unknown compiler.  Please set the CC_NAME environment variable)
64endif
65
66include build/makefile.$(CC_NAME)
67
68################################################################################
69#                                 Makefiles                                    #
70################################################################################
71
72ALLMAKEFILES = $(foreach PROJECT, $(PROJECTS),\
73               $(shell find $(MAKEDIR) -name "*makefile.$(PROJECT)" -print))
74
75################################################################################
76# AT            : Turns echo off or on for some commands.  Turning echo on     #
77#                 can be useful when debugging a build problem                 #
78#                 Valid Values:  @ (echo off) or nothing (echo on)             #
79#                 Default     : Turn echo off, AT=@                            #
80################################################################################
81
82ifndef AT
83    AT := @
84else
85    # Verify that AT is set to either @ or to nothing
86    ifeq ($(AT),@)
87        $(info AT=@)
88    else
89        ifeq ($(AT),)
90            $(info AT=)
91        else
92            $(error The AT environment variable can only be set to @ to turn off echo or to nothing to turn on echo)
93        endif
94    endif
95endif
96
97################################################################################
98#                             Common Variables                                 #
99################################################################################
100# These variables represent common variables needed throughout the makefiles.  #
101# These variables are only valid when interpreted by make or the unix/cygwin   #
102# shell.  Caution should be used if/when passing them to operating system      #
103# specific commands, or when using them in operating system specific ways.     #
104# You should normally use the operating system specific versions defined later #
105# on in the Operating System section.                                          #
106################################################################################
107
108OS_PATHNAME    := $(OS_NAME)
109
110ifdef OS_SUBNAME
111  OS_PATHNAME  := $(OS_NAME)/$(OS_SUBNAME)
112endif
113
114ROOT           := $(MAKEDIR:/src/$(SUBSYS)=)
115SRC            := $(ROOT)/src/$(SUBSYS)
116O              := $(ROOT)/obj/$(OS_PATHNAME)/$(SUBSYS)/$(BUILD_TYPE)
117REL            := $(ROOT)/rel/$(OS_PATHNAME)/$(SUBSYS)/$(BUILD_TYPE)
118PKG            := $(ROOT)/pkg/$(OS_PATHNAME)/$(SUBSYS)/$(BUILD_TYPE)/staf
119PKG_ROOT       := $(ROOT)/pkg/$(OS_PATHNAME)/$(SUBSYS)/$(BUILD_TYPE)
120SUBSYS_REL_SRC  = $(SRC)/$(SUBSYS_REL)
121SR_SRC          = $(SUBSYS_REL_SRC)
122LIB_STAF        = $(subst Name,STAF,$(DLL))
123LIB_STAF_FP     = $(REL)/lib/$(LIB_STAF)
124
125################################################################################
126#                                   Java                                       #
127################################################################################
128# Note: Below XX refers to the generic version of Java being used.  For        #
129#       example, V11 refers to JDK 1.1.x and V12 refers to JDK 1.2.x (or       #
130#       higher, as there are no STAF related differences after JDK 1.2.x).     #
131################################################################################
132# Note: In general (particularly on Unix systems), it is sufficient to set     #
133#       the JAVA_VXX_ROOT, JAVA_BUILD_VXX, and JAVA_DEFAULT_VERSION            #
134#       variables.  The rest of the variables will be filled in appropriately. #
135################################################################################
136# JAVA_VXX_ROOT            : Root of JDK install.  This is usually the only    #
137#                            thing that need needs to be set.                  #
138#                            Default: set in OS include file                   #
139#                                                                              #
140# JAVA_VXX_BIN_DIR         : Location of Java executables, e.g. javac, etc.    #
141#                            Default: $(JAVA_VXX_ROOT)/bin                     #
142#                                                                              #
143# JAVA_VXX_INCLUDE_DIR     : Location of Java include files                    #
144#                            Default: $(JAVA_VXX_ROOT)/include                 #
145#                                                                              #
146# JAVA_VXX_OS_NAME         : Name by which the JDK knows this operating system #
147#                            Default: $(OS_NAME)                               #
148#                                                                              #
149# JAVA_VXX_INCLUDE_OS_NAME : Name by which the JDK knows this operating system #
150#                            with respect to the include directory             #
151#                            Default: $(JAVA_VXX_OS_NAME)                      #
152#                                                                              #
153# JAVA_VXX_LIBDIR_OS_NAME  : Name by which the JDK knows this operating system #
154#                            with respect to the lib directory                 #
155#                            Default: $(JAVA_VXX_OS_NAME)                      #
156#                                                                              #
157# JAVA_VXX_INCLUDE_OS_DIR  : Location of OS specific Java include files        #
158#                            Default: $(JAVA_VXX_INCLUDE_DIR)/                 #
159#                                     $(JAVA_VXX_OS_NAME)                      #
160#                                                                              #
161# JAVA_VXX_INCLUDEDIRS     : All necessary Java include file directories       #
162#                            Default: $(JAVA_VXX_INCLUDE_DIR)                  #
163#                                     $(JAVA_VXX_INCLUDE_OS_DIR)               #
164#                                                                              #
165# JAVA_VXX_CC_FLAGS        : Compiler flags necessary to build JNI code        #
166#                            Default: no default                               #
167#                                                                              #
168# JAVA_VXX_LIBS            : Libraries needed to link Java code                #
169#                            Default: java (V11), jvm (V12)                    #
170#                                                                              #
171# JAVA_VXX_LIBDIRS         : Locations of Java libraries                       #
172#                            Default: no default                               #
173#                                                                              #
174# JAVA_VXX_CLASSPATH       : CLASSPATH of necessary JDK classes                #
175#                            Default: $(JAVA_VXX_ROOT)/lib/classes.zip         #
176#                                                                              #
177# JAVAC_VXX                : The javac command                                 #
178#                            Default: $(JAVA_VXX_BIN_DIR)/javac                #
179#                                                                              #
180# JAVAH_VXX                : The javah command                                 #
181#                            Default: $(JAVA_VXX_BIN_DIR)/javah                #
182#                                                                              #
183# JAR_VXX                  : The jar command                                   #
184#                            Default: $(JAVA_VXX_BIN_DIR)/jar                  #
185#                                                                              #
186# JAVA_DEFAULT_VERSION     : The default version of Java to use for the        #
187#                            following paths and commands                      #
188#                            Default: V11                                      #
189#                                                                              #
190# JAVA_CLASSPATH           : The default CLASSPATH of necessary JDK classes    #
191#                            Default: $(JAVA_$(JAVA_DEFAULT_VERSION)_CLASSPATH)#
192#                                                                              #
193# JAVAC                    : The default javac command                         #
194#                            Default: $(JAVA_$(JAVA_DEFAULT_VERSION))          #
195#                                                                              #
196# JAVAH                    : The default javah command                         #
197#                            Default: $(JAVA_$(JAVA_DEFAULT_VERSION))          #
198#                                                                              #
199# JAR                      : The default jar command                           #
200#                            Default: $(JAVA_$(JAVA_DEFAULT_VERSION))          #
201#                                                                              #
202# JAVA_BUILD_VXX           : Wheter this version of java should be built (0/1) #
203#                            Default: 0                                        #
204################################################################################
205
206JAVA_V11_OS_NAME ?= $(OS_NAME)
207JAVA_V11_INCLUDE_OS_NAME ?= $(JAVA_V11_OS_NAME)
208JAVA_V11_LIBDIR_OS_NAME ?= $(JAVA_V11_OS_NAME)
209JAVA_V11_INCLUDE_DIR ?= $(JAVA_V11_ROOT)/include
210JAVA_V11_INCLUDE_OS_DIR ?= $(JAVA_V11_INCLUDE_DIR)/$(JAVA_V11_INCLUDE_OS_NAME)
211JAVA_V11_INCLUDEDIRS ?= $(JAVA_V11_INCLUDE_DIR) $(JAVA_V11_INCLUDE_OS_DIR)
212JAVA_V11_LIBDIRS ?= $(JAVA_V11_ROOT)/lib/$(JAVA_V11_LIBDIR_OS_NAME)/native_threads
213JAVA_V11_LIBS ?= java
214JAVA_V11_CLASSPATH ?= $(JAVA_V11_ROOT)/lib/classes.zip
215JAVA_V11_BIN_DIR ?= $(JAVA_V11_ROOT)/bin
216JAVAC_V11 ?= $(JAVA_V11_BIN_DIR)/javac
217JAVA_V11 ?= $(JAVA_V11_BIN_DIR)/java
218JAVAH_V11 ?= $(JAVA_V11_BIN_DIR)/javah
219JAR_V11 ?= $(JAVA_V11_BIN_DIR)/jar
220
221JAVA_V12_OS_NAME ?= $(OS_NAME)
222JAVA_V12_INCLUDE_OS_NAME ?= $(JAVA_V12_OS_NAME)
223JAVA_V12_LIBDIR_OS_NAME ?= $(JAVA_V12_OS_NAME)
224JAVA_V12_INCLUDE_DIR ?= $(JAVA_V12_ROOT)/include
225JAVA_V12_INCLUDE_OS_DIR ?= $(JAVA_V12_INCLUDE_DIR)/$(JAVA_V12_INCLUDE_OS_NAME)
226JAVA_V12_INCLUDEDIRS ?= $(JAVA_V12_INCLUDE_DIR) $(JAVA_V12_INCLUDE_OS_DIR)
227JAVA_V12_LIBDIRS ?= $(JAVA_V12_ROOT)/jre/bin/classic
228JAVA_V12_CLASSPATH ?= $(JAVA_V12_ROOT)/lib/tools.jar
229JAVA_V12_BIN_DIR ?= $(JAVA_V12_ROOT)/bin
230JAVAC_V12 ?= $(JAVA_V12_BIN_DIR)/javac
231JAVA_V12 ?= $(JAVA_V12_BIN_DIR)/java
232JAVAH_V12 ?= $(JAVA_V12_BIN_DIR)/javah
233JAR_V12 ?= $(JAVA_V12_BIN_DIR)/jar
234
235JAVA_DEFAULT_VERSION ?= V12
236
237JAVA_CLASSPATH ?= $(JAVA_$(JAVA_DEFAULT_VERSION)_CLASSPATH)
238JAVAC ?= $(JAVAC_$(JAVA_DEFAULT_VERSION))
239JAVA ?= $(JAVA_$(JAVA_DEFAULT_VERSION))
240JAVAH ?= $(JAVAH_$(JAVA_DEFAULT_VERSION))
241JAR   ?= $(JAR_$(JAVA_DEFAULT_VERSION))
242
243################################################################################
244#                                   Rexx                                       #
245################################################################################
246# REXX_ROOT                : Root of installed Rexx tree                       #
247#                            Default: /usr/local/orexx                         #
248#                                                                              #
249# REXX_BIN_DIR             : Location of rexx executable                       #
250#                            Default: $(REXX_ROOT)/bin                         #
251#                                                                              #
252# REXX_IMAGE_DIR           : Location of rexx execution image files            #
253#                            Default: $(REXX_BIN_DIR)                          #
254#                                                                              #
255# REXX                     : Command used to invoke the Rexx interpreter       #
256#                            Default: $(REXX_BIN_DIR)/rexx                     #
257#                                                                              #
258# REXX_LIBS                : Rexx libraries necessary to link Rexx apps        #
259#                            Default: rexx rexxapi                             #
260#                                                                              #
261# REXX_LIBDIRS             : Locations of Rexx libraries                       #
262#                            Default: $(REXX_ROOT)/lib                         #
263#                                                                              #
264# REXX_INCLUDEDIRS         : Locations of Rexx include files                   #
265#                            Default: $(REXX_ROOT)/include                     #
266#                                                                              #
267# RXPP_ROOT                : Directory where RxPP is installed                 #
268#                            Default: /usr/local/rxpp                          #
269#                                                                              #
270# RXPP                     : Command used to invoke RxPP Rexx Pre-processor    #
271#                            Default: $(REXX) $(RXPP_ROOT)/bin/RxPP            #
272#                                                                              #
273# RXPP_PATH                : Paths to RxPP libraries                           #
274#                            Default: $(RXPP_ROOT)/lib $(REL)/lib              #
275#                                                                              #
276# B2H_ROOT                 : Directory where b2h is installed                  #
277#                            Default: /usr/local/b2h                           #
278#                                                                              #
279# B2H                      : Command used to invoke b2h (Bookie-to-HTML)       #
280#                            Default: PATH=$(REXX_IMAGE_DIR):$$PATH $(REXX)    #
281#                                     $(B2H_ROOT)/bin/b2h                      #
282#                                                                              #
283# SAXON_ROOT               : Directory where Saxon is installed                #
284#                                                                              #
285# DOCBOOK_ROOT             : Directory where DocBook is installed              #
286#                                                                              #
287################################################################################
288
289REXX_ROOT ?= /usr/local/orexx
290REXX_BIN_DIR ?= $(REXX_ROOT)/bin
291REXX_IMAGE_DIR ?= $(REXX_BIN_DIR)
292REXX ?= $(REXX_BIN_DIR)/rexx
293REXX_LIBS ?= rexx rexxapi
294REXX_LIBDIRS ?= $(REXX_ROOT)/lib
295REXX_INCLUDEDIRS ?= $(REXX_ROOT)/include
296
297RXPP_ROOT ?= /usr/local/rxpp
298RXPP ?= $(REXX) $(RXPP_ROOT)/bin/RxPP
299RXPP_PATH ?= $(RXPP_ROOT)/lib:$(REL)/lib
300
301B2H_ROOT ?= /usr/local/b2h
302B2H ?= PATH=$(REXX_IMAGE_DIR):$$PATH $(REXX) $(B2H_ROOT)/bin/b2h
303
304#SAXON_ROOT ?= /usr/local/saxon
305#DOCBOOK_ROOT ?= /usr/local/docbook
306
307################################################################################
308#                                   Perl                                       #
309################################################################################
310# Note: Below XX refers to the generic version of Perl being used.  For        #
311#       example, V56 refers to Perl 5.6 and V58 refers to Perl 5.8             #
312################################################################################
313# PERL_VXX_ROOT            : Root of installed Perl tree                       #
314#                            Default: /usr/local/perl                          #
315#                                                                              #
316# PERL_VXX_LIBS            : Perl libraries necessary to link Perl apps        #
317#                            Default: perl                                     #
318#                                                                              #
319# PERL_VXX_LIBDIRS         : Locations of Perl libraries                       #
320#                            Default: $(PERL_ROOT)                             #
321#                                                                              #
322# PERL_VXX_INCLUDEDIRS     : Locations of Perl include files                   #
323#                            Default: $(PERL_ROOT)                             #
324#                                                                              #
325# PERL_BUILD_VXX           : Wheter this version of Perl should be built (0/1) #
326#                            Default: 0                                        #
327################################################################################
328
329PERL_V58_ROOT ?= /usr/local/perl
330PERL_V58_LIBS ?= perl
331PERL_V58_LIBDIRS ?= $(PERL_V58_ROOT)
332PERL_V58_INCLUDEDIRS ?= $(PERL_V58_ROOT)
333PERL_BUILD_V58 ?= 0
334PERL_BUILD_V56 ?= 0
335PERL_BUILD_V50 ?= 0
336
337################################################################################
338#                                    Tcl                                       #
339################################################################################
340# TCL_ROOT                 : Root of installed Tcl tree                        #
341#                            Default: No default                               #
342#                                                                              #
343# TCL_INCLUDEDIRS          : Location of Tcl include files                     #
344#                            Default: $(TCL_ROOT)/include                      #
345#                                                                              #
346# TCL_LIBDIRS              : Location of Tcl libraries                         #
347#                            Default: $(TCL_ROOT)/libs                         #
348#                                                                              #
349# TCL_LIBS                 : Tcl libraries necessary to link Tcl apps          #
350#                            Default: tcl                                      #
351################################################################################
352
353TCL_INCLUDEDIRS ?= $(TCL_ROOT)/include
354TCL_LIBDIRS ?= $(TCL_ROOT)/lib
355TCL_LIBS ?= tcl
356
357################################################################################
358#                                  Python                                      #
359################################################################################
360# PYTHON_ROOT              : Root of installed Python tree                     #
361#                            Default: No default                               #
362#                                                                              #
363# PYTHON_LIBS              : Python libraries necessary to link Python apps    #
364#                            Default: No default                               #
365#                                                                              #
366# PYTHON_LIBDIRS           : Locations of Python libraries                     #
367#                            Default: $(PYTHON_ROOT)/libs                      #
368#                                                                              #
369# PYTHON_INCLUDEDIRS       : Locations of Python include files                 #
370#                            Default: $(PYTHON_ROOT)/include                   #
371################################################################################
372
373PYTHON_LIBDIRS ?= $(PYTHON_ROOT)/libs
374PYTHON_INCLUDEDIRS ?= $(PYTHON_ROOT)/include
375
376################################################################################
377#                                  OpenSSL                                     #
378################################################################################
379# STAF_USE_SSL             : Indicates to build the STAF TCP connection        #
380#                            provider with support for secure tcp in addition  #
381#                            to support for non-secure tcp if set to any       #
382#                            non-empty value.                                  #
383#                            Default: 1                                        #
384#									       #
385# OPENSSL_ROOT             : Root of installed OpenSSL tree                    #
386#                            Default: No default                               #
387#                                                                              #
388# OPENSSL_LIBDIRS          : Locations of OpenSSL libraries                    #
389#                            Default on Unix:    $(OPENSSL_ROOT)/lib           #
390#                            Default on Windows: $(OPENSSL_ROOT)/bin           #
391#                                                                              #
392# OPENSSL_INCLUDEDIRS      : Locations of OpenSSL include files                #
393#                            Default: $(OPENSSL_ROOT)/include                  #
394#									       #
395# Note:  Defaults are assigned in connproviders/tcp/makefile.connprov_tcp      #
396################################################################################
397
398STAF_USE_SSL ?= 1
399
400################################################################################
401#                                 Commands                                     #
402################################################################################
403# MAKE_PATH                : The command which will create a directory path.   #
404#                            Note: Must support creating intermediate          #
405#                                  directories                                 #
406#                            Default: mkdir -p                                 #
407#                                                                              #
408# CREATE_PATH              : Creates the path represented by $(@D)             #
409#                            Default: $(MAKE_PATH) $(@D)                       #
410#                                                                              #
411# COPY                     : Command used to copy a file                       #
412#                            Default: cp                                       #
413#                                                                              #
414# MOVE                     : Command used to move a file                       #
415#                            Default: mv                                       #
416#                                                                              #
417# DEL                      : Command used to delete a file                     #
418#                            Default: rm                                       #
419#                                                                              #
420# DELTREE                  : Command used to delete a directory tree           #
421#                            Default: rm -Rf                                   #
422#                                                                              #
423# TOUCH                    : Command used to create a file or update the       #
424#                            timestamp of a file                               #
425#                            Default: touch                                    #
426#                                                                              #
427# OUT_ERR_TO_DEV_NULL      : Syntax to ignore stdout and stderr output         #
428#                            Default: >/def/null 2>&1                          #
429################################################################################
430
431MAKE_PATH ?= mkdir -p
432CREATE_PATH ?= $(MAKE_PATH) $(@D)
433COPY ?= cp
434RECURSIVE_COPY ?= cp -R
435MOVE ?= mv
436DEL ?= rm
437DELTREE ?= rm -Rf
438TOUCH ?= touch
439OUT_ERR_TO_DEV_NULL ?= >/dev/null 2>&1
440
441################################################################################
442#                        Operating System Variables                            #
443################################################################################
444# OS_SHARED_LIB_PREFIX     : Prefix used by shared libraries                   #
445#                            Default: lib                                      #
446#                                                                              #
447# OS_SHARED_LIB_SUFFIX     : Suffix used by shared libraries                   #
448#                            Default: .so                                      #
449#                                                                              #
450# OS_LIBS                  : Libraries that the system requires you link with  #
451#                            Default: no default                               #
452#                                                                              #
453# OS_PTHREAD_LIB           : Library that implements threads                   #
454#                            Default: pthread                                  #
455#                                                                              #
456# OS_DL_LIB                : Library that implements dynamic linking           #
457#                            Default: dl                                       #
458#                                                                              #
459# OS_TYPE                  : The type of the operating system                  #
460#                            Default: set in OS include file                   #
461#                                                                              #
462# OS_LD_PATH_NAME          : The name of the "LD_LIBRARY_PATH" variable, which #
463#                            dlopen() searches                                 #
464#                            Default: LD_LIBRARY_PATH                          #
465#                                                                              #
466# OS_OE                    : The object file extension                         #
467#                            Default: .o                                       #
468#                                                                              #
469# OS_EE                    : The executable file extension                     #
470#                            Default: no default                               #
471#                                                                              #
472# OS_PS                    : The path separator                                #
473#                            Default: ':'                                      #
474#                                                                              #
475# OS_FS                    : The file separator                                #
476#                            Default: '/'                                      #
477#                                                                              #
478# OS_SRC                   : The operating system specific version of $(SRC)   #
479#                            Default: $(SRC)                                   #
480#                                                                              #
481# OS_REL                   : The operating system specific version of $(REL)   #
482#                            Default: $(REL)                                   #
483#                                                                              #
484# OS_PKG                   : The operating system specific version of $(PKG)   #
485#                            Default: $(PKG)                                   #
486#                                                                              #
487# OS_O                     : The operating system specific version of $(O)     #
488#                            Default: $(O)                                     #
489#                                                                              #
490# OS_OBJS                  : The operating system specific version of $(OBJS)  #
491#                            Default: $(OBJS)                                  #
492#                                                                              #
493# OS_@                     : The operating system specific version of $@       #
494#                            Default: $@                                       #
495#                                                                              #
496# OS_<                     : The operating system specific version of $<       #
497#                            Default: $<                                       #
498#                                                                              #
499# DLL                      : This is a convenient shorthand used to specify    #
500#                            the name of a DLL.  Typically usage is            #
501#                            JSTAFDLL = $(subst Name,JSTAF,$(DLL))             #
502#                                                                              #
503################################################################################
504
505OS_SHARED_LIB_PREFIX ?= lib
506OS_SHARED_LIB_SUFFIX ?= .so
507OS_PTHREAD_LIB       ?= pthread
508OS_DL_LIB            ?= dl
509OS_LD_PATH_NAME      ?= LD_LIBRARY_PATH
510OS_OE                ?= .o
511OS_PS                ?= :
512OS_FS                ?= /
513OS_SRC               ?= $(SRC)
514OS_REL               ?= $(REL)
515OS_PKG               ?= $(PKG)
516OS_O                 ?= $(O)
517OS_OJBS              ?= $(OBJS)
518OS_@                 ?= $@
519OS_<                 ?= $<
520
521DLL = $(OS_SHARED_LIB_PREFIX)Name$(OS_SHARED_LIB_SUFFIX)
522
523################################################################################
524#                          C++ Compiler Variables                              #
525################################################################################
526# Note: The following variables are common to all subordiante makefiles and    #
527#       should not generally be changed, unless you REALLY know what you are   #
528#       doing.  The compiler should honor these variables.                     #
529################################################################################
530# COMMON_LIBDIRS           : This specifies common library paths on which the  #
531#                            compiler should look.                             #
532#                            Default: $(REL)/lib                               #
533#                                                                              #
534# COMMON_INCLUDEDIRS       : This specifies common include paths on which the  #
535#                            compiler should look                              #
536#                            Default: $(SUBSYS_REL_SRC)                        #
537#                                     $(SUBSYS_REL_SRC)/$(OS_TYPE)             #
538#                                     $(SRC)/stafif/$(OS_TYPE) $(SRC)/stafif   #
539#                                                                              #
540################################################################################
541# Note: The following variables may be specified in subordinate makefiles and  #
542#       the compiler makefile should honor them.                               #
543################################################################################
544# LIBS                     : This specifies libraries that the executable or   #
545#                            library needs to be linked with                   #
546#                            Default: no default                               #
547#                                                                              #
548# LIBDIRS                  : This specifies library paths on which the         #
549#                            compiler should look                              #
550#                            Default: no default                               #
551#                                                                              #
552# INCLUDEDIRS              : This specifies include paths on which the         #
553#                            compiler should look                              #
554#                            Default: no default                               #
555#                                                                              #
556# COMMONFLAGS              : This specifies common compiler/linger flags with  #
557#                            which the executable/library needs to be          #
558#                            compiled/linked                                   #
559#                            Default: no default                               #
560#                                                                              #
561# CFLAGS                   : This specifies compiler flags with which the      #
562#                            executable or library needs to be compiled        #
563#                            Default: no default                               #
564#                                                                              #
565# LINKFLAGS                : This specifies link flags with which the          #
566#                            executable or library needs to be linked          #
567#                            Default: no default                               #
568#                                                                              #
569# OBJS                     : This specifies the set of files which need to be  #
570#                            linked to generate an executable or library       #
571#                            Default: no default                               #
572################################################################################
573# Note: The following variables must be defined by the compiler makefile as    #
574#       they are used by the rest of the makefile                              #
575################################################################################
576# CC_DEPEND_IT             : Used to create a dependency file for a C++ file.  #
577#                            This should process the file $< and generate $@.  #
578#                                                                              #
579# CC_DEPEND_IT_C           : Used to create a dependency file for a C file.    #
580#                            This should process the file $< and generate $@.  #
581#                                                                              #
582# CC_COMPILE_IT            : Used to compile a C++ file.  This should process  #
583#                            the file $< and generate $@.                      #
584#                                                                              #
585# CC_COMPILE_IT_C          : Used to compile a C file.  This should process    #
586#                            the file $< and generate $@.                      #
587#                                                                              #
588# CC_LINK_IT               : Used to link an executable.  This should process  #
589#                            $(OBJS) and generate $@.                          #
590#                                                                              #
591# CC_SHARED_LIB_IT         : Used to link a shared library.  This should       #
592#                            process $(OBJS) and generate $@.                  #
593################################################################################
594# Note: The following variables are not required to be used or implemented by  #
595#       any compiler makefile.  They are provided as they are useful for most  #
596#       compilers.                                                             #
597################################################################################
598# ALL_LIB_LIST_RAW         : The set of all necessary link linbraries          #
599#                                                                              #
600# ALL_LIB_LIST             : The expended set of all necessary link libraries  #
601#                                                                              #
602# ALL_LIBDIR_LIST_RAW      : The set of all necessary library directories      #
603#                                                                              #
604# ALL_LIBDIR_LIST          : The expanded set of all necessary library         #
605#                            directories                                       #
606# ALL_INCLUDEDIR_LIST_RAW  : The set of all necessary include directories      #
607#                                                                              #
608# ALL_INCLUDEDIR_LIST      : The expanded set of all necessary include         #
609#                            directories                                       #
610################################################################################
611
612COMMON_LIBDIRS ?= $(REL)/lib
613COMMON_INCLUDEDIRS ?= $(SUBSYS_REL_SRC) $(SUBSYS_REL_SRC)/$(OS_TYPE)\
614                      $(SRC)/stafif/$(OS_TYPE) $(SRC)/stafif
615
616ALL_LIB_LIST_RAW ?= $(CC_LIBS) $(LIBS) $(OS_LIBS)
617ALL_LIB_LIST ?= $(foreach lib, $(ALL_LIB_LIST_RAW),-l$(lib))
618
619ALL_LIBDIR_LIST_RAW ?= $(CC_LIBDIRS) $(OS_LIBDIRS) $(COMMON_LIBDIRS) $(LIBDIRS)
620ALL_LIBDIR_LIST ?= $(foreach libdir, $(ALL_LIBDIR_LIST_RAW),-L$(libdir))
621
622ALL_INCLUDEDIR_LIST_RAW ?= $(INIT_INCLUDE) $(CC_INCLUDEDIRS) $(OS_INCLUDEDIRS) $(COMMON_INCLUDEDIRS) $(INCLUDEDIRS)
623ALL_INCLUDEDIR_LIST ?= $(foreach incdir, $(ALL_INCLUDEDIR_LIST_RAW),-I$(incdir))
624
625# Setup the library prefix and suffix based on OS as well
626# as other OS dependent defines, libraries, flags, etc.
627
628define COPY_FILE
629    @$(CREATE_PATH)
630    @echo "*** Copying $(@F) ***"
631    $(AT)$(COPY) $< $@
632endef
633
634define RXPP_IT
635    @$(CREATE_PATH)
636    @echo "*** Building $(@F) ***"
637    @PATH=$(REXX_IMAGE_DIR):$$PATH RXPPPATH='$(subst $(SPACE),$(OS_PS),$(strip $(RXPP_PATH)))' $(RXPP) '$(OS_<)' '$(OS_@)'
638endef
639
640define STRIP_IT
641    @echo "*** Stripping $(@F) ***"
642    $(AT)$(STRIP) $@
643endef
644
645define C_DEPEND_IT
646    $(AT)$(CREATE_PATH)
647    @echo "*** Generating dependency for $(@F) *** "
648    $(AT)$(CC_DEPEND_IT)
649endef
650
651define C_DEPEND_IT_C
652    $(AT)$(CREATE_PATH)
653    @echo "*** Generating dependency for $(@F) *** "
654    $(AT)$(CC_DEPEND_IT_C)
655endef
656
657define COMPILE_IT
658    $(AT)$(CREATE_PATH)
659    @echo "*** Compiling $(@F) ***"
660    $(AT)$(CC_COMPILE_IT)
661endef
662
663define COMPILE_IT_C
664    $(AT)$(CREATE_PATH)
665    @echo "*** Compiling $(@F) ***"
666    $(AT)$(CC_COMPILE_IT_C)
667endef
668
669define LINK_IT
670    $(AT)$(CREATE_PATH)
671    @echo "*** Linking $(@F) ***"
672    $(AT)$(CC_LINK_IT)
673endef
674
675define SHARED_LIB_IT
676    $(AT)$(CREATE_PATH)
677    @echo "*** Linking shared library $(@F) ***"
678    $(AT)$(CC_SHARED_LIB_IT)
679    $(AT)$(MOVE_SIDE_DECK)
680endef
681
682# Setup our global inference rules
683
684InferenceRules := $(SRC)/build/makefile.inf
685
686# Check to see if we are in cleanup.  If so, we won't want to include
687# dependency makefiles
688
689ifneq ($(find cleanup, $(MAKECMDGOALS)), "")
690InCleanup := 1
691else
692inCleanup := 0
693endif
694
695# Default target.  This is a fake target that points to the real default which
696# is defined after all the subordinate makefiles have been included
697
698all: real_all
699
700# Include subordinate makefiles
701include $(ALLMAKEFILES)
702
703# Undefine SUBSYS_REL to be safe
704SUBSYS_REL := $(EMPTY)
705
706export RXPPPATH
707
708# Targets
709
710showvars:
711	@echo LibPref = $(OS_SHARED_LIB_PREFIX)
712	@echo LibSuff = $(OS_SHARED_LIB_SUFFIX)
713	@echo MakeDir = $(MAKEDIR)
714	@echo AllMakeFiles = $(ALLMAKEFILES)
715	@echo INCLUDE = $(INCLUDE)
716
717cleanup: $(CleanupTargets)
718
719real_all: $(Targets)
720