1 #
   2 # Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
   3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4 #
   5 # This code is free software; you can redistribute it and/or modify it
   6 # under the terms of the GNU General Public License version 2 only, as
   7 # published by the Free Software Foundation.  Oracle designates this
   8 # particular file as subject to the "Classpath" exception as provided
   9 # by Oracle in the LICENSE file that accompanied this code.
  10 #
  11 # This code is distributed in the hope that it will be useful, but WITHOUT
  12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14 # version 2 for more details (a copy is included in the LICENSE file that
  15 # accompanied this code).
  16 #
  17 # You should have received a copy of the GNU General Public License version
  18 # 2 along with this work; if not, write to the Free Software Foundation,
  19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20 #
  21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22 # or visit www.oracle.com if you need additional information or have any
  23 # questions.
  24 #
  25 
  26 BUILDDIR = ../..
  27 PACKAGE = sun.awt.X11
  28 LIBRARY = mawt
  29 LIBRARY_OUTPUT = xawt
  30 LIB_LOCATION = $(LIBDIR)/$(LIBARCH)/xawt
  31 PRODUCT = sun
  32 
  33 include $(BUILDDIR)/common/Defs.gmk
  34 
  35 GEN_DIR=$(GENSRCDIR)/sun/awt/X11
  36 
  37 CLASSES_INIT += $(TEMPDIR)/.gen.wrappers $(TEMPDIR)/.gen_icons touch.wrappers
  38 
  39 .PHONY: generated.clean
  40 
  41 #
  42 # Files
  43 #
  44 include FILES_c_unix.gmk
  45 include FILES_export_unix.gmk
  46 AUTO_FILES_JAVA_DIRS = sun/awt/X11
  47 AUTO_JAVA_PRUNE = WrapperGenerator.java
  48 
  49 LDFLAGS += -L$(OPENWIN_LIB)
  50 
  51 # For Xrender extension.
  52 ifeq ($(PLATFORM), solaris)
  53 LDFLAGS += -L/usr/openwin/sfw/lib$(ISA_DIR) -R/usr/openwin/sfw/lib$(ISA_DIR)
  54 endif
  55 
  56 ifeq ($(PLATFORM), linux)
  57 LDFLAGS += -lpthread
  58 dummy := $(shell $(MKDIR) -p $(LIB_LOCATION))
  59 endif
  60 
  61 # Since this library will be living in a subdirectory below the other libraries
  62 #   we need to add an extra runpath so that libraries in the upper directory
  63 #   are found at runtime.
  64 LD_RUNPATH_EXTRAS = ..
  65 
  66 #
  67 # Rules.
  68 #
  69 include $(BUILDDIR)/common/Mapfile-vers.gmk
  70 include $(BUILDDIR)/common/Library.gmk
  71 
  72 #
  73 # Add to the ambient vpath to pick up files in subdirectories
  74 #
  75 vpath %.c   $(SHARE_SRC)/native/sunawt/alphacomposite
  76 vpath %.c   $(PLATFORM_SRC)/native/sun/xawt
  77 vpath %.c   $(PLATFORM_SRC)/native/sun/awt
  78 vpath %.c   $(SHARE_SRC)/native/sun/awt/debug
  79 vpath %.c   $(SHARE_SRC)/native/sun/awt/image
  80 vpath %.c   $(SHARE_SRC)/native/sun/awt/image/gif
  81 vpath %.c   $(SHARE_SRC)/native/sun/awt/image/cvutils
  82 vpath %.c   $(SHARE_SRC)/native/sun/awt/shell
  83 vpath %.c   $(SHARE_SRC)/native/sun/java2d
  84 vpath %.c   $(SHARE_SRC)/native/sun/java2d/loops
  85 vpath %.c   $(SHARE_SRC)/native/sun/java2d/pipe
  86 vpath %.c   $(SHARE_SRC)/native/sun/awt/medialib
  87 vpath %.c   $(SHARE_SRC)/native/sun/awt/utility
  88 vpath %.cpp $(SHARE_SRC)/native/sun/image
  89 vpath %.c   $(SHARE_SRC)/native/sun/font
  90 vpath %.c   $(PLATFORM_SRC)/native/sun/awt/robot_child
  91 vpath %.c   $(SHARE_SRC)/native/sun/java2d/opengl
  92 vpath %.c   $(PLATFORM_SRC)/native/sun/java2d/opengl
  93 vpath %.c   $(PLATFORM_SRC)/native/sun/java2d/x11
  94 
  95 OTHER_LDLIBS = $(LIBM) -lawt -lXext -lX11 -lXrender -ldl \
  96                    $(LDFLAGS_COMMON) $(AWT_RUNPATH) $(OTHER_LDFLAGS) -lXtst -lXi
  97 
  98 ifeq  ($(PLATFORM), solaris)
  99 CPPFLAGS += -DFUNCPROTO=15
 100 dummy := $(shell $(MKDIR) -p $(LIB_LOCATION))
 101 endif
 102 
 103 CPPFLAGS += -I$(CUPS_HEADERS_PATH)
 104 
 105 CPPFLAGS += -DXAWT -DXAWT_HACK \
 106         -I$(TEMPDIR)/../../sun.awt/awt/CClassHeaders \
 107         -I$(PLATFORM_SRC)/native/sun/awt \
 108         -I$(PLATFORM_SRC)/native/sun/xawt \
 109         -I$(PLATFORM_SRC)/native/sun/jdga \
 110         -I$(SHARE_SRC)/native/sun/awt/debug \
 111         -I$(SHARE_SRC)/native/sun/awt/image/cvutils \
 112         -I$(SHARE_SRC)/native/sun/java2d \
 113         -I$(SHARE_SRC)/native/sun/java2d/loops \
 114         -I$(SHARE_SRC)/native/sun/awt/image/cvutils \
 115         -I$(SHARE_SRC)/native/sun/awt/image \
 116         -I$(SHARE_SRC)/native/sun/font \
 117         -I$(PLATFORM_SRC)/native/sun/java2d \
 118         -I$(SHARE_SRC)/native/sun/java2d/pipe \
 119         -I$(SHARE_SRC)/native/sun/java2d/opengl \
 120         -I$(PLATFORM_SRC)/native/sun/java2d/opengl \
 121         -I$(PLATFORM_SRC)/native/sun/java2d/x11 \
 122         -I$(SHARE_SRC)/native/sun/dc/path \
 123         -I$(SHARE_SRC)/native/sun/dc/doe \
 124         -I$(SHARE_SRC)/native/sun/awt/alphacomposite \
 125         -I$(SHARE_SRC)/native/sun/awt/medialib \
 126         -I$(PLATFORM_SRC)/native/sun/awt/medialib \
 127         -I$(PLATFORM_SRC)/native/sun/font \
 128         -I$(SHARE_SRC)/native/sun/awt \
 129         -I$(PLATFORM_SRC)/native/sun/awt
 130 
 131 ifeq ($(PLATFORM), linux)
 132   ifndef CROSS_COMPILE_ARCH
 133     # Allows for builds on Debian GNU Linux, X11 is in a different place 
 134     # This should really be handled at a higher-level so we don't have to
 135     # work-around this when cross-compiling
 136     CPPFLAGS += -I/usr/X11R6/include/X11/extensions \
 137                 -I/usr/include/X11/extensions \
 138                 -I$(OPENWIN_HOME)/include 
 139   else
 140     CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions \
 141                 -I$(OPENWIN_HOME)/include 
 142   endif
 143 endif
 144 
 145 # We have some odd logic here because some Solaris 10 updates
 146 # have a render.h file that suggests gradients are supported, but
 147 # the Xrender.h doesn't have the corresponding type definitions.
 148 # Earlier updates have neither. We'd like to know if there's a mismatch.
 149 # Whilst in the C preprocessor we can tell if the render.h define's are set
 150 # we can't tell anything about C declarations.
 151 # A grep of Xrender.h is the only way to know this. If they are absent
 152 # we will set a flag indicating this mismatch and the JDK source file
 153 # will interpret it to resolve the problem.
 154 ifeq ($(PLATFORM), solaris)
 155   CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions
 156   OS_VERSION := $(shell uname -r)
 157   XRENDER_H := $(OPENWIN_HOME)/share/include/X11/extensions/Xrender.h
 158   ifeq ($(OS_VERSION),5.10) 
 159      LINEARGRADIENT_CNT := $(shell $(EGREP) -c XLinearGradient $(XRENDER_H))
 160      ifeq ($(LINEARGRADIENT_CNT),0) 
 161        CFLAGS+= -DSOLARIS10_NO_XRENDER_STRUCTS
 162      endif
 163  endif
 164 endif
 165 
 166 ifeq ($(MILESTONE), internal)
 167   CPPFLAGS += -DINTERNAL_BUILD
 168 endif
 169 
 170 #
 171 # Generation of wrappers
 172 #
 173 SIZER_DIR=$(GEN_DIR)/generator
 174 SIZER = $(SIZER_DIR)/sizer
 175 SIZER_32_C = $(SIZER).32.c
 176 SIZER_64_C = $(SIZER).64.c
 177 CFLAGS_32=$(CFLAGS)
 178 CFLAGS_64=$(CFLAGS)
 179 
 180 ifeq ($(PLATFORM), solaris)
 181 
 182 isalist:=$(shell $(ISAINFO))
 183 
 184 ifneq (,$(findstring sparcv9, $(isalist)))
 185 # On sparcv9 we generate both 32 and 64-bit sizers in spite of ARCH_DATA_MODEL.
 186 # On sparcv9 CFLAGS already contain $(XARCH_OPTION/64), so to generate 32-bit sizer we need to change this option.
 187 CFLAGS_32=$(subst $(XARCH_OPTION/64),$(XARCH_OPTION/32),$(CFLAGS))
 188 SIZERS = $(SIZER).32 $(SIZER).64
 189 SIZERS_C = $(SIZER_32_C) $(SIZER_64_C)
 190 SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32 $(WRAPPER_GENERATOR_DIR)/sizes.64
 191 CFLAGS_64=$(CFLAGS) $(XARCH_OPTION/64)
 192 else
 193 ifneq (,$(findstring amd64, $(isalist)))
 194 # On amd64 we generate both 32 and 64-bit sizers in spite of ARCH_DATA_MODEL.
 195 # On amd64 CFLAGS already contain $(XARCH_OPTION/64), so to generate 32-bit sizer we need to change this option.
 196 CFLAGS_32=$(subst $(XARCH_OPTION/64),$(XARCH_OPTION/32),$(CFLAGS))
 197 SIZERS = $(SIZER).32 $(SIZER).64
 198 SIZERS_C = $(SIZER_32_C) $(SIZER_64_C)
 199 SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32 $(WRAPPER_GENERATOR_DIR)/sizes.64
 200 CFLAGS_64=$(CFLAGS) $(XARCH_OPTION/64)
 201 else # !sparcv9 : includes (32-bit) sparc, i586
 202 SIZERS = $(SIZER).32
 203 SIZERS_C = $(SIZER_32_C)
 204 SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32
 205 endif # amd64
 206 endif # sparcv9
 207 
 208 else # !solaris
 209 
 210 ifeq ($(ARCH_DATA_MODEL), 32)
 211 SIZERS = $(SIZER).32
 212 SIZERS_C = $(SIZER_32_C)
 213 SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32
 214 else # !32
 215 SIZERS = $(SIZER).64
 216 SIZERS_C = $(SIZER_64_C)
 217 SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.64
 218 endif # 32
 219 
 220 endif # solaris
 221 
 222 # XXX Hack for 6185483 - use hard-coded sizes.
 223 # Add the 64-bit platforms that need to be included into 32-bit build
 224 # and have sizes.64-$(PLATFORM)-$(LIBARCH) hardcoded in the workspace
 225 ifeq ($(PLATFORM)-$(LIBARCH), solaris-i386)
 226 # If you define DOHACK=true for some combination of $(PLATFORM)-$(LIBARCH),
 227 # make sure you have sizes.64-$(PLATFORM)-$(LIBARCH) pre-generated in
 228 # $(PLATFORM_SRC)/classes/sun/awt/X11/generator/
 229 DOHACK=true
 230 endif # Hack
 231 
 232 ifeq ($(DOHACK), true)
 233 PREDEFINED_SIZES_TMPL=$(PLATFORM_SRC)/classes/sun/awt/X11/generator/sizes.64-$(PLATFORM)-$(LIBARCH)
 234 PREDEFINED_SIZES=$(WRAPPER_GENERATOR_DIR)/sizes.64
 235 SIZES += $(WRAPPER_GENERATOR_DIR)/sizes.64
 236 endif
 237 
 238 ifeq ($(PLATFORM)-$(LIBARCH), solaris-amd64)
 239 DOCOMPARE=true
 240 endif
 241 # 64 bit sizers are generated on platform-libarch (left) for use 
 242 # on platform-libarch (right) and stored under the latter name.
 243 # Do compare manually stored and automatically generated pair(s) 
 244 # if DOCOMPARE=true, just after the generation.
 245 STORED_SIZES_TMPL_solaris_amd64=$(PLATFORM_SRC)/classes/sun/awt/X11/generator/sizes.64-solaris-i386
 246 
 247 WRAPPER_GENERATOR_JAVA=$(PLATFORM_SRC)/classes/sun/awt/X11/generator/WrapperGenerator.java
 248 WRAPPER_GENERATOR_DIR=$(GENSRCDIR)/sun/awt/X11/generator
 249 WRAPPER_GENERATOR_TEMPDIR=$(TEMPDIR)/sun/awt/X11/generator
 250 WRAPPER_GENERATOR_CLASS=$(WRAPPER_GENERATOR_TEMPDIR)/WrapperGenerator.class 
 251 XLIBTYPES=$(PLATFORM_SRC)/classes/sun/awt/X11/generator/xlibtypes.txt
 252 
 253 $(SIZERS): $(SIZERS_C) 
 254         $(prep-target)
 255 ifndef CROSS_COMPILE_ARCH
 256         $(CC) $(CFLAGS_$(subst .,,$(suffix $@))) $(CPPFLAGS) -o $@ $(SIZER)$(suffix $@).c
 257 else
 258         $(HOST_CC) $(CPPFLAGS) -o $@ $(SIZER)$(suffix $@).c
 259 endif
 260 
 261 $(WRAPPER_GENERATOR_CLASS): $(WRAPPER_GENERATOR_JAVA)
 262         $(prep-target)
 263         $(BOOT_JAVAC_CMD) -d $(WRAPPER_GENERATOR_TEMPDIR) $(WRAPPER_GENERATOR_JAVA)
 264 
 265 $(SIZERS_C): $(WRAPPER_GENERATOR_CLASS) $(XLIBTYPES)
 266         $(prep-target)
 267         $(MKDIR) -p $(WRAPPER_GENERATOR_TEMPDIR)
 268         $(BOOT_JAVA_CMD) -cp $(WRAPPER_GENERATOR_TEMPDIR) WrapperGenerator \
 269             $(SIZER_DIR) $(XLIBTYPES) "sizer" $(subst .,,$(suffix $(basename $@)))
 270 
 271 $(SIZES): $(SIZERS)
 272         @if [ "$(DOHACK)$@" = "true$(PREDEFINED_SIZES)" ]; then \
 273             $(ECHO) COPYING $(PREDEFINED_SIZES_TMPL) into $@; \
 274             $(CP) $(PREDEFINED_SIZES_TMPL) $@; \
 275             $(CHMOD) +w $@;\
 276         else    \
 277             $(ECHO) GENERATING $@; \
 278             $(WRAPPER_GENERATOR_DIR)/sizer$(suffix $@) > $@; \
 279         fi
 280         @if [ "$(DOCOMPARE)$(suffix $@)" = "true.64" ]; then \
 281             $(ECHO) COMPARING $@ and $(STORED_SIZES_TMPL_$(PLATFORM)_$(LIBARCH)); \
 282             $(DIFF) $@ $(STORED_SIZES_TMPL_$(PLATFORM)_$(LIBARCH)); \
 283         fi
 284 
 285 $(TEMPDIR)/.gen.wrappers: $(SIZES) $(WRAPPER_GENERATOR_CLASS) $(XLIBTYPES)
 286         $(BOOT_JAVA_CMD) -cp $(WRAPPER_GENERATOR_TEMPDIR) WrapperGenerator \
 287             $(GEN_DIR) $(XLIBTYPES) "gen" $(WRAPPER_GENERATOR_DIR)/sizes
 288 
 289 touch.wrappers: $(TEMPDIR)/.gen.wrappers
 290         $(MKDIR) -p $(TEMPDIR)
 291         $(TOUCH) $(TEMPDIR)/.gen.wrappers
 292 
 293 generated.clean:
 294         $(RM) -r $(WRAPPER_GENERATOR_TEMPDIR)
 295         $(RM) -r $(WRAPPER_GENERATOR_DIR)
 296         $(RM) -r $(GEN_DIR)/*.java
 297         $(RM) -r $(TEMPDIR)/.gen_icons
 298 
 299 ifdef OPENJDK
 300     ICONS_PATH_PREFIX=$(PLATFORM_SRC)
 301 else
 302     ICONS_PATH_PREFIX=$(CLOSED_SRC)/solaris
 303 endif
 304 
 305 ICONS = \
 306     $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon16.png \
 307     $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon24.png \
 308     $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon32.png \
 309     $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon48.png
 310 
 311 
 312 ICONPATH=$(PLATFORM_SRC)/classes/sun/awt/X11
 313 
 314 ICONS += \
 315    $(ICONPATH)/security-icon-bw16.png \
 316    $(ICONPATH)/security-icon-interim16.png \
 317    $(ICONPATH)/security-icon-yellow16.png \
 318    $(ICONPATH)/security-icon-bw24.png \
 319    $(ICONPATH)/security-icon-interim24.png \
 320    $(ICONPATH)/security-icon-yellow24.png \
 321    $(ICONPATH)/security-icon-bw32.png \
 322    $(ICONPATH)/security-icon-interim32.png \
 323    $(ICONPATH)/security-icon-yellow32.png \
 324    $(ICONPATH)/security-icon-bw48.png \
 325    $(ICONPATH)/security-icon-interim48.png \
 326    $(ICONPATH)/security-icon-yellow48.png
 327 
 328 TEMPDIR_CLASSES = $(TEMPDIR)/classes
 329 
 330 $(TEMPDIR_CLASSES)/sun/awt/X11/ToBin.class: ToBin.java
 331         @$(prep-target)
 332         $(BOOT_JAVAC_CMD) -d $(TEMPDIR_CLASSES) $<
 333 
 334 $(TEMPDIR)/.gen_icons: $(TEMPDIR_CLASSES)/sun/awt/X11/ToBin.class $(ICONS)
 335         $(prep-target)
 336         for i in $(ICONS); do \
 337             filename=`basename $$i`; \
 338             name=`$(ECHO) $$filename | $(TR) '\-.' '__'`;  \
 339             classname=$(GEN_DIR)/XAWTIcon32_$$name.java; \
 340             $(RM) $$classname; \
 341             $(ECHO) "package sun.awt.X11;" >> $$classname ; \
 342             $(ECHO) "public class XAWTIcon32_$$name {" >> $$classname; \
 343             $(ECHO) "public static int[] $$name = { " >> $$classname;  \
 344             $(CAT) $$i | \
 345               $(BOOT_JAVA_CMD) -cp $(TEMPDIR_CLASSES)  \
 346                 -Djava.awt.headless=true \
 347                 sun.awt.X11.ToBin >> $$classname; \
 348             $(ECHO) "}; }" >> $$classname;  \
 349             classname=$(GEN_DIR)/XAWTIcon64_$$name.java; \
 350             $(RM) $$classname; \
 351             $(ECHO) "package sun.awt.X11;" >> $$classname ; \
 352             $(ECHO) "public class XAWTIcon64_$$name {" >> $$classname; \
 353             $(ECHO) "public static long[] $$name = { " >> $$classname;  \
 354             $(CAT) $$i | \
 355               $(BOOT_JAVA_CMD) -cp $(TEMPDIR_CLASSES)  \
 356                 -Djava.awt.headless=true \
 357                 sun.awt.X11.ToBin >> $$classname; \
 358             $(ECHO) "}; }" >> $$classname;  \
 359         done
 360         $(TOUCH) $@
 361 
 362 clean clobber:: generated.clean
 363 
 364 .PHONY: generated.clean robot_child
 365