36
37 # Extensions of files handled by this macro.
38 NATIVE_SOURCE_EXTENSIONS := %.s %.c %.cpp %.m %.mm
39
40 # Replaces native source extensions with the object file extension in a string.
41 # Param 1: the string containing source file names with extensions
42 # The surrounding strip is needed to keep additional whitespace out
43 define replace_with_obj_extension
44 $(strip \
45 $(foreach extension, $(NATIVE_SOURCE_EXTENSIONS), \
46 $(patsubst $(extension),%$(OBJ_SUFFIX),$(filter $(extension),$1))) \
47 )
48 endef
49
50 ifeq ($(OPENJDK_BUILD_OS_ENV), windows.cygwin)
51 UNIX_PATH_PREFIX := /cygdrive
52 else ifeq ($(OPENJDK_BUILD_OS_ENV), windows.msys)
53 UNIX_PATH_PREFIX :=
54 endif
55
56 WINDOWS_SHOWINCLUDE_SED_PATTERN := \
57 -e '/^Note: including file:/!d' \
58 -e 's|Note: including file: *||' \
59 -e 's|\\|/|g' \
60 -e 's|^\([a-zA-Z]\):|$(UNIX_PATH_PREFIX)/\1|g' \
61 -e '/$(subst /,\/,$(TOPDIR))/!d' \
62 -e 's|$$$$| \\|g' \
63 #
64
65 define add_native_source
66 # param 1 = BUILD_MYPACKAGE
67 # parma 2 = the source file name (..../alfa.c or .../beta.cpp)
68 # param 3 = the bin dir that stores all .o (.obj) and .d files.
69 # param 4 = the c flags to the compiler
70 # param 5 = the c compiler
71 # param 6 = the c++ flags to the compiler
72 # param 7 = the c++ compiler
73 # param 8 = the objc compiler
74 # param 9 = the flags to the assembler
75
76 ifneq (,$$(filter %.c,$2))
77 # Compile as a C file
78 $1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) -DTHIS_FILE='"$$(<F)"' -c
79 $1_$2_COMP=$5
80 $1_$2_DEP_FLAG:=$(C_FLAG_DEPS)
81 else ifneq (,$$(filter %.m,$2))
82 # Compile as a objective-c file
83 $1_$2_FLAGS=-x objective-c $4 $$($1_$(notdir $2)_CFLAGS) -DTHIS_FILE='"$$(<F)"' -c
84 $1_$2_COMP=$8
88 $1_$2_FLAGS=$9 -DTHIS_FILE='"$$(<F)"'
89 $1_$2_COMP=$(AS)
90 $1_$2_DEP_FLAG:=
91 else ifneq (,$$(filter %.cpp,$2)$$(filter %.mm,$2))
92 # Compile as a C++ file
93 $1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS) -DTHIS_FILE='"$$(<F)"' -c
94 $1_$2_COMP=$7
95 $1_$2_DEP_FLAG:=$(CXX_FLAG_DEPS)
96 else
97 $$(error Internal error in NativeCompilation.gmk: no compiler for file $2)
98 endif
99 # Generate the .o (.obj) file name and place it in the bin dir.
100 $1_$2_OBJ := $3/$$(call replace_with_obj_extension, $$(notdir $2))
101 # Only continue if this object file hasn't been processed already. This lets the first found
102 # source file override any other with the same name.
103 ifeq (,$$(findstring $$($1_$2_OBJ),$$($1_ALL_OBJS)))
104 $1_ALL_OBJS+=$$($1_$2_OBJ)
105 ifeq (,$$(filter %.s,$2))
106 # And this is the dependency file for this obj file.
107 $1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ))
108 # Include previously generated dependency information. (if it exists)
109 -include $$($1_$2_DEP)
110
111 ifeq ($(TOOLCHAIN_TYPE), microsoft)
112 $1_$2_DEBUG_OUT_FLAGS:=-Fd$$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)) \
113 -Fm$$(patsubst %$(OBJ_SUFFIX),%.map,$$($1_$2_OBJ))
114 endif
115 endif
116
117 $$($1_$2_OBJ) : $2 $$($1_COMPILE_VARDEPS_FILE) | $$($1_BUILD_INFO)
118 $(ECHO) $(LOG_INFO) "Compiling $$(notdir $2) (for $$(notdir $$($1_TARGET)))"
119 ifneq ($(TOOLCHAIN_TYPE), microsoft)
120 # The Solaris studio compiler doesn't output the full path to the object file in the
121 # generated deps files. Fixing it with sed. If compiling assembly, don't try this.
122 ifeq ($(TOOLCHAIN_TYPE)$$(filter %.s,$2), solstudio)
123 $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP).tmp $(CC_OUT_OPTION)$$($1_$2_OBJ) $2
124 $(SED) 's|^$$(@F):|$$@:|' $$($1_$2_DEP).tmp > $$($1_$2_DEP)
125 else
126 $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2
127 endif
128 endif
129 # The Visual Studio compiler lacks a feature for generating make dependencies, but by
130 # setting -showIncludes, all included files are printed. These are filtered out and
131 # parsed into make dependences.
132 ifeq ($(TOOLCHAIN_TYPE), microsoft)
133 ($$($1_$2_COMP) $$($1_$2_FLAGS) -showIncludes $$($1_$2_DEBUG_OUT_FLAGS) \
134 $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 ; echo $$$$? > $$($1_$2_DEP).exitvalue) \
135 | $(TEE) $$($1_$2_DEP).raw | $(GREP) -v -e "^Note: including file:" \
136 -e "^$(notdir $2)$$$$" || test "$$$$?" = "1" ; \
137 exit `cat $$($1_$2_DEP).exitvalue`
138 $(RM) $$($1_$2_DEP).exitvalue
139 ($(ECHO) $$@: \\ \
140 && $(SED) $(WINDOWS_SHOWINCLUDE_SED_PATTERN) $$($1_$2_DEP).raw) > $$($1_$2_DEP)
141 endif
142 endif
143 endef
144
145 # Setup make rules for creating a native binary (a shared library or an
146 # executable).
147 #
148 # Parameter 1 is the name of the rule. This name is used as variable prefix,
149 # and the targets generated are listed in a variable by that name.
150 #
151 # Remaining parameters are named arguments. These include:
152 # SRC one or more directory roots to scan for C/C++ files.
153 # LANG C or C++
154 # CFLAGS the compiler flags to be used, used both for C and C++.
155 # CXXFLAGS the compiler flags to be used for c++, if set overrides CFLAGS.
156 # LDFLAGS the linker flags to be used, used both for C and C++.
157 # LDFLAGS_SUFFIX the linker flags to be added last on the commandline
158 # typically the libraries linked to.
159 # ARFLAGS the archiver flags to be used
160 # OBJECT_DIR the directory where we store the object files
161 # LIBRARY the resulting library file
435 $$($1_CC) $$($1_CXX) $$($1_OBJC) $$($1_ASFLAGS) \
436 $$(foreach s, $$($1_SRCS), \
437 $$($1_$$(notdir $$s)_CFLAGS) $$($1_$$(notdir $$s)_CXXFLAGS))
438 $1_COMPILE_VARDEPS_FILE := $$(call DependOnVariable, $1_COMPILE_VARDEPS, \
439 $$($1_OBJECT_DIR)/$$($1_NOSUFFIX).comp.vardeps)
440
441 # Now call add_native_source for each source file we are going to compile.
442 $$(foreach p,$$($1_SRCS), \
443 $$(eval $$(call add_native_source,$1,$$p,$$($1_OBJECT_DIR), \
444 $$($1_CFLAGS) $$($1_EXTRA_CFLAGS) $(SYSROOT_CFLAGS), \
445 $$($1_CC), \
446 $$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS) $(SYSROOT_CFLAGS), \
447 $$($1_CXX),$$($1_OBJC),$$($1_ASFLAGS))))
448
449 # Setup rule for printing progress info when compiling source files.
450 # This is a rough heuristic and may not always print accurate information.
451 $$($1_BUILD_INFO): $$($1_SRCS) $$($1_COMPILE_VARDEPS_FILE)
452 ifeq ($$(wildcard $$($1_TARGET)),)
453 $(ECHO) 'Creating $$($1_BASENAME) from $$(words $$(filter-out %.vardeps, $$?)) file(s)'
454 else
455 $(ECHO) 'Updating $$($1_BASENAME) from $$(words $$(filter-out %.vardeps, $$?)) file(s)'
456 endif
457 $(TOUCH) $$@
458
459 # On windows we need to create a resource file
460 ifeq ($(OPENJDK_TARGET_OS), windows)
461 ifneq (,$$($1_VERSIONINFO_RESOURCE))
462 $1_RES:=$$($1_OBJECT_DIR)/$$($1_BASENAME).res
463 $1_RES_DEP:=$$($1_RES).d
464 -include $$($1_RES_DEP)
465
466 $1_RES_VARDEPS := $(RC) $$($1_RC_FLAGS)
467 $1_RES_VARDEPS_FILE := $$(call DependOnVariable, $1_RES_VARDEPS, \
468 $$($1_RES).vardeps)
469
470 $$($1_RES): $$($1_VERSIONINFO_RESOURCE) $$($1_RES_VARDEPS_FILE)
471 $(ECHO) $(LOG_INFO) "Compiling resource $$(notdir $$($1_VERSIONINFO_RESOURCE)) (for $$(notdir $$($1_TARGET)))"
472 $(RC) $$($1_RC_FLAGS) $(CC_OUT_OPTION)$$@ $$($1_VERSIONINFO_RESOURCE)
473 # Windows RC compiler does not support -showIncludes, so we mis-use CL for this.
474 $(CC) $$($1_RC_FLAGS) -showIncludes -nologo -TC \
475 $(CC_OUT_OPTION)$$($1_RES_DEP).obj $$($1_VERSIONINFO_RESOURCE) > $$($1_RES_DEP).raw 2>&1 || exit 0
476 ($(ECHO) $$($1_RES): \\ \
477 && $(SED) $(WINDOWS_SHOWINCLUDE_SED_PATTERN) $$($1_RES_DEP).raw) > $$($1_RES_DEP)
478 endif
479 ifneq (,$$($1_MANIFEST))
480 $1_GEN_MANIFEST:=$$($1_OBJECT_DIR)/$$($1_PROGRAM).manifest
481 IMVERSIONVALUE:=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VERSION).$(COOKED_BUILD_NUMBER)
482 $1_MANIFEST_VARDEPS_FILE := $$(call DependOnVariable, IMVERSIONVALUE, \
483 $$($1_GEN_MANIFEST).vardeps)
484 $$($1_GEN_MANIFEST): $$($1_MANIFEST) $$($1_MANIFEST_VARDEPS_FILE)
485 $(SED) 's%IMVERSION%$$(IMVERSIONVALUE)%g;s%PROGRAM%$$($1_PROGRAM)%g' $$< > $$@
486 endif
487 endif
488
489 # mapfile doesnt seem to be implemented on macosx (yet??)
490 ifneq ($(OPENJDK_TARGET_OS),macosx)
491 ifneq ($(OPENJDK_TARGET_OS),windows)
492 $1_REAL_MAPFILE:=$$($1_MAPFILE)
493 ifneq (,$$($1_REORDER))
494 $1_REAL_MAPFILE:=$$($1_OBJECT_DIR)/mapfile
495
496 $$($1_REAL_MAPFILE) : $$($1_MAPFILE) $$($1_REORDER)
497 $$(MKDIR) -p $$(@D)
|
36
37 # Extensions of files handled by this macro.
38 NATIVE_SOURCE_EXTENSIONS := %.s %.c %.cpp %.m %.mm
39
40 # Replaces native source extensions with the object file extension in a string.
41 # Param 1: the string containing source file names with extensions
42 # The surrounding strip is needed to keep additional whitespace out
43 define replace_with_obj_extension
44 $(strip \
45 $(foreach extension, $(NATIVE_SOURCE_EXTENSIONS), \
46 $(patsubst $(extension),%$(OBJ_SUFFIX),$(filter $(extension),$1))) \
47 )
48 endef
49
50 ifeq ($(OPENJDK_BUILD_OS_ENV), windows.cygwin)
51 UNIX_PATH_PREFIX := /cygdrive
52 else ifeq ($(OPENJDK_BUILD_OS_ENV), windows.msys)
53 UNIX_PATH_PREFIX :=
54 endif
55
56 # This pattern is used to transform the output of the microsoft CL compiler
57 # into a make syntax dependency file (.d)
58 WINDOWS_SHOWINCLUDE_SED_PATTERN := \
59 -e '/^Note: including file:/!d' \
60 -e 's|Note: including file: *||' \
61 -e 's|\\|/|g' \
62 -e 's|^\([a-zA-Z]\):|$(UNIX_PATH_PREFIX)/\1|g' \
63 -e '/$(subst /,\/,$(TOPDIR))/!d' \
64 -e 's|$$$$| \\|g' \
65 #
66
67 # This pattern is used to transform a dependency file (.d) to a list
68 # of make targets for dependent files (.d.targets)
69 DEPENDENCY_TARGET_SED_PATTERN := \
70 -e 's/\#.*//' \
71 -e 's/^[^:]*: *//' \
72 -e 's/ *\\$$$$//' \
73 -e '/^$$$$/ d' \
74 -e 's/$$$$/ :/' \
75 #
76
77 define add_native_source
78 # param 1 = BUILD_MYPACKAGE
79 # parma 2 = the source file name (..../alfa.c or .../beta.cpp)
80 # param 3 = the bin dir that stores all .o (.obj) and .d files.
81 # param 4 = the c flags to the compiler
82 # param 5 = the c compiler
83 # param 6 = the c++ flags to the compiler
84 # param 7 = the c++ compiler
85 # param 8 = the objc compiler
86 # param 9 = the flags to the assembler
87
88 ifneq (,$$(filter %.c,$2))
89 # Compile as a C file
90 $1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) -DTHIS_FILE='"$$(<F)"' -c
91 $1_$2_COMP=$5
92 $1_$2_DEP_FLAG:=$(C_FLAG_DEPS)
93 else ifneq (,$$(filter %.m,$2))
94 # Compile as a objective-c file
95 $1_$2_FLAGS=-x objective-c $4 $$($1_$(notdir $2)_CFLAGS) -DTHIS_FILE='"$$(<F)"' -c
96 $1_$2_COMP=$8
100 $1_$2_FLAGS=$9 -DTHIS_FILE='"$$(<F)"'
101 $1_$2_COMP=$(AS)
102 $1_$2_DEP_FLAG:=
103 else ifneq (,$$(filter %.cpp,$2)$$(filter %.mm,$2))
104 # Compile as a C++ file
105 $1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS) -DTHIS_FILE='"$$(<F)"' -c
106 $1_$2_COMP=$7
107 $1_$2_DEP_FLAG:=$(CXX_FLAG_DEPS)
108 else
109 $$(error Internal error in NativeCompilation.gmk: no compiler for file $2)
110 endif
111 # Generate the .o (.obj) file name and place it in the bin dir.
112 $1_$2_OBJ := $3/$$(call replace_with_obj_extension, $$(notdir $2))
113 # Only continue if this object file hasn't been processed already. This lets the first found
114 # source file override any other with the same name.
115 ifeq (,$$(findstring $$($1_$2_OBJ),$$($1_ALL_OBJS)))
116 $1_ALL_OBJS+=$$($1_$2_OBJ)
117 ifeq (,$$(filter %.s,$2))
118 # And this is the dependency file for this obj file.
119 $1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ))
120 # The dependency target file lists all dependencies as empty targets
121 # to avoid make error "No rule to make target" for removed files
122 $1_$2_DEP_TARGETS:=$$(patsubst %$(OBJ_SUFFIX),%.d.targets,$$($1_$2_OBJ))
123
124 # Include previously generated dependency information. (if it exists)
125 -include $$($1_$2_DEP)
126 -include $$($1_$2_DEP_TARGETS)
127
128 ifeq ($(TOOLCHAIN_TYPE), microsoft)
129 $1_$2_DEBUG_OUT_FLAGS:=-Fd$$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)) \
130 -Fm$$(patsubst %$(OBJ_SUFFIX),%.map,$$($1_$2_OBJ))
131 endif
132 endif
133
134 $$($1_$2_OBJ) : $2 $$($1_COMPILE_VARDEPS_FILE) | $$($1_BUILD_INFO)
135 $(ECHO) $(LOG_INFO) "Compiling $$(notdir $2) (for $$(notdir $$($1_TARGET)))"
136 ifneq ($(TOOLCHAIN_TYPE), microsoft)
137 # The Solaris studio compiler doesn't output the full path to the object file in the
138 # generated deps files. Fixing it with sed. If compiling assembly, don't try this.
139 ifeq ($(TOOLCHAIN_TYPE)$$(filter %.s,$2), solstudio)
140 $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP).tmp $(CC_OUT_OPTION)$$($1_$2_OBJ) $2
141 $(SED) 's|^$$(@F):|$$@:|' $$($1_$2_DEP).tmp > $$($1_$2_DEP)
142 else
143 $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2
144 endif
145 endif
146 # The Visual Studio compiler lacks a feature for generating make dependencies, but by
147 # setting -showIncludes, all included files are printed. These are filtered out and
148 # parsed into make dependences.
149 ifeq ($(TOOLCHAIN_TYPE), microsoft)
150 ($$($1_$2_COMP) $$($1_$2_FLAGS) -showIncludes $$($1_$2_DEBUG_OUT_FLAGS) \
151 $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 ; echo $$$$? > $$($1_$2_DEP).exitvalue) \
152 | $(TEE) $$($1_$2_DEP).raw | $(GREP) -v -e "^Note: including file:" \
153 -e "^$(notdir $2)$$$$" || test "$$$$?" = "1" ; \
154 exit `cat $$($1_$2_DEP).exitvalue`
155 $(RM) $$($1_$2_DEP).exitvalue
156 ($(ECHO) $$@: \\ \
157 && $(SED) $(WINDOWS_SHOWINCLUDE_SED_PATTERN) $$($1_$2_DEP).raw) > $$($1_$2_DEP)
158 endif
159 # Create a dependency target file from the dependency file.
160 # Solution suggested by http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/
161 ifneq ($$($1_$2_DEP),)
162 $(SED) $(DEPENDENCY_TARGET_SED_PATTERN) $$($1_$2_DEP) > $$($1_$2_DEP_TARGETS)
163 endif
164 endif
165 endef
166
167 # Setup make rules for creating a native binary (a shared library or an
168 # executable).
169 #
170 # Parameter 1 is the name of the rule. This name is used as variable prefix,
171 # and the targets generated are listed in a variable by that name.
172 #
173 # Remaining parameters are named arguments. These include:
174 # SRC one or more directory roots to scan for C/C++ files.
175 # LANG C or C++
176 # CFLAGS the compiler flags to be used, used both for C and C++.
177 # CXXFLAGS the compiler flags to be used for c++, if set overrides CFLAGS.
178 # LDFLAGS the linker flags to be used, used both for C and C++.
179 # LDFLAGS_SUFFIX the linker flags to be added last on the commandline
180 # typically the libraries linked to.
181 # ARFLAGS the archiver flags to be used
182 # OBJECT_DIR the directory where we store the object files
183 # LIBRARY the resulting library file
457 $$($1_CC) $$($1_CXX) $$($1_OBJC) $$($1_ASFLAGS) \
458 $$(foreach s, $$($1_SRCS), \
459 $$($1_$$(notdir $$s)_CFLAGS) $$($1_$$(notdir $$s)_CXXFLAGS))
460 $1_COMPILE_VARDEPS_FILE := $$(call DependOnVariable, $1_COMPILE_VARDEPS, \
461 $$($1_OBJECT_DIR)/$$($1_NOSUFFIX).comp.vardeps)
462
463 # Now call add_native_source for each source file we are going to compile.
464 $$(foreach p,$$($1_SRCS), \
465 $$(eval $$(call add_native_source,$1,$$p,$$($1_OBJECT_DIR), \
466 $$($1_CFLAGS) $$($1_EXTRA_CFLAGS) $(SYSROOT_CFLAGS), \
467 $$($1_CC), \
468 $$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS) $(SYSROOT_CFLAGS), \
469 $$($1_CXX),$$($1_OBJC),$$($1_ASFLAGS))))
470
471 # Setup rule for printing progress info when compiling source files.
472 # This is a rough heuristic and may not always print accurate information.
473 $$($1_BUILD_INFO): $$($1_SRCS) $$($1_COMPILE_VARDEPS_FILE)
474 ifeq ($$(wildcard $$($1_TARGET)),)
475 $(ECHO) 'Creating $$($1_BASENAME) from $$(words $$(filter-out %.vardeps, $$?)) file(s)'
476 else
477 $(ECHO) $$(strip 'Updating $$($1_BASENAME)' \
478 $$(if $$(filter-out %.vardeps, $$?), \
479 'from $$(words $$(filter-out %.vardeps, $$?)) file(s)') \
480 $$(if $$(filter %.vardeps, $$?), 'due to makefile changes'))
481 endif
482 $(TOUCH) $$@
483
484 # On windows we need to create a resource file
485 ifeq ($(OPENJDK_TARGET_OS), windows)
486 ifneq (,$$($1_VERSIONINFO_RESOURCE))
487 $1_RES:=$$($1_OBJECT_DIR)/$$($1_BASENAME).res
488 $1_RES_DEP:=$$($1_RES).d
489 $1_RES_DEP_TARGETS:=$$($1_RES).d.targets
490 -include $$($1_RES_DEP)
491 -include $$($1_RES_DEP_TARGETS)
492
493 $1_RES_VARDEPS := $(RC) $$($1_RC_FLAGS)
494 $1_RES_VARDEPS_FILE := $$(call DependOnVariable, $1_RES_VARDEPS, \
495 $$($1_RES).vardeps)
496
497 $$($1_RES): $$($1_VERSIONINFO_RESOURCE) $$($1_RES_VARDEPS_FILE)
498 $(ECHO) $(LOG_INFO) "Compiling resource $$(notdir $$($1_VERSIONINFO_RESOURCE)) (for $$(notdir $$($1_TARGET)))"
499 $(RC) $$($1_RC_FLAGS) $(CC_OUT_OPTION)$$@ $$($1_VERSIONINFO_RESOURCE)
500 # Windows RC compiler does not support -showIncludes, so we mis-use CL for this.
501 $(CC) $$($1_RC_FLAGS) -showIncludes -nologo -TC \
502 $(CC_OUT_OPTION)$$($1_RES_DEP).obj $$($1_VERSIONINFO_RESOURCE) > $$($1_RES_DEP).raw 2>&1 || exit 0
503 ($(ECHO) $$($1_RES): \\ \
504 && $(SED) $(WINDOWS_SHOWINCLUDE_SED_PATTERN) $$($1_RES_DEP).raw) > $$($1_RES_DEP)
505 $(SED) $(DEPENDENCY_TARGET_SED_PATTERN) $$($1_RES_DEP) > $$($1_RES_DEP_TARGETS)
506 endif
507 ifneq (,$$($1_MANIFEST))
508 $1_GEN_MANIFEST:=$$($1_OBJECT_DIR)/$$($1_PROGRAM).manifest
509 IMVERSIONVALUE:=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VERSION).$(COOKED_BUILD_NUMBER)
510 $1_MANIFEST_VARDEPS_FILE := $$(call DependOnVariable, IMVERSIONVALUE, \
511 $$($1_GEN_MANIFEST).vardeps)
512 $$($1_GEN_MANIFEST): $$($1_MANIFEST) $$($1_MANIFEST_VARDEPS_FILE)
513 $(SED) 's%IMVERSION%$$(IMVERSIONVALUE)%g;s%PROGRAM%$$($1_PROGRAM)%g' $$< > $$@
514 endif
515 endif
516
517 # mapfile doesnt seem to be implemented on macosx (yet??)
518 ifneq ($(OPENJDK_TARGET_OS),macosx)
519 ifneq ($(OPENJDK_TARGET_OS),windows)
520 $1_REAL_MAPFILE:=$$($1_MAPFILE)
521 ifneq (,$$($1_REORDER))
522 $1_REAL_MAPFILE:=$$($1_OBJECT_DIR)/mapfile
523
524 $$($1_REAL_MAPFILE) : $$($1_MAPFILE) $$($1_REORDER)
525 $$(MKDIR) -p $$(@D)
|