never@3156: # mikael@6198: # Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. never@3156: # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. never@3156: # never@3156: # This code is free software; you can redistribute it and/or modify it never@3156: # under the terms of the GNU General Public License version 2 only, as never@3156: # published by the Free Software Foundation. never@3156: # never@3156: # This code is distributed in the hope that it will be useful, but WITHOUT never@3156: # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or never@3156: # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License never@3156: # version 2 for more details (a copy is included in the LICENSE file that never@3156: # accompanied this code). never@3156: # never@3156: # You should have received a copy of the GNU General Public License version never@3156: # 2 along with this work; if not, write to the Free Software Foundation, never@3156: # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. never@3156: # never@3156: # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA never@3156: # or visit www.oracle.com if you need additional information or have any never@3156: # questions. never@3156: # never@3156: # never@3156: never@3156: # This makefile (adlc.make) is included from the adlc.make in the never@3156: # build directories. never@3156: # It knows how to compile, link, and run the adlc. never@3156: never@3156: include $(GAMMADIR)/make/$(Platform_os_family)/makefiles/rules.make never@3156: never@3156: # ######################################################################### never@3156: never@3156: # OUTDIR must be the same as AD_Dir = $(GENERATED)/adfiles in top.make: never@3156: GENERATED = ../generated never@3156: OUTDIR = $(GENERATED)/adfiles never@3156: never@3156: ARCH = $(Platform_arch) never@3156: OS = $(Platform_os_family) never@3156: never@3156: SOURCE.AD = $(OUTDIR)/$(OS)_$(Platform_arch_model).ad never@3156: kvn@3390: ifeq ("${Platform_arch_model}", "${Platform_arch}") kvn@3390: SOURCES.AD = \ adlertz@5510: $(call altsrc-replace,$(HS_COMMON_SRC)/cpu/$(ARCH)/vm/$(Platform_arch_model).ad) kvn@3390: else kvn@3390: SOURCES.AD = \ kvn@3390: $(call altsrc-replace,$(HS_COMMON_SRC)/cpu/$(ARCH)/vm/$(Platform_arch_model).ad) \ adlertz@5510: $(call altsrc-replace,$(HS_COMMON_SRC)/cpu/$(ARCH)/vm/$(Platform_arch).ad) kvn@3390: endif never@3156: never@3156: EXEC = $(OUTDIR)/adlc never@3156: never@3156: # set VPATH so make knows where to look for source files never@3156: Src_Dirs_V += $(GAMMADIR)/src/share/vm/adlc never@3156: VPATH += $(Src_Dirs_V:%=%:) never@3156: never@3156: # set INCLUDES for C preprocessor never@3156: Src_Dirs_I += $(GAMMADIR)/src/share/vm/adlc $(GENERATED) never@3156: INCLUDES += $(Src_Dirs_I:%=-I%) never@3156: never@3156: # set flags for adlc compilation erikj@3518: CXXFLAGS = $(SYSDEFS) $(INCLUDES) never@3156: never@3156: # Force assertions on. erikj@3518: CXXFLAGS += -DASSERT never@3156: never@3156: # CFLAGS_WARN holds compiler options to suppress/enable warnings. never@3156: # Compiler warnings are treated as errors dcubed@3202: ifneq ($(COMPILER_WARNINGS_FATAL),false) simonis@5230: CFLAGS_WARN = $(WARNINGS_ARE_ERRORS) dcubed@3202: endif never@3156: CFLAGS += $(CFLAGS_WARN) never@3156: never@3156: OBJECTNAMES = \ never@3156: adlparse.o \ never@3156: archDesc.o \ never@3156: arena.o \ never@3156: dfa.o \ never@3156: dict2.o \ never@3156: filebuff.o \ never@3156: forms.o \ never@3156: formsopt.o \ never@3156: formssel.o \ never@3156: main.o \ never@3156: adlc-opcodes.o \ never@3156: output_c.o \ never@3156: output_h.o \ never@3156: never@3156: OBJECTS = $(OBJECTNAMES:%=$(OUTDIR)/%) never@3156: never@3156: GENERATEDNAMES = \ never@3156: ad_$(Platform_arch_model).cpp \ never@3156: ad_$(Platform_arch_model).hpp \ never@3156: ad_$(Platform_arch_model)_clone.cpp \ never@3156: ad_$(Platform_arch_model)_expand.cpp \ never@3156: ad_$(Platform_arch_model)_format.cpp \ never@3156: ad_$(Platform_arch_model)_gen.cpp \ never@3156: ad_$(Platform_arch_model)_misc.cpp \ never@3156: ad_$(Platform_arch_model)_peephole.cpp \ never@3156: ad_$(Platform_arch_model)_pipeline.cpp \ never@3156: adGlobals_$(Platform_arch_model).hpp \ never@3156: dfa_$(Platform_arch_model).cpp \ never@3156: never@3156: GENERATEDFILES = $(GENERATEDNAMES:%=$(OUTDIR)/%) never@3156: never@3156: # ######################################################################### never@3156: never@3156: all: $(EXEC) never@3156: never@3156: $(EXEC) : $(OBJECTS) never@3156: @echo Making adlc erikj@3518: $(QUIETLY) $(HOST.LINK_NOPROF.CXX) -o $(EXEC) $(OBJECTS) never@3156: never@3156: # Random dependencies: never@3156: $(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 never@3156: never@3156: # The source files refer to ostream.h, which sparcworks calls iostream.h never@3156: $(OBJECTS): ostream.h never@3156: never@3156: ostream.h : never@3156: @echo >$@ '#include ' never@3156: never@3156: dump: never@3156: : OUTDIR=$(OUTDIR) never@3156: : OBJECTS=$(OBJECTS) never@3156: : products = $(GENERATEDFILES) never@3156: never@3156: all: $(GENERATEDFILES) never@3156: never@3156: $(GENERATEDFILES): refresh_adfiles never@3156: never@3156: # Get a unique temporary directory name, so multiple makes can run in parallel. never@3156: # Note that product files are updated via "mv", which is atomic. never@3156: TEMPDIR := $(OUTDIR)/mktmp$(shell echo $$$$) never@3156: never@3156: # Debuggable by default never@3156: CFLAGS += -g never@3156: never@3156: # Pass -D flags into ADLC. never@3156: ADLCFLAGS += $(SYSDEFS) never@3156: never@3156: # Note "+="; it is a hook so flags.make can add more flags, like -g or -DFOO. never@3156: ADLCFLAGS += -q -T never@3156: never@3156: # Normally, debugging is done directly on the ad_*.cpp files. never@3156: # But -g will put #line directives in those files pointing back to .ad. never@3156: # Some builds of gcc 3.2 have a bug that gets tickled by the extra #line directives never@3156: # so skip it for 3.2 and ealier. never@3156: ifneq "$(shell expr \( $(CC_VER_MAJOR) \> 3 \) \| \( \( $(CC_VER_MAJOR) = 3 \) \& \( $(CC_VER_MINOR) \>= 3 \) \))" "0" never@3156: ADLCFLAGS += -g never@3156: endif never@3156: never@3156: ifdef LP64 never@3156: ADLCFLAGS += -D_LP64 never@3156: else never@3156: ADLCFLAGS += -U_LP64 never@3156: endif never@3156: never@3156: # never@3156: # adlc_updater is a simple sh script, under sccs control. It is never@3156: # used to selectively update generated adlc files. This should never@3156: # provide a nice compilation speed improvement. never@3156: # never@3156: ADLC_UPDATER_DIRECTORY = $(GAMMADIR)/make/$(OS) never@3156: ADLC_UPDATER = adlc_updater never@3156: $(ADLC_UPDATER): $(ADLC_UPDATER_DIRECTORY)/$(ADLC_UPDATER) never@3156: $(QUIETLY) cp $< $@; chmod +x $@ never@3156: never@3156: # This action refreshes all generated adlc files simultaneously. never@3156: # The way it works is this: never@3156: # 1) create a scratch directory to work in. never@3156: # 2) if the current working directory does not have $(ADLC_UPDATER), copy it. never@3156: # 3) run the compiled adlc executable. This will create new adlc files in the scratch directory. never@3156: # 4) call $(ADLC_UPDATER) on each generated adlc file. It will selectively update changed or missing files. never@3156: # 5) If we actually updated any files, echo a notice. never@3156: # never@3156: refresh_adfiles: $(EXEC) $(SOURCE.AD) $(ADLC_UPDATER) never@3156: @rm -rf $(TEMPDIR); mkdir $(TEMPDIR) never@3156: $(QUIETLY) $(EXEC) $(ADLCFLAGS) $(SOURCE.AD) \ never@3156: -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 \ never@3156: || { rm -rf $(TEMPDIR); exit 1; } never@3156: $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model).cpp $(TEMPDIR) $(OUTDIR) never@3156: $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model).hpp $(TEMPDIR) $(OUTDIR) never@3156: $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_clone.cpp $(TEMPDIR) $(OUTDIR) never@3156: $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_expand.cpp $(TEMPDIR) $(OUTDIR) never@3156: $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_format.cpp $(TEMPDIR) $(OUTDIR) never@3156: $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_gen.cpp $(TEMPDIR) $(OUTDIR) never@3156: $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_misc.cpp $(TEMPDIR) $(OUTDIR) never@3156: $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_peephole.cpp $(TEMPDIR) $(OUTDIR) never@3156: $(QUIETLY) ./$(ADLC_UPDATER) ad_$(Platform_arch_model)_pipeline.cpp $(TEMPDIR) $(OUTDIR) never@3156: $(QUIETLY) ./$(ADLC_UPDATER) adGlobals_$(Platform_arch_model).hpp $(TEMPDIR) $(OUTDIR) never@3156: $(QUIETLY) ./$(ADLC_UPDATER) dfa_$(Platform_arch_model).cpp $(TEMPDIR) $(OUTDIR) never@3156: $(QUIETLY) [ -f $(TEMPDIR)/made-change ] \ never@3156: || echo "Rescanned $(SOURCE.AD) but encountered no changes." never@3156: $(QUIETLY) rm -rf $(TEMPDIR) never@3156: never@3156: never@3156: # ######################################################################### never@3156: never@3156: $(SOURCE.AD): $(SOURCES.AD) never@3156: $(QUIETLY) $(PROCESS_AD_FILES) $(SOURCES.AD) > $(SOURCE.AD) never@3156: never@3156: #PROCESS_AD_FILES = cat never@3156: # Pass through #line directives, in case user enables -g option above: never@3156: PROCESS_AD_FILES = awk '{ \ never@3156: if (CUR_FN != FILENAME) { CUR_FN=FILENAME; NR_BASE=NR-1; need_lineno=1 } \ never@3156: if (need_lineno && $$0 !~ /\/\//) \ never@3156: { print "\n\n\#line " (NR-NR_BASE) " \"" FILENAME "\""; need_lineno=0 }; \ never@3156: print }' never@3156: never@3156: $(OUTDIR)/%.o: %.cpp never@3156: @echo Compiling $< never@3156: $(QUIETLY) $(REMOVE_TARGET) erikj@3518: $(QUIETLY) $(HOST.COMPILE.CXX) -o $@ $< $(COMPILE_DONE) never@3156: never@3156: # Some object files are given a prefix, to disambiguate never@3156: # them from objects of the same name built for the VM. never@3156: $(OUTDIR)/adlc-%.o: %.cpp never@3156: @echo Compiling $< never@3156: $(QUIETLY) $(REMOVE_TARGET) erikj@3518: $(QUIETLY) $(HOST.COMPILE.CXX) -o $@ $< $(COMPILE_DONE) never@3156: never@3156: # ######################################################################### never@3156: never@3156: clean : never@3156: rm $(OBJECTS) never@3156: never@3156: cleanall : never@3156: rm $(OBJECTS) $(EXEC) never@3156: never@3156: # ######################################################################### never@3156: never@3156: .PHONY: all dump refresh_adfiles clean cleanall