-
Notifications
You must be signed in to change notification settings - Fork 4
/
Makefile.mingw32
218 lines (180 loc) · 9 KB
/
Makefile.mingw32
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#*-------------------------------------------------------------------------
# RXTX License v 2.1 - LGPL v 2.1 + Linking Over Controlled Interface.
# RXTX is a native interface to serial ports in java.
# Copyright 1997-2008 by Trent Jarvi [email protected] and others who
# actually wrote it. See individual source files for more information.
#
# A copy of the LGPL v 2.1 may be found at
# http://www.gnu.org/licenses/lgpl.txt on March 4th 2007. A copy is
# here for your convenience.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# An executable that contains no derivative of any portion of RXTX, but
# is designed to work with RXTX by being dynamically linked with it,
# is considered a "work that uses the Library" subject to the terms and
# conditions of the GNU Lesser General Public License.
#
# The following has been added to the RXTX License to remove
# any confusion about linking to RXTX. We want to allow in part what
# section 5, paragraph 2 of the LGPL does not permit in the special
# case of linking over a controlled interface. The intent is to add a
# Java Specification Request or standards body defined interface in the
# future as another exception but one is not currently available.
#
# http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface
#
# As a special exception, the copyright holders of RXTX give you
# permission to link RXTX with independent modules that communicate with
# RXTX solely through the Sun Microsytems CommAPI interface version 2,
# regardless of the license terms of these independent modules, and to copy
# and distribute the resulting combined work under terms of your choice,
# provided that every copy of the combined work is accompanied by a complete
# copy of the source code of RXTX (the version of RXTX used to produce the
# combined work), being distributed under the terms of the GNU Lesser General
# Public License plus this exception. An independent module is a
# module which is not derived from or based on RXTX.
#
# Note that people who make modified versions of RXTX are not obligated
# to grant this special exception for their modified versions; it is
# their choice whether to do so. The GNU Lesser General Public License
# gives permission to release a modified version without this exception; this
# exception also makes it possible to release a modified version which
# carries forward this exception.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# All trademarks belong to their respective owners.
#-------------------------------------------------------------------------*/
# This Makefile works on windows 98/NT with mingw32 in a DOS shell.
# Do not run in MSYS! Last tested on WinXP with MinGW-5.1.4
# (gcc-3.4.5, binutils-2.17.50, mingw32-make-3.81, w32api-3.12).
#
# SET PATH=c:\mingw\bin;c:\jdk142\bin;C:\WINDOWS\SYSTEM32
# mkdir build-mingw
# copy ..\Makefile.mingw32 build-mingw\Makefile
# cd build-mingw
# REM Edit Makefile settings to change user variables as needed
# mingw32-make SHELL=cmd
# mingw32-make SHELL=cmd install
######################
# user defined variables
######################
# path to the source code (directory with SerialImp.c) Unix style path
SRC=../src
# path to the jdk directory that has include, bin, lib, ... Unix style path
JDKHOME=D:\Apps\Java\j2sdk1.4.2_17
#path to mingw32
MINGHOME="D:\mingw"
# path to install RXTXcomm.jar DOS style path
COMMINSTALL="$(JDKHOME)\jre\lib\ext"
# path to install the shared libraries DOS style path
LIBINSTALL="$(JDKHOME)\jre\bin"
# path to the mingw32 libraries (directory with libmingw32.a) DOS style path
LIBDIR="$(MINGHOME)\lib"
# path to the junit library. Only needed for running the tests.
JUNIT_JAR=D:\Apps\junit3.8.2\junit.jar
######################
# End of user defined variables
######################
######################
# Tools
######################
AS=as
CC=gcc
LD=ld
DLLTOOL=dlltool
# this looks like a nice tool but I was not able to get symbols in the dll.
DLLWRAP=dllwrap
CLASSPATH=-classpath ".;C:\jdk13\lib\RXTXcomm.jar;c:\BlackBox.jar;$(JDKHOME)\lib\classes.zip;$(JDKHOME)\jre\lib\rt.jar"
JAVAH=$(JDKHOME)\bin\javah
JAR=$(JDKHOME)\bin\jar
JAVAC=$(JDKHOME)\bin\javac -source 1.2 -target 1.2 -g
#JAVAC=$(JDKHOME)\bin\javac -g
JAVA=$(JDKHOME)\bin\java -ea -esa
######################
# Tool Flags
######################
CFLAGS_CYGWIN= -O2 $(INCLUDE) -DWIN32 -D __int64="long long" -mno-fp-ret-in-387 -Wall
CFLAGS= -O2 $(INCLUDE) -mno-cygwin -DWIN32 -D_JNI_IMPLEMENTATION_ -D __int64="long long" -mno-fp-ret-in-387 -Wall
#CFLAGS= -O2 $(INCLUDE) -mno-cygwin -DWIN32 -D_JNI_IMPLEMENTATION_ -D __int64="long long" -mno-fp-ret-in-387 -Wall -D TRENT_IS_HERE_DEBUGGING_ENUMERATION -DTRENT_IS_HERE_DEBUGGING_THREADS
INCLUDE= -I c:\matlab6p5/extern/include/ -I . -I $(JDKINCLUDE) -I $(JDKINCLUDE)/win32 -I $(SRC) -I include -I $(MINGINCLUDE)
LIBS=-L . -L $(LIBDIR) -LC:/tmp/rxtx5/build -luser32 -lgdi32 -lcomdlg32 -lkernel32 -ladvapi32 -lmoldname -lcrtdll
# -lmex
# path to the java native interface headers (directory with jni.h)
JDKINCLUDE=$(JDKHOME)/include
MINGINCLUDE=$(MINGHOME)/include
JAVAFILES = $(wildcard $(SRC)/gnu/io/*.java)
TESTFILES = $(wildcard $(SRC)/../tests/gnu/io/rxtx/tests/*.java)
CFILES=$(wildcard $(SRC)/*.c) $(wildcard $(SRC)/*.cc)
TARGETLIBS= rxtxSerial.dll rxtxParallel.dll
#TARGETLIBS= rxtxSerial.dll rxtxParallel.dll rxtxZystem.dll
DLLOBJECTS= fixup.o SerialImp.o termios.o init.o fuserImp.o
PARALLELOBJECTS= ParallelImp.o termios.o init.o
all: $(TARGETLIBS) # rebuild rebuild will force everything to be built.
rebuild:
-rmdir /s /q gnu
-del /q RXTXcomm.jar rxtxSerial.* rxtxParallel.* *.o
# FIXME make 3.79.1 behaves really strage if we use %.o rules.
init.o: $(SRC)/init.cc
$(CC) $(CFLAGS) -c $(SRC)/init.cc -o init.o
fixup.o: $(SRC)/fixup.c
$(CC) $(CFLAGS) -c $(SRC)/$*.c -o fixup.o
#ZystemImp.o: config.h
# $(CC) $(CFLAGS_CYGWIN) -c $(SRC)/ZystemImp.c -o ZystemImp.o
SerialImp.o: $(SRC)/SerialImp.c $(SRC)/SerialImp.h $(SRC)/win32termios.h config.h gnu_io_RXTXPort.h
$(CC) $(CFLAGS) -c $(SRC)/SerialImp.c -o SerialImp.o
fuserImp.o: $(SRC)/fuserImp.c config.h gnu_io_CommPortIdentifier.h
$(CC) $(CFLAGS) -c $(SRC)/fuserImp.c -o fuserImp.o
termios.o: $(SRC)/termios.c $(SRC)/win32termios.h config.h
$(CC) $(CFLAGS) -c $(SRC)/$*.c -o termios.o
ParallelImp.o: $(SRC)/ParallelImp.c $(SRC)/ParallelImp.h $(SRC)/win32termios.h config.h gnu_io_LPRPort.h
$(CC) $(CFLAGS) -c $(SRC)/$*.c -o ParallelImp.o
# This file is a pain in the rear to generate. If your looking at this you
# need to install cygwin.
rxtxZystem.dll: RXTXcomm.jar $(DLLOBJECTS) $(SRC)/ZystemImp.c #ZystemImp.o
gcc -c -DBUILDING_DLL=1 -D_DLL=1 -I. -Ic:/jdk13/include -Ic:/jdk13/include/win32 -Wall -O2 -D __int64="long long" -o ZystemImp.o $(SRC)/ZystemImp.c
dllwrap --verbose --no-default-excludes --export-all-symbols --output-exp Zystem.exp --output-def Zystem.def --add-stdcall-alias --driver-name gcc -o rxtxZystem.dll ZystemImp.o -Wl,-e,__cygwin_noncygwin_dll_entry@12 -s
rxtxSerial.dll: RXTXcomm.jar $(DLLOBJECTS)
gcc -mno-cygwin -shared -o $@ $(DLLOBJECTS) -lmingw32 -Wl,--kill-at
rxtxParallel.dll: $(PARALLELOBJECTS)
gcc -mno-cygwin -shared -o $@ $(PARALLELOBJECTS) -lmingw32 -Wl,--kill-at
gnu_io_RXTXPort.h gnu_io_CommPortIdentifier.h gnu_io_LPRPort.h gnu_io_RXTXVersion.h: RXTXcomm.jar
$(JAVAH) $(CLASSPATH) -jni gnu.io.RXTXPort gnu.io.CommPortIdentifier gnu.io.LPRPort gnu.io.RXTXVersion
RXTXcomm.jar: $(JAVAFILES)
$(JAVAC) $(CLASSPATH) -d . $(JAVAFILES)
$(JAR) -cf RXTXcomm.jar gnu
config.h: Makefile
echo "#define HAVE_FCNTL_H 1" > config.h
echo "#define HAVE_SIGNAL_H 1" >> config.h
echo "#define HAVE_SYS_FCNTL_H 1" >> config.h
echo "#define HAVE_SYS_FILE_H 1" >> config.h
echo "#undef HAVE_SYS_SIGNAL_H" >> config.h
echo "#undef HAVE_TERMIOS_H" >> config.h
testcp\stamp: RXTXcomm.jar $(TESTFILES)
-mkdir testcp
$(JAVAC) -classpath RXTXcomm.jar;$(JUNIT_JAR) -d testcp $(TESTFILES)
echo > testcp\stamp
tests: all testcp\stamp
$(JAVA) -classpath RXTXcomm.jar;testcp;$(JUNIT_JAR) gnu.io.rxtx.tests.RXTXTestSuite
install: all
xcopy /Y RXTXcomm.jar $(COMMINSTALL)
@REM xcopy RXTXcomm.jar "e:\matlab~1\java\jarext\commapi\win32"
xcopy /Y rxtx*.dll $(LIBINSTALL)
@REM xcopy $(TARGETLIBS) "e:\matlab~1\bin\win32"
uninstall:
del $(COMMINSTALL)\\\RXTXcomm.jar
del $(LIBINSTALL)\\\rxtx*.dll
clean:
-rmdir /s /q gnu
-rmdir /s /q testcp
-del /Q *.o RXTXcomm.jar rxtxSerial.dll rxtxParallel.dll config.h gnu_io_*.h