1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/make/aix/makefiles/adlc.make Fri Sep 06 20:08:29 2013 +0200 1.3 @@ -0,0 +1,233 @@ 1.4 +# 1.5 +# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. 1.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1.7 +# 1.8 +# This code is free software; you can redistribute it and/or modify it 1.9 +# under the terms of the GNU General Public License version 2 only, as 1.10 +# published by the Free Software Foundation. 1.11 +# 1.12 +# This code is distributed in the hope that it will be useful, but WITHOUT 1.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1.14 +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1.15 +# version 2 for more details (a copy is included in the LICENSE file that 1.16 +# accompanied this code). 1.17 +# 1.18 +# You should have received a copy of the GNU General Public License version 1.19 +# 2 along with this work; if not, write to the Free Software Foundation, 1.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 1.21 +# 1.22 +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 1.23 +# or visit www.oracle.com if you need additional information or have any 1.24 +# questions. 1.25 +# 1.26 +# 1.27 + 1.28 +# This makefile (adlc.make) is included from the adlc.make in the 1.29 +# build directories. 1.30 +# It knows how to compile, link, and run the adlc. 1.31 + 1.32 +include $(GAMMADIR)/make/$(Platform_os_family)/makefiles/rules.make 1.33 + 1.34 +# ######################################################################### 1.35 + 1.36 +# OUTDIR must be the same as AD_Dir = $(GENERATED)/adfiles in top.make: 1.37 +GENERATED = ../generated 1.38 +OUTDIR = $(GENERATED)/adfiles 1.39 + 1.40 +ARCH = $(Platform_arch) 1.41 +OS = $(Platform_os_family) 1.42 + 1.43 +SOURCE.AD = $(OUTDIR)/$(OS)_$(Platform_arch_model).ad 1.44 + 1.45 +ifeq ("${Platform_arch_model}", "${Platform_arch}") 1.46 + SOURCES.AD = \ 1.47 + $(call altsrc-replace,$(HS_COMMON_SRC)/cpu/$(ARCH)/vm/$(Platform_arch_model).ad) \ 1.48 + $(call altsrc-replace,$(HS_COMMON_SRC)/os_cpu/$(OS)_$(ARCH)/vm/$(OS)_$(Platform_arch_model).ad) 1.49 +else 1.50 + SOURCES.AD = \ 1.51 + $(call altsrc-replace,$(HS_COMMON_SRC)/cpu/$(ARCH)/vm/$(Platform_arch_model).ad) \ 1.52 + $(call altsrc-replace,$(HS_COMMON_SRC)/cpu/$(ARCH)/vm/$(Platform_arch).ad) \ 1.53 + $(call altsrc-replace,$(HS_COMMON_SRC)/os_cpu/$(OS)_$(ARCH)/vm/$(OS)_$(Platform_arch_model).ad) 1.54 +endif 1.55 + 1.56 +EXEC = $(OUTDIR)/adlc 1.57 + 1.58 +# set VPATH so make knows where to look for source files 1.59 +Src_Dirs_V += $(GAMMADIR)/src/share/vm/adlc 1.60 +VPATH += $(Src_Dirs_V:%=%:) 1.61 + 1.62 +# set INCLUDES for C preprocessor 1.63 +Src_Dirs_I += $(GAMMADIR)/src/share/vm/adlc $(GENERATED) 1.64 +INCLUDES += $(Src_Dirs_I:%=-I%) 1.65 + 1.66 +# set flags for adlc compilation 1.67 +CXXFLAGS = $(SYSDEFS) $(INCLUDES) 1.68 + 1.69 +# Force assertions on. 1.70 +CXXFLAGS += -DASSERT 1.71 + 1.72 +# CFLAGS_WARN holds compiler options to suppress/enable warnings. 1.73 +# Suppress warnings (for now) 1.74 +CFLAGS_WARN = -w 1.75 +CFLAGS += $(CFLAGS_WARN) 1.76 + 1.77 +OBJECTNAMES = \ 1.78 + adlparse.o \ 1.79 + archDesc.o \ 1.80 + arena.o \ 1.81 + dfa.o \ 1.82 + dict2.o \ 1.83 + filebuff.o \ 1.84 + forms.o \ 1.85 + formsopt.o \ 1.86 + formssel.o \ 1.87 + main.o \ 1.88 + adlc-opcodes.o \ 1.89 + output_c.o \ 1.90 + output_h.o \ 1.91 + 1.92 +OBJECTS = $(OBJECTNAMES:%=$(OUTDIR)/%) 1.93 + 1.94 +GENERATEDNAMES = \ 1.95 + ad_$(Platform_arch_model).cpp \ 1.96 + ad_$(Platform_arch_model).hpp \ 1.97 + ad_$(Platform_arch_model)_clone.cpp \ 1.98 + ad_$(Platform_arch_model)_expand.cpp \ 1.99 + ad_$(Platform_arch_model)_format.cpp \ 1.100 + ad_$(Platform_arch_model)_gen.cpp \ 1.101 + ad_$(Platform_arch_model)_misc.cpp \ 1.102 + ad_$(Platform_arch_model)_peephole.cpp \ 1.103 + ad_$(Platform_arch_model)_pipeline.cpp \ 1.104 + adGlobals_$(Platform_arch_model).hpp \ 1.105 + dfa_$(Platform_arch_model).cpp \ 1.106 + 1.107 +GENERATEDFILES = $(GENERATEDNAMES:%=$(OUTDIR)/%) 1.108 + 1.109 +# ######################################################################### 1.110 + 1.111 +all: $(EXEC) 1.112 + 1.113 +$(EXEC) : $(OBJECTS) 1.114 + @echo Making adlc 1.115 + $(QUIETLY) $(HOST.LINK_NOPROF.CXX) -o $(EXEC) $(OBJECTS) 1.116 + 1.117 +# Random dependencies: 1.118 +$(OBJECTS): opcodes.hpp classes.hpp adlc.hpp adlcVMDeps.hpp adlparse.hpp archDesc.hpp arena.hpp dict2.hpp filebuff.hpp forms.hpp formsopt.hpp formssel.hpp 1.119 + 1.120 +# The source files refer to ostream.h, which sparcworks calls iostream.h 1.121 +$(OBJECTS): ostream.h 1.122 + 1.123 +ostream.h : 1.124 + @echo >$@ '#include <iostream.h>' 1.125 + 1.126 +dump: 1.127 + : OUTDIR=$(OUTDIR) 1.128 + : OBJECTS=$(OBJECTS) 1.129 + : products = $(GENERATEDFILES) 1.130 + 1.131 +all: $(GENERATEDFILES) 1.132 + 1.133 +$(GENERATEDFILES): refresh_adfiles 1.134 + 1.135 +# Get a unique temporary directory name, so multiple makes can run in parallel. 1.136 +# Note that product files are updated via "mv", which is atomic. 1.137 +TEMPDIR := $(OUTDIR)/mktmp$(shell echo $$$$) 1.138 + 1.139 +# Debuggable by default 1.140 +CFLAGS += -g 1.141 + 1.142 +# Pass -D flags into ADLC. 1.143 +ADLCFLAGS += $(SYSDEFS) 1.144 + 1.145 +# Note "+="; it is a hook so flags.make can add more flags, like -g or -DFOO. 1.146 +ADLCFLAGS += -q -T 1.147 + 1.148 +# Normally, debugging is done directly on the ad_<arch>*.cpp files. 1.149 +# But -g will put #line directives in those files pointing back to <arch>.ad. 1.150 +# Some builds of gcc 3.2 have a bug that gets tickled by the extra #line directives 1.151 +# so skip it for 3.2 and ealier. 1.152 +ifneq "$(shell expr \( $(CC_VER_MAJOR) \> 3 \) \| \( \( $(CC_VER_MAJOR) = 3 \) \& \( $(CC_VER_MINOR) \>= 3 \) \))" "0" 1.153 +ADLCFLAGS += -g 1.154 +endif 1.155 + 1.156 +ifdef LP64 1.157 +ADLCFLAGS += -D_LP64 1.158 +else 1.159 +ADLCFLAGS += -U_LP64 1.160 +endif 1.161 + 1.162 +# 1.163 +# adlc_updater is a simple sh script, under sccs control. It is 1.164 +# used to selectively update generated adlc files. This should 1.165 +# provide a nice compilation speed improvement. 1.166 +# 1.167 +ADLC_UPDATER_DIRECTORY = $(GAMMADIR)/make/$(OS) 1.168 +ADLC_UPDATER = adlc_updater 1.169 +$(ADLC_UPDATER): $(ADLC_UPDATER_DIRECTORY)/$(ADLC_UPDATER) 1.170 + $(QUIETLY) cp $< $@; chmod +x $@ 1.171 + 1.172 +# This action refreshes all generated adlc files simultaneously. 1.173 +# The way it works is this: 1.174 +# 1) create a scratch directory to work in. 1.175 +# 2) if the current working directory does not have $(ADLC_UPDATER), copy it. 1.176 +# 3) run the compiled adlc executable. This will create new adlc files in the scratch directory. 1.177 +# 4) call $(ADLC_UPDATER) on each generated adlc file. It will selectively update changed or missing files. 1.178 +# 5) If we actually updated any files, echo a notice. 1.179 +# 1.180 +refresh_adfiles: $(EXEC) $(SOURCE.AD) $(ADLC_UPDATER) 1.181 + @rm -rf $(TEMPDIR); mkdir $(TEMPDIR) 1.182 + $(QUIETLY) $(EXEC) $(ADLCFLAGS) $(SOURCE.AD) \ 1.183 + -c$(TEMPDIR)/ad_$(Platform_arch_model).cpp -h$(TEMPDIR)/ad_$(Platform_arch_model).hpp -a$(TEMPDIR)/dfa_$(Platform_arch_model).cpp -v$(TEMPDIR)/adGlobals_$(Platform_arch_model).hpp \ 1.184 + || { rm -rf $(TEMPDIR); exit 1; } 1.185 + $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model).cpp $(TEMPDIR) $(OUTDIR) 1.186 + $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model).hpp $(TEMPDIR) $(OUTDIR) 1.187 + $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_clone.cpp $(TEMPDIR) $(OUTDIR) 1.188 + $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_expand.cpp $(TEMPDIR) $(OUTDIR) 1.189 + $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_format.cpp $(TEMPDIR) $(OUTDIR) 1.190 + $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_gen.cpp $(TEMPDIR) $(OUTDIR) 1.191 + $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_misc.cpp $(TEMPDIR) $(OUTDIR) 1.192 + $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_peephole.cpp $(TEMPDIR) $(OUTDIR) 1.193 + $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_pipeline.cpp $(TEMPDIR) $(OUTDIR) 1.194 + $(QUIETLY) ./$(ADLC_UPDATER) adGlobals_$(Platform_arch_model).hpp $(TEMPDIR) $(OUTDIR) 1.195 + $(QUIETLY) ./$(ADLC_UPDATER) dfa_$(Platform_arch_model).cpp $(TEMPDIR) $(OUTDIR) 1.196 + $(QUIETLY) [ -f $(TEMPDIR)/made-change ] \ 1.197 + || echo "Rescanned $(SOURCE.AD) but encountered no changes." 1.198 + $(QUIETLY) rm -rf $(TEMPDIR) 1.199 + 1.200 + 1.201 +# ######################################################################### 1.202 + 1.203 +$(SOURCE.AD): $(SOURCES.AD) 1.204 + $(QUIETLY) $(PROCESS_AD_FILES) $(SOURCES.AD) > $(SOURCE.AD) 1.205 + 1.206 +#PROCESS_AD_FILES = cat 1.207 +# Pass through #line directives, in case user enables -g option above: 1.208 +PROCESS_AD_FILES = awk '{ \ 1.209 + if (CUR_FN != FILENAME) { CUR_FN=FILENAME; NR_BASE=NR-1; need_lineno=1 } \ 1.210 + if (need_lineno && $$0 !~ /\/\//) \ 1.211 + { print "\n\n\#line " (NR-NR_BASE) " \"" FILENAME "\""; need_lineno=0 }; \ 1.212 + print }' 1.213 + 1.214 +$(OUTDIR)/%.o: %.cpp 1.215 + @echo Compiling $< 1.216 + $(QUIETLY) $(REMOVE_TARGET) 1.217 + $(QUIETLY) $(HOST.COMPILE.CXX) -o $@ $< $(COMPILE_DONE) 1.218 + 1.219 +# Some object files are given a prefix, to disambiguate 1.220 +# them from objects of the same name built for the VM. 1.221 +$(OUTDIR)/adlc-%.o: %.cpp 1.222 + @echo Compiling $< 1.223 + $(QUIETLY) $(REMOVE_TARGET) 1.224 + $(QUIETLY) $(HOST.COMPILE.CXX) -o $@ $< $(COMPILE_DONE) 1.225 + 1.226 +# ######################################################################### 1.227 + 1.228 +clean: 1.229 + rm $(OBJECTS) 1.230 + 1.231 +cleanall: 1.232 + rm $(OBJECTS) $(EXEC) 1.233 + 1.234 +# ######################################################################### 1.235 + 1.236 +.PHONY: all dump refresh_adfiles clean cleanall