# SPDX-License-Identifier: GPL-2.0
GCC_PLUGINS_DIR := $(shell $(CC) -print-file-name=plugin)

HOST_EXTRACXXFLAGS += -I$(GCC_PLUGINS_DIR)/include -I$(srctree)/$(src)
HOST_EXTRACXXFLAGS += -include include/generated/autoconf.h
ifeq ($(call cc-ifversion, -ge, 1100, y), y)
HOST_EXTRACXXFLAGS += -std=c++11
else
HOST_EXTRACXXFLAGS += -std=gnu++98
endif
HOST_EXTRACXXFLAGS += -ggdb -fvisibility=hidden
HOST_EXTRACXXFLAGS += -fno-rtti -fno-exceptions -fasynchronous-unwind-tables
HOST_EXTRACXXFLAGS += -Wall -W
HOST_EXTRACXXFLAGS += $(call hostcxx-disable-warning,format-diag)
ifeq ($(call cc-ifversion, -lt, 1100, y), y)
HOST_EXTRACXXFLAGS += $(call hostcxx-disable-warning,c++11-compat)
endif
HOST_EXTRACXXFLAGS += -Wno-unused-parameter -Wno-narrowing
#HOST_EXTRACXXFLAGS += -Wno-unused-variable
HOST_EXTRACXXFLAGS += -include $(srctree)/include/linux/compiler-version.h
export HOST_EXTRACXXFLAGS

KBUILD_HOSTLDFLAGS += -Wl,--as-needed

# ensure every plugin has an soname
$(foreach p,$(GCC_PLUGIN),\
	$(eval export HOSTLDLIBS_$(notdir $(p)) += -Wl,-soname=$(notdir $(p))))

# add utilities_plugin.so as link dependency to every other plugin
$(foreach p,$(filter-out utilities_plugin/utilities_plugin.so,$(GCC_PLUGIN)),$(if $(findstring /,$(p)),\
	$(eval export HOSTLDLIBS_$(notdir $(p)) += -Wl,-rpath='$$$$$$$$ORIGIN/../utilities_plugin' $(obj)/utilities_plugin/utilities_plugin.so),\
	$(eval        HOSTLDLIBS_$(notdir $(p)) += -Wl,-rpath='$$$$ORIGIN/utilities_plugin'        $(obj)/utilities_plugin/utilities_plugin.so)))

# ensure utilities_plugin.so is built first
$(addprefix $(obj)/,$(filter-out utilities_plugin/utilities_plugin.so,$(GCC_PLUGIN)) $(filter-out utilities_plugin,$(GCC_PLUGIN_SUBDIR))): $(obj)/utilities_plugin

$(obj)/randomize_layout_plugin.o: $(objtree)/$(obj)/randomize_layout_seed.h
quiet_cmd_create_randomize_layout_seed = GENSEED $@
cmd_create_randomize_layout_seed = \
  $(CONFIG_SHELL) $(srctree)/$(src)/gen-random-seed.sh $@ $(objtree)/include/generated/randomize_layout_hash.h
$(objtree)/$(obj)/randomize_layout_seed.h: FORCE
	$(call if_changed,create_randomize_layout_seed)
targets += randomize_layout_seed.h randomize_layout_hash.h

hostcxxlibs-y := $(foreach p,$(GCC_PLUGIN),$(if $(findstring /,$(p)),,$(p)))
always-y += $(hostcxxlibs-y)

$(foreach p,$(hostcxxlibs-y:%.so=%),$(eval $(p)-objs := $(p).o))

subdir-y := $(GCC_PLUGIN_SUBDIR)
subdir-  += $(GCC_PLUGIN_SUBDIR)

clean-files += *.so
