| #-*- Makefile -*- |
| # $(R_HOME}/etc$(R_ARCH)/Makeconf |
| |
| # Hand-edited version for gnuwin32. |
| |
| ifdef DEBUG |
| DLLFLAGS= |
| DEBUGFLAG=-gdwarf-2 |
| else |
| DLLFLAGS=-s |
| DEBUGFLAG= |
| endif |
| |
| DLLFLAGS+= -static-libgcc |
| LINKFLAGS+= -static-libgcc |
| |
| ## Things which are substituted by fixed/Makefile (and also -O3 -> -O2) |
| WIN = 32 |
| BINPREF = |
| COMPILED_BY = |
| # SYMPAT = 's/^.* [BCDRT] _/ /p' for 32-bit |
| # SYMPAT = 's/^.* [BCDRT] / /p' for 64-bit |
| SYMPAT = @SYMPAT@ |
| IMPDIR = bin |
| # flags for multilib builds, for compilers, dlltool and windres |
| M_ARCH = |
| DT_ARCH = |
| RC_ARCH = |
| # Used by packages tcltk and tkrplot |
| TCL_HOME = $(R_HOME)/Tcl |
| LOCAL_SOFT = |
| NM_FILTER = |
| |
| ifneq ($(strip $(LOCAL_SOFT)),) |
| LOCAL_CPPFLAGS = -I"$(LOCAL_SOFT)/include" |
| LOCAL_LIBS = -L"$(LOCAL_SOFT)/lib$(R_ARCH)" -L"$(LOCAL_SOFT)/lib" |
| endif |
| |
| DLLTOOL = $(BINPREF)dlltool --as $(BINPREF)as $(DT_ARCH) |
| DLLTOOLFLAGS = -k |
| NM = $(BINPREF)nm |
| RESCOMP = $(BINPREF)windres $(RC_ARCH) |
| ## MAIN_LD needs to be set by the package |
| LINKER = $(MAIN_LD) |
| ## as a default |
| DLL = $(CC) |
| |
| ## Things defined in Renviron on Unix |
| SED = sed |
| TAR = tar |
| |
| ## Things defined in MkRules |
| CAT = cat |
| CP = cp |
| MKDIR = mkdir |
| RM = rm -f |
| SORT = sort |
| |
| ## For use in packages |
| GRAPHAPP_LIB = -lRgraphapp |
| TCL_VERSION = 86 |
| # was a reference to Rzlib.dll in R < 3.2.0 |
| ZLIB_LIBS = -lz |
| |
| AR = $(BINPREF)ar |
| BLAS_LIBS = -L"$(R_HOME)/$(IMPDIR)" -lRblas |
| C_VISIBILITY = |
| CC = $(BINPREF)gcc $(M_ARCH) |
| CFLAGS = -O3 -Wall $(DEBUGFLAG) -std=gnu99 @EOPTS@ |
| CPICFLAGS = |
| CPPFLAGS = |
| CXX = $(BINPREF)g++ -std=gnu++11 $(M_ARCH) |
| CXXCPP = $(CXX) -E |
| CXXFLAGS = -O2 -Wall $(DEBUGFLAG) @EOPTS@ |
| CXXPICFLAGS = |
| CXX98 = $(BINPREF)g++ $(M_ARCH) |
| CXX98FLAGS = -O2 -Wall $(DEBUGFLAG) @EOPTS@ |
| CXX98PICFLAGS = |
| CXX98STD = -std=gnu++98 |
| CXX11 = $(BINPREF)g++ $(M_ARCH) |
| CXX11FLAGS = -O2 -Wall $(DEBUGFLAG) @EOPTS@ |
| CXX11PICFLAGS = |
| CXX11STD = -std=gnu++11 |
| CXX14 = |
| CXX14FLAGS = |
| CXX14PICFLAGS = |
| CXX14STD = |
| CXX17 = |
| CXX17FLAGS = |
| CXX17PICFLAGS = |
| CXX17STD = |
| DYLIB_EXT = .dll |
| DYLIB_LD = $(DLL) |
| DYLIB_LDFLAGS = -shared |
| DYLIB_LINK = $(DYLIB_LD) $(DYLIB_LDFLAGS) $(LDFLAGS) |
| ECHO = echo |
| ECHO_C = |
| ECHO_N = -n |
| ECHO_T = |
| ## unsupported on Windows |
| F_VISIBILITY = |
| ## FC is the compiler used for all Fortran as from R 3.6.0 |
| FC = $(BINPREF)gfortran $(M_ARCH) |
| FCFLAGS = -O3 $(DEBUGFLAG) @EOPTS@ |
| ## additional libs needed when linking with $(FC), e.g. on some Oracle compilers |
| FCLIBS_XTRA = |
| F77 = $(BINPREF)gfortran $(M_ARCH) |
| F77_VISIBILITY = |
| FFLAGS = -O3 $(DEBUGFLAG) @EOPTS@ |
| FLIBS = -lgfortran -lm -lquadmath |
| FCPICFLAGS = |
| FPICFLAGS = |
| FOUNDATION_CPPFLAGS = |
| FOUNDATION_LIBS = |
| JAR = |
| JAVA = |
| JAVAC = |
| JAVAH = |
| ## JAVA_HOME might be used in the next three. |
| ## They are for packages 'JavaGD' and 'rJava' |
| # JAVA_HOME = |
| # JAVA_LD_LIBRARY_PATH = |
| JAVA_LIBS = -L"$(JAVA_HOME)/bin/client" -ljvm -ljvm-w32 |
| JAVA_CPPFLAGS = -I"$(JAVA_HOME)/../include" -I"$(JAVA_HOME)/../include/win32" |
| LAPACK_LIBS = -L"$(R_HOME)/$(IMPDIR)" -lRlapack |
| ## we only need this is if it is external, as otherwise link to R |
| LIBINTL= |
| LIBM = -lm |
| LIBR = -L"$(R_HOME)/$(IMPDIR)" -lR |
| LIBS = -lm |
| ## needed by R CMD config |
| LIBnn = lib |
| LIBTOOL = |
| LDFLAGS = |
| ## needed to build applications linking to static libR |
| # MAIN_LD = |
| # MAIN_LDFLAGS = |
| # MAIN_LINK = $(MAIN_LD) $(MAIN_LDFLAGS) $(LDFLAGS) |
| # don't have this: would 'mkdir -p' do? |
| # MKINSTALLDIRS = $(R_HOME)/bin/mkinstalldirs |
| ## There is no ObjC support in the recommended toolchain, |
| ## but if a toolchain had support, this it what it would be. |
| OBJC = $(CC) |
| OBJCFLAGS = -O2 |
| OBJC_LIBS = -lobjc |
| OBJCXX = |
| OBJDUMP = $(BINPREF)objdump |
| R_ARCH = |
| RANLIB = $(BINPREF)ranlib |
| SAFE_FFLAGS = -O2 -msse2 -mfpmath=sse |
| SED = sed |
| ## it seems some makes (but not ours) get upset if SHELL is set. |
| # SHELL = /bin/sh |
| SHLIB_CFLAGS = |
| SHLIB_CXXFLAGS = |
| SHLIB_CXXLD = $(CXX) |
| ## ideally -shared -static-libstdc++, but not for gcc 4.2.1 |
| SHLIB_CXXLDFLAGS = -shared |
| SHLIB_CXX98LD = $(CXX98) |
| SHLIB_CXX98LDFLAGS = -shared |
| SHLIB_CXX11LD = $(CXX11) |
| SHLIB_CXX11LDFLAGS = -shared |
| SHLIB_CXX14LD = $(CXX14) |
| SHLIB_CXX14LDFLAGS = -shared |
| SHLIB_CXX17LD = $(CXX17) |
| SHLIB_CXX17LDFLAGS = -shared |
| SHLIB_EXT = .dll |
| SHLIB_FCLD = $(FC) |
| ## ideally -shared -static-libgfortran, but not for gcc 4.2.1 |
| SHLIB_FCLDFLAGS = -shared |
| SHLIB_FFLAGS = |
| SHLIB_LD = $(CC) |
| SHLIB_LDFLAGS = -shared |
| SHLIB_LIBADD = |
| SHLIB_LINK = $(SHLIB_LD) -Wl,--export-all-symbols $(SHLIB_LDFLAGS) $(LDFLAGS) |
| SHLIB_OPENMP_CFLAGS = @OPENMP@ |
| SHLIB_OPENMP_CXXFLAGS = @OPENMP@ |
| SHLIB_OPENMP_FCFLAGS = @OPENMP@ |
| SHLIB_OPENMP_FFLAGS = @OPENMP@ |
| SHLIB_PTHREAD_FLAGS = @PTHREAD@ |
| STRIP_SHARED_LIB = $(BINPREF)strip --strip-unneeded |
| STRIP_STATIC_LIB = $(BINPREF)strip --strip-debug |
| TCLTK_CPPFLAGS = -I "$(TCL_HOME)/include" -DWin32 |
| TCLTK_LIBS = -L"$(TCL_HOME)/bin" -ltcl$(TCL_VERSION) -ltk$(TCL_VERSION) |
| |
| STATIC_LIBR = |
| |
| R_XTRA_CFLAGS = |
| R_XTRA_CPPFLAGS = -I"$(R_HOME)/include" -DNDEBUG |
| R_XTRA_CXXFLAGS = |
| R_XTRA_FFLAGS = |
| |
| ALL_CFLAGS = $(R_XTRA_CFLAGS) $(PKG_CFLAGS) $(CPICFLAGS) $(SHLIB_CFLAGS) $(CFLAGS) |
| ALL_CPPFLAGS = $(R_XTRA_CPPFLAGS) $(PKG_CPPFLAGS) $(CLINK_CPPFLAGS) $(CPPFLAGS) $($*-CPPFLAGS) $(LOCAL_CPPFLAGS) |
| ALL_CXXFLAGS = $(R_XTRA_CXXFLAGS) $(PKG_CXXFLAGS) $(CXXPICFLAGS) $(SHLIB_CXXFLAGS) $(CXXFLAGS) |
| ALL_OBJCFLAGS = $(PKG_OBJCFLAGS) $(CPICFLAGS) $(SHLIB_CFLAGS) $(OBJCFLAGS) |
| ALL_OBJCXXFLAGS = $(PKG_OBJCXXFLAGS) $(CXXPICFLAGS) $(SHLIB_CXXFLAGS) $(OBJCXXFLAGS) |
| ALL_FFLAGS = $(R_XTRA_FFLAGS) $(PKG_FFLAGS) $(FPICFLAGS) $(SHLIB_FFLAGS) $(FFLAGS) |
| ALL_LIBS = $(PKG_LIBS) $(LOCAL_LIBS) $(SHLIB_LIBADD) $(LIBR) $(LIBINTL) |
| ## can be overridden by SHLIB |
| P_FCFLAGS = $(PKG_FFLAGS) |
| ALL_FCFLAGS = $(R_XTRA_FFLAGS) $(P_FCFLAGS) $(FPICFLAGS) $(SHLIB_FFLAGS) $(FCFLAGS) |
| |
| .SUFFIXES: |
| .SUFFIXES: .c .cc .cpp .d .f .f90 .f95 .m .mm .M .o .a .def .dll .exe .rc |
| |
| .c.o: |
| $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c $< -o $@ |
| .c.d: |
| @echo "making $@ from $<" |
| @$(CC) -std=gnu99 -MM $(ALL_CPPFLAGS) $< > $@ |
| .cc.o: |
| $(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) -c $< -o $@ |
| .cpp.o: |
| $(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) -c $< -o $@ |
| .cc.d: |
| @echo "making $@ from $<" |
| @$(CXX) -M $(ALL_CPPFLAGS) $< > $@ |
| .cpp.d: |
| @echo "making $@ from $<" |
| @$(CXX) -M $(ALL_CPPFLAGS) $< > $@ |
| .m.o: |
| $(OBJC) $(ALL_CPPFLAGS) $(ALL_OBJCFLAGS) -c $< -o $@ |
| .m.d: |
| @echo "making $@ from $<" |
| @$(OBJC) -MM $(ALL_CPPFLAGS) $< > $@ |
| .mm.o: |
| $(OBJCXX) $(ALL_CPPFLAGS) $(ALL_OBJCXXFLAGS) -c $< -o $@ |
| .M.o: |
| $(OBJCXX) $(ALL_CPPFLAGS) $(ALL_OBJCXXFLAGS) -c $< -o $@ |
| .f.o: |
| $(FC) $(ALL_FFLAGS) -c $< -o $@ |
| .f95.o: |
| $(FC) $(ALL_FCFLAGS) -c $< -o $@ |
| .f90.o: |
| $(FC) $(ALL_FCFLAGS) -c $< -o $@ |
| |
| %.exe: |
| $(LINKER) $(LINKFLAGS) $($*-LINKFLAGS) -o $@ $^ $($*-LIBS) $(LOCAL_LIBS) $(LIBS) |
| |
| %.dll: |
| @echo EXPORTS > $*.def |
| @$(NM) $^ | $(SED) -n $(SYMPAT) >> $*.def |
| $(SHLIB_LD) -shared $(DLLFLAGS) -o $@ $*.def $^ $(ALL_LIBS) |
| @$(RM) $*.def |
| |
| lib%.dll.a: %.def |
| $(DLLTOOL) $(DLLTOOLFLAGS) $($*-DLLTOOLFLAGS) --dllname $*.dll --input-def $*.def --output-lib $@ |
| |
| %.a: |
| @$(RM) $@ |
| $(AR) crs $@ $^ |
| |
| %.o: %.rc |
| $(RESCOMP) $(RESFLAGS) -i $< -o $@ |