Skip to content

Commit 15fc761

Browse files
committed
FEAT: added support for building using makefile on Windows OS
1 parent c4b76e5 commit 15fc761

File tree

2 files changed

+79
-43
lines changed

2 files changed

+79
-43
lines changed

make/makefile

+34-22
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# REBOL Makefile -- Generated by make-make.r (do not edit) on 18-Oct-2017/17:55:17+2:00
1+
# REBOL Makefile -- Generated by make-make.r (do not edit) on 19-Oct-2017/17:44:15+2:00
22
# This makefile is intentional kept simple to make builds possible on
33
# a wider range of target platforms.
44

@@ -24,6 +24,8 @@ STRIP= $(TOOLS)strip
2424
CP= cp
2525
# LS allows different ls progs:
2626
LS= dir
27+
# RM allows different RM progs:
28+
RM= DEL /s /q
2729
# UP - some systems do not use ../
2830
UP= ..
2931
# CD - some systems do not use ./
@@ -40,6 +42,8 @@ I= -I$(INCL) -I$S/include/
4042
TO_OS?= TO_WIN32
4143
OS_ID?= 0.3.1
4244
BIN_SUFFIX= .exe
45+
LIB_SUFFIX= .dll
46+
RES= objs\r3.res
4347
RAPI_FLAGS= -O2 -DUNICODE
4448
HOST_FLAGS= -DREB_EXE -O2 -DUNICODE -D_FILE_OFFSET_BITS=64
4549
RLIB_FLAGS=
@@ -50,7 +54,7 @@ HFLAGS= -c -D$(TO_OS) -DREB_CORE $(HOST_FLAGS) $I
5054
CLIB= -lwsock32 -lcomdlg32 -mconsole -Wl,--stack=4194300 -lm
5155

5256
# REBOL is needed to build various include files:
53-
REBOL_TOOL= r3-make
57+
REBOL_TOOL= r3-make$(BIN_SUFFIX)
5458
REBOL= $(CD)$(REBOL_TOOL) -qs
5559

5660
# For running tests, ship, build, etc.
@@ -67,14 +71,15 @@ make:
6771
$(REBOL) $T/make-make.r $(OS_ID)
6872

6973
clean:
70-
@-rm -rf libr3.so objs/
74+
$(RM) libr3$(LIB_SUFFIX) objs $(RES)
7175

7276
all:
7377
$(MAKE) clean
7478
$(MAKE) prep
7579
$(MAKE) r3$(BIN_SUFFIX)
7680
$(MAKE) lib
7781
$(MAKE) host$(BIN_SUFFIX)
82+
$(MAKE) testdo
7883

7984
prep:
8085
$(REBOL) $T/make-headers.r
@@ -83,7 +88,6 @@ prep:
8388
$(REBOL) $T/make-os-ext.r # ok, but not always
8489
$(REBOL) $T/make-host-ext.r
8590
$(REBOL) $T/make-reb-lib.r
86-
windres r3.rc -O coff -o objs/r3.res
8791

8892
### Provide more info if make fails due to no local Rebol build tool:
8993
tmps: $S/include/tmp-bootdefs.h
@@ -101,12 +105,16 @@ $(REBOL_TOOL):
101105
false
102106

103107
### Post build actions
108+
104109
purge:
105-
-rm libr3.*
106-
-rm host$(BIN_SUFFIX)
110+
$(RM) libr3.*
111+
$(RM) host$(BIN_SUFFIX)
107112
$(MAKE) lib
108113
$(MAKE) host$(BIN_SUFFIX)
109114

115+
testdo:
116+
r3$(BIN_SUFFIX) --do "print {^/^[[32mI'm READY^[[0m}"
117+
110118
test:
111119
$(CP) r3$(BIN_SUFFIX) $(UP)/src/tests/
112120
$(R3) $S/tests/test.r
@@ -117,11 +125,11 @@ install:
117125
ship:
118126
$(R3) $S/tools/upload.r
119127

