/
MkRules.rules
105 lines (87 loc) · 2.14 KB
/
MkRules.rules
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
#-*- Makefile -*-
ifeq "$(MULTI)" "64"
WIN = 64
M_ARCH = -m64
AS_ARCH = --64
RC_ARCH = -F pe-x86-64
DT_ARCH = -m i386:x86-64 --as-flags --64
BINPREF64 = $(TOOL_PATH)
endif
ifeq "$(MULTI)" "32"
WIN = 32
# these are normally the defaults
M_ARCH = -m32
AS_ARCH = --32
RC_ARCH = -F pe-i386
DT_ARCH = -m i386 --as-flags --32
BINPREF = $(TOOL_PATH)
endif
ifeq "$(WIN)" "64"
R_ARCH = /x64
arch_DEFS = -DR_ARCH='"x64"'
BINPREF = $(BINPREF64)
SYMPAT = 's/^.* [BCDRT] / /p'
else
R_ARCH = /i386
arch_DEFS = -DR_ARCH='"i386"'
SYMPAT = 's/^.* [BCDRT] _/ /p'
endif
## -std=c99 would force __STRICT_ANSI__ disabling strdup etc, and also alloca
C99FLAG=-std=gnu99
## earlier Rtools needed -sjlj; the alternative is -dw2, which failed building R.
GCC4_SUFF=
BINDIR=bin$(R_ARCH)
ifdef USE_IMPLIBS
IMPDIR=lib
else
IMPDIR=$(BINDIR)
endif
AR=$(BINPREF)ar
# AWK=gawk
CAT=cat
CC=$(BINPREF)gcc$(GCC4_SUFF) $(C99FLAG) $(M_ARCH)
CP=cp
# as set by make
CPP=$(CC) -E
DLL=$(CC)
DLLTOOL=$(BINPREF)dlltool
## some versions have trouble with paths, so we always need this
## even for native builds
DLLTOOLFLAGS=--as $(BINPREF)as $(DT_ARCH) -k
ECHO=echo
F77=$(BINPREF)gfortran$(GCC4_SUFF) $(M_ARCH)
FLIBS=-lgfortran
LINKER=$(MAIN_LD)
MAIN_LD=$(CC)
MKDIR=mkdir
NM=$(BINPREF)nm
RANLIB=$(BINPREF)ranlib
RESCOMP=$(BINPREF)windres $(RC_ARCH)
# as set by make
RM=rm -f
SED=sed
SORT=sort
.SUFFIXES:
.SUFFIXES: .c .cc .cpp .C .f .o .a .def .exp .dll .exe .d .f90 .f95 .m .S
.c.d:
@echo "making $@ from $<"
@$(CC) -MM $(CPPFLAGS) $($*-CPPFLAGS) $(DEFINES) $< -o $@
.c.o:
$(CC) $(CPPFLAGS) $($*-CPPFLAGS) $(CFLAGS) $($*-CFLAGS) $(DEFINES) -c $< -o $@
.f.o:
$(F77) $(FFLAGS) $($*-FFLAGS) -c $< -o $@
%.exe:
$(LINKER) $(LINKFLAGS) $($*-LINKFLAGS) -o $@ $^ $($*-LIBS) $(LIBS)
%.dll:
@$(ECHO) EXPORTS > $*.def
@$(NM) $^ | $(SED) -n $(SYMPAT) >> $*.def
$(DLL) -shared $(DLLFLAGS) $($*-DLLFLAGS) -o $@ $*.def $^ $($*-DLLLIBS) $(DLLLIBS)
@$(RM) $*.def
lib%.dll.a: %.def
$(DLLTOOL) $(DLLTOOLFLAGS) $($*-DLLTOOLFLAGS) --dllname $*.dll --input-def $*.def --output-lib $@
%.a:
# @$(ECHO) -------- Building $@ from $^ --------
@$(RM) $@
$(AR) crs $@ $^
%.o: %.rc
$(RESCOMP) $(RESFLAGS) $($*-RESFLAGS) -i $< -o $@