1#******************************************************************************* 2# Copyright (c) 2000, 2016 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#******************************************************************************* 14 15# Makefile for creating SWT libraries for Linux GTK 16 17# SWT debug flags for various SWT components. 18#SWT_WEBKIT_DEBUG = -DWEBKIT_DEBUG 19 20#SWT_LIB_DEBUG=1 # to debug glue code in /bundles/org.eclipse.swt/bin/library. E.g os_custom.c:swt_fixed_forall(..) 21# Can be set via environment like: export SWT_LIB_DEBUG=1 22ifdef SWT_LIB_DEBUG 23SWT_DEBUG = -O0 -g3 -ggdb3 24NO_STRIP=1 25endif 26 27include make_common.mak 28 29SWT_VERSION=$(maj_ver)$(min_ver)r$(rev) 30GTK_VERSION?=3.0 31 32# Define the various shared libraries to be build. 33WS_PREFIX = gtk 34SWT_PREFIX = swt 35AWT_PREFIX = swt-awt 36ifeq ($(GTK_VERSION), 4.0) 37SWTPI_PREFIX = swt-pi4 38else 39SWTPI_PREFIX = swt-pi3 40endif 41CAIRO_PREFIX = swt-cairo 42ATK_PREFIX = swt-atk 43WEBKIT_PREFIX = swt-webkit 44WEBKIT_EXTENSION_PREFIX=swt-webkit2extension 45CHROMIUM_PREFIX = swt-chromium 46GLX_PREFIX = swt-glx 47 48SWT_LIB = lib$(SWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so 49AWT_LIB = lib$(AWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so 50SWTPI_LIB = lib$(SWTPI_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so 51CAIRO_LIB = lib$(CAIRO_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so 52ATK_LIB = lib$(ATK_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so 53GLX_LIB = lib$(GLX_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so 54WEBKIT_LIB = lib$(WEBKIT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so 55CHROMIUM_LIB = lib$(CHROMIUM_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so 56ALL_SWT_LIBS = $(SWT_LIB) $(AWT_LIB) $(SWTPI_LIB) $(CAIRO_LIB) $(ATK_LIB) $(GLX_LIB) $(WEBKIT_LIB) 57 58# Webkit extension lib has to be put into a separate folder and is treated differently from the other libraries. 59WEBKIT_EXTENSION_LIB = lib$(WEBKIT_EXTENSION_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so 60WEBEXTENSION_BASE_DIR = webkitextensions 61WEBEXTENSION_DIR = $(WEBEXTENSION_BASE_DIR)$(maj_ver)$(min_ver)r$(rev) 62 63CAIROCFLAGS = `pkg-config --cflags cairo` 64CAIROLIBS = `pkg-config --libs-only-L cairo` -lcairo 65 66# Do not use pkg-config to get libs because it includes unnecessary dependencies (i.e. pangoxft-1.0) 67ifeq ($(GTK_VERSION), 4.0) 68GTKCFLAGS = `pkg-config --cflags gtk4 gtk4-x11 gtk4-unix-print` 69GTKLIBS = `pkg-config --libs-only-L gtk4 gtk4-x11 gthread-2.0` $(XLIB64) -L/usr/X11R6/lib -lgtk-4 -lcairo -lgthread-2.0 70ATKCFLAGS = `pkg-config --cflags atk gtk4 gtk4-unix-print` 71else 72GTKCFLAGS = `pkg-config --cflags gtk+-$(GTK_VERSION) gtk+-unix-print-$(GTK_VERSION)` 73GTKLIBS = `pkg-config --libs-only-L gtk+-$(GTK_VERSION) gthread-2.0` $(XLIB64) -L/usr/X11R6/lib -lgtk-3 -lgdk-3 -lcairo -lgthread-2.0 74ATKCFLAGS = `pkg-config --cflags atk gtk+-$(GTK_VERSION) gtk+-unix-print-$(GTK_VERSION)` 75endif 76 77AWT_LFLAGS = -shared ${SWT_LFLAGS} 78AWT_LIBS = -L$(AWT_LIB_PATH) -ljawt 79 80ATKLIBS = `pkg-config --libs-only-L atk` -latk-1.0 81 82GLXLIBS = -lGL -lGLU -lm 83 84# Uncomment for Native Stats tool 85#NATIVE_STATS = -DNATIVE_STATS 86 87WEBKITLIBS = `pkg-config --libs-only-l gio-2.0` 88WEBKITCFLAGS = `pkg-config --cflags gio-2.0` 89 90WEBKIT_EXTENSION_CFLAGS=`pkg-config --cflags gtk+-3.0 webkit2gtk-web-extension-4.0` 91WEBKIT_EXTENSION_LFLAGS=`pkg-config --libs gtk+-3.0 webkit2gtk-web-extension-4.0` 92 93ifdef SWT_WEBKIT_DEBUG 94# don't use 'webkit2gtk-4.0' in production, as some systems might not have those libs and we get crashes. 95WEBKITLIBS += `pkg-config --libs-only-l webkit2gtk-4.0` 96WEBKITCFLAGS += `pkg-config --cflags webkit2gtk-4.0` 97endif 98 99CHROMIUMLIBS = -lchromium_swt_${SWT_VERSION} -L$(CHROMIUM_OUTPUT_DIR)/chromium-$(cef_ver) -Wl,--disable-new-dtags,-rpath,"\$$ORIGIN" 100CHROMIUMCFLAGS = -I$(CHROMIUM_HEADERS) 101 102SWT_OBJECTS = swt.o c.o c_stats.o callback.o 103AWT_OBJECTS = swt_awt.o 104ifeq ($(GTK_VERSION), 4.0) 105GTKX_OBJECTS = gtk4.o gtk4_stats.o gtk4_structs.o 106else 107GTKX_OBJECTS = gtk3.o gtk3_stats.o gtk3_structs.o 108endif 109SWTPI_OBJECTS = swt.o os.o os_structs.o os_custom.o os_stats.o $(GTKX_OBJECTS) 110CAIRO_OBJECTS = swt.o cairo.o cairo_structs.o cairo_stats.o 111ATK_OBJECTS = swt.o atk.o atk_structs.o atk_custom.o atk_stats.o 112WEBKIT_OBJECTS = swt.o webkitgtk.o webkitgtk_structs.o webkitgtk_stats.o webkitgtk_custom.o 113CHROMIUM_OBJECTS = chromiumlib.o chromiumlib_structs.o chromiumlib_custom.o chromiumlib_stats.o 114GLX_OBJECTS = swt.o glx.o glx_structs.o glx_stats.o 115 116CFLAGS := $(CFLAGS) \ 117 -DSWT_VERSION=$(SWT_VERSION) \ 118 $(NATIVE_STATS) \ 119 $(SWT_DEBUG) \ 120 $(SWT_WEBKIT_DEBUG) \ 121 -DLINUX -DGTK \ 122 -I$(JAVA_HOME)/include \ 123 -I$(JAVA_HOME)/include/linux \ 124 ${SWT_PTR_CFLAGS} 125LFLAGS = -shared -fPIC ${SWT_LFLAGS} 126 127# Treat all warnings as errors. If your new code produces a warning, please 128# take time to properly understand and fix/silence it as necessary. 129CFLAGS += -Werror 130 131ifndef NO_STRIP 132 # -s = Remove all symbol table and relocation information from the executable. 133 # i.e, more efficent code, but removes debug information. Should not be used if you want to debug. 134 # https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html#Link-Options 135 # http://stackoverflow.com/questions/14175040/effects-of-removing-all-symbol-table-and-relocation-information-from-an-executab 136 AWT_LFLAGS := $(AWT_LFLAGS) -s 137 LFLAGS := $(LFLAGS) -s 138endif 139 140all: make_swt make_atk make_glx make_webkit 141 142# 143# SWT libs 144# 145make_swt: $(SWT_LIB) $(SWTPI_LIB) 146 147$(SWT_LIB): $(SWT_OBJECTS) 148 $(CC) $(LFLAGS) -o $(SWT_LIB) $(SWT_OBJECTS) 149 150callback.o: callback.c callback.h 151 $(CC) $(CFLAGS) $(GTKCFLAGS) -DUSE_ASSEMBLER -c callback.c 152 153$(SWTPI_LIB): $(SWTPI_OBJECTS) 154 $(CC) $(LFLAGS) -o $(SWTPI_LIB) $(SWTPI_OBJECTS) $(GTKLIBS) 155 156swt.o: swt.c swt.h 157 $(CC) $(CFLAGS) -c swt.c 158os.o: os.c os.h swt.h os_custom.h 159 $(CC) $(CFLAGS) $(GTKCFLAGS) -c os.c 160os_structs.o: os_structs.c os_structs.h os.h swt.h 161 $(CC) $(CFLAGS) $(GTKCFLAGS) -c os_structs.c 162os_custom.o: os_custom.c os_structs.h os.h swt.h 163 $(CC) $(CFLAGS) $(GTKCFLAGS) -c os_custom.c 164os_stats.o: os_stats.c os_structs.h os.h os_stats.h swt.h 165 $(CC) $(CFLAGS) $(GTKCFLAGS) -c os_stats.c 166 167gtk3.o: gtk3.c gtk3.h swt.h 168 $(CC) $(CFLAGS) $(GTKCFLAGS) -c gtk3.c 169gtk3_structs.o: gtk3_structs.c gtk3_structs.h gtk3.h swt.h 170 $(CC) $(CFLAGS) $(GTKCFLAGS) -c gtk3_structs.c 171gtk3_stats.o: gtk3_stats.c gtk3_structs.h gtk3.h gtk3_stats.h swt.h 172 $(CC) $(CFLAGS) $(GTKCFLAGS) -c gtk3_stats.c 173 174gtk4.o: gtk4.c gtk4.h swt.h 175 $(CC) $(CFLAGS) $(GTKCFLAGS) -c gtk4.c 176gtk4_structs.o: gtk4_structs.c gtk4_structs.h gtk4.h swt.h 177 $(CC) $(CFLAGS) $(GTKCFLAGS) -c gtk4_structs.c 178gtk4_stats.o: gtk4_stats.c gtk4_structs.h gtk4.h gtk4_stats.h swt.h 179 $(CC) $(CFLAGS) $(GTKCFLAGS) -c gtk4_stats.c 180 181# 182# CAIRO libs 183# 184make_cairo: $(CAIRO_LIB) 185 186$(CAIRO_LIB): $(CAIRO_OBJECTS) 187 $(CC) $(LFLAGS) -o $(CAIRO_LIB) $(CAIRO_OBJECTS) $(CAIROLIBS) 188 189cairo.o: cairo.c cairo.h swt.h 190 $(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo.c 191cairo_structs.o: cairo_structs.c cairo_structs.h cairo.h swt.h 192 $(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo_structs.c 193cairo_stats.o: cairo_stats.c cairo_structs.h cairo.h cairo_stats.h swt.h 194 $(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo_stats.c 195 196# 197# AWT lib 198# 199make_awt:$(AWT_LIB) 200 201$(AWT_LIB): $(AWT_OBJECTS) 202 $(CC) $(AWT_LFLAGS) -o $(AWT_LIB) $(AWT_OBJECTS) $(AWT_LIBS) 203 204# 205# Atk lib 206# 207make_atk: $(ATK_LIB) 208 209$(ATK_LIB): $(ATK_OBJECTS) 210 $(CC) $(LFLAGS) -o $(ATK_LIB) $(ATK_OBJECTS) $(ATKLIBS) 211 212atk.o: atk.c atk.h 213 $(CC) $(CFLAGS) $(ATKCFLAGS) -c atk.c 214atk_structs.o: atk_structs.c atk_structs.h atk.h 215 $(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_structs.c 216atk_custom.o: atk_custom.c atk_structs.h atk.h 217 $(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_custom.c 218atk_stats.o: atk_stats.c atk_structs.h atk_stats.h atk.h 219 $(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_stats.c 220 221# 222# WebKit lib 223# 224ifeq ($(BUILD_WEBKIT2EXTENSION),yes) 225make_webkit: $(WEBKIT_LIB) make_webkit2extension 226else 227make_webkit: $(WEBKIT_LIB) 228endif 229 230$(WEBKIT_LIB): $(WEBKIT_OBJECTS) 231 $(CC) $(LFLAGS) -o $(WEBKIT_LIB) $(WEBKIT_OBJECTS) $(WEBKITLIBS) 232 233webkitgtk.o: webkitgtk.c webkitgtk_custom.h 234 $(CC) $(CFLAGS) $(WEBKITCFLAGS) -c webkitgtk.c 235 236webkitgtk_structs.o: webkitgtk_structs.c 237 $(CC) $(CFLAGS) $(WEBKITCFLAGS) -c webkitgtk_structs.c 238 239webkitgtk_stats.o: webkitgtk_stats.c webkitgtk_stats.h 240 $(CC) $(CFLAGS) $(WEBKITCFLAGS) -c webkitgtk_stats.c 241 242webkitgtk_custom.o: webkitgtk_custom.c 243 $(CC) $(CFLAGS) $(WEBKITCFLAGS) -c webkitgtk_custom.c 244 245 246# Webkit2 extension is a seperate .so lib. 247make_webkit2extension: $(WEBKIT_EXTENSION_LIB) 248 249$(WEBKIT_EXTENSION_LIB) : webkitgtk_extension.o 250 $(CC) $(LFLAGS) -o $@ $^ $(WEBKIT_EXTENSION_LFLAGS) 251 252webkitgtk_extension.o : webkitgtk_extension.c 253 $(CC) $(CFLAGS) $(WEBKIT_EXTENSION_CFLAGS) ${SWT_PTR_CFLAGS} -fPIC -c $^ 254 255# 256# Chromium lib 257# 258chromium: $(CHROMIUM_LIB) 259 260$(CHROMIUM_LIB): $(CHROMIUM_OBJECTS) 261 $(CC) $(LFLAGS) -o $(CHROMIUM_LIB) $(CHROMIUM_OBJECTS) $(CHROMIUMLIBS) 262 263chromiumlib.o: chromiumlib.c 264 $(CC) $(CFLAGS) $(CHROMIUMCFLAGS) -c chromiumlib.c 265 266chromiumlib_structs.o: chromiumlib_structs.c 267 $(CC) $(CFLAGS) $(CHROMIUMCFLAGS) -c chromiumlib_structs.c 268 269chromiumlib_custom.o: chromiumlib_custom.c 270 $(CC) $(CFLAGS) $(CHROMIUMCFLAGS) -c chromiumlib_custom.c 271 272chromiumlib_stats.o: chromiumlib_stats.c chromiumlib_stats.h 273 $(CC) $(CFLAGS) $(CHROMIUMCFLAGS) -c chromiumlib_stats.c 274 275# 276# GLX lib 277# 278make_glx: $(GLX_LIB) 279 280$(GLX_LIB): $(GLX_OBJECTS) 281 $(CC) $(LFLAGS) -o $(GLX_LIB) $(GLX_OBJECTS) $(GLXLIBS) 282 283glx.o: glx.c 284 $(CC) $(CFLAGS) $(GLXCFLAGS) -c glx.c 285 286glx_structs.o: glx_structs.c 287 $(CC) $(CFLAGS) $(GLXCFLAGS) -c glx_structs.c 288 289glx_stats.o: glx_stats.c glx_stats.h 290 $(CC) $(CFLAGS) $(GLXCFLAGS) -c glx_stats.c 291 292# 293# Install 294# 295# Note on syntax because below might be confusing even for bash-Gods: 296# @ do not print command 297# - do not stop if there is a fail.. => @- is combination of both. 298# [ COND ] && CMD only run CMD if condition is true like 'if COND then CMD'. Single line to be makefile compatible. 299# -d test if file exists and is a directory. 300# $$(val) in makefile, you have to escape $(..) into $$(..) 301# I hope there are no spaces in the path :-). 302install: all 303 cp $(ALL_SWT_LIBS) $(OUTPUT_DIR) 304ifeq ($(BUILD_WEBKIT2EXTENSION),yes) 305 @# Copy webextension into it's own folder, but create folder first. 306 @# CAREFULLY delete '.so' files inside webextension*. Then carefully remove the directories. 'rm -rf' seemed too risky of an approach. 307 @-[ "$$(ls -d $(OUTPUT_DIR)/$(WEBEXTENSION_BASE_DIR)*/*.so)" ] && rm -v `ls -d $(OUTPUT_DIR)/$(WEBEXTENSION_BASE_DIR)*/*.so` 308 @-[ "$$(ls -d $(OUTPUT_DIR)/$(WEBEXTENSION_BASE_DIR)*)" ] && rmdir -v `ls -d $(OUTPUT_DIR)/$(WEBEXTENSION_BASE_DIR)*` 309 310 @# Copying webextension is not critical for build to succeed, thus we use '-'. SWT can still function without a webextension. 311 @-[ -d $(OUTPUT_DIR)/$(WEBEXTENSION_DIR) ] || mkdir -v $(OUTPUT_DIR)/$(WEBEXTENSION_DIR) # If folder does not exist, make it. 312 -cp $(WEBKIT_EXTENSION_LIB) $(OUTPUT_DIR)/$(WEBEXTENSION_DIR)/ 313endif 314 315chromium_cargo: 316 cd chromium_subp && cargo build --release 317 cd chromium_swt && cargo build --release 318 mkdir -p $(CHROMIUM_OUTPUT_DIR)/chromium-$(cef_ver) 319 cp chromium_subp/target/release/chromium_subp $(CHROMIUM_OUTPUT_DIR)/chromium-$(cef_ver)/chromium_subp-$(SWT_VERSION) 320 cp chromium_swt/target/release/libchromium_swt_$(SWT_VERSION).so $(CHROMIUM_OUTPUT_DIR)/chromium-$(cef_ver) 321chromium_install: chromium 322 cp $(CHROMIUM_LIB) $(CHROMIUM_OUTPUT_DIR)/chromium-$(cef_ver) 323# 324# Clean 325# 326clean: 327 rm -f *.o *.so 328