summaryrefslogtreecommitdiff
path: root/gnu/lib/libg++/Makefile.gnu
blob: 9ebb2aa763bad1af9a0baef49215e7866a1cd7f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
# Makefile for GNU C++ class library (libg++)
#   Copyright (C) 1989 Free Software Foundation, Inc.
#   written by Doug Lea (dl@rocky.oswego.edu)

#This file is part of GNU libg++.

#GNU libg++ is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 1, or (at your option)
#any later version.

#GNU libg++ is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.

#You should have received a copy of the GNU General Public License
#along with GNU libg++; see the file COPYING.  If not, write to
#the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.

###########################################################################
#
# Directories, paths, compilation flags and program names.
#
# Please make sure these are correct.
#

# ------ source locations

# Manually set PWD to *this* directory if you are not using gnu make
PWD := $(shell pwd)
#PWD=/home/dl/libg++

# source include directory 
SRCIDIR= $(PWD)/g++-include

# the genclass program
GENCLASS=$(PWD)/genclass
# and its directory of prototype files
PROTODIR=$(PWD)/g++-include/gen

# ------ installation destinations
# ------ You will require write-permission on the destination directories
# ------ in order to `make install'

# set `prefix' to something else if you want to install things
# in nonstandard places

prefix =/usr/gnu

# libg++.a destination
LIBDIR = $(prefix)/lib

# executables directory: location to install the genclass class generator
BINDIR = $(prefix)/bin

# directory to install man pages
MANDIR= $(prefix)/man

# location to install include file directory
IDIR = $(prefix)/lib/g++-include


# ------- System-dependent defines
# ------- use the second form of each for SystemV (USG)

# g++ flags
OSFLAG=
#OSFLAG = -DUSG

# other compilation control flags -- use any combination

# use this only if you have a strange stdio implementation
#XTRAFLAGS = -DDEFAULT_filebuf

# use this if you do not want gnulib3 in libg++.a
#XTRAFLAGS = -DNO_GNULIB3

# use this if you need COFF encapulation defined in gnulib3
#XTRAFLAGS = -DCOFF_ENCAPSULATE

# use this if you want to disable line buffering for stream output
#XTRAFLAGS = -DNO_LINE_BUFFER_STREAMBUF

# Use this to disable placing libg++ version of malloc in libg++.a 
#XTRAFLAGS = -DNO_LIBGXX_MALLOC

# Please use this & send me some results of malloc_stats() sometime
# (it is off by default, since stat gathering hurts performance)
#XTRAFLAGS = -DMALLOC_STATS

#suggested for NeXT by cdr@acc.stolaf.edu
#XTRAFLAGS = -DNO_GNULIB3 -DNO_LIBGXX_MALLOC

# ld or ld++ flags
OSLDFLAG =
#OSLDFLAG= -lPW

# how to install
INSTALL=install -c
#INSTALL=cp

# ranlib if necessary
RANLIB=ranlib
#RANLIB=echo

# which make?
MAKE=make

#which ar?
AR=ar

# not used, but convenient for those who preprocess things while compiling
SHELL=/bin/sh


# ------ compiler names

# GNU C++ compiler name
GXX = g++
#GXX=gcc

# GNU CC compiler name (needed for some .c files in libg++.a)
CC = gcc

# GNU loader
LDXX = $(LIBDIR)/gcc-ld
#LDXX = $(LIBDIR)/gcc-ld++

# crt0+.o location (for dynamic loading tests)
GXXCRT1=$(LIBDIR)/crt1+.o

# ------ Other compilation flags
# ------ modify as you like -- the ones here are sheer overkill
# ------ However, You MUST compile libg++.a with EITHER -O OR
# ------ -DUSE_LIBGXX_INLINES or both

GXX_OPTIMIZATION_FLAGS= -O -fstrength-reduce  -felide-constructors -fschedule-insns -fdelayed-branch -fsave-memoized 

#GXX_OPTIMIZATION_FLAGS=-DUSE_LIBGXX_INLINES

GCC_OPTIMIZATION_FLAGS= -O -fstrength-reduce -fdelayed-branch 

DEBUG_FLAGS= -g

#use this only if you like to look at lots of useless messages
#VERBOSITY_FLAGS= -Wall -v 
VERBOSITY_FLAGS= -Wall

GXX_INCLUDE_DIRS= -I$(SRCIDIR)

GCC_INCLUDE_DIRS= -I$(prefix)/lib/gcc-include -I/usr/include -I$(SRCIDIR)

#use this only if you use GNU as (gas) or other assemblers that 
#can read from pipes. 
PIPE_AS= -pipe
#PIPE_AS=

# Flags for all C++ compiles
GXXFLAGS = $(OSFLAG) $(GXX_INCLUDE_DIRS) $(DEBUG_FLAGS) $(GXX_OPTIMIZATION_FLAGS) $(VERBOSITY_FLAGS) $(XTRAFLAGS) $(PIPE_AS)

# Flags for all C compiles
CFLAGS= $(OSFLAG) $(GCC_INCLUDE_DIRS) $(DEBUG_FLAGS) $(GCC_OPTIMIZATION_FLAGS) $(VERBOSITY_FLAGS) $(XTRAFLAGS) $(PIPE_AS)

# g++ load time flags 
GXXLDFLAGS = -L$(PWD)/src -lg++ -lm $(OSLDFLAG)

# Comment out the next line to disable incremental linking test
# (this test NOT included in 1.39.0, so don't re-enable)
#TEST0=test0
TEST0=

###########################################################################
#
# compilation actions
#