120-
build: libr3.so
128+
build: libr3$(LIB_SUFFIX)
121129
$(R3) $S/tools/make-build.r
122130

123131
cln:
124-
rm libr3.* r3.o
132+
$(RM) libr3.* r3.o
125133

126134
check:
127135
$(STRIP) -s -o r3.s r3$(BIN_SUFFIX)
@@ -151,40 +159,44 @@ OBJS = objs/a-constants.o objs/a-globals.o objs/a-lib.o objs/b-boot.o \
151159
objs/t-tuple.o objs/t-typeset.o objs/t-utype.o objs/t-vector.o \
152160
objs/t-word.o objs/u-bmp.o objs/u-compress.o objs/u-dialect.o \
153161
objs/u-gif.o objs/u-jpg.o objs/u-md5.o objs/u-parse.o \
154-
objs/u-png.o objs/u-sha1.o objs/u-zlib.o objs/r3.res
162+
objs/u-png.o objs/u-sha1.o objs/u-zlib.o
155163

156164
HOST = objs/host-main.o objs/host-args.o objs/host-device.o objs/host-stdio.o \
157165
objs/dev-net.o objs/dev-dns.o objs/host-lib.o objs/dev-stdio.o \
158166
objs/dev-file.o objs/dev-event.o objs/dev-clipboard.o
159167

160168

169+
# Compile resources:
170+
$(RES):
171+
windres r3.rc -O coff -o $(RES)
172+
161173
# Directly linked r3 executable:
162-
r3$(BIN_SUFFIX): tmps objs $(OBJS) $(HOST)
163-
$(CC) -o r3$(BIN_SUFFIX) $(OBJS) $(HOST) $(CLIB)
174+
r3$(BIN_SUFFIX): tmps objs $(OBJS) $(RES) $(HOST)
175+
$(CC) -o r3$(BIN_SUFFIX) $(OBJS) $(RES) $(HOST) $(CLIB)
164176
$(STRIP) r3$(BIN_SUFFIX)
165177
-$(NM) -a r3$(BIN_SUFFIX)
166178
$(LS) r3$(BIN_SUFFIX)
167179

168180
objs:
169181
mkdir -p objs
170182

171-
lib: libr3.so
183+
lib: libr3$(LIB_SUFFIX)
172184

173185
# PUBLIC: Shared library:
174-
# NOTE: Did not use "-Wl,-soname,libr3.so" because won't find .so in local dir.
175-
libr3.so: $(OBJS)
176-
$(CC) -o libr3.so -shared $(OBJS) $(CLIB)
177-
$(STRIP) libr3.so
178-
-$(NM) -D libr3.so
179-
-$(NM) -a libr3.so | grep "Do_"
180-
$(LS) libr3.so
186+
# NOTE: Did not use "-Wl,-soname,libr3$(LIB_SUFFIX)" because won't find $(LIB_SUFFIX) in local dir.
187+
libr3$(LIB_SUFFIX): $(OBJS)
188+
$(CC) -o libr3$(LIB_SUFFIX) -shared $(OBJS) $(CLIB)
189+
$(STRIP) libr3$(LIB_SUFFIX)
190+
-$(NM) -D libr3$(LIB_SUFFIX)
191+
-$(NM) -a libr3$(LIB_SUFFIX) | grep "Do_"
192+
$(LS) libr3$(LIB_SUFFIX)
181193

182194
# PUBLIC: Host using the shared lib:
183-
host$(BIN_SUFFIX): $(HOST)
184-
$(CC) -o host$(BIN_SUFFIX) $(HOST) libr3.so $(CLIB)
195+
host$(BIN_SUFFIX): $(HOST) $(RES)
196+
$(CC) -o host$(BIN_SUFFIX) $(HOST) $(RES) libr3$(LIB_SUFFIX) $(CLIB)
185197
$(STRIP) host$(BIN_SUFFIX)
186198
$(LS) host$(BIN_SUFFIX)
187-
echo "export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH"
199+
@echo "export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH"
188200

