The R Project SVN R

Rev

Rev 87826 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6994 pd 1
#-*- Makefile -*-
4394 ripley 2
 
86117 kalibera 3
## Defaults for user settings, see MkRules.dist for descriptions.  Since
86218 kalibera 4
## Rtools42, Rtools assumes that the compiler toolchain (e.g.  gcc, as, ...
5
## for Intel targets) is on PATH
81376 kalibera 6
LOCAL_SOFT ?= $(shell which `echo $(CC) | sed -e 's/ .*//g'` | sed -e 's!/bin/[^/]\+!!g')
67240 murdoch 7
EXT_LIBS ?= $(LOCAL_SOFT)
87091 kalibera 8
G_FLAG ?= $(if $(USE_LLVM),-g3,-gdwarf-2)
67240 murdoch 9
USE_ATLAS ?= NO
87317 kalibera 10
USE_OPENBLAS ?= NO
67302 ripley 11
ATLAS_PATH ?= 
68007 murdoch 12
TOOL_PATH ?=
81360 kalibera 13
BINPREF64 ?= 
84922 kalibera 14
CCBASE = $(if $(USE_LLVM),clang,gcc)
15
COMPILED_BY ?= $(CCBASE)-$(shell $(CC) --version | grep -E -o "([0-9]{1,}\.){2,}[0-9]{1,}")
67240 murdoch 16
M_ARCH ?=
17
AS_ARCH ?=
18
RC_ARCH ?=
19
DT_ARCH ?=
86218 kalibera 20
 
21
## only WIN=64 is supported from R 4.2.0 to R 4.3
22
## from R 4.4.0, WIN= is also supported and means there are no
23
## subarchitectures (so e.g.  Rgui.exe is directly under bin/) and no
24
## assumptions are made about the target (it is used with aarch64 builds)
84987 kalibera 25
WIN ?= 64
86218 kalibera 26
 
87140 kalibera 27
PKG_CONFIG ?= $(BINPREF)pkg-config
28
 
87099 kalibera 29
USE_PKG_CONFIG ?= 1
30
ifdef USE_PKG_CONFIG
87140 kalibera 31
  ifeq (,$(shell $(PKG_CONFIG) --version 2>/dev/null))
87099 kalibera 32
    USE_PKG_CONFIG =
33
  endif
34
  ifeq ($(filter-out no NO 0 off OFF,$(USE_PKG_CONFIG)),)
35
    USE_PKG_CONFIG =
36
  endif
37
endif
38
 
81360 kalibera 39
USE_ICU ?= YES
67302 ripley 40
ICU_PATH ?= 
81360 kalibera 41
USE_CAIRO ?= YES
42
CURL_CA_BUNDLE ?=
43
USE_LIBCURL = yes
87121 ripley 44
ifndef USE_ICU
45
  ifeq ($(filter-out no NO,$(USE_ICU)),)
46
    USE_ICU =
47
  endif
48
endif
81360 kalibera 49
 
87099 kalibera 50
ifndef USE_PKG_CONFIG
51
  ICU_LIBS ?= -lsicuin -lsicuuc $(EXT_LIBS)/lib/sicudt.a -lstdc++
52
  # (dynamic linking) ICU_LIBS ?= -licuin -licuuc -licudt -lstdc++
53
 
54
  CAIRO_CPPFLAGS ?= "-I$(EXT_LIBS)/include/cairo -I$(EXT_LIBS)/include/freetype2 -DCAIRO_WIN32_STATIC_BUILD"
55
  ## support freetype, curl built with libbrotli and without
56
  LIBBROTLI = $(or $(and $(wildcard $(EXT_LIBS)/lib/libbrotlidec.a),-lbrotlidec -lbrotlicommon),)
57
  ## support curl built with libpsl and without
58
  LIBPSL = $(or $(and $(wildcard $(EXT_LIBS)/lib/libpsl.a),-lpsl),)
87826 kalibera 59
  ## support curl built with libnghttp2 and without
