зеркало из https://github.com/mozilla/gecko-dev.git
72 строки
2.6 KiB
Makefile
72 строки
2.6 KiB
Makefile
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
SUPPRESS_DEFAULT_RULES := 1
|
|
STANDALONE_MAKEFILE := 1
|
|
|
|
include $(topsrcdir)/config/rules.mk
|
|
|
|
# Building XPIDLs effectively consists of two steps:
|
|
#
|
|
# 1) Staging all .idl files to a common directory.
|
|
# 2) Doing everything with the .idl files.
|
|
#
|
|
# Each .idl file is processed into a .h file and typelib information.
|
|
# The .h file shares the same stem as the input file and is installed
|
|
# in the common headers include directory.
|
|
#
|
|
# XPIDL files are logically grouped together by modules. The typelib
|
|
# information for all XPIDLs in the same module is linked together into
|
|
# an .xpt file having the name of the module.
|
|
#
|
|
# As an optimization to reduce overall CPU usage, we process all .idl
|
|
# belonging to a module with a single command invocation. This prevents
|
|
# redundant parsing of .idl files and significantly reduces CPU cycles.
|
|
#
|
|
# Future improvement: Headers are currently written to a local directory then
|
|
# installed in the distribution directory. It is preferable to write headers
|
|
# directly into the distribution directory. However, PGO builds remove the dist
|
|
# directory via rm -rf (with no regards to manifests). Since the cost of
|
|
# processing XPIDL files is not trivial, it is preferrable to cache the headers
|
|
# and reinstall them rather than regenerate them. Ideally the dist pruning is
|
|
# performed with manifests. At that time we can write headers directly to the
|
|
# dist directory.
|
|
|
|
# For dependency files.
|
|
idl_deps_dir := .deps
|
|
|
|
# Where we put our final, linked .xpt files.
|
|
idl_xpt_dir := xpt
|
|
|
|
dist_idl_dir := $(DIST)/idl
|
|
dist_include_dir := $(DIST)/include
|
|
process_py := $(topsrcdir)/python/mozbuild/mozbuild/action/xpidl-process.py
|
|
|
|
# TODO we should use py_action, but that would require extra directories to be
|
|
# in the virtualenv.
|
|
idlprocess := $(PYTHON_PATH) $(PLY_INCLUDE) -I$(IDL_PARSER_DIR) -I$(IDL_PARSER_CACHE_DIR) \
|
|
$(process_py) --cache-dir $(IDL_PARSER_CACHE_DIR) $(dist_idl_dir) \
|
|
$(dist_include_dir) $(idl_xpt_dir) $(idl_deps_dir)
|
|
|
|
ifdef LIBXUL_SDK
|
|
idlprocess += -I$(LIBXUL_SDK)/idl
|
|
endif
|
|
|
|
xpidl_modules := @xpidl_modules@
|
|
|
|
@xpidl_rules@
|
|
|
|
linked_xpt_files := $(addprefix $(idl_xpt_dir)/,$(addsuffix .xpt,$(xpidl_modules)))
|
|
depends_files := $(foreach root,$(xpidl_modules),$(idl_deps_dir)/$(root).pp)
|
|
|
|
GARBAGE += $(linked_xpt_files) $(depends_files)
|
|
|
|
xpidl:: $(linked_xpt_files)
|
|
|
|
$(linked_xpt_files): $(process_py) $(call mkdir_deps,$(idl_deps_dir) $(dist_include_dir) $(idl_xpt_dir))
|
|
|
|
$(call include_deps,$(depends_files))
|
|
|
|
.PHONY: xpidl
|