fis-gtm/sr_unix/comlist.mk

649 lines
21 KiB
Makefile

#################################################################
# #
# Copyright 2001, 2012 Fidelity Information Services, Inc #
# #
# This source code contains the intellectual property #
# of its copyright holder(s), and is made available #
# under a license. If you do not know the terms of #
# the license, please stop and do not read further. #
# #
#################################################################
# Commands to build GT.M downloaded from SourceForge
# 1. 'cd' to the GT.M directory where sr_* directories are copied to.
# 2. Define an environment variable gtm_curpro to point to the full
# path of the prior GT.M installation.
# (download and install GT.M binary distribution from SourceForge
# if you do not have GT.M installed already).
# 3. To build debug version with no compiler optimzations -
# gmake -f sr_unix/comlist.mk -I./sr_unix -I./sr_linux buildtypes=dbg gtm_ver=$PWD
# To build a version enabling optimizations -
# gmake -f sr_unix/comlist.mk -I./sr_unix -I./sr_linux buildtypes=pro gtm_ver=$PWD
#
# By default the build procedure will build 64 bit version of GT.M
# on a x86_64 machine.
# If you intend to build 32 bit version of GT.M on a x86_64 bit machine you
# have to explicitly set the environment variable 'OBJECT_MODE' to '32'
# Example:
# OBJECT_MODE=32; export OBJECT_MODE #bourne shell
# export OBJECT_MODE=32 #bash shell
# setenv OBJECT_MODE 32 #tcsh shell
#
# This procedure requires the tcsh shell to be installed.
# get_lib_dirs.mk must be in the same directory as this makefile
gt_machine_type=$(shell uname -m)
gt_os_type=$(shell uname -s)
verbose ?= 0
# get_lib_dirs.mk defines library directories
# gt_build_type
# use_nsb
# gt_build_xfer_desc
# it also santizes the CYGWIN gt_os_type
include get_lib_dirs.mk
CURDIR=$(shell pwd)
ifeq ($(MAKELEVEL),0)
# the first-level make invocation - rules to create & clean directories
# and build utilities selectively.
ifndef buildtypes
buildtypes=pro
endif
ifndef gtm_ver
gtm_ver=$(CURDIR)
endif
ifndef crypttype
crypttype=gcrypt
endif
ifeq ($(buildtypes),dbg)
cryptbuildtype=d
else
cryptbuildtype=p
endif
gt_ar_archiver=ar
gt_ar_options=rv
# top level make - builds directory structure, calls make for each build type,
# and creates package
VPATH=$(addprefix $(gtm_ver)/, $(gt_src_list))
exe_list=mumps dse geteuid lke mupip gtcm_server gtcm_gnp_server gtcm_play gtcm_pkdisp gtcm_shmclean semstat2 ftok dbcertify gtmsecshrdir/gtmsecshr
make_i_flags=$(addprefix -I$(gtm_ver)/, $(gt_src_list))
export #export all variables defined here to sub-make
# Build the complete suit for packaging - all executables, % utilities,
# help files etc.
all: dirs xfer_build gtm_threadgbl_deftypes $(addsuffix _all, $(buildtypes)) ;
# Build xfer_desc.i for ia64 || linux x86_64
# set in get_lib_dirs.mk
xfer_build:
ifeq ($(gt_build_xfer_desc),1)
tcsh -f $(gtm_ver)/sr_unix/gen_xfer_desc.csh $(gt_src_list)
endif
gtm_threadgbl_deftypes:
tcsh -f $(gtm_ver)/sr_unix/gen_gtm_threadgbl_deftypes.csh $(gtm_ver) sr_port $(buildtypes)/obj $(gt_src_list)
dirs: $(addprefix $(gtm_ver)/, $(addsuffix /obj, $(buildtypes))) \
$(addprefix $(gtm_ver)/, $(addsuffix /map, $(buildtypes))) \
$(addprefix $(gtm_ver)/, $(addsuffix /plugin, $(buildtypes))) ;
# Compile and archive all modules and stop.
compile: dirs $(addsuffix _compile, $(buildtypes)) ;
# Build all executables and stop.
links: dirs $(addsuffix _links, $(buildtypes)) ;
# Rules to make executables selectively (eg. make mumps, make dse etc..)
$(exe_list):%: dirs $(addsuffix _%, $(buildtypes)) ;
setperms:
ifeq ($(shell id -u),0)
@chown root:bin ${buildtypes}/gtmsecshr ${buildtypes}/gtmsecshrdir/gtmsecshr
@chmod 4750 ${buildtypes}/gtmsecshr ${buildtypes}/gtmsecshrdir/gtmsecshr
else
@echo "Operation requires super user capabilities"
endif
clean: $(addsuffix _clean, $(buildtypes))
rm -f idtemp ostemp
# Package GT.M installation kit.
package: $(addsuffix _tar, $(buildtypes))
%_tar: release_name.h
@echo "packaging GT.M..."
grep RELEASE_NAME $< | awk '{print $$4}' | sed 's/[\.]//' | sed 's/-//' > idtemp
ifeq ($(MACHTYPE),x86_64)
# On a 64 bit machine switch between 64 bit and 32 bit depending upon
# the OBJECT_MODE environment variable
ifeq ($(gt_build_type),64)
@tar -zcvf gtm_`head -n 1 idtemp`_$(OSTYPE)_$(MACHTYPE)_$*.tar.gz -C $* $(filter-out obj map, $(notdir $(wildcard $*/*)))
else
@tar -zcvf gtm_`head -n 1 idtemp`_$(OSTYPE)_i686_$*.tar.gz -C $* $(filter-out obj map, $(notdir $(wildcard $*/*)))
endif
else
ifeq ($(OSTYPE),hpux)
# IA64 HP-UX has MACHTYPE set to unknown; so use uname -m
# tar doesnt support "z" (to zip) option; so needs a separate gzip command
ifeq ($(gt_machine_type), ia64)
@tar -cvf gtm_`head -n 1 idtemp`_$(OSTYPE)_$(gt_machine_type)_$*.tar -C $* $(filter-out obj map, $(notdir $(wildcard $*/*)))
@gzip gtm_`head -n 1 idtemp`_$(OSTYPE)_$(gt_machine_type)_$*.tar
else
@tar -cvf gtm_`head -n 1 idtemp`_$(OSTYPE)_`echo $(MACHTYPE) | sed 's/_//1'`_$*.tar -C $* $(filter-out obj map, $(notdir $(wildcard $*/*)))
@gzip gtm_`head -n 1 idtemp`_$(OSTYPE)_`echo $(MACHTYPE) | sed 's/_//1'`_$*.tar
endif
else
@tar -zcvf gtm_`head -n 1 idtemp`_$(OSTYPE)_$(MACHTYPE)_$*.tar.gz -C $* $(filter-out obj map, $(notdir $(wildcard $*/*)))
endif
endif
rm -f idtemp
%_clean:
rm -rf $(gtm_ver)/$*
rm -f $(gtm_ver)/*$*.tar.gz
%/obj:
mkdir -p $@
%/map:
mkdir -p $@
%/plugin:
mkdir -p $@/gtmcrypt
dbg_%:comlist.mk
$(MAKE) -C $(gtm_ver)/dbg/obj -I$(gtm_ver)/dbg/obj $(make_i_flags) -f $< CURRENT_BUILDTYPE=dbg $*
pro_%:comlist.mk
$(MAKE) -C $(gtm_ver)/pro/obj -I$(gtm_ver)/pro/obj $(make_i_flags) -f $< CURRENT_BUILDTYPE=pro $*
bta_%:comlist.mk
$(MAKE) -C $(gtm_ver)/bta/obj -I$(gtm_ver)/bta/obj $(make_i_flags) -f $< CURRENT_BUILDTYPE=bta $*
else
# Second-level make invocation: compute dependencies, compile, archive,
# link and test.
# gt_src_list is the list of all source (sr_*) directories. allfiles_list
# is the superset of all GT.M files (.c, .s, .m, .list, etc. etc.) present
# in all sr_* directories. ttt.c is generated from ttt.txt
allfiles_list:=$(sort $(notdir $(foreach d,$(gt_src_list),$(wildcard $(gtm_ver)/$(d)/*))) ttt.c)
# allfiles_list computation should precede this include, since
# os390:gtm_env_sp.mk requires $(allfiles_list)
include gtm_env_sp.mk
# the list of all GT.M executables
exe_list:=libgtmshr$(gt_ld_shl_suffix) $(exe_list) $(gt_svc_exe)
# In the following code, various categories of source files are filtered
# from allfiles_list into separate variables based on the file extention.
# m file stuff. These list builds go to great pain to insure that either
# post cms_load forms and pre-cms load forms work.
plugin_cfiles:= gtmcrypt_ref.c gtmcrypt_pk_ref.c gtmcrypt_dbk_ref.c maskpass.c
plugin_hfiles:= gtmcrypt_ref.h gtmcrypt_pk_ref.h gtmcrypt_dbk_ref.h gtmcrypt_sym_ref.h gtmcrypt_interface.h gtmxc_types.h main_pragma.h
plugin_sh_file:= build.sh install.sh
plugin_mfile:=getpass.m
mfile_list:=$(filter-out _%.m, $(filter %.m, $(allfiles_list)))
mptfile_list:=$(sort $(basename $(filter %.mpt, $(allfiles_list))) $(basename $(patsubst _%.m, %, $(filter _%.m, $(allfiles_list)))))
mfile_targets:=$(addsuffix .m,$(foreach f,$(basename $(mfile_list)), $(shell echo $(f) | tr '[:lower:]' '[:upper:]')))
mptfile_targets:=$(addprefix _,$(addsuffix .m, $(foreach f,$(mptfile_list), $(shell echo $(f) | tr '[:lower:]' '[:upper:]'))))
cfile_list:=$(filter-out $(plugin_cfiles), $(filter %.c, $(allfiles_list)))
ifdef gt_as_src_from_suffix
#
# DUX requires .m64 to be gawk'ed and assembled as well
#
sfile_list:=$(filter %$(gt_as_src_suffix) %$(gt_as_src_from_suffix), $(allfiles_list))
else
sfile_list:=$(filter %$(gt_as_src_suffix), $(allfiles_list))
endif
helpfile_list:=$(filter %.hlp, $(allfiles_list))
sh_list:=$(filter %.sh, $(allfiles_list))
gtc_list:=$(filter %.gtc, $(allfiles_list))
list_files:=$(filter %.list, $(allfiles_list))
msgfile_list:=$(filter %.msg, $(allfiles_list))
plugin_ksh_file:=$(filter %.ksh, $(allfiles_list))
hfile_list := gtm_stdio.h gtm_stdlib.h gtm_string.h gtm_strings.h gtmxc_types.h gtm_limits.h main_pragma.h $(hfile_list_sp)
sh_targets:=$(basename $(sh_list))
msgcfile_list=$(addsuffix _ctl.c,$(basename $(msgfile_list)))
msgofile_list=$(addsuffix .o,$(basename $(msgcfile_list)))
list_file_libs=$(addsuffix .a,$(basename $(list_files)))
# object files
# NOTE: sort/basename weeds out .s, .c duplication and
# rules giving %.s priority over %.c cause the %.s
# version to always be used
ofile_list:=$(addsuffix .o,$(sort $(basename $(cfile_list)) $(basename $(sfile_list))))
#
# dynamic depend list - weed out .s based .o's
#
dep_list:=$(addsuffix .d,$(filter-out $(basename $(sfile_list)),$(basename $(cfile_list))))
# objects on link command lines
mumps_obj=gtm.o
gtmshr_obj=gtm_main.o
lke_obj=lke.o lke_cmd.o
dse_obj=dse.o dse_cmd.o
mupip_obj=mupip.o mupip_cmd.o
dbcertify_obj=dbcertify.o dbcertify_cmd.o
gtmsecshr_obj=gtmsecshr.o
gtmsecshr_wrapper_obj=gtmsecshr_wrapper.o
geteuid_obj=geteuid.o
semstat2_obj=semstat2.o
ftok_obj=ftok.o
gtcm_server_obj=gtcm_main.o omi_srvc_xct.o
gtcm_gnp_server_obj=gtcm_gnp_server.o
gtcm_play_obj=gtcm_play.o omi_sx_play.o
gtcm_pkdisp_obj=gtcm_pkdisp.o
gtcm_shmclean_obj=gtcm_shmclean.o
dtgbldir_obj=dtgbldir.o
dummy_gtmci_obj=dummy_gtmci.o
# exclude .o's in .list files, .o's used in ld's below, plus dtgbldir.o
# (which doesn't appear to be used anywhere!
non_mumps_objs:=$(addsuffix .o,$(shell cat $(foreach d,$(gt_src_list),$(wildcard $(gtm_ver)/$(d)/*.list))))
exclude_list:= \
$(non_mumps_objs) \
$(mumps_obj) \
$(gtmshr_obj) \
$(gtm_svc_obj) \
$(lke_obj) \
$(dse_obj) \
$(mupip_obj) \
$(dbcertify_obj) \
$(gtmsecshr_obj) \
$(gtmsecshr_wrapper_obj) \
$(geteuid_obj) \
$(semstat2_obj) \
$(ftok_obj) \
$(gtcm_server_obj) \
$(gtcm_gnp_server_obj) \
$(gtcm_play_obj) \
$(gtcm_pkdisp_obj) \
$(gtcm_shmclean_obj) \
$(dtgbldir_obj) \
$(dummy_gtmci_obj)
# retain_list contains the modules listed in a .list file that also need to be
# included in libmumps.a (eg. getmaxfds, sleep in sr_sun:libgtmrpc.list)
libmumps_obj:=$(sort $(filter-out $(exclude_list),$(ofile_list)) $(msgofile_list) $(retain_list))
# rules, lists, variables specific to each type of build
#ifndef gtm_dist
gtm_dist=$(gtm_ver)/$(CURRENT_BUILDTYPE)
#endif
gt_cc_option_I:=$(gt_cc_option_I) $(addprefix -I$(gtm_ver)/, $(gt_src_list)) -I$(CURDIR)
gt_cc_option_DDEBUG=-DDEBUG
ifeq ($(CURRENT_BUILDTYPE), pro)
gt_cc_options=$(gt_cc_option_optimize) $(gt_cc_options_common)
gt_as_options=$(gt_as_option_optimize) $(gt_as_options_common)
gt_ld_options_buildsp=$(gt_ld_options_pro)
endif
ifeq ($(CURRENT_BUILDTYPE), bta)
gt_cc_options=$(gt_cc_option_DDEBUG) $(gt_cc_option_optimize) $(gt_cc_options_common)
gt_as_options=$(gt_as_option_DDEBUG) $(gt_as_option_optimize) $(gt_as_options_common)
gt_ld_options_buildsp=$(gt_ld_options_bta)
endif
ifeq ($(CURRENT_BUILDTYPE), dbg)
gt_cc_options=$(gt_cc_option_DDEBUG) $(gt_cc_option_debug) $(gt_cc_options_common)
gt_as_options=$(gt_as_option_DDEBUG) $(gt_as_option_debug) $(gt_as_options_common)
gt_ld_options_buildsp=$(gt_ld_options_dbg)
endif
gt_cc_options += $(gt_cc_option_I)
gt_as_options += $(gt_cc_option_I)
# gt_ld_options should be set with '=' to allow lazy evaluation of
# gt_ld_options_loadmap
gt_ld_options=$(gt_ld_options_common) $(gt_ld_options_buildsp) $(gt_ld_options_loadmap) -L$(CURDIR)
gt_cpus ?= 2
ifdef gt_ar_gtmrpc_name
gt_ar_gtmrpc_name_target=../lib$(gt_ar_gtmrpc_name).a
endif
postbuild=$(gt_ar_gtmrpc_name_target) dotsh helpfiles hfiles gtcmconfig cpplugin_scripts cpplugin_file cpplugin_mfile\
../mumps.gld ../gtmhelp.dat ../gdehelp.dat build_plugin_lib
all: links mfiles mcompiles testit $(postbuild)
compile:libmumps.a $(list_file_libs) $(filter-out $(non_mumps_objs), $(exclude_list))
%.export:%.exp
$(gt-export)
testit:
echo $(postbuild)
links: $(exe_list)
$(exe_list):%: $(prebuild) ../% ;
vars:
echo MAKECMDGOALS $(MAKECMDGOALS)
../mumps.gld:
cd ..;gtm_dist=$(gtm_dist);export gtm_dist;gtmgbldir=./$(notdir $@);export gtmgbldir;\
echo exit | ./mumps -run GDE
define compile-help
cd ..;gtm_dist=$(gtm_dist);export gtm_dist;gtmgbldir=$(gtm_dist)/$(notdir $(basename $@));export gtmgbldir; \
echo Change -segment DEFAULT -block=2048 -file=$(gtm_dist)/$(notdir $@) > hctemp; \
echo Change -region DEFAULT -record=1020 -key=255 >> hctemp; \
echo exit >> hctemp; \
cat hctemp | ./mumps -run GDE; \
./mupip create; \
echo "Do ^GTMHLPLD" > hctemp; \
echo $(gtm_dist)/$(notdir $^) >> hctemp; \
echo Halt >> hctemp; \
cat hctemp | ./mumps -direct; \
rm -f hctemp
endef
../gtmhelp.dat: ../mumps.hlp
$(compile-help)
../gdehelp.dat: ../gde.hlp
$(compile-help)
mcompiles:
cd ..;gtm_dist=$(dir $(CURDIR));export gtm_dist;gtmgbldir=$(notdir $@);export gtmgbldir; LC_CTYPE=C; export LC_CTYPE; gtm_chset=M; export gtm_chset; ./mumps *.m ; tcsh -f ../sr_unix/mkutf8dir.csh
pluginbuild:
mkdir -p plugin/gtmcrypt; cp ../sr_unix/gtmcrypt_ref.h plugin/gtmcrypt/; cp ../sr_unix/gtmcrypt_ref.c plugin/gtmcrypt/;
dotsh: $(sh_targets)
cp -f $^ ..
helpfiles: $(helpfile_list)
cp -pf $^ ..
hfiles: $(hfile_list)
cp -f $^ ..
ifeq ($(gt_os_type), OSF1)
cpplugin_scripts: $(plugin_ksh_file) $(plugin_sh_file)
cpplugin_file: $(plugin_cfiles) $(plugin_hfiles)
cpplugin_mfile: $(plugin_mfile)
build_plugin_lib:
else
cpplugin_scripts: $(plugin_ksh_file) $(plugin_sh_file)
cp -f $^ ../plugin/gtmcrypt
cpplugin_file: $(plugin_cfiles) $(plugin_hfiles)
cp -f $^ ../plugin/gtmcrypt
cpplugin_mfile: $(plugin_mfile)
cp -f $^ ../plugin/gtmcrypt/GETPASS.m
build_plugin_lib:
gtm_dist=$(dir $(CURDIR));export gtm_dist;cd $(gtm_dist)/plugin/gtmcrypt;sh -f build.sh $(crypttype) $(cryptbuildtype); sh -f install.sh
endif
mfiles: $(addprefix ../, $(mfile_targets) $(mptfile_targets))
$(list_file_libs): $(list_files)
ifdef gt_ar_gtmrpc_name_target
$(gt_ar_gtmrpc_name_target): lib$(gt_ar_gtmrpc_name).a
cp $< $@
endif
# executables
define gt-ld
rm -f $@
@echo "linking $(notdir $@)..."
@echo $(gt_ld_linker) $(gt_ld_options) -o $@ $(gt_ld_sysrtns) $+ $(gt_ld_syslibs) $(gt_ld_extra_libs) > ../map/$(notdir $@).map 2>&1
@$(gt_ld_linker) $(gt_ld_options) -o $@ $(gt_ld_sysrtns) $+ $(gt_ld_syslibs) $(gt_ld_extra_libs) >> ../map/$(notdir $@).map 2>&1
endef
define gt-ld_with_export
rm -f $@
@echo "linking $(notdir $@)..."
@echo $(gt_ld_linker) $(gt_ld_options) -o $@ $(gt_ld_sysrtns) $(gt_ld_options_all_exe) $+ $(gt_ld_syslibs) $(gt_ld_extra_libs) > ../map/$(notdir $@).map 2>&1
@$(gt_ld_linker) $(gt_ld_options) -o $@ $(gt_ld_sysrtns) $(gt_ld_options_all_exe) $+ $(gt_ld_syslibs) $(gt_ld_extra_libs) >> ../map/$(notdir $@).map 2>&1
endef
ifdef gt_svc_exe
# Note: gtm_svc should link with gtm_dal_svc.o before
# gtm_mumps_call_clnt.o(libgtmrpc.a) to resolve conflicting symbols
# (gtm_init_1, gtm_halt_1 etc..) appropriately.
../$(gt_svc_exe): $(gtm_svc_obj) libmumps.a libgnpclient.a libcmisockettcp.a $(gt_ld_gtmrpc_library_option)
$(gt-ld)
endif
../mumps: $(mumps_obj)
$(gt-ld)
../dse: $(dse_obj) libdse.a libmumps.a libstub.a
$(gt-ld_with_export)
../geteuid: $(geteuid_obj) libmumps.a
$(gt-ld)
../gtmsecshrdir/gtmsecshr: ../gtmsecshr_real ../gtmsecshr_wrapper
@rm -rf ../gtmsecshrdir gtmsecshr && mkdir ../gtmsecshrdir
@mv ../gtmsecshr_real ../gtmsecshrdir/gtmsecshr
@mv ../gtmsecshr_wrapper ../gtmsecshr
../gtmsecshr_real: $(gtmsecshr_obj) libmumps.a
$(gt-ld)
../gtmsecshr_wrapper: $(gtmsecshr_wrapper_obj) libmumps.a
$(gt-ld)
../lke: $(lke_obj) liblke.a libmumps.a libgnpclient.a libmumps.a libgnpclient.a libcmisockettcp.a
$(gt-ld)
../mupip: $(mupip_obj) libmupip.a libmumps.a libstub.a $(gt_ld_aio_syslib)
$(gt-ld_with_export)
../dbcertify: $(dbcertify_obj) libdbcertify.a libmupip.a libmumps.a libstub.a $(gt_ld_aio_syslib)
$(gt-ld)
../gtcm_server: $(gtcm_server_obj) libgtcm.a libmumps.a libstub.a
$(gt-ld)
../gtcm_gnp_server: $(gtcm_gnp_server_obj) libgnpserver.a liblke.a libmumps.a libcmisockettcp.a libstub.a
$(gt-ld)
../gtcm_play: $(gtcm_play_obj) libgtcm.a libmumps.a libstub.a
$(gt-ld)
../gtcm_pkdisp: $(gtcm_pkdisp_obj) libgtcm.a libmumps.a libstub.a
$(gt-ld)
../gtcm_shmclean: $(gtcm_shmclean_obj) libgtcm.a libmumps.a libstub.a
$(gt-ld)
../semstat2: $(semstat2_obj)
$(gt-ld)
../ftok: $(ftok_obj) libmumps.a
$(gt-ld)
# build GT.M shared library(libgtmshr) from PIC-compiled .o files
# chcon is for SELinux - see comment in buildshr.csh
../libgtmshr$(gt_ld_shl_suffix): gtmshr_symbols.export gtmexe_symbols.export $(gtmshr_obj) libmumps.a libgnpclient.a libcmisockettcp.a
rm -f $@
@echo "linking $(notdir $@)..."
@echo $(gt_ld_linker) $(gt_ld_options) $(gt_ld_shl_options) $(gt_ld_options_gtmshr) -o $@ $(gtmshr_obj) -lmumps -lgnpclient -lcmisockettcp $(gt_ld_syslibs) > ../map/$(notdir $@).map 2>&1
@$(gt_ld_linker) $(gt_ld_options) $(gt_ld_shl_options) $(gt_ld_options_gtmshr) -o $@ $(gtmshr_obj) -lmumps -lgnpclient -lcmisockettcp $(gt_ld_syslibs) >> ../map/$(notdir $@).map 2>&1
ifeq ($(gt_os_type),Linux)
@-[ -x /usr/bin/chcon ] && chcon -t texrel_shlib_t $@
endif
gtcmconfig: $(gtc_list)
cp -f $^ ..
cd ..;chmod a-wx $(notdir $^);mv -f configure.gtc configure
cd ..;touch gtmhelp.dmp;chmod a+rw gtmhelp.dmp
test_type:
ifndef gt_cc_options
$(error CURRENT_BUILDTYPE not properly defined)
endif
# no need to keep the archived object files
.INTERMEDIATE: $(libmumps_obj) $(non_mumps_objs)
#
# autodepend files for C files
#
-include $(dep_list)
#
# autodepend files for M files
#
-include $(mfile_list:.m=.mdep)
#
# autodepend files for mpt files
#
-include $(mptfile_list:=.mptdep)
#
# autodepend files for .a files
#
-include $(list_files:.list=.ldep)
# Overriding the implicit archive rule a(m):m to accumulate all changed .o
# files in a temporary dependency (.ardep) file that will be used by ar to
# archive all files in a single command.
# This enhancement [of accumulating in a temporary .ardep file instead of
# updating the library rightaway] improves the full building time. However
# for incremental builds the object file is updated into the archive
# immediately.
(%):%
ifeq ($(incremental),1)
@$(gt_ar_archiver) $(gt_ar_options) $@ $<
else
@echo $< >> $(basename $@).ardep
endif
# Since ecode_set.c includes merrors_ansi.h, merrors.msg should be precompiled.
ecode_set.d:merrors_ctl.c
%.d:%.c
ifeq ($(verbose),1)
@echo generating $@...
endif
$(gt-dep)
ifeq ($(incremental),1)
%.ldep:%.list
@echo $*.a\:$*.a\($$\(addsuffix .o,$$\(shell cat $<\)\)\) > $@
@$(gt_echoe) "\t@ranlib "$$\@ >> $@
else
%.ldep:%.list
@echo $*.a\:$*.a\($$\(addsuffix .o,$$\(shell cat $<\)\)\) $*.ardep > $@
@$(gt_echoe) "\t@echo Processing "$$\@ "; cp -f $*.ardep _$*.ardep; echo >$*.ardep" >> $@
@$(gt_echoe) "\t@cat _$*.ardep | xargs $(gt_ar_archiver) $(gt_ar_options) "$$\@ >>$@
@$(gt_echoe) "\t@rm -f _$*.ardep" >> $@
endif
%.mdep:%.m
@echo ../$(shell echo $* | tr '[:lower:]' '[:upper:]').m: $< > $@
@$(gt_echoe) "\t"cp -f $$\< $$\@ >> $@
%.mptdep:_%.m
@echo ../_$(shell echo $* | tr '[:lower:]' '[:upper:]').m: $< > $@
@$(gt_echoe) "\t"cp -f $$\< $$\@ >> $@
%.mptdep:%.mpt
@echo ../_$(shell echo $* | tr '[:lower:]' '[:upper:]').m: $< > $@
@$(gt_echoe) "\t"cp -f $$\< $$\@ >> $@
# By setting gtm_curpro to point to a prior installed GT.M directory (if
# available), the following rules automatically generates *_ctl.c from *.msg
# and ttt.c from ttt.txt.
ifdef gtm_curpro
%_ctl.c:%.msg msg.m
gtm_dist=$(gtm_curpro);export gtm_dist;\
$(gtm_curpro)/mumps $(filter-out $<, $^);\
$(gtm_curpro)/mumps -run msg $< unix
@rm -f msg.o
ttt.c:ttt.txt opcode_def.h vxi.h tttgen.m tttscan.m chk2lev.m chkop.m gendash.m genout.m loadop.m loadvx.m
gtm_dist=$(gtm_curpro);export gtm_dist;\
$(gtm_curpro)/mumps $(filter-out %.h, $(filter-out $<, $^));\
$(gtm_curpro)/mumps -run tttgen $< $(filter %.h, $^)
@rm -f tttgen.o tttscan.o chk2lev.o chkop.o gendash.o genout.o loadop.o loadvx.o
endif
# By default [since the rule %.o:%.s precedes %.o:%.c], the .s files take
# precedence over .c files if both versions exist for a module. The
# following rule allows us to reverse this behavior for a special set of
# modules (eg. compswap for sparcv8 etc.) by assigning them to a variable
# gt_cc_before_as [in gtm_env_sp.mk].
# gt_cc_before_as should be defined to the list of .o files for which both
# .c and .s exist but need to be compiled from .c instead of from .s files.
ifdef gt_cc_before_as
$(gt_cc_before_as):%.o:%.c #override rules for gt_cc_before_as modules ONLY
ifeq ($(verbose),1)
$(gt_cc_compiler) -c $(gt_cc_options) -o $@ $<
else
@echo "$< ----> $(CURDIR)/$@"
@$(gt_cc_compiler) -c $(gt_cc_options) -o $@ $<
endif
endif
ifdef gt_as_src_from_suffix
%.o:%$(gt_as_src_from_suffix)
ifeq ($(verbose),1)
$(gt-as-convert)
else
@echo "$< ----> $(CURDIR)/$@"
@$(gt-as-convert)
endif
endif
%.o:%$(gt_as_src_suffix)
ifneq ($(verbose),1)
@echo "$< ----> $(CURDIR)/$@"
endif
ifeq ($(gt_os_type), Linux)
ifeq ($(gt_machine_type), ia64)
@$(gt_cpp)
@$(gt-as_cpp)
@rm $<_cpp.s
else
@$(gt-as)
endif
else
ifeq ($(gt_os_type)), CYGWIN)
@$(gt-as)
objcopy --prefix-symbols="_" $@
else
@$(gt-as)
endif
endif
%.o:%.c
ifeq ($(verbose),1)
$(gt_cc_compiler) -c $(gt_cc_options) -o $@ $<
else
@echo "$< ----> $(CURDIR)/$@"
@$(gt_cc_compiler) -c $(gt_cc_options) -o $@ $<
endif
omi_sx_play.c: omi_srvc_xct.c
@cp $< $@
ifeq ($(incremental),1)
libmumps.a: libmumps.a($(msgofile_list) $(libmumps_obj))
@ranlib $@
else
libmumps.a: libmumps.a($(msgofile_list) $(libmumps_obj)) libmumps.ardep
@echo Processing $@ ;cp -f libmumps.ardep _libmumps.ardep; echo "">libmumps.ardep
@cat _libmumps.ardep | xargs $(gt_ar_archiver) $(gt_ar_options) $@
@rm -f _libmumps.ardep
endif
endif #second-level make invocation