duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 1 | # |
dcubed | b896fcf | 2012-04-03 12:57:47 -0700 | [diff] [blame] | 2 | # Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 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 |
ohair | 2283b9d | 2010-05-25 15:58:33 -0700 | [diff] [blame] | 7 | # published by the Free Software Foundation. Oracle designates this |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 8 | # particular file as subject to the "Classpath" exception as provided |
ohair | 2283b9d | 2010-05-25 15:58:33 -0700 | [diff] [blame] | 9 | # by Oracle in the LICENSE file that accompanied this code. |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 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 | # |
ohair | 2283b9d | 2010-05-25 15:58:33 -0700 | [diff] [blame] | 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. |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 24 | # |
| 25 | |
| 26 | # |
| 27 | # Generic makefile for building shared libraries. |
| 28 | # |
| 29 | |
| 30 | # WARNING: This file is shared with other workspaces. |
| 31 | # So when it includes other files, it must use JDK_TOPDIR. |
| 32 | # |
| 33 | |
| 34 | include $(JDK_TOPDIR)/make/common/Classes.gmk |
| 35 | |
| 36 | # |
| 37 | # It is important to define these *after* including Classes.gmk |
| 38 | # in order to override the values defined inthat makefile. |
| 39 | # |
| 40 | |
| 41 | ifeq ($(LIBRARY), fdlibm) |
| 42 | ifeq ($(PLATFORM),windows) |
| 43 | ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(FDDLIBM_SUFFIX) |
| 44 | ACTUAL_LIBRARY_DIR = $(OBJDIR) |
| 45 | else # PLATFORM |
| 46 | ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(ARCH).$(FDDLIBM_SUFFIX) |
| 47 | ACTUAL_LIBRARY_DIR = $(OBJDIR) |
| 48 | endif #PLATFORM |
| 49 | else # LIBRARY |
| 50 | ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX) |
| 51 | ACTUAL_LIBRARY_DIR = $(LIB_LOCATION) |
| 52 | endif |
| 53 | ACTUAL_LIBRARY = $(ACTUAL_LIBRARY_DIR)/$(ACTUAL_LIBRARY_NAME) |
| 54 | |
| 55 | library:: $(ACTUAL_LIBRARY) |
| 56 | |
| 57 | FILES_o = $(patsubst %.c, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) |
| 58 | FILES_o += $(patsubst %.s, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_s)))) |
| 59 | FILES_o += $(patsubst %.cpp, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_cpp)))) |
| 60 | |
michaelm | 5ac8c15 | 2012-03-06 20:34:38 +0000 | [diff] [blame] | 61 | ifeq ($(PLATFORM), macosx) |
| 62 | FILES_o += $(patsubst %.m, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_objc)))) |
| 63 | FILES_o += $(patsubst %.mm, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_objcpp)))) |
| 64 | |
| 65 | INCREMENTAL_BUILD=false |
| 66 | |
| 67 | endif # PLATFORM |
| 68 | |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 69 | ifeq ($(INCREMENTAL_BUILD),true) |
| 70 | FILES_d = $(patsubst %.c, %.$(DEPEND_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) |
| 71 | FILES_d += $(patsubst %.cpp, %.$(DEPEND_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_cpp)))) |
| 72 | endif # INCREMENTAL_BUILD |
| 73 | |
| 74 | ifeq ($(PLATFORM),solaris) |
| 75 | # List of all lint files, one for each .c file (only for C) |
| 76 | FILES_ln = $(patsubst %.c, %.$(LINT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) |
| 77 | endif |
| 78 | |
| 79 | # |
| 80 | # C++ libraries must be linked with CC. |
| 81 | # |
| 82 | ifdef CPLUSPLUSLIBRARY |
| 83 | LINKER=$(LINK.cc) |
| 84 | else |
| 85 | LINKER=$(LINK.c) |
| 86 | endif |
| 87 | |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 88 | $(ACTUAL_LIBRARY):: $(INIT) $(TEMPDIR) $(LIBDIR) $(BINDIR) $(EXTDIR) classheaders |
dholmes | 2f37b89 | 2011-03-22 18:56:16 -0400 | [diff] [blame] | 89 | @$(ECHO) Building lib:$(ACTUAL_LIBRARY) |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 90 | # |
| 91 | # COMPILE_APPROACH: Different approaches to compile up the native object |
| 92 | # files as quickly as possible. |
| 93 | # The setting of parallel works best on Unix, batch on Windows. |
| 94 | # |
| 95 | |
| 96 | COMPILE_FILES_o = $(OBJDIR)/.files_compiled |
| 97 | $(COMPILE_FILES_o): $(FILES_d) $(FILES_o) |
| 98 | @$(ECHO) "$<" >> $@ |
| 99 | clean:: |
| 100 | $(RM) $(COMPILE_FILES_o) |
| 101 | |
| 102 | # |
| 103 | # COMPILE_APPROACH=parallel: Will trigger compilations (just compilations) to |
| 104 | # happen in parallel. Greatly decreases Unix build time, even on single CPU |
| 105 | # machines, more so on multiple CPU machines. Default is 2 compiles |
| 106 | # at a time, but can be adjusted with ALT_PARALLEL_COMPILE_JOBS. |
| 107 | # Note that each .d file will also be dependent on it's .o file, see |
| 108 | # Rules.gmk. |
| 109 | # Note this does not depend on Rules.gmk to work like batch (below) |
| 110 | # and this technique doesn't seem to help Windows build time nor does |
| 111 | # it work very well, it's possible the Windows Visual Studio compilers |
| 112 | # don't work well in a parallel situation, this needs investigation. |
| 113 | # |
| 114 | |
| 115 | ifeq ($(COMPILE_APPROACH),parallel) |
| 116 | |
| 117 | .PHONY: library_parallel_compile |
| 118 | |
| 119 | library_parallel_compile: |
| 120 | @$(ECHO) "Begin parallel compiles: $(shell $(PWD))" |
| 121 | @$(MAKE) -j $(PARALLEL_COMPILE_JOBS) $(COMPILE_FILES_o) |
| 122 | @$(ECHO) "Done with parallel compiles: $(shell $(PWD))" |
| 123 | |
| 124 | $(ACTUAL_LIBRARY):: library_parallel_compile |
| 125 | |
| 126 | endif |
| 127 | |
| 128 | # |
| 129 | # COMPILE_APPROACH=batch: Will trigger compilations (just compilations) to |
| 130 | # happen in batch mode. Greatly decreases Windows build time. |
| 131 | # See logic in Rules.gmk for how compiles happen, the $(MAKE) in |
| 132 | # library_batch_compile below triggers the actions in Rules.gmk. |
| 133 | # Note that each .d file will also be dependent on it's .o file, see |
| 134 | # Rules.gmk. |
| 135 | # |
| 136 | ifeq ($(COMPILE_APPROACH),batch) |
| 137 | |
| 138 | .PHONY: library_batch_compile |
| 139 | |
| 140 | library_batch_compile: |
| 141 | @$(ECHO) "Begin BATCH compiles: $(shell $(PWD))" |
| 142 | $(MAKE) $(COMPILE_FILES_o) |
| 143 | $(MAKE) batch_compile |
| 144 | @$(ECHO) "Done with BATCH compiles: $(shell $(PWD))" |
| 145 | $(MAKE) COMPILE_APPROACH=normal $(COMPILE_FILES_o) |
| 146 | |
| 147 | $(ACTUAL_LIBRARY):: library_batch_compile |
| 148 | |
| 149 | endif |
| 150 | |
| 151 | ifeq ($(PLATFORM), windows) |
| 152 | |
| 153 | # |
| 154 | # Library building rules. |
| 155 | # |
| 156 | |
| 157 | $(LIBRARY).lib:: $(OBJDIR) |
| 158 | |
| 159 | ifeq ($(LIBRARY), fdlibm) |
| 160 | $(ACTUAL_LIBRARY):: $(OBJDIR)/$(LIBRARY).lib |
| 161 | |
| 162 | $(OBJDIR)/$(LIBRARY).lib:: $(OBJDIR)/$(LIBRARY).lcf |
| 163 | @$(prep-target) |
| 164 | $(LIBEXE) -NODEFAULTLIB:MSVCRT -out:$@ -nologo \ |
| 165 | @$(OBJDIR)/$(LIBRARY).lcf $(OTHER_LCF) $(LDLIBS_COMMON) |
| 166 | else # LIBRARY |
| 167 | # build it into $(OBJDIR) so that the other generated files get put |
| 168 | # there, then copy just the DLL (and MAP file) to the requested directory. |
| 169 | # |
dcubed | b896fcf | 2012-04-03 12:57:47 -0700 | [diff] [blame] | 170 | ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) |
| 171 | MAP_OPTION="-map:$(OBJDIR)/$(LIBRARY).map" |
| 172 | endif |
| 173 | |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 174 | $(ACTUAL_LIBRARY):: $(OBJDIR)/$(LIBRARY).lcf |
| 175 | @$(prep-target) |
| 176 | @$(MKDIR) -p $(OBJDIR) |
| 177 | $(LINK) -dll -out:$(OBJDIR)/$(@F) \ |
dcubed | b896fcf | 2012-04-03 12:57:47 -0700 | [diff] [blame] | 178 | $(MAP_OPTION) \ |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 179 | $(LFLAGS) @$(OBJDIR)/$(LIBRARY).lcf \ |
chegar | 38b5a83 | 2011-10-24 21:03:41 +0100 | [diff] [blame] | 180 | $(OTHER_LCF) $(LDLIBS) |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 181 | $(CP) $(OBJDIR)/$(@F) $@ |
ohair | 67e0bbf | 2011-01-05 14:28:58 -0800 | [diff] [blame] | 182 | @$(call binary_file_verification,$@) |
dcubed | b896fcf | 2012-04-03 12:57:47 -0700 | [diff] [blame] | 183 | ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) |
dcubed | 7fe35f3 | 2012-04-11 07:26:35 -0700 | [diff] [blame] | 184 | ifeq ($(ZIP_DEBUGINFO_FILES),1) |
| 185 | (set -e ; \ |
| 186 | $(CD) $(OBJDIR) ; \ |
| 187 | $(ZIPEXE) -q $(LIBRARY).diz $(LIBRARY).map $(LIBRARY).pdb ; \ |
| 188 | ) |
| 189 | $(CP) $(OBJDIR)/$(LIBRARY).diz $(@D) |
| 190 | $(RM) $(OBJDIR)/$(LIBRARY).map $(OBJDIR)/$(LIBRARY).pdb |
| 191 | else |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 192 | $(CP) $(OBJDIR)/$(LIBRARY).map $(@D) |
| 193 | $(CP) $(OBJDIR)/$(LIBRARY).pdb $(@D) |
dcubed | 7fe35f3 | 2012-04-11 07:26:35 -0700 | [diff] [blame] | 194 | endif |
dcubed | b896fcf | 2012-04-03 12:57:47 -0700 | [diff] [blame] | 195 | endif |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 196 | |
| 197 | endif # LIBRARY |
| 198 | |
| 199 | $(OBJDIR)/$(LIBRARY).lcf: $(OBJDIR)/$(LIBRARY).res $(COMPILE_FILES_o) $(FILES_m) |
| 200 | @$(prep-target) |
| 201 | @$(MKDIR) -p $(TEMPDIR) |
ohair | f9180a9 | 2012-09-11 13:40:59 -0700 | [diff] [blame] | 202 | @$(ECHO) $(sort $(FILES_o)) > $@ |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 203 | ifndef LOCAL_RESOURCE_FILE |
| 204 | @$(ECHO) $(OBJDIR)/$(LIBRARY).res >> $@ |
| 205 | endif |
| 206 | @$(ECHO) Created $@ |
| 207 | |
herrick | 43e2a0c | 2009-06-12 14:56:32 -0400 | [diff] [blame] | 208 | # JDK name required here |
tbell | 02d657c | 2012-10-23 10:10:23 -0700 | [diff] [blame] | 209 | RC_FLAGS += -D "JDK_FNAME=$(LIBRARY).dll" \ |
| 210 | -D "JDK_INTERNAL_NAME=$(LIBRARY)" \ |
| 211 | -D "JDK_FTYPE=0x2L" |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 212 | |
| 213 | $(OBJDIR)/$(LIBRARY).res: $(VERSIONINFO_RESOURCE) |
| 214 | ifndef LOCAL_RESOURCE_FILE |
| 215 | @$(prep-target) |
| 216 | $(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(@) $(VERSIONINFO_RESOURCE) |
| 217 | endif |
| 218 | |
| 219 | # |
| 220 | # Install a .lib file if required. |
| 221 | # |
| 222 | ifeq ($(INSTALL_DOT_LIB), true) |
| 223 | $(ACTUAL_LIBRARY):: $(LIBDIR)/$(LIBRARY).lib |
| 224 | |
| 225 | clean:: |
| 226 | -$(RM) $(LIBDIR)/$(LIBRARY).lib |
| 227 | |
| 228 | $(LIBDIR)/$(LIBRARY).lib:: $(OBJDIR)/$(LIBRARY).lib |
| 229 | $(install-file) |
| 230 | |
| 231 | $(LIBDIR)/$(LIBRARY).dll:: $(OBJDIR)/$(LIBRARY).dll |
| 232 | $(install-file) |
| 233 | |
| 234 | endif # INSTALL_DOT_LIB |
| 235 | |
| 236 | else # PLATFORM |
| 237 | |
| 238 | # |
| 239 | # On Solaris, use mcs to write the version into the comment section of |
| 240 | # the shared library. On other platforms set this to false at the |
| 241 | # make command line. |
| 242 | # |
michaelm | 5ac8c15 | 2012-03-06 20:34:38 +0000 | [diff] [blame] | 243 | |
| 244 | ifneq ($(PLATFORM), macosx) |
| 245 | ARFLAGS = -r |
| 246 | endif |
| 247 | |
dcubed | a054bf4 | 2012-05-25 08:20:12 -0700 | [diff] [blame] | 248 | ifeq ($(PLATFORM), solaris) |
| 249 | ifeq ($(LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS),1) |
| 250 | $(ACTUAL_LIBRARY):: $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) |
| 251 | endif |
| 252 | endif |
| 253 | |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 254 | $(ACTUAL_LIBRARY):: $(COMPILE_FILES_o) $(FILES_m) $(FILES_reorder) |
| 255 | @$(prep-target) |
ohair | 850fb25 | 2008-07-30 19:40:57 -0700 | [diff] [blame] | 256 | @$(ECHO) "STATS: LIBRARY=$(LIBRARY), PRODUCT=$(PRODUCT), OPTIMIZATION_LEVEL=$(OPTIMIZATION_LEVEL)" |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 257 | @$(ECHO) "Rebuilding $@ because of $?" |
| 258 | ifeq ($(LIBRARY), fdlibm) |
ohair | f9180a9 | 2012-09-11 13:40:59 -0700 | [diff] [blame] | 259 | $(AR) $(ARFLAGS) $@ $(sort $(FILES_o)) |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 260 | else # LIBRARY |
ohair | f9180a9 | 2012-09-11 13:40:59 -0700 | [diff] [blame] | 261 | $(LINKER) $(SHARED_LIBRARY_FLAG) -o $@ $(sort $(FILES_o)) $(LDLIBS) |
ohair | 67e0bbf | 2011-01-05 14:28:58 -0800 | [diff] [blame] | 262 | @$(call binary_file_verification,$@) |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 263 | ifeq ($(WRITE_LIBVERSION),true) |
| 264 | $(MCS) -d -a "$(FULL_VERSION)" $@ |
| 265 | endif # WRITE_LIBVERSION |
dcubed | 7fe35f3 | 2012-04-11 07:26:35 -0700 | [diff] [blame] | 266 | ifneq ($(PLATFORM), macosx) |
| 267 | ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) |
| 268 | ifeq ($(LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS),1) |
dcubed | a054bf4 | 2012-05-25 08:20:12 -0700 | [diff] [blame] | 269 | ifeq ($(PLATFORM), solaris) |
| 270 | # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. |
| 271 | # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from |
| 272 | # empty section headers until a fixed $(OBJCOPY) is available. |
| 273 | # An empty section header has sh_addr == 0 and sh_size == 0. |
| 274 | # This problem has only been seen on Solaris X64, but we call this tool |
| 275 | # on all Solaris builds just in case. |
| 276 | # |
| 277 | # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. |
| 278 | # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. |
dcubed | 7fe35f3 | 2012-04-11 07:26:35 -0700 | [diff] [blame] | 279 | (set -e ; \ |
| 280 | $(CD) $(@D) ; \ |
dcubed | a054bf4 | 2012-05-25 08:20:12 -0700 | [diff] [blame] | 281 | $(FIX_EMPTY_SEC_HDR_FLAGS) $(@F) ; \ |
| 282 | $(OBJCOPY) --only-keep-debug $(@F) $(LIB_PREFIX)$(LIBRARY).debuginfo ; \ |
| 283 | $(ADD_GNU_DEBUGLINK) $(LIB_PREFIX)$(LIBRARY).debuginfo $(@F) ; \ |
dcubed | 7fe35f3 | 2012-04-11 07:26:35 -0700 | [diff] [blame] | 284 | ) |
dcubed | a054bf4 | 2012-05-25 08:20:12 -0700 | [diff] [blame] | 285 | else # PLATFORM != solaris |
| 286 | (set -e ; \ |
| 287 | $(CD) $(@D) ; \ |
| 288 | $(OBJCOPY) --only-keep-debug $(@F) $(LIB_PREFIX)$(LIBRARY).debuginfo ; \ |
| 289 | $(OBJCOPY) --add-gnu-debuglink=$(LIB_PREFIX)$(LIBRARY).debuginfo $(@F) ; \ |
| 290 | ) |
| 291 | endif # PLATFORM == solaris |
dcubed | 7fe35f3 | 2012-04-11 07:26:35 -0700 | [diff] [blame] | 292 | ifeq ($(STRIP_POLICY),all_strip) |
| 293 | $(STRIP) $@ |
| 294 | else |
| 295 | ifeq ($(STRIP_POLICY),min_strip) |
| 296 | ifeq ($(PLATFORM), solaris) |
| 297 | $(STRIP) -x $@ |
| 298 | else |
| 299 | # assume Linux |
| 300 | $(STRIP) -g $@ |
| 301 | endif |
| 302 | # implied else here is no stripping at all |
| 303 | endif |
| 304 | endif |
| 305 | ifeq ($(ZIP_DEBUGINFO_FILES),1) |
| 306 | (set -e ; \ |
| 307 | $(CD) $(@D) ; \ |
dcubed | a054bf4 | 2012-05-25 08:20:12 -0700 | [diff] [blame] | 308 | $(ZIPEXE) -q $(LIB_PREFIX)$(LIBRARY).diz $(LIB_PREFIX)$(LIBRARY).debuginfo ; \ |
| 309 | $(RM) $(LIB_PREFIX)$(LIBRARY).debuginfo ; \ |
dcubed | 7fe35f3 | 2012-04-11 07:26:35 -0700 | [diff] [blame] | 310 | ) |
| 311 | endif |
| 312 | endif # LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS |
| 313 | endif # ENABLE_FULL_DEBUG_SYMBOLS |
| 314 | endif # PLATFORM-!macosx |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 315 | endif # LIBRARY |
| 316 | |
| 317 | endif # PLATFORM |
| 318 | |
| 319 | # |
| 320 | # Cross check all linted files against each other |
| 321 | # |
| 322 | ifeq ($(PLATFORM),solaris) |
| 323 | lint.errors : $(FILES_ln) |
| 324 | $(LINT.c) $(FILES_ln) $(LDLIBS) |
| 325 | endif |
| 326 | |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 327 | # |
| 328 | # Class libraries with JNI native methods get a include to the package. |
| 329 | # |
| 330 | ifdef PACKAGE |
| 331 | vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR) |
| 332 | vpath %.c $(SHARE_SRC)/native/$(PKGDIR) |
| 333 | OTHER_INCLUDES += -I$(SHARE_SRC)/native/common -I$(PLATFORM_SRC)/native/common |
| 334 | OTHER_INCLUDES += -I$(SHARE_SRC)/native/$(PKGDIR) \ |
| 335 | -I$(PLATFORM_SRC)/native/$(PKGDIR) |
| 336 | endif |
| 337 | |
| 338 | # |
| 339 | # Clean/clobber rules |
| 340 | # |
| 341 | clean:: |
| 342 | $(RM) -r $(ACTUAL_LIBRARY) |
| 343 | |
| 344 | clobber:: clean |
| 345 | |
| 346 | # |
| 347 | # INCREMENTAL_BUILD means that this workspace will be built over and over |
| 348 | # possibly incrementally. This means tracking the object file dependencies |
| 349 | # on include files so that sources get re-compiled when the include files |
| 350 | # change. When building from scratch and doing a one time build (like |
| 351 | # release engineering or nightly builds) set INCREMENTAL_BUILD=false. |
| 352 | # |
| 353 | |
| 354 | ifeq ($(INCREMENTAL_BUILD),true) |
| 355 | |
| 356 | # |
| 357 | # Workaround: gnumake sometimes says files is empty when it shouldn't |
| 358 | # was: files := $(foreach file, $(wildcard $(OBJDIR)/*.$(DEPEND_SUFFIX)), $(file)) |
| 359 | # |
| 360 | files := $(shell $(LS) $(OBJDIR)/*.$(DEPEND_SUFFIX) 2>/dev/null) |
| 361 | |
| 362 | # |
| 363 | # Only include these files if we have any. |
| 364 | # |
| 365 | ifneq ($(strip $(files)),) |
| 366 | |
| 367 | include $(files) |
| 368 | |
| 369 | endif # files |
| 370 | |
| 371 | endif # INCREMENTAL_BUILD |
| 372 | |
| 373 | # |
| 374 | # Default dependencies |
| 375 | # |
| 376 | |
| 377 | all: build |
| 378 | |
| 379 | build: library |
| 380 | |
| 381 | debug: |
| 382 | $(MAKE) VARIANT=DBG build |
| 383 | |
| 384 | fastdebug: |
| 385 | $(MAKE) VARIANT=DBG FASTDEBUG=true build |
| 386 | |
| 387 | openjdk: |
| 388 | $(MAKE) OPENJDK=true build |
| 389 | |
mchung | 3baa2d6 | 2010-01-07 08:14:48 -0800 | [diff] [blame] | 390 | FORCE: |
| 391 | |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 392 | .PHONY: all build debug fastdebug |
| 393 | |