60
  LIBH2 = $(or $(and $(wildcard $(EXT_LIBS)/lib/libnghttp2.a),-lnghttp2),)
87099 kalibera 61
  CAIRO_LIBS ?= "-lcairo -lfontconfig -lfreetype -lpng -lpixman-1 -lexpat -lharfbuzz \
62
                -lbz2 -lintl -lz -liconv -luuid -lstdc++ -lgdi32 -lmsimg32 -lole32 \
63
                $(LIBBROTLI)"
64
 
87826 kalibera 65
  CURL_LIBS ?= -lcurl $(LIBH2) $(LIBPSL) -lbcrypt -lzstd -lrtmp -lssl -lssh2 -lbcrypt -lgcrypt \
87099 kalibera 66
               -lcrypto -lgdi32 -lz \
67
               -lws2_32 -lgdi32 -lcrypt32 -lidn2 -lunistring -liconv -lgpg-error -lwldap32 \
68
               -lwinmm $(LIBBROTLI)
69
else
70
  ifndef ICU_LIBS
71
    # Some builds of ICU provide two data libraries, a small one 
72
    # with no data (e.g. libsicudt.a) and a large one with the
73
    # real data (e.g. sicudt.a). We want to link the large one
74
    # in that case, but pkg-config may return the small one.
75
    ICU_LIBS = $(patsubst -l%icudt, \
76
      $(or $(firstword $(wildcard \
77
        $(EXT_LIBS)/lib/icudt.dll $(EXT_LIBS)/bin/icudt.dll \
78
        $(EXT_LIBS)/lib/icudt.a $(EXT_LIBS)/bin/icudt.a \
79
        $(EXT_LIBS)/lib/sicudt.a $(EXT_LIBS)/bin/sicudt.a)), \
80
      -l%icudt), \
87140 kalibera 81
      $(shell $(PKG_CONFIG) --libs icu-i18n))
87099 kalibera 82
  endif
83
 
84
  ifdef USE_LLVM
85
    # work-around for incorrect .pc file
87140 kalibera 86
    CAIRO_CPPFLAGS ?= "$(shell $(PKG_CONFIG) --cflags cairo-fc) -I$(EXT_LIBS)/include/freetype2"
87099 kalibera 87
  else
87140 kalibera 88
    CAIRO_CPPFLAGS ?= "$(shell $(PKG_CONFIG) --cflags cairo-fc)"
87099 kalibera 89
  endif
90
 
87140 kalibera 91
  CAIRO_LIBS ?= "$(shell $(PKG_CONFIG) --libs cairo-fc)"
87099 kalibera 92
 
87140 kalibera 93
  CURL_LIBS ?= $(shell $(PKG_CONFIG) --libs libcurl)  
87099 kalibera 94
endif
95
 
67240 murdoch 96
BUILD_HTML ?= NO
81360 kalibera 97
TEXI2ANY ?= texi2any
98
TEXI2DVI = env COMSPEC= texi2dvi
99
MAKEINFO = texi2any
84922 kalibera 100
EOPTS ?= $(if $(USE_LLVM),,-mfpmath=sse -msse2 -mstackrealign)
87562 kalibera 101
SANOPTS ?=
87747 kalibera 102
CSTD ?= -std=gnu2x
67240 murdoch 103
OPENMP ?= -fopenmp
104
PTHREAD ?= -pthread
81360 kalibera 105
ISDIR ?= C:/Program Files (x86)/Inno Setup 6
67240 murdoch 106
QPDF ?=
107
DLLs64 ?=
81360 kalibera 108
WIX3DIR ?=
67240 murdoch 109
WIX_PERSONAL ?= 0
110
 
111
## =============== end of user setting defaults  ===================
112
 
85033 kalibera 113
NM_FILTER ?= | $(SED) -e '/[.]refptr[.]/d' -e '/[.]weak[.]/d'
67240 murdoch 114
 
53418 ripley 115
ifeq "$(WIN)" "64"
84987 kalibera 116
  R_ARCH = /x64
