added "C++FLAGS.all" (and "OBJCFLAGS.all"); "CFLAGS.all" is still in effect
[k8jam.git] / defaults / Jambase.vars
blobd9c5ece0c561aa326d0a65525dbfbfd75aacce5a
1 # This program is free software: you can redistribute it and/or modify
2 # it under the terms of the GNU General Public License as published by
3 # the Free Software Foundation, version 3 of the License ONLY.
5 # This program is distributed in the hope that it will be useful,
6 # but WITHOUT ANY WARRANTY; without even the implied warranty of
7 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
8 # GNU General Public License for more details.
10 # You should have received a copy of the GNU General Public License
11 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
14 # OS specific variable settings
17 ###############################################################################
18 # Windoze
19 ###############################################################################
20 if $(NT) {
21   PATH_SEPARATOR = '\' ;
22   local SUPPORTED_TOOLSETS =
23     MINGW
24     LCC
25     PELLESC
26   ;
28   # if the JAM_TOOLSET environment variable is defined, check that it is
29   # one of our supported values
30   #
31   if $(JAM_TOOLSET) {
32     if ! $(JAM_TOOLSET) in $(SUPPORTED_TOOLSETS) {
33       Echo 'The JAM_TOOLSET environment variable is defined but its value' ;
34       Echo 'is invalid, please use one of the following:' ;
35       Echo ;
36       for t in $(SUPPORTED_TOOLSETS) { Echo '  ' $(t) ; }
37       Exit ;
38     }
39   }
41   if ! $(JAM_TOOLSET) {
42     Echo 'The JAM_TOOLSET environment variable is not defined, defaults to MINGW' ;
43     JAM_TOOLSET = MINGW ;
44     MINGW ?= 'c:\mingw\bin\' ;
45   }
47   MV        ?= move /y ;
48   CP        ?= copy ;
49   RM        ?= del /f/q ;
50   RMDIR     ?= rmdir /s/q ;
51   SLASH     ?= '\' ;
52   SUFLIB    ?= .lib ;
53   SUFOBJ    ?= .obj ;
54   SUFEXE    ?= .exe ;
55   SUFLIBSHR ?= .dll ;
57   if $(JAM_TOOLSET) = MINGW {
58     Echo 'Compiler is GCC with MinGW' ;
59     AR           ?= ar -srUu ;
60     #RANLIB       ?= ranlib ;
61     CC           ?= mingw32-gcc ;
62     CCFLAGS      ?= "" ;
63     C++          ?= mingw32-g++ ;
64     C++FLAGS     ?= $(CCFLAGS) ;
65     LINK         ?= $(CC) ;
66     LINKFLAGS    ?= "" ;
67     LINKLIBS     ?= -lkernel32 ;
68     OPTIM        ?= ;
69     CC.standard  ?= -std=gnu11 ;
70     SUFOBJ        = .o ;
71     SUFLIB        = .a ;
72     SLASH         = / ;
73     # MinGW-specific thingy
74     MINGW_GUI     = '-Wl,-subsystem,windows' ;
75     MINGW_THREADS = '-mthreads' ;
76     # k8
77     C++OPTIM     ?= ;
78     C++.standard ?= ;
79     C++LINK      ?= $(C++) ;
80     C++LINKFLAGS ?= ;
81     C++LINKLIBS  ?= ;
82     #NOARSCAN     ?= true ;
83     # set path if any
84     if $(MINGW) {
85       CC = "$(MINGW)$(CC:J= )" ;
86       C++ = "$(MINGW)$(C++:J= )" ;
87       LINK = "$(MINGW)$(LINK:J= )" ;
88       C++LINK = "$(MINGW)$(C++LINK:J= )" ;
89       AR = "$(MINGW)$(AR:J= )" ;
90       if $(RANLIB) { RANLIB = "$(MINGW)$(RANLIB:J= )" ; }
91     }
92   } else if $(JAM_TOOLSET) = LCC {
93     Echo 'Compiler is Win32-LCC' ;
94     AR        ?= lcclib ;
95     CC        ?= lcc ;
96     CCFLAGS   ?= "" ;
97     C++       ?= 'error' ;
98     LINK      ?= lcclnk ;
99     LINKFLAGS ?= "" ;
100     LINKLIBS  ?= "" ;
101     OPTIM     ?= ;
102     NOARSCAN   = true ;
103     # k8
104     C++LINK    = 'error' ;
105   } else if $(JAM_TOOLSET) = PELLESC {
106     Echo 'Compiler is PellesC' ;
107     AR        ?= polib ;
108     CC        ?= pocc ;
109     CCFLAGS   ?= "" ;
110     C++       ?= 'error' ;
111     LINK      ?= polink ;
112     LINKFLAGS ?= ;
113     LINKLIBS  ?= ;
114     OPTIM     ?= ;
115     NOARSCAN   = true ;
116     LINKLIBS  ?= crt.lib oldnames.lib 'Win\kernel32.lib' ;
117     # k8
118     C++LINK    = 'error' ;
119   } else {
120     # XXX: We need better comments here !!
121     Exit "On NT, set MINGW to the root of the MinGW dir (but it won't help you anyway)" ;
122   }
123   STDHRS ?= "" ;
124   PICFLAGS = ;
126 ###############################################################################
127 # UNIX
128 ###############################################################################
129 else if $(UNIX) {
130   PATH_SEPARATOR = '/' ;
131     # UNIX defaults
132     CC        ?= gcc ;
133     C++       ?= g++ ;
134     OBJCC     ?= gcc ;
135     CCFLAGS   ?= ;
136     OBJCFLAGS ?= $(CCFLAGS) ;
137     C++FLAGS  ?= $(CCFLAGS) ;
138     CHMOD     ?= chmod ;
139     CHGRP     ?= chgrp ;
140     CHOWN     ?= chown ;
141     LEX       ?= flex ;
142     LINKFLAGS ?= $(CCFLAGS) ;
143     LINKLIBS  ?= ;
144     OPTIM     ?= ;
145     CC.standard  ?= -std=gnu11 ;
146     C++OPTIM     ?= ;
147     C++.standard ?= ; 
148     if $(OS) != 'LINUX' { RANLIB ?= ranlib ; }
149     YACC      ?= bison ;
150     YACCGEN   ?= .c ;
151     YACCFILES ?= y.tab ;
152     YACCFLAGS ?= -ld ;
153     SUFOBJSHR ?= .o ;
154     SUFLIBSHR ?= .so ;
155     PICFLAGS  ?= -fpic ;
156     STDHDRS   ?= /usr/include ;
157     HDRPATH_IGNORE ?= /usr ; # no regexp yet
158     PKG-CONFIG ?= pkg-config ;
159   switch $(OS) {
160     case CYGWIN :
161       CC       ?= gcc ;
162       CCFLAGS  += -D__cygwin__ ;
163       LEX      ?= flex ;
164       JAMSHELL ?= sh -c ;
165       RANLIB   ?= "" ;
166       SUFEXE   ?= .exe ;
167       YACC     ?= bison -y ;
168     case AIX :
169       CC       ?= xlc ;
170       C++      ?= xlc++ ;
171       CC.standard = -qfullpath -qlanglvl=extc99 ;
172       C++.standard = -qfullpath -qlanglvl=extc99 ;
173     }
176 # shared library object file suffix. We assume that it is identical
177 # than the normal one
178 SUFOBJSHR ?= $(SUFOBJ) ;
179 SUFLIBSHR ?= $(SUFLIB) ;
182 # the D compiler
183 #DC ?= dmd ;
186 # General defaults; a lot like UNIX
188 PATH_SEPARATOR ?= '/' ;
189 if $(OS) != 'LINUX' { AR ?= ar ru ; } else { AR ?= ar srUu ; }
190 AS          ?= as ;
191 ASFLAGS     ?= ;
192 AWK         ?= awk ;
193 BINDIR      ?= /usr/local/bin ;
194 C++         ?= g++ ;  # k8: was cc
195 C++FLAGS    ?= ;
196 CC          ?= gcc ;  # k8: was cc
197 CCFLAGS     ?= ;
198 CP          ?= cp -f ;
199 #CRELIB      ?= ;
200 EXEMODE     ?= 755 ;
201 FILEMODE    ?= 644 ;
202 HDRS        ?= ;
203 JAMFILE     ?= Jamfile ;
204 JAMRULES    ?= Jamrules ;
205 LEX         ?= ;
206 LIBDIR      ?= /usr/local/lib ;
207 LINK        ?= $(CC) ;
208 LINKFLAGS   ?= ;
209 LINKLIBS    ?= ;
210 LN          ?= ln ;
211 MANDIR      ?= /usr/local/man ;
212 MKDIR       ?= mkdir ;
213 MV          ?= mv -f ;
214 OPTIM       ?= ;
215 C++OPTIM    ?= ;
216 CC.standard ?= ;
217 C++.standard ?= ;
218 RCP         ?= rcp ;
219 RM          ?= rm -f ;
220 RMDIR       ?= $(RM) ;
221 RSH         ?= rsh ;
222 SED         ?= sed ;
223 SHELLHEADER ?= '#!/bin/sh' ;
224 SHELLMODE   ?= 755 ;
225 SLASH       ?= / ;
226 SUBDIRRULES ?= ;
227 SUBDIRRESET ?= ASFLAGS HDRS C++FLAGS CCFLAGS HDRS DEFINES ;
228 SUFEXE      ?= "" ;
229 SUFLIB      ?= .a ;
230 SUFOBJ      ?= .o ;
231 UNDEFFLAG   ?= '-u _' ;
232 YACC        ?= ;
233 YACCGEN     ?= ;
234 YACCFILES   ?= ;
235 YACCFLAGS   ?= ;
236 if $(USE_DMD) {
237   GDC       ?= kdmd ;
238   GDCLINK   ?= kdmd ;
239 } else {
240   GDC       ?= gdc -pipe ;
241   GDCLINK   ?= gdc -pipe ;
243 HDRPATTERN = '^\s*#\s*include\s+[<"]([^">]+)[">].*$' ;
244 PKG-CONFIG ?= pkg-config ;
247 OSFULL = $(OS)$(OSVER)$(OSPLAT) $(OS)$(OSPLAT) $(OS)$(OSVER) $(OS) ;
249 # k8
250 #C++OPTIM     ?= $(OPTIM) ;
251 C++LINK      ?= $(C++) ;
252 #C++LINKFLAGS ?= $(LINKFLAGS) ;
253 #C++LINKLIBS  ?= $(LINKLIBS) ;
255 OBJCOPTIM     ?= $(OPTIM) ;
256 OBJCLINK      ?= $(CC) ;
257 OBJCLINKFLAGS ?= $(LINKFLAGS) ;
258 OBJCLINKLIBS  ?= $(LINKLIBS) ;
259 OBJCLINKLIBS  += -lobjc ;
261 if $(OS) = 'LINUX' {
262   if ( 'gcc' in $(CC) ) && ! ( '-pipe' in $(CC) ) { CC += -pipe ; }
263   if ( 'g++' in $(C++) ) && ! ( '-pipe' in $(C++) ) { C++ += -pipe ; }
266 #Echo 'OS:' $(OS) ;
267 #Echo 'OSFULL:' $(OSFULL) ;
268 #Echo 'UNIX:' $(UNIX) ;
271 rule unfuck-gcc {
272   if ( 'gcc' in $(CC) ) || ( 'g++' in $(C++) ) {
273     CFLAGS.all += -fno-aggressive-loop-optimizations ;
274     CFLAGS.all += -fno-delete-null-pointer-checks ;
275     CFLAGS.all += -fno-strict-aliasing ;
276     CFLAGS.all += -fno-strict-overflow ;
277     CFLAGS.all += -fwrapv ;
278     CFLAGS.all += -mstackrealign ;
279     CFLAGS.all += -fno-diagnostics-show-caret ;
280   }