1#
2# %CopyrightBegin%
3#
4# Copyright Ericsson AB 1996-2020. All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License");
7# you may not use this file except in compliance with the License.
8# You may obtain a copy of the License at
9#
10#     http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS,
14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
17#
18# %CopyrightEnd%
19#
20
21ifdef BOOTSTRAP_COMPILER
22EGEN=$(BOOTSTRAP_COMPILER)/egen
23EBIN=$(BOOTSTRAP_COMPILER)/ebin
24else
25ifdef BOOTSTRAP
26EGEN=$(BOOTSTRAP_TOP)/lib/compiler/egen
27EBIN=$(BOOTSTRAP_TOP)/lib/compiler/ebin
28endif
29endif
30
31include $(ERL_TOP)/make/target.mk
32include $(ERL_TOP)/make/$(TARGET)/otp.mk
33
34# ----------------------------------------------------
35# Application version
36# ----------------------------------------------------
37include ../vsn.mk
38VSN=$(COMPILER_VSN)
39
40# ----------------------------------------------------
41# Release directory specification
42# ----------------------------------------------------
43RELSYSDIR = $(RELEASE_PATH)/lib/compiler-$(VSN)
44
45# ----------------------------------------------------
46# Target Specs
47# ----------------------------------------------------
48MODULES =  \
49	beam_a \
50	beam_asm \
51	beam_block \
52	beam_call_types \
53	beam_clean \
54	beam_dict \
55	beam_digraph \
56	beam_disasm \
57	beam_flatten \
58	beam_jump \
59	beam_listing \
60	beam_opcodes \
61	beam_peep \
62	beam_ssa \
63	beam_ssa_bc_size \
64	beam_ssa_bool \
65	beam_ssa_bsm \
66	beam_ssa_codegen \
67	beam_ssa_dead \
68	beam_ssa_funs \
69	beam_ssa_lint \
70	beam_ssa_opt \
71	beam_ssa_pp \
72	beam_ssa_pre_codegen \
73	beam_ssa_recv \
74	beam_ssa_share \
75	beam_ssa_throw \
76	beam_ssa_type \
77	beam_kernel_to_ssa \
78	beam_trim \
79	beam_types \
80	beam_utils \
81	beam_validator \
82        beam_z \
83	cerl \
84	cerl_clauses \
85	cerl_inline \
86	cerl_trees \
87	compile \
88	core_lib \
89	core_lint \
90	core_parse \
91	core_pp \
92	core_scan \
93	erl_bifs \
94	rec_env \
95	sys_core_alias \
96	sys_core_bsm \
97	sys_core_fold \
98	sys_core_fold_lists \
99	sys_core_inline \
100	sys_core_prepare \
101	sys_messages \
102	sys_pre_attributes \
103	v3_core \
104	v3_kernel \
105	v3_kernel_pp
106
107BEAM_H = $(wildcard ../priv/beam_h/*.h)
108
109HRL_FILES= \
110	beam_disasm.hrl \
111	beam_ssa_opt.hrl \
112	beam_ssa.hrl \
113	beam_types.hrl \
114	core_parse.hrl \
115	v3_kernel.hrl
116
117YRL_FILE = core_parse.yrl
118
119EXTRA_FILES= $(EGEN)/beam_opcodes.hrl
120
121ERL_FILES= $(MODULES:%=%.erl)
122INSTALL_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET)
123TARGET_FILES= $(INSTALL_FILES)
124
125APP_FILE= compiler.app
126APP_SRC= $(APP_FILE).src
127APP_TARGET= $(EBIN)/$(APP_FILE)
128
129APPUP_FILE= compiler.appup
130APPUP_SRC= $(APPUP_FILE).src
131APPUP_TARGET= $(EBIN)/$(APPUP_FILE)
132
133# ----------------------------------------------------
134# FLAGS
135# ----------------------------------------------------
136
137ERL_COMPILE_FLAGS += -Werror
138ERL_COMPILE_FLAGS += +inline +warn_unused_import \
139 -I../../stdlib/include -I$(EGEN) -W +warn_missing_spec
140
141# ----------------------------------------------------
142# Targets
143# ----------------------------------------------------
144
145debug opt: $(TARGET_FILES)
146
147docs:
148
149clean:
150	rm -f $(TARGET_FILES)
151	rm -f $(EGEN)/beam_opcodes.erl $(EGEN)/beam_opcodes.hrl
152	rm -f $(EGEN)/core_parse.erl
153	rm -f core
154
155# ----------------------------------------------------
156# Special Build Targets
157# ----------------------------------------------------
158
159$(APP_TARGET): $(APP_SRC) ../vsn.mk
160	$(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
161
162$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
163	$(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
164
165$(EGEN)/beam_opcodes.erl $(EGEN)/beam_opcodes.hrl: genop.tab
166	$(gen_verbose)$(PERL) $(ERL_TOP)/erts/emulator/utils/beam_makeops -compiler -outdir $(EGEN) $<
167
168$(EBIN)/beam_asm.beam: $(ESRC)/beam_asm.erl $(EGEN)/beam_opcodes.hrl
169	$(V_ERLC) $(ERL_COMPILE_FLAGS) -DCOMPILER_VSN='"$(VSN)"' -o$(EBIN) $<
170
171$(EBIN)/cerl_inline.beam: $(ESRC)/cerl_inline.erl
172	$(V_ERLC) $(ERL_COMPILE_FLAGS) +nowarn_shadow_vars -o$(EBIN) $<
173
174# Inlining core_parse is slow and has no benefit.
175$(EBIN)/core_parse.beam: $(EGEN)/core_parse.erl
176	$(V_ERLC) $(subst +inline,,$(ERL_COMPILE_FLAGS)) -o$(EBIN) $<
177
178# ----------------------------------------------------
179# Release Target
180# ----------------------------------------------------
181include $(ERL_TOP)/make/otp_release_targets.mk
182
183release_spec: opt
184	$(INSTALL_DIR) "$(RELSYSDIR)/src"
185	$(INSTALL_DATA) $(ERL_FILES) $(HRL_FILES) $(EXTRA_FILES) \
186		$(YRL_FILE) "$(RELSYSDIR)/src"
187	$(INSTALL_DIR) "$(RELSYSDIR)/ebin"
188	$(INSTALL_DATA) $(INSTALL_FILES) "$(RELSYSDIR)/ebin"
189
190release_docs_spec:
191
192# ----------------------------------------------------
193# Dependencies -- alphabetically, please
194# ----------------------------------------------------
195
196$(EBIN)/beam_call_types.beam: beam_types.hrl
197$(EBIN)/beam_disasm.beam: $(EGEN)/beam_opcodes.hrl beam_disasm.hrl
198$(EBIN)/beam_listing.beam: core_parse.hrl v3_kernel.hrl beam_ssa.hrl
199$(EBIN)/beam_kernel_to_ssa.beam: v3_kernel.hrl beam_ssa.hrl
200$(EBIN)/beam_ssa.beam: beam_ssa.hrl
201$(EBIN)/beam_ssa_bsm.beam: beam_ssa.hrl
202$(EBIN)/beam_ssa_codegen.beam: beam_ssa.hrl
203$(EBIN)/beam_ssa_dead.beam: beam_ssa.hrl
204$(EBIN)/beam_ssa_funs.beam: beam_ssa.hrl
205$(EBIN)/beam_ssa_lint.beam: beam_ssa.hrl
206$(EBIN)/beam_ssa_opt.beam: beam_ssa.hrl
207$(EBIN)/beam_ssa_pp.beam: beam_ssa.hrl
208$(EBIN)/beam_ssa_pre_codegen.beam: beam_ssa.hrl
209$(EBIN)/beam_ssa_recv.beam: beam_ssa.hrl
210$(EBIN)/beam_ssa_share.beam: beam_ssa.hrl
211$(EBIN)/beam_ssa_throw.beam: beam_ssa.hrl
212$(EBIN)/beam_ssa_type.beam: beam_ssa.hrl beam_types.hrl
213$(EBIN)/beam_types.beam: beam_types.hrl
214$(EBIN)/beam_validator.beam: beam_types.hrl
215$(EBIN)/cerl.beam: core_parse.hrl
216$(EBIN)/compile.beam: core_parse.hrl ../../stdlib/include/erl_compile.hrl
217$(EBIN)/core_lib.beam: core_parse.hrl
218$(EBIN)/core_lint.beam: core_parse.hrl
219$(EBIN)/core_parse.beam: core_parse.hrl $(EGEN)/core_parse.erl
220$(EBIN)/core_pp.beam: core_parse.hrl
221$(EBIN)/sys_core_alias.beam: core_parse.hrl
222$(EBIN)/sys_core_fold.beam: core_parse.hrl
223$(EBIN)/sys_core_fold_lists.beam: core_parse.hrl
224$(EBIN)/sys_core_inline.beam: core_parse.hrl
225$(EBIN)/v3_core.beam: core_parse.hrl
226$(EBIN)/v3_kernel.beam: core_parse.hrl v3_kernel.hrl
227$(EBIN)/v3_kernel_pp.beam: v3_kernel.hrl
228