189201
### File build targets:
190202
b-boot.c: $(SRC)/boot/boot.r

src/tools/make-make.r

+45-21
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ STRIP= $(TOOLS)strip
5858
CP=
5959
# LS allows different ls progs:
6060
LS=
61+
# RM allows different RM progs:
62+
RM=
6163
# UP - some systems do not use ../
6264
UP=
6365
# CD - some systems do not use ./
@@ -74,6 +76,8 @@ I= -I$(INCL) -I$S/include/
7476
TO_OS?=
7577
OS_ID?=
7678
BIN_SUFFIX=
79+
LIB_SUFFIX=
80+
RES=
7781
RAPI_FLAGS=
7882
HOST_FLAGS= -DREB_EXE
7983
RLIB_FLAGS=
@@ -84,7 +88,7 @@ HFLAGS= -c -D$(TO_OS) -DREB_CORE $(HOST_FLAGS) $I
8488
CLIB=
8589
8690
# REBOL is needed to build various include files:
87-
REBOL_TOOL= r3-make
91+
REBOL_TOOL= r3-make$(BIN_SUFFIX)
8892
REBOL= $(CD)$(REBOL_TOOL) -qs
8993
9094
# For running tests, ship, build, etc.
@@ -101,14 +105,15 @@ make:
101105
$(REBOL) $T/make-make.r $(OS_ID)
102106
103107
clean:
104-
@-rm -rf libr3.so objs/
108+
$(RM) libr3$(LIB_SUFFIX) objs $(RES)
105109
106110
all:
107111
$(MAKE) clean
108112
$(MAKE) prep
109113
$(MAKE) r3$(BIN_SUFFIX)
110114
$(MAKE) lib
111115
$(MAKE) host$(BIN_SUFFIX)
116+
$(MAKE) testdo
112117
113118
prep:
114119
$(REBOL) $T/make-headers.r
@@ -134,12 +139,16 @@ $(REBOL_TOOL):
134139
false
135140
136141
### Post build actions
142+
137143
purge:
138-
-rm libr3.*
139-
-rm host$(BIN_SUFFIX)
144+
$(RM) libr3.*
145+
$(RM) host$(BIN_SUFFIX)
140146
$(MAKE) lib
141147
$(MAKE) host$(BIN_SUFFIX)
142148
149+
testdo:
150+
r3$(BIN_SUFFIX) --do "print {^^/^^[[32mI'm READY^^[[0m}"
151+
143152
test:
144153
$(CP) r3$(BIN_SUFFIX) $(UP)/src/tests/
145154
$(R3) $S/tests/test.r
@@ -150,11 +159,11 @@ install:
150159
ship:
151160
$(R3) $S/tools/upload.r
152161
153-
build: libr3.so
162+
build: libr3$(LIB_SUFFIX)
154163
$(R3) $S/tools/make-build.r
155164
156165
cln:
157-
rm libr3.* r3.o
166+
$(RM) libr3.* r3.o
158167
159168
check:
160169
$(STRIP) -s -o r3.s r3$(BIN_SUFFIX)
@@ -165,11 +174,16 @@ check:
165174
}
166175

167176
;******************************************************************************
177+
makefile-res: {
178+
# Compile resources:
179+
$(RES):
180+
windres r3.rc -O coff -o $(RES)
181+
}
168182

169183
makefile-link: {
170184
# Directly linked r3 executable:
171-
r3$(BIN_SUFFIX): tmps objs $(OBJS) $(HOST)
172-
$(CC) -o r3$(BIN_SUFFIX) $(OBJS) $(HOST) $(CLIB)
185+
r3$(BIN_SUFFIX): tmps objs $(OBJS) $(RES) $(HOST)
186+
$(CC) -o r3$(BIN_SUFFIX) $(OBJS) $(RES) $(HOST) $(CLIB)
173187
$(STRIP) r3$(BIN_SUFFIX)
174188
-$(NM) -a r3$(BIN_SUFFIX)
175189
$(LS) r3$(BIN_SUFFIX)
@@ -179,23 +193,23 @@ objs:
179193
}
180194

