added sample rule to check gcc version
[k8jam.git] / defaults / Jambase.profile
blob6931a38a2c21e26bd650de9c5e1e21a0f954c8cf
1 ###############################################################################
2 # special values
3 ###############################################################################
4 OPTIM_SPEED = -O3 -march=native -mtune=native -mfpmath=sse ;
5 LINKFLAGS_SPEED = -s ;
7 OPTIM_SIZE = -Os -march=native -mtune=native ;
8 LINKFLAGS_SIZE = -s ;
10 OPTIM_STANDARD = -O2 -march=native -mtune=native ;
11 LINKFLAGS_STANDARD = -s ;
13 OPTIM_DEBUG = -O0 -g ;
14 LINKFLAGS_DEBUG = -g ;
16 OPTIM_NOALIAS = -fno-strict-aliasing ;
19 ##rule SetCPUFlags {
20 ##  if $(OS) != "LINUX" {
21 ##    DETECTED_CPU = "i486" ;
22 ##    OPTIM_SPEED = -O3 -march=i486 -mtune=i486 ;
23 ##  } else {
24 ##    DETECTED_CPU = native ;
25 ##    OPTIM_SPEED = -O3 -march=native -mtune=native ;
26 ##  }
27 ##}
30 K8JAM-KNOWN-PROFILES =
31   none default  # don't change
32   empty         # remove optimisation flags
33   speed         # optimise for speed
34   size          # optimise for size
35   debug         # don't optimize, add debug info
36   standard      # -O2
40 ### rule --CheckGCC47Plus-- {
41 ###   local t gccv ;
42 ###
43 ###   t = [ Match "(gcc)" : "$(CC)" ] ;
44 ###   if ( "gcc" in $(t) ) {
45 ###     gccv = [ Command "gcc --version | line 1" ] ;
46 ###     t = [ Match "[\t\r\n ]+([0-9]+\\.[0-9]+)\\." : "$(gccv)" ] ;
47 ###     if $(t) == "4.7" {
48 ###       return "tan" ;
49 ###     } else {
50 ###       return "" ;
51 ###     }
52 ###   } else {
53 ###     return "" ;
54 ###   }
55 ### }
58 rule --k8jam-set-standards-- {
59   if ! $(CC.standard) { CC.standard = -std=gnu99 ; }
60   if ! $(C++.standard) { C++.standard = -std=gnu++98 ; }
64 rule --k8jam-profile-none-- {
65   Echo "MSG: default profile" ;
66   OPT_PROFILE = ;
70 rule --k8jam-profile-default-- {
71   --k8jam-profile-none-- ;
75 rule --k8jam-profile-empty-- {
76   Echo "MSG: empty profile" ;
77   SLACK_PKG_ARCH = "i486" ;
78   LINKFLAGS.all += -s ;
81 rule --k8jam-profile-speed-- {
82   Echo "MSG: 'speed' profile" ;
83   SLACK_PKG_ARCH = "i686" ;
84   CFLAGS.all += $(OPTIM_SPEED) ;
85   LINKFLAGS.all += $(LINKFLAGS_SPEED) ;
86   --k8jam-set-standards-- ;
89 rule --k8jam-profile-size-- {
90   Echo "MSG: 'size' profile" ;
91   SLACK_PKG_ARCH = "i686" ;
92   CFLAGS.all += $(OPTIM_SIZE) ;
93   LINKFLAGS.all += $(LINKFLAGS_SIZE) ;
94   --k8jam-set-standards-- ;
97 rule --k8jam-profile-debug-- {
98   Echo "MSG: 'debug' profile" ;
99   SLACK_PKG_ARCH = "i486" ;
100   CFLAGS.all += $(OPTIM_DEBUG) ;
101   LINKFLAGS.all += $(LINKFLAGS_DEBUG) ;
102   --k8jam-set-standards-- ;
105 rule --k8jam-profile-standard-- {
106   Echo "MSG: 'standard' profile" ;
107   SLACK_PKG_ARCH = "i486" ;
108   CFLAGS.all += $(OPTIM_STANDARD) ;
109   LINKFLAGS.all += $(LINKFLAGS_STANDARD) ;
110   --k8jam-set-standards-- ;
114 # profile "name" ;
115 # set compile flags for profile; works only for gcc/g++
116 # available profiles:
117 #  none, default: don't change
118 #  empty: remove optimisation flags
119 #  speed: optimise for speed and pIII
120 #  size: optimise for size
121 #  debug: don't optimize, add debug info
122 #  standard: -O2
123 rule profile {
124   if ! $(1) in $(K8JAM-KNOWN-PROFILES) {
125     Echo "known profiles: $(K8JAM-KNOWN-PROFILES)" ;
126     Exit "unknown profile: $(1)" ;
127   }
129   remove-opt-flags-for-all-compilers ;
130   LINKFLAGS -= "-g" "-s" ;
131   C++LINKFLAGS -= "-g" "-s" ;
132   OBJCLINKFLAGS -= "-g" "-s" ;
133   LINKFLAGS.all -= "-g" "-s" ;
135   OPT_PROFILE = $(1) ;
136   --k8jam-profile-$(OPT_PROFILE)-- ;
138 #SLACK_PKG_ARCH ?= "i486" ;
141 # selects 'debug', 'standard', 'speed' or 'size' profile according to vars:
142 #  DEBUG = 1 : debug
143 #  OPT_SIZE = 1 : size
144 #  OPT_SPEED = 1 : speed
145 #  OPT=SIZE or OPT=SPEED
146 #  default: standard
147 rule set-profile {
148   local otp ;
150   if $(OPT) = "size" { otp = "size" ; }
151   else if $(OPT) = "SIZE" { otp = "size" ; }
152   if $(OPT) = "speed" { otp = "speed" ; }
153   else if $(OPT) = "SPEED" { otp = "speed" ; }
154   else if $(OPT_SIZE) { otp = "size" ; }
155   else if $(OPT_SPEED) { otp = "speed" ; }
157   if $(USE_CLANG) {
158     CC = clang ;
159     LINK = clang ;
160     C++ = clang++ ;
161     C++LINK = clang++ ;
162   }
164   if $(DEBUG) {
165     profile "debug" ;
166   } else if $(otp) = "size" {
167     profile "size" ;
168   } else if $(otp) = "speed" {
169     profile "speed" ;
170   } else {
171     profile "standard" ;
172   }
173   if $(VALGRIND) {
174     CFLAGS.all -= "-g" "-s" ;
175     LINKFLAGS.all -= "-g" "-s" ;
176     CFLAGS.all += -g ;
177     LINKFLAGS.all += -g ;
178   }
179   if ! $(NO_WARNINGS) {
180     CFLAGS.all += -Wall ;
181   }
182   gcc-suggest-attrs ;