1#*******************************************************************************
2# Copyright (c) 2000, 2017 IBM Corporation and others.
3#
4# This program and the accompanying materials
5# are made available under the terms of the Eclipse Public License 2.0
6# which accompanies this distribution, and is available at
7# https://www.eclipse.org/legal/epl-2.0/
8#
9# SPDX-License-Identifier: EPL-2.0
10#
11# Contributors:
12#     IBM Corporation - initial API and implementation
13#     Rolf Theunissen - SWT/GTK port on Windows
14#*******************************************************************************
15
16# Makefile for creating SWT libraries for win32 GTK
17
18# rewrite backslashes to slashes in paths
19JAVA_HOME := $(subst \,/,$(JAVA_HOME))
20OUTPUT_DIR := $(subst \,/,$(OUTPUT_DIR))
21
22#SWT_LIB_DEBUG=1     # to debug glue code in /bundles/org.eclipse.swt/bin/library. E.g os_custom.c:swt_fixed_forall(..)
23# Can be set via environment like: export SWT_LIB_DEBUG=1
24ifdef SWT_LIB_DEBUG
25SWT_DEBUG = -O0 -g3 -ggdb3
26NO_STRIP=1
27endif
28
29include make_common.mak
30
31SWT_VERSION=$(maj_ver)$(min_ver)r$(rev)
32GTK_VERSION?=2.0
33
34# Define the various shared libraries to be build.
35WS_PREFIX = gtk
36SWT_PREFIX = swt
37AWT_PREFIX = swt-awt
38ifeq ($(GTK_VERSION), 3.0)
39SWTPI_PREFIX = swt-pi3
40else
41SWTPI_PREFIX = swt-pi
42endif
43CAIRO_PREFIX = swt-cairo
44ATK_PREFIX = swt-atk
45# WEBKIT_PREFIX = swt-webkit
46
47SWT_LIB = $(SWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).dll
48AWT_LIB = $(AWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).dll
49SWTPI_LIB = $(SWTPI_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).dll
50CAIRO_LIB = $(CAIRO_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).dll
51ATK_LIB = $(ATK_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).dll
52# WEBKIT_LIB = $(WEBKIT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).dll
53
54CAIROCFLAGS = `pkg-config --cflags cairo`
55CAIROLIBS = `pkg-config --libs cairo`
56
57GTKCFLAGS = `pkg-config --cflags gtk+-$(GTK_VERSION)`
58ifeq ($(GTK_VERSION), 3.0)
59GTKLIBS = `pkg-config --libs gtk+-$(GTK_VERSION) gthread-2.0` $(XLIB64)
60else
61GTKLIBS = `pkg-config --libs gtk+-$(GTK_VERSION) gthread-2.0` $(XLIB64)
62endif
63
64AWT_LFLAGS = -shared ${SWT_LFLAGS}
65AWT_LIBS = -L$(AWT_LIB_PATH) -ljawt
66
67ATKCFLAGS = `pkg-config --cflags atk gtk+-$(GTK_VERSION)`
68ATKLIBS = `pkg-config --libs atk`
69
70# Uncomment for Native Stats tool
71#NATIVE_STATS = -DNATIVE_STATS
72
73# WEBKITLIBS = `pkg-config --libs-only-l gio-2.0`
74# WEBKITCFLAGS = `pkg-config --cflags gio-2.0`
75# ifdef SWT_WEBKIT_DEBUG
76# # don't use 'webkit2gtk-4.0' in production,  as some systems might not have those libs and we get crashes.
77# WEBKITLIBS +=  `pkg-config --libs-only-l webkit2gtk-4.0`
78# WEBKITCFLAGS +=  `pkg-config --cflags webkit2gtk-4.0`
79# endif
80
81
82SWT_OBJECTS = swt.o c.o c_stats.o callback.o
83AWT_OBJECTS = swt_awt.o
84SWTPI_OBJECTS = swt.o os.o os_structs.o os_custom.o os_stats.o
85CAIRO_OBJECTS = swt.o cairo.o cairo_structs.o cairo_stats.o
86ATK_OBJECTS = swt.o atk.o atk_structs.o atk_custom.o atk_stats.o
87# WEBKIT_OBJECTS = swt.o webkitgtk.o webkitgtk_structs.o webkitgtk_stats.o webkitgtk_custom.o
88
89CFLAGS = -O -Wall \
90		-DSWT_VERSION=$(SWT_VERSION) \
91		$(NATIVE_STATS) \
92		$(SWT_DEBUG) \
93		-DWIN32 -DGTK \
94		-I$(JAVA_HOME)/include \
95		-I$(JAVA_HOME)/include/win32 \
96		-fPIC \
97		${SWT_PTR_CFLAGS}
98LFLAGS = -shared -fPIC ${SWT_LFLAGS}
99
100ifndef NO_STRIP
101	AWT_LFLAGS := $(AWT_LFLAGS) -s
102	LFLAGS := $(LFLAGS) -s
103endif
104
105all: make_swt make_atk
106
107#
108# SWT libs
109#
110make_swt: $(SWT_LIB) $(SWTPI_LIB)
111
112$(SWT_LIB): $(SWT_OBJECTS)
113	$(CC) $(LFLAGS) -o $(SWT_LIB) $(SWT_OBJECTS)
114
115callback.o: callback.c callback.h
116	$(CC) $(CFLAGS) -DUSE_ASSEMBLER -c callback.c
117
118$(SWTPI_LIB): $(SWTPI_OBJECTS)
119	$(CC) $(LFLAGS) -o $(SWTPI_LIB) $(SWTPI_OBJECTS) $(GTKLIBS)
120
121swt.o: swt.c swt.h
122	$(CC) $(CFLAGS) -c swt.c
123os.o: os.c os.h swt.h os_custom.h
124	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os.c
125os_structs.o: os_structs.c os_structs.h os.h swt.h
126	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os_structs.c
127os_custom.o: os_custom.c os_structs.h os.h swt.h
128	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os_custom.c
129os_stats.o: os_stats.c os_structs.h os.h os_stats.h swt.h
130	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os_stats.c
131
132#
133# CAIRO libs
134#
135make_cairo: $(CAIRO_LIB)
136
137$(CAIRO_LIB): $(CAIRO_OBJECTS)
138	$(CC) $(LFLAGS) -o $(CAIRO_LIB) $(CAIRO_OBJECTS) $(CAIROLIBS)
139
140cairo.o: cairo.c cairo.h swt.h
141	$(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo.c
142cairo_structs.o: cairo_structs.c cairo_structs.h cairo.h swt.h
143	$(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo_structs.c
144cairo_stats.o: cairo_stats.c cairo_structs.h cairo.h cairo_stats.h swt.h
145	$(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo_stats.c
146
147#
148# AWT lib
149#
150# make_awt:$(AWT_LIB) # TODO [win32] solve gtk/x11 vs gtk/win32 native integration
151make_awt:
152
153$(AWT_LIB): $(AWT_OBJECTS)
154	$(CC) $(AWT_LFLAGS) -o $(AWT_LIB) $(AWT_OBJECTS) $(AWT_LIBS)
155
156#
157# Atk lib
158#
159make_atk: $(ATK_LIB)
160
161$(ATK_LIB): $(ATK_OBJECTS)
162	$(CC) $(LFLAGS) -o $(ATK_LIB) $(ATK_OBJECTS) $(ATKLIBS)
163
164atk.o: atk.c atk.h
165	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk.c
166atk_structs.o: atk_structs.c atk_structs.h atk.h
167	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_structs.c
168atk_custom.o: atk_custom.c atk_structs.h atk.h
169	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_custom.c
170atk_stats.o: atk_stats.c atk_structs.h atk_stats.h atk.h
171	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_stats.c
172
173# TODO check availability webkitgtk on win32
174# #
175# # WebKit lib
176# #
177# make_webkit: $(WEBKIT_LIB)
178#
179# $(WEBKIT_LIB): $(WEBKIT_OBJECTS)
180#	$(CC) $(LFLAGS) -o $(WEBKIT_LIB) $(WEBKIT_OBJECTS) $(WEBKITLIBS)
181#
182# webkitgtk.o: webkitgtk.c webkitgtk_custom.h
183#	$(CC) $(CFLAGS) $(WEBKITCFLAGS) -c webkitgtk.c
184#
185# webkitgtk_structs.o: webkitgtk_structs.c
186#	$(CC) $(CFLAGS) $(WEBKITCFLAGS) -c webkitgtk_structs.c
187#
188# webkitgtk_stats.o: webkitgtk_stats.c webkitgtk_stats.h
189#	$(CC) $(CFLAGS) $(WEBKITCFLAGS) -c webkitgtk_stats.c
190#
191# webkitgtk_custom.o: webkitgtk_custom.c
192#	$(CC) $(CFLAGS) $(WEBKITCFLAGS) -c webkitgtk_custom.c
193
194#
195# Install
196#
197install: all
198	cp *.dll $(OUTPUT_DIR)
199
200#
201# Clean
202#
203clean:
204	rm -f *.o *.dll
205