1.1 --- a/common/makefiles/NativeCompilation.gmk Mon Jun 25 21:37:09 2012 -0700 1.2 +++ b/common/makefiles/NativeCompilation.gmk Tue Jul 03 16:11:12 2012 -0700 1.3 @@ -51,47 +51,55 @@ 1.4 # param 5 = the c compiler 1.5 # param 6 = the c++ flags to the compiler 1.6 # param 7 = the c++ compiler 1.7 + # param 8 = the flags to the assembler 1.8 1.9 ifneq (,$$(filter %.c,$2)) 1.10 # Compile as a C file 1.11 - $1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) 1.12 + $1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) -c 1.13 $1_$2_COMP=$5 1.14 $1_$2_DEP_FLAG:=$(C_FLAG_DEPS) 1.15 else ifneq (,$$(filter %.m,$2)) 1.16 # Compile as a objective-c file 1.17 - $1_$2_FLAGS=-x objective-c $4 $$($1_$(notdir $2)_CFLAGS) 1.18 + $1_$2_FLAGS=-x objective-c $4 $$($1_$(notdir $2)_CFLAGS) -c 1.19 $1_$2_COMP=$5 1.20 $1_$2_DEP_FLAG:=$(C_FLAG_DEPS) 1.21 + else ifneq (,$$(filter %.s,$2)) 1.22 + # Compile as assembler file 1.23 + $1_$2_FLAGS=$8 1.24 + $1_$2_COMP=$(AS) 1.25 + $1_$2_DEP_FLAG:= 1.26 else 1.27 # Compile as a C++ file 1.28 - $1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS) 1.29 + $1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS) -c 1.30 $1_$2_COMP=$7 1.31 $1_$2_DEP_FLAG:=$(CXX_FLAG_DEPS) 1.32 endif 1.33 # Generate the .o (.obj) file name and place it in the bin dir. 1.34 - $1_$2_OBJ:=$3/$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(notdir $2)))) 1.35 + $1_$2_OBJ:=$3/$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(patsubst %.s,%$(OBJ_SUFFIX),$$(notdir $2))))) 1.36 # Only continue if this object file hasn't been processed already. This lets the first found 1.37 # source file override any other with the same name. 1.38 ifeq (,$$(findstring $$($1_$2_OBJ),$$($1_OBJS_SO_FAR))) 1.39 $1_OBJS_SO_FAR+=$$($1_$2_OBJ) 1.40 - # And this is the dependency file for this obj file. 1.41 - $1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ)) 1.42 - # Include previously generated dependency information. (if it exists) 1.43 - -include $$($1_$2_DEP) 1.44 + ifeq (,$$(filter %.s,$2)) 1.45 + # And this is the dependency file for this obj file. 1.46 + $1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ)) 1.47 + # Include previously generated dependency information. (if it exists) 1.48 + -include $$($1_$2_DEP) 1.49 1.50 - ifeq ($(COMPILER_TYPE),CL) 1.51 - $1_$2_DEBUG_OUT_FLAGS:=-Fd$$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)) \ 1.52 - -Fm$$(patsubst %$(OBJ_SUFFIX),%.map,$$($1_$2_OBJ)) 1.53 + ifeq ($(COMPILER_TYPE),CL) 1.54 + $1_$2_DEBUG_OUT_FLAGS:=-Fd$$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)) \ 1.55 + -Fm$$(patsubst %$(OBJ_SUFFIX),%.map,$$($1_$2_OBJ)) 1.56 + endif 1.57 endif 1.58 1.59 $$($1_$2_OBJ) : $2 1.60 ifeq ($(COMPILER_TYPE),CC) 1.61 $$(call COMPILING_MSG,$$(notdir $2)) 1.62 - $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 1.63 + $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 1.64 endif 1.65 ifeq ($(COMPILER_TYPE),CL) 1.66 $$(call COMPILING_MSG,$$(notdir $2)) 1.67 - $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEBUG_OUT_FLAGS) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 1.68 + $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEBUG_OUT_FLAGS) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 1.69 endif 1.70 endif 1.71 endef 1.72 @@ -107,9 +115,9 @@ 1.73 # LDFLAGS_SUFFIX the linker flags to be added last on the commandline 1.74 # typically the libraries linked to. 1.75 # ARFLAGS the archiver flags to be used 1.76 - # BIN the directory where we store the object files 1.77 - # LIB the resulting library file 1.78 - # EXE the resulting exec file 1.79 + # OBJECT_DIR the directory where we store the object files 1.80 + # LIBRARY the resulting library file 1.81 + # PROGRAM the resulting exec file 1.82 # INCLUDES only pick source from these directories 1.83 # EXCLUDES do not pick source from these directories 1.84 # INCLUDE_FILES only compile exactly these files! 1.85 @@ -118,6 +126,9 @@ 1.86 # RC_FLAGS flags for RC. 1.87 # MAPFILE mapfile 1.88 # REORDER reorder file 1.89 + # DEBUG_SYMBOLS add debug symbols (if configured on) 1.90 + # CC the compiler to use, default is $(CC) 1.91 + # LDEXE the linker to use for linking executables, default is $(LDEXE) 1.92 $(if $2,$1_$(strip $2)) 1.93 $(if $3,$1_$(strip $3)) 1.94 $(if $4,$1_$(strip $4)) 1.95 @@ -137,13 +148,94 @@ 1.96 $(if $(18),$1_$(strip $(18))) 1.97 $(if $(19),$1_$(strip $(19))) 1.98 $(if $(20),$1_$(strip $(20))) 1.99 + $(if $(21),$1_$(strip $(21))) 1.100 + $(if $(22),$(error Internal makefile error: Too many arguments to SetupNativeCompilation, please update NativeCompilation.gmk)) 1.101 + 1.102 + ifneq (,$$($1_BIN)) 1.103 + $$(error BIN has been replaced with OBJECT_DIR) 1.104 + endif 1.105 + 1.106 + ifneq (,$$($1_LIB)) 1.107 + $$(error LIB has been replaced with LIBRARY) 1.108 + endif 1.109 + 1.110 + ifneq (,$$($1_EXE)) 1.111 + $$(error EXE has been replaced with PROGRAM) 1.112 + endif 1.113 + 1.114 + ifneq (,$$($1_LIBRARY)) 1.115 + ifeq (,$$($1_OUTPUT_DIR)) 1.116 + $$(error LIBRARY requires OUTPUT_DIR) 1.117 + endif 1.118 + 1.119 + ifneq ($$($1_LIBRARY),$(basename $$($1_LIBRARY))) 1.120 + $$(error directory of LIBRARY should be specified using OUTPUT_DIR) 1.121 + endif 1.122 + 1.123 + ifneq (,$(findstring $(SHARED_LIBRARY_SUFFIX),$$($1_LIBRARY))) 1.124 + $$(error LIBRARY should be specified without SHARED_LIBRARY_SUFFIX: $(SHARED_LIBRARY_SUFFIX)) 1.125 + endif 1.126 + 1.127 + ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_LIBRARY))) 1.128 + $$(error LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX)) 1.129 + endif 1.130 + 1.131 + $1_BASENAME:=$(LIBRARY_PREFIX)$$($1_LIBRARY)$(SHARED_LIBRARY_SUFFIX) 1.132 + $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) 1.133 + 1.134 + endif 1.135 + 1.136 + ifneq (,$$($1_STATIC_LIBRARY)) 1.137 + ifeq (,$$($1_OUTPUT_DIR)) 1.138 + $$(error STATIC_LIBRARY requires OUTPUT_DIR) 1.139 + endif 1.140 + 1.141 + ifneq ($$($1_STATIC_LIBRARY),$(basename $$($1_STATIC_LIBRARY))) 1.142 + $$(error directory of STATIC_LIBRARY should be specified using OUTPUT_DIR) 1.143 + endif 1.144 + 1.145 + ifneq (,$(findstring $(STATIC_LIBRARY_SUFFIX),$$($1_STATIC_LIBRARY))) 1.146 + $$(error STATIC_LIBRARY should be specified without STATIC_LIBRARY_SUFFIX: $(STATIC_LIBRARY_SUFFIX)) 1.147 + endif 1.148 + 1.149 + ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_STATIC_LIBRARY))) 1.150 + $$(error STATIC_LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX)) 1.151 + endif 1.152 + 1.153 + $1_BASENAME:=$(LIBRARY_PREFIX)$$($1_STATIC_LIBRARY)$(STATIC_LIBRARY_SUFFIX) 1.154 + $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) 1.155 + endif 1.156 + 1.157 + ifneq (,$$($1_PROGRAM)) 1.158 + ifeq (,$$($1_OUTPUT_DIR)) 1.159 + $$(error PROGRAM requires OUTPUT_DIR) 1.160 + endif 1.161 + 1.162 + ifneq ($$($1_PROGRAM),$(basename $$($1_PROGRAM))) 1.163 + $$(error directory of PROGRAM should be specified using OUTPUT_DIR) 1.164 + endif 1.165 + 1.166 + ifneq (,$(findstring $(EXE_SUFFIX),$$($1_PROGRAM))) 1.167 + $$(error PROGRAM should be specified without EXE_SUFFIX: $(EXE_SUFFIX)) 1.168 + endif 1.169 + 1.170 + $1_BASENAME:=$$($1_PROGRAM)$(EXE_SUFFIX) 1.171 + $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) 1.172 + 1.173 + endif 1.174 + 1.175 + ifeq (,$$($1_TARGET)) 1.176 + $$(error Neither PROGRAM, LIBRARY nor STATIC_LIBRARY has been specified for SetupNativeCompilation) 1.177 + endif 1.178 1.179 ifeq (,$$($1_LANG)) 1.180 $$(error You have to specify LANG for native compilation $1) 1.181 endif 1.182 ifeq (C,$$($1_LANG)) 1.183 + ifeq ($$($1_LDEXE),) 1.184 + $1_LDEXE:=$(LDEXE) 1.185 + endif 1.186 $1_LD:=$(LD) 1.187 - $1_LDEXE:=$(LDEXE) 1.188 else 1.189 ifeq (C++,$$($1_LANG)) 1.190 $1_LD:=$(LDCXX) 1.191 @@ -153,8 +245,12 @@ 1.192 endif 1.193 endif 1.194 1.195 + ifeq ($$($1_CC),) 1.196 + $1_CC:=$(CC) 1.197 + endif 1.198 + 1.199 # Make sure the dirs exist. 1.200 - $$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN) $$(dir $$($1_LIB)) $$(dir $$($1_EXE))) 1.201 + $$(shell $(MKDIR) -p $$($1_SRC) $$($1_OBJECT_DIR) $$($1_OUTPUT_DIR)) 1.202 # Find all files in the source trees. Sort to remove duplicates. 1.203 $1_ALL_SRCS := $$(sort $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i -type f))) 1.204 # Extract the C/C++ files. 1.205 @@ -163,7 +259,7 @@ 1.206 ifneq ($$($1_EXCLUDE_FILES),) 1.207 $1_EXCLUDE_FILES:=$$(addprefix %,$$($1_EXCLUDE_FILES)) 1.208 endif 1.209 - $1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES),$$(filter %.c %.cpp %.m,$$($1_ALL_SRCS))) 1.210 + $1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES),$$(filter %.s %.c %.cpp %.m,$$($1_ALL_SRCS))) 1.211 ifneq (,$$(strip $$($1_INCLUDE_FILES))) 1.212 $1_SRCS := $$(filter $$($1_INCLUDE_FILES),$$($1_SRCS)) 1.213 endif 1.214 @@ -171,7 +267,7 @@ 1.215 $$(error No sources found for $1 when looking inside the dirs $$($1_SRC)) 1.216 endif 1.217 # There can be only a single bin dir root, no need to foreach over the roots. 1.218 - $1_BINS := $$(wildcard $$($1_BIN)/*$(OBJ_SUFFIX)) 1.219 + $1_BINS := $$(wildcard $$($1_OBJECT_DIR)/*$(OBJ_SUFFIX)) 1.220 # Now we have a list of all c/c++ files to compile: $$($1_SRCS) 1.221 # and we have a list of all existing object files: $$($1_BINS) 1.222 1.223 @@ -187,37 +283,36 @@ 1.224 1.225 # Calculate the expected output from compiling the sources (sort to remove duplicates. Also provides 1.226 # a reproducable order on the input files to the linker). 1.227 - $1_EXPECTED_OBJS:=$$(sort $$(addprefix $$($1_BIN)/,$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(notdir $$($1_SRCS))))))) 1.228 - $1 := $$($1_EXPECTED_OBJS) 1.229 + $1_EXPECTED_OBJS:=$$(sort $$(addprefix $$($1_OBJECT_DIR)/,$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(patsubst %.s,%$(OBJ_SUFFIX),$$(notdir $$($1_SRCS)))))))) 1.230 # Are there too many object files on disk? Perhaps because some source file was removed? 1.231 $1_SUPERFLOUS_OBJS:=$$(sort $$(filter-out $$($1_EXPECTED_OBJS),$$($1_BINS))) 1.232 # Clean out the superfluous object files. 1.233 $$(shell $(RM) -f $$($1_SUPERFLUOUS_OBJS)) 1.234 1.235 - # Pickup extra HOST_OS_API and/or PLATFORM dependent variables for CFLAGS. 1.236 - $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(HOST_OS_API)) $$($1_CFLAGS_$(PLATFORM)) 1.237 + # Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables for CFLAGS. 1.238 + $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS)) 1.239 ifneq ($(DEBUG_LEVEL),release) 1.240 # Pickup extra debug dependent variables for CFLAGS 1.241 $1_EXTRA_CFLAGS+=$$($1_CFLAGS_debug) 1.242 - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(HOST_OS_API)_debug) 1.243 - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(PLATFORM)_debug) 1.244 + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)_debug) 1.245 + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_debug) 1.246 else 1.247 $1_EXTRA_CFLAGS+=$$($1_CFLAGS_release) 1.248 - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(HOST_OS_API)_release) 1.249 - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(PLATFORM)_release) 1.250 + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)_release) 1.251 + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_release) 1.252 endif 1.253 1.254 - # Pickup extra HOST_OS_API and/or PLATFORM dependent variables for CXXFLAGS. 1.255 - $1_EXTRA_CXXFLAGS:=$$($1_CXXFLAGS_$(HOST_OS_API)) $$($1_CXXFLAGS_$(PLATFORM)) 1.256 + # Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables for CXXFLAGS. 1.257 + $1_EXTRA_CXXFLAGS:=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)) 1.258 ifneq ($(DEBUG_LEVEL),release) 1.259 # Pickup extra debug dependent variables for CXXFLAGS 1.260 $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_debug) 1.261 - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(HOST_OS_API)_debug) 1.262 - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(PLATFORM)_debug) 1.263 + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)_debug) 1.264 + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_debug) 1.265 else 1.266 $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_release) 1.267 - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(HOST_OS_API)_release) 1.268 - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(PLATFORM)_release) 1.269 + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)_release) 1.270 + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_release) 1.271 endif 1.272 1.273 ifeq ($$($1_CXXFLAGS),) 1.274 @@ -232,33 +327,62 @@ 1.275 $1_EXTRA_CXXFLAGS += $$(CXX_FLAG_REORDER) 1.276 endif 1.277 1.278 + ifneq (no, $(ENABLE_DEBUG_SYMBOLS)) 1.279 + ifneq ($(OPENJDK_TARGET_OS), solaris) 1.280 +# <weird code /> 1.281 +# There is very weird code in Defs-solaris.gmk that first sets variables as decribed below 1.282 +# and then a couple of hundreds of line below resets them... 1.283 +# this feels like a sure bug...but before this is confirmed, mimic this behaviour 1.284 +# (note: skip indenting this as it will surely be removed anyway) 1.285 +# <weird code /> 1.286 + 1.287 + ifneq (,$$($1_DEBUG_SYMBOLS)) 1.288 + $1_OPTIMIZATION := LOW 1.289 + $1_EXTRA_CFLAGS += $(CFLAGS_DEBUG_SYMBOLS) 1.290 + $1_EXTRA_CXXFLAGS += $(CXXFLAGS_DEBUG_SYMBOLS) 1.291 + endif 1.292 + 1.293 +# <weird code /> 1.294 + endif 1.295 +# <weird code /> 1.296 + endif 1.297 + 1.298 + ifeq (NONE, $$($1_OPTIMIZATION)) 1.299 + $1_EXTRA_CFLAGS += $$(C_O_FLAG_NONE) 1.300 + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_NONE) 1.301 + else ifeq (LOW, $$($1_OPTIMIZATION)) 1.302 + $1_EXTRA_CFLAGS += $$(C_O_FLAG_NORM) 1.303 + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_NORM) 1.304 + else ifeq (HIGH, $$($1_OPTIMIZATION)) 1.305 + $1_EXTRA_CFLAGS += $$(C_O_FLAG_HI) 1.306 + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_HI) 1.307 + else ifeq (HIGHEST, $$($1_OPTIMIZATION)) 1.308 + $1_EXTRA_CFLAGS += $$(C_O_FLAG_HIGHEST) 1.309 + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_HIGHEST) 1.310 + else ifneq (, $$($1_OPTIMIZATION)) 1.311 + $$(error Unknown value for OPTIMIZATION: $$($1_OPTIMIZATION)) 1.312 + endif 1.313 + 1.314 # Now create a list of the packages that are about to compile. Used when sending source 1.315 # in a batch to the compiler. 1.316 - $$(shell $(RM) $$($1_BIN)/_the.list_of_sources) 1.317 - $$(eval $$(call ListPathsSafelyNow,$1_SRCS,\n, >> $$($1_BIN)/_the.list_of_sources)) 1.318 + $$(shell $(RM) $$($1_OBJECT_DIR)/_the.list_of_sources) 1.319 + $$(eval $$(call ListPathsSafelyNow,$1_SRCS,\n, >> $$($1_OBJECT_DIR)/_the.list_of_sources)) 1.320 1.321 # Now call add_native_source for each source file we are going to compile. 1.322 $$(foreach p,$$($1_SRCS),\ 1.323 - $$(eval $$(call add_native_source,$1,$$p,$$($1_BIN),\ 1.324 - $$($1_CFLAGS) $$($1_EXTRA_CFLAGS),$(CC),\ 1.325 - $$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS),$(CXX)))) 1.326 + $$(eval $$(call add_native_source,$1,$$p,$$($1_OBJECT_DIR),\ 1.327 + $$($1_CFLAGS) $$($1_EXTRA_CFLAGS),$$($1_CC),\ 1.328 + $$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS),$(CXX),$$($1_ASFLAGS)))) 1.329 1.330 # On windows we need to create a resource file 1.331 - ifeq ($(HOST_OS_API), winapi) 1.332 + ifeq ($(OPENJDK_TARGET_OS_API), winapi) 1.333 ifneq (,$$($1_VERSIONINFO_RESOURCE)) 1.334 - ifneq (,$$($1_LIB)) 1.335 - $1_BASENAME:=$$(basename $$(notdir $$($1_LIB))) 1.336 - endif 1.337 - ifneq (,$$($1_EXE)) 1.338 - $1_BASENAME:=$$(basename $$(notdir $$($1_EXE))) 1.339 - endif 1.340 - $1_RES:=$$($1_BIN)/$$($1_BASENAME).res 1.341 + $1_RES:=$$($1_OBJECT_DIR)/$$($1_BASENAME).res 1.342 $$($1_RES): $$($1_VERSIONINFO_RESOURCE) 1.343 $(RC) $$($1_RC_FLAGS) $(CC_OUT_OPTION)$$@ $$($1_VERSIONINFO_RESOURCE) 1.344 endif 1.345 ifneq (,$$($1_MANIFEST)) 1.346 - $1_PROGRAM:=$$(basename $$(notdir $$($1_EXE))) 1.347 - $1_GEN_MANIFEST:=$$($1_BIN)/$$($1_PROGRAM).manifest 1.348 + $1_GEN_MANIFEST:=$$($1_OBJECT_DIR)/$$($1_PROGRAM).manifest 1.349 IMVERSIONVALUE:=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VERSION).$(COOKED_BUILD_NUMBER) 1.350 $$($1_GEN_MANIFEST): $$($1_MANIFEST) 1.351 $(SED) 's%IMVERSION%$$(IMVERSIONVALUE)%g;s%PROGRAM%$$($1_PROGRAM)%g' $$< > $$@ 1.352 @@ -266,54 +390,182 @@ 1.353 endif 1.354 1.355 # mapfile doesnt seem to be implemented on macosx (yet??) 1.356 - ifneq ($(HOST_OS),macosx) 1.357 - ifneq ($(HOST_OS),windows) 1.358 - $1_REAL_MAPFILE := $$($1_MAPFILE) 1.359 + ifneq ($(OPENJDK_TARGET_CPU),ppc) 1.360 + ifneq ($(OPENJDK_TARGET_CPU),arm) 1.361 + ifneq ($(OPENJDK_TARGET_OS),macosx) 1.362 + ifneq ($(OPENJDK_TARGET_OS),windows) 1.363 + $1_REAL_MAPFILE:=$$($1_MAPFILE) 1.364 ifneq (,$$($1_REORDER)) 1.365 - $1_REAL_MAPFILE := $$($1_BIN)/mapfile 1.366 + $1_REAL_MAPFILE:=$$($1_OBJECT_DIR)/mapfile 1.367 1.368 $$($1_REAL_MAPFILE) : $$($1_MAPFILE) $$($1_REORDER) 1.369 $$(MKDIR) -p $$(@D) 1.370 $$(CP) $$($1_MAPFILE) $$@.tmp 1.371 - $$(SED) -e 's=OUTPUTDIR=$$($1_BIN)=' $$($1_REORDER) >> $$@.tmp 1.372 + $$(SED) -e 's=OUTPUTDIR=$$($1_OBJECT_DIR)=' $$($1_REORDER) >> $$@.tmp 1.373 $$(MV) $$@.tmp $$@ 1.374 endif 1.375 endif 1.376 endif 1.377 - 1.378 - # Pickup extra HOST_OS_API dependent variables (posix or winapi) and 1.379 - # (linux,solaris,windows,bsd) for LDFLAGS and LDFLAGS_SUFFIX 1.380 - $1_EXTRA_LDFLAGS:=$$($1_LDFLAGS_$(HOST_OS_API)) $$($1_LDFLAGS_$(PLATFORM)) 1.381 - $1_EXTRA_LDFLAGS_SUFFIX:=$$($1_LDFLAGS_SUFFIX_$(HOST_OS_API)) $$($1_LDFLAGS_SUFFIX_$(PLATFORM)) 1.382 - ifneq (,$$($1_REAL_MAPFILE)) 1.383 - $1_EXTRA_LDFLAGS += $(call SET_SHARED_LIBRARY_MAPFILE,$$($1_REAL_MAPFILE)) 1.384 + endif 1.385 endif 1.386 1.387 - ifneq (,$$($1_LIB)) 1.388 - ifeq (dynamic,$$(patsubst %$(SHARED_LIBRARY_SUFFIX),dynamic,$$($1_LIB))) 1.389 - # Generating a dynamic library. 1.390 - $1_EXTRA_LDFLAGS+=$$(call SET_SHARED_LIBRARY_NAME,$$(notdir $$($1_LIB))) 1.391 - $$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_REAL_MAPFILE) 1.392 - $$(call LINKING_MSG,$$(notdir $$($1_LIB))) 1.393 - $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(LD_OUT_OPTION)$$($1_LIB) \ 1.394 - $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) 1.395 - else 1.396 - # Generating a static library, ie object file archive. 1.397 - $$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES) 1.398 - $$(call ARCHIVING_MSG,$$(notdir $$($1_LIB))) 1.399 - $(AR) $$($1_AR_FLAGS) $(AR_OUT_OPTION)$$($1_LIB) $$($1_EXPECTED_OBJS) \ 1.400 + # Pickup extra OPENJDK_TARGET_OS_API dependent variables (posix or winapi) and 1.401 + # (linux,solaris,windows,bsd) for LDFLAGS and LDFLAGS_SUFFIX 1.402 + $1_EXTRA_LDFLAGS:=$$($1_LDFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_LDFLAGS_$(OPENJDK_TARGET_OS)) 1.403 + $1_EXTRA_LDFLAGS_SUFFIX:=$$($1_LDFLAGS_SUFFIX_$(OPENJDK_TARGET_OS_API)) $$($1_LDFLAGS_SUFFIX_$(OPENJDK_TARGET_OS)) 1.404 + ifneq (,$$($1_REAL_MAPFILE)) 1.405 + $1_EXTRA_LDFLAGS += $(call SET_SHARED_LIBRARY_MAPFILE,$$($1_REAL_MAPFILE)) 1.406 + endif 1.407 + 1.408 + $1 := $$($1_TARGET) 1.409 + ifneq (,$$($1_LIBRARY)) 1.410 + # Generating a dynamic library. 1.411 + $1_EXTRA_LDFLAGS+=$$(call SET_SHARED_LIBRARY_NAME,$$($1_BASENAME)) 1.412 + ifeq ($(OPENJDK_TARGET_OS), windows) 1.413 + $1_EXTRA_LDFLAGS+="-implib:$$($1_OBJECT_DIR)/$$($1_LIBRARY).lib" 1.414 + endif 1.415 + 1.416 + ifneq (,$$($1_DEBUG_SYMBOLS)) 1.417 + ifeq ($(ENABLE_DEBUG_SYMBOLS), yes) 1.418 + ifeq ($(OPENJDK_TARGET_OS), windows) 1.419 + $1_EXTRA_LDFLAGS+="-pdb:$$($1_OBJECT_DIR)/$$($1_LIBRARY).pdb" \ 1.420 + "-map:$$($1_OBJECT_DIR)/$$($1_LIBRARY).map" 1.421 + endif 1.422 + 1.423 + $$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/% 1.424 + $(CP) $$< $$@ 1.425 + 1.426 + 1.427 + ifeq ($(OPENJDK_TARGET_OS), solaris) 1.428 + # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. 1.429 + # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from 1.430 + # empty section headers until a fixed $(OBJCOPY) is available. 1.431 + # An empty section header has sh_addr == 0 and sh_size == 0. 1.432 + # This problem has only been seen on Solaris X64, but we call this tool 1.433 + # on all Solaris builds just in case. 1.434 + # 1.435 + # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. 1.436 + # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. 1.437 + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) \ 1.438 + $(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK) 1.439 + $(RM) $$@ 1.440 + $(FIX_EMPTY_SEC_HDR_FLAGS) $$< 1.441 + $(OBJCOPY) --only-keep-debug $$< $$@ 1.442 + $(ADD_GNU_DEBUGLINK) $$@ $$< 1.443 + else # not solaris 1.444 + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) 1.445 + $(RM) $$@ 1.446 + $(OBJCOPY) --only-keep-debug $$< $$@ 1.447 + $(OBJCOPY) --add-gnu-debuglink=$$@ $$< 1.448 + endif 1.449 + 1.450 + ifeq ($(ZIP_DEBUGINFO_FILES), 1) 1.451 + $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz 1.452 + 1.453 + ifeq ($(OPENJDK_TARGET_OS), windows) 1.454 + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz : $$($1_TARGET) 1.455 + $(CD) $$($1_OBJECT_DIR) \ 1.456 + && $(ZIP) -q $$@ $$($1_LIBRARY).map $$($1_LIBRARY).pdb 1.457 + else 1.458 + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz : $$($1_TARGET) \ 1.459 + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo 1.460 + $(CD) $$($1_OBJECT_DIR) \ 1.461 + && $(ZIP) -q $$@ $$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo 1.462 + endif 1.463 + else 1.464 + ifeq ($(OPENJDK_TARGET_OS), windows) 1.465 + $1 += $$($1_OUTPUT_DIR)/$$($1_LIBRARY).map \ 1.466 + $$($1_OUTPUT_DIR)/$$($1_LIBRARY).pdb 1.467 + else 1.468 + $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo 1.469 + endif 1.470 + endif 1.471 + endif 1.472 + endif 1.473 + 1.474 + $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_REAL_MAPFILE) 1.475 + $$(call LINKING_MSG,$$($1_BASENAME)) 1.476 + $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(LD_OUT_OPTION)$$@ \ 1.477 + $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) \ 1.478 + $$($1_EXTRA_LDFLAGS_SUFFIX) 1.479 + 1.480 + endif 1.481 + 1.482 + ifneq (,$$($1_STATIC_LIBRARY)) 1.483 + # Generating a static library, ie object file archive. 1.484 + $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) 1.485 + $$(call ARCHIVING_MSG,$$($1_LIBRARY)) 1.486 + $(AR) $$($1_AR_FLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_EXPECTED_OBJS) \ 1.487 $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) 1.488 - endif 1.489 endif 1.490 - ifneq (,$$($1_EXE)) 1.491 + 1.492 + ifneq (,$$($1_PROGRAM)) 1.493 # A executable binary has been specified, setup the target for it. 1.494 - $$($1_EXE) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_GEN_MANIFEST) 1.495 - $$(call LINKING_EXE_MSG,$$(notdir $$($1_EXE))) 1.496 - $$($1_LDEXE) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(EXE_OUT_OPTION)$$($1_EXE) \ 1.497 + ifneq (,$$($1_DEBUG_SYMBOLS)) 1.498 + ifeq ($(ENABLE_DEBUG_SYMBOLS), yes) 1.499 + ifeq ($(OPENJDK_TARGET_OS), windows) 1.500 + $1_EXTRA_LDFLAGS+="-pdb:$$($1_OBJECT_DIR)/$$($1_PROGRAM).pdb" \ 1.501 + "-map:$$($1_OBJECT_DIR)/$$($1_PROGRAM).map" 1.502 + endif 1.503 + 1.504 + $$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/% 1.505 + $(CP) $$< $$@ 1.506 + 1.507 + ifeq ($(OPENJDK_TARGET_OS), solaris) 1.508 + # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. 1.509 + # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from 1.510 + # empty section headers until a fixed $(OBJCOPY) is available. 1.511 + # An empty section header has sh_addr == 0 and sh_size == 0. 1.512 + # This problem has only been seen on Solaris X64, but we call this tool 1.513 + # on all Solaris builds just in case. 1.514 + # 1.515 + # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. 1.516 + # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. 1.517 + $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) \ 1.518 + $(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK) 1.519 + $(RM) $$@ 1.520 + $(FIX_EMPTY_SEC_HDR_FLAGS) $$< 1.521 + $(OBJCOPY) --only-keep-debug $$< $$@ 1.522 + $(ADD_GNU_DEBUGLINK) $$@ $$< 1.523 + else # not solaris 1.524 + $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) 1.525 + $(RM) $$@ 1.526 + $(OBJCOPY) --only-keep-debug $$< $$@ 1.527 + $(OBJCOPY) --add-gnu-debuglink=$$@ $$< 1.528 + endif 1.529 + 1.530 + ifeq ($(ZIP_DEBUGINFO_FILES), 1) 1.531 + $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).diz 1.532 + 1.533 + ifeq ($(OPENJDK_TARGET_OS), windows) 1.534 + $$($1_OBJECT_DIR)/$$($1_PROGRAM).diz : $$($1_TARGET) 1.535 + $(CD) $$($1_OBJECT_DIR) \ 1.536 + && $(ZIP) -q $$@ $$($1_PROGRAM).map $$($1_PROGRAM).pdb 1.537 + else 1.538 + $$($1_OBJECT_DIR)/$$(PROGRAM_PREFIX)$$($1_PROGRAM).diz : $$($1_TARGET) \ 1.539 + $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo 1.540 + $(CD) $$($1_OBJECT_DIR) \ 1.541 + && $(ZIP) -q $$@ $$($1_PROGRAM).debuginfo 1.542 + endif 1.543 + else 1.544 + ifeq ($(OPENJDK_TARGET_OS), windows) 1.545 + $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).map \ 1.546 + $$($1_OUTPUT_DIR)/$$($1_PROGRAM).pdb 1.547 + else 1.548 + $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).debuginfo 1.549 + endif 1.550 + endif 1.551 + endif 1.552 + endif 1.553 + 1.554 + $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_GEN_MANIFEST) 1.555 + $$(call LINKING_EXE_MSG,$$($1_BASENAME)) 1.556 + $$($1_LDEXE) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(EXE_OUT_OPTION)$$($1_TARGET) \ 1.557 $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) \ 1.558 $$($1_EXTRA_LDFLAGS_SUFFIX) 1.559 ifneq (,$$($1_GEN_MANIFEST)) 1.560 $(MT) -nologo /manifest $$($1_GEN_MANIFEST) /outputresource:$$@;#1 1.561 endif 1.562 + 1.563 endif 1.564 endef