src: FORCE
	(cd src; $(MAKE) GXX="$(GXX)"  GXXFLAGS="$(GXXFLAGS)" GXXLDFLAGS="$(GXXLDFLAGS)" LIBDIR="$(LIBDIR)" SRCIDIR="$(SRCIDIR)" CC="$(CC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" LDXX="$(LDXX)" GXXCRT1="$(GXXCRT1)" MAKE="$(MAKE)" prefix="$(prefix)" VPATH="$(SRCIDIR)" AR="$(AR)" PROTODIR="$(PROTODIR)" GENCLASS="$(GENCLASS)")

tests: FORCE
	(cd tests;	$(MAKE) checktests GXX="$(GXX)"  GXXFLAGS="$(GXXFLAGS)" GXXLDFLAGS="$(GXXLDFLAGS)" LIBDIR="$(LIBDIR)" SRCIDIR="$(SRCIDIR)" CC="$(CC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" LDXX="$(LDXX)" GXXCRT1="$(GXXCRT1)" MAKE="$(MAKE)" prefix="$(prefix)" AR="$(AR)" TEST0="$(TEST0)" PROTODIR="$(PROTODIR)" GENCLASS="$(GENCLASS)")

etc: FORCE
	(cd etc;	$(MAKE) GXX="$(GXX)"  GXXFLAGS="$(GXXFLAGS)" GXXLDFLAGS="$(GXXLDFLAGS)" LIBDIR="$(LIBDIR)" SRCIDIR="$(SRCIDIR)" CC="$(CC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" LDXX="$(LDXX)" GXXCRT1="$(GXXCRT1)" MAKE="$(MAKE)" prefix="$(prefix)" AR="$(AR)" PROTODIR="$(PROTODIR)" GENCLASS="$(GENCLASS)")

run_etc: FORCE
	(cd etc;	$(MAKE) run_tests GXX="$(GXX)"  GXXFLAGS="$(GXXFLAGS)" GXXLDFLAGS="$(GXXLDFLAGS)" LIBDIR="$(LIBDIR)" SRCIDIR="$(SRCIDIR)" CC="$(CC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" LDXX="$(LDXX)" GXXCRT1="$(GXXCRT1)" MAKE="$(MAKE)" prefix="$(prefix)" AR="$(AR)" PROTODIR="$(PROTODIR)" GENCLASS="$(GENCLASS)")

gperf: FORCE
	(cd gperf;	$(MAKE) GXX="$(GXX)"  GXXFLAGS="$(GXXFLAGS)" GXXLDFLAGS="$(GXXLDFLAGS)" LIBDIR="$(LIBDIR)" SRCIDIR="$(SRCIDIR)" CC="$(CC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" LDXX="$(LDXX)" GXXCRT1="$(GXXCRT1)" prefix="$(prefix)" AR="$(AR)" PROTODIR="$(PROTODIR)" GENCLASS="$(GENCLASS)")

genclass: genclass.sh
	echo "/^PROTODIR=/c\\" > sedscript
	echo "PROTODIR=$$\{PROTODIR-$(IDIR)/gen\}" >> sedscript
	sed -f sedscript < genclass.sh > genclass
	chmod 0755 genclass
	rm -f sedscript

#to force sub-makes
FORCE:


###########################################################################
#
# Installation
#

MAKE_ENVIRON=\
	BINDIR=$(BINDIR) \
	LIBDIR=$(LIBDIR) \
	MANDIR=$(MANDIR) \
	INSTALL="$(INSTALL)"

all: src tests genclass etc gperf 

install:  install-lib install-include-files install-progs

install-lib:
	(cd src; $(MAKE) $(MAKE_ENVIRON) install)

install-progs:
	(cd etc; $(MAKE) $(MAKE_ENVIRON) install)
	(cd gperf; $(MAKE) $(MAKE_ENVIRON) install)
	$(INSTALL) genclass $(BINDIR)

install-include-files:
	-mkdir $(IDIR)
	-mkdir $(IDIR)/sys
	-mkdir $(IDIR)/gen
	cd $(SRCIDIR); \
	FILES=`find . ! -type d  -print`; \
	cd gen; \
	GFILES=`find . ! -type d -print`;\
	cd $(IDIR); \
	rm -fr $$FILES; \
	rm -f $$GFILES; \
	cd $(SRCIDIR); \
	FILES=`find . ! -type d  -print`; \
	for file in $$FILES; do \
		rm -f $(IDIR)/$$file; \
		cp $$file $(IDIR)/$$file; \
		chmod 0444 $(IDIR)/$$file; \
		echo $$file installed; \
	done


###########################################################################
#
# Destructors
#

clean:
	rm -f *.o *~ \#* *.bak *.pl a.out 
	cd tests; $(MAKE) clean
	cd etc; $(MAKE) clean
	cd gperf; $(MAKE) clean

realclean:
	cd src; $(MAKE) realclean
	cd tests; $(MAKE) realclean
	cd etc; $(MAKE) realclean
	cd gperf; $(MAKE) realclean
	-rm -f genclass
	-rm -f libg++.info* libg++.?? libg++.??s libg++.log libg++.toc libg++.*aux
	-rm -f *.orig src/*.orig tests/*.orig etc/*.orig g++-include/*.orig g++-include/sys/*.orig g++-include/gen/*.orig
	-rm -f *.rej src/*.rej tests/*.rej etc/*.rej g++-include/*.rej g++-include/sys/*.rej g++-include/gen/*.rej
	-rm -f *~ src/*~ tests/*~ etc/*~ g++-include/*~ g++-include/sys/*~ g++-include/gen/*~
	-rm -f a.out src/a.out tests/a.out etc/a.out 
	-rm -f *.s src/*.s tests/*.s etc/*.s 


.PHONY: src tests genclass etc gperf FORCE install install-include-files