181195
makefile-so: {
182-
lib: libr3.so
196+
lib: libr3$(LIB_SUFFIX)
183197
184198
# PUBLIC: Shared library:
185-
# NOTE: Did not use "-Wl,-soname,libr3.so" because won't find .so in local dir.
186-
libr3.so: $(OBJS)
187-
$(CC) -o libr3.so -shared $(OBJS) $(CLIB)
188-
$(STRIP) libr3.so
189-
-$(NM) -D libr3.so
190-
-$(NM) -a libr3.so | grep "Do_"
191-
$(LS) libr3.so
199+
# NOTE: Did not use "-Wl,-soname,libr3$(LIB_SUFFIX)" because won't find $(LIB_SUFFIX) in local dir.
200+
libr3$(LIB_SUFFIX): $(OBJS)
201+
$(CC) -o libr3$(LIB_SUFFIX) -shared $(OBJS) $(CLIB)
202+
$(STRIP) libr3$(LIB_SUFFIX)
203+
-$(NM) -D libr3$(LIB_SUFFIX)
204+
-$(NM) -a libr3$(LIB_SUFFIX) | grep "Do_"
205+
$(LS) libr3$(LIB_SUFFIX)
192206
193207
# PUBLIC: Host using the shared lib:
194-
host$(BIN_SUFFIX): $(HOST)
195-
$(CC) -o host$(BIN_SUFFIX) $(HOST) libr3.so $(CLIB)
208+
host$(BIN_SUFFIX): $(HOST) $(RES)
209+
$(CC) -o host$(BIN_SUFFIX) $(HOST) $(RES) libr3$(LIB_SUFFIX) $(CLIB)
196210
$(STRIP) host$(BIN_SUFFIX)
197211
$(LS) host$(BIN_SUFFIX)
198-
echo "export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH"
212+
@echo "export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH"
199213
}
200214

201215
makefile-dyn: {
@@ -215,7 +229,7 @@ host$(BIN_SUFFIX): $(HOST)
215229
$(CC) -o host$(BIN_SUFFIX) $(HOST) libr3.dylib $(CLIB)
216230
$(STRIP) host$(BIN_SUFFIX)
217231
$(LS) host$(BIN_SUFFIX)
218-
echo "export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH"
232+
@echo "export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH"
219233
}
220234

221235
not-used: {
@@ -383,7 +397,16 @@ unless flag? -SP [ ; Use standard paths:
383397
macro+ CD "./"
384398
]
385399
if os-plat/2 = 3 [macro+ REBOL ">NUL:"] ; Temporary workaround for R3 on Win7.
386-
if flag? EXE [macro+ BIN_SUFFIX %.exe]
400+
either flag? EXE [
401+
macro+ BIN_SUFFIX %.exe
402+
macro+ LIB_SUFFIX %.dll
403+
macro+ RES "objs\r3.res"
404+
macro+ RM "DEL /s /q"
405+
][
406+
macro+ LIB_SUFFIX %.so
407+
macro+ RM "@-rm -rf"
408+
]
409+
387410
macro++ CLIB linker-flags
388411
macro++ RAPI_FLAGS compile-flags
389412
macro++ HOST_FLAGS make compile-flags [PIC: NCM: none]
@@ -396,6 +419,7 @@ emit ["OBJS =" tab]
396419
emit-obj-files fb/core
397420
emit ["HOST =" tab]
398421
emit-obj-files append copy fb/os os-specific-objs
422+
if flag? EXE [emit makefile-res]
399423
emit makefile-link
400424
emit get pick [makefile-dyn makefile-so] os-plat/2 = 2
401425
emit {

0 commit comments

Comments
 (0)