117
  arch_DEFS = -DR_ARCH='"x64"'
118
  BINPREF = $(BINPREF64)
119
  SYMPAT = 's/^.* [BCDRT] / /p'
51491 ripley 120
else
84987 kalibera 121
  R_ARCH = 
122
  arch_DEFS = -DR_ARCH='""'
123
  BINPREF = $(BINPREF64)
124
  SYMPAT = 's/^.* [BCDRT] / /p'
42609 ripley 125
endif
126
 
51491 ripley 127
BINDIR=bin$(R_ARCH)
51073 ripley 128
 
49840 ripley 129
ifdef USE_IMPLIBS
42589 ripley 130
IMPDIR=lib
131
else
51073 ripley 132
IMPDIR=$(BINDIR)
42589 ripley 133
endif
38811 ripley 134
 
86148 kalibera 135
LLVMPREF=
136
ifdef USE_LLVM
137
  # only set when BINPREF is empty or ends by /
138
  #   to support e.g. BINPREF=aarch64-w64-mingw32.static.posix-
139
  ifeq ($(patsubst %/,,$(lastword $(BINPREF))),)
140
    LLVMPREF="llvm-"
141
  endif
142
endif
143
 
84922 kalibera 144
AR = $(BINPREF)$(LLVMPREF)ar
4394 ripley 145
CAT=cat
85033 kalibera 146
CC=$(BINPREF)$(CCBASE) $(M_ARCH)
87140 kalibera 147
 
41449 murdoch 148
CP=cp
42698 ripley 149
# as set by make
41449 murdoch 150
CPP=$(CC) -E
87562 kalibera 151
DLL=$(CC) $(SANOPTS)
84922 kalibera 152
DLLTOOL=$(BINPREF)$(LLVMPREF)dlltool
42468 ripley 153
## some versions have trouble with paths, so we always need this
154
## even for native builds
84922 kalibera 155
DLLTOOLFLAGS=--as $(BINPREF)$(LLVMPREF)as $(DT_ARCH) -k
41449 murdoch 156
ECHO=echo
84922 kalibera 157
ifndef USE_LLVM
85033 kalibera 158
  FC=$(BINPREF)gfortran $(M_ARCH)
84922 kalibera 159
  FLIBS=-lgfortran -lquadmath
160
else
85033 kalibera 161
  FC=$(BINPREF)flang $(M_ARCH)
87559 kalibera 162
  ## Fortran_main is needed/available only in some builds of llvm/flang-new
163
  LIBFM = $(or $(and $(wildcard $(EXT_LIBS)/lib/libFortran_main.a),-lFortran_main),)
164
  FLIBS=-lFortranRuntime -lFortranDecimal $(LIBFM) -lc++ -lm
84922 kalibera 165
endif
47698 ripley 166
LINKER=$(MAIN_LD)
42446 ripley 167
MAIN_LD=$(CC)
75808 ripley 168
## MAKEINFO = $(TEXI2ANY)
41449 murdoch 169
MKDIR=mkdir
84922 kalibera 170
NM=$(BINPREF)$(LLVMPREF)nm
171
RANLIB = $(BINPREF)$(LLVMPREF)ranlib
172
RESCOMP=$(BINPREF)$(LLVMPREF)windres $(RC_ARCH)
78886 ripley 173
SHLIB_LD=$(CC)
174
SHLIB_LDFLAGS=-shared
55076 ripley 175
 
82622 kalibera 176
## If the Fortran compiler is gfortran >= 7, R used to add
76752 kalibera 177
## -fno-optimize-sibling-calls to avoid recent gfortran optimizations
178
## that break with LAPACK/BLAS-style passing of length-1 strings
179
## (without hidden arguments giving their lengths).
81360 kalibera 180
##
181
## One could also use -ftail-call-workaround=2, which would be less
182
## restrictive, and has been added after the breakages were discovered.
183
## However, it is documented that this option may be removed in the future.
81447 kalibera 184
## https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90329
82622 kalibera 185
##
186
## -fno-optimize-sibling-calls is no longer forced once all packages are
187
## passing char lengths.
81360 kalibera 188
 
82622 kalibera 189
## GF7OPTS =
190
## GFVER = $(shell echo "__GNUC__" | $(FC) -E -P -)
191
## ifneq ($(GFVER),"")
192
## GF7OPTS = $(shell [ $(GFVER) -ge 7 ] && echo "-fno-optimize-sibling-calls")
193
## endif
76752 kalibera 194
 
78886 ripley 195
ifneq "$(LTO)" ""
84922 kalibera 196
  ifndef USE_LLVM
197
    AR = $(BINPREF)gcc-ar
198
    NM = $(BINPREF)gcc-nm
199
    RANLIB = $(BINPREF)gcc-ranlib
200
  endif
201
  DLLFLAGS += $(CFLAGS)
78886 ripley 202
endif
203
 
42698 ripley 204
# as set by make
41449 murdoch 205
RM=rm -f
206
SED=sed
42510 murdoch 207
SORT=sort
4394 ripley 208
 
40666 ripley 209
.SUFFIXES:
210
.SUFFIXES: .c .cc .cpp .C .f .o .a .def .exp .dll .exe .d .f90 .f95 .m .S
17913 ripley 211
 
14136 ripley 212
.c.d:
213
	@echo "making $@ from $<"
48072 ripley 214
	@$(CC) -MM $(CPPFLAGS) $($*-CPPFLAGS) $(DEFINES) $< -o $@
14136 ripley 215
 
4394 ripley 216
.c.o:
57426 ripley 217
	$(CC) $(CPPFLAGS) $($*-CPPFLAGS) $(CFLAGS) $($*-CFLAGS) $(DEFINES) -c $< -o $@
6994 pd 218
 
4394 ripley 219
.f.o:
78886 ripley 220
	$(FC) $(FFLAGS) $($*-FFLAGS) -c $< -o $@
4394 ripley 221
 
82207 ripley 222
## used in src/extra/blas
223
.f90.o:
224
	$(FC) $(FFLAGS) $($*-FFLAGS) -c $< -o $@
225
 
78886 ripley 226
## $($*-LINKFLAGS) is used for Rgui Rterm and Rscript
9372 ripley 227
%.exe:
87562 kalibera 228
	$(LINKER) $(LINKFLAGS) $($*-LINKFLAGS) $(SANOPTS) -o $@ $^ $($*-LIBS) $(LIBS)
4394 ripley 229
 
78886 ripley 230
## It does little sense to have $($*-DLLFLAGS) here (and not in etc/Makeconf)
231
## $($*-DLLLIBS) is used for R and lapack
18256 ripley 232
%.dll:
37433 ripley 233
	@$(ECHO) EXPORTS > $*.def
66212 ripley 234
	@$(NM) $^ | $(SED) -n $(SYMPAT) $(NM_FILTER) >> $*.def
36874 ripley 235
	$(DLL) -shared $(DLLFLAGS) $($*-DLLFLAGS) -o $@ $*.def $^ $($*-DLLLIBS) $(DLLLIBS)
21580 ripley 236
	@$(RM) $*.def
4394 ripley 237
 
78886 ripley 238
## It does no sense to have $($*-DLLTOOLFLAGS) here, and it is unused.
37086 ripley 239
lib%.dll.a: %.def
42468 ripley 240
	$(DLLTOOL) $(DLLTOOLFLAGS) $($*-DLLTOOLFLAGS) --dllname $*.dll --input-def $*.def --output-lib $@
37086 ripley 241
 
9372 ripley 242
%.a:
21638 ripley 243
#	@$(ECHO) -------- Building $@ from $^ --------
32342 ripley 244
	@$(RM) $@
37514 ripley 245
	$(AR) crs $@ $^
4394 ripley 246
 
15534 ripley 247
%.o: %.rc
9058 ripley 248
	$(RESCOMP) $(RESFLAGS) $($*-RESFLAGS) -i $< -o $@