# Makefile.am -- Backtrace in libstdc++ Makefile.
# Copyright (C) 2012-2026 Free Software Foundation, Inc.

# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:

#     (1) Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer. 

#     (2) Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in
#     the documentation and/or other materials provided with the
#     distribution.  

#     (3) The name of the author may not be used to
#     endorse or promote products derived from this software without
#     specific prior written permission.

# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

include $(top_srcdir)/fragment.am

# Convenience library for C++23 runtime.
noinst_LTLIBRARIES = libstdc++_libbacktrace.la

ACLOCAL_AMFLAGS = -I ../.. -I ../../config

# This will be used instead of the common AM_CPPFLAGS from fragment.am
libstdc___libbacktrace_la_CPPFLAGS = \
	-I $(top_srcdir)/../include -I $(top_srcdir)/../libgcc \
	-I ../../../libgcc -I .. -I $(top_srcdir) \
	-I $(top_srcdir)/../libbacktrace \
	-I $(top_srcdir)/../libiberty \
	-include $(top_srcdir)/src/libbacktrace/backtrace-rename.h \
	$(BACKTRACE_CPPFLAGS)

WARN_FLAGS = -W -Wall -Wwrite-strings -Wmissing-format-attribute \
	     -Wcast-qual
C_WARN_FLAGS = $(WARN_FLAGS) -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -Wno-unused-but-set-variable
CXX_WARN_FLAGS = $(WARN_FLAGS) -Wno-unused-parameter
AM_CFLAGS = \
	$(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
	$(C_WARN_FLAGS) -funwind-tables
AM_CFLAGS += $(EXTRA_CFLAGS)
AM_CXXFLAGS = \
	$(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
	$(CXX_WARN_FLAGS) -fno-rtti -fno-exceptions
AM_CXXFLAGS += $(EXTRA_CXXFLAGS)

obj_prefix = std_stacktrace

# Each FILE.c in SOURCES will be compiled to SHORTNAME-FILE.o
libstdc___libbacktrace_la_SHORTNAME = $(obj_prefix)

libstdc___libbacktrace_la_SOURCES = \
	atomic.c \
	backtrace.c \
	dwarf.c \
	fileline.c \
	posix.c \
	sort.c \
	simple.c \
	state.c \
	cp-demangle.c

FORMAT_FILES = \
	elf.c \
	pecoff.c \
	unknown.c

VIEW_FILES = \
	read.c \
	mmapio.c

ALLOC_FILES = \
	alloc.c \
	mmap.c

EXTRA_libstdc___libbacktrace_la_SOURCES = \
	$(FORMAT_FILES) \
	$(VIEW_FILES) \
	$(ALLOC_FILES)

# These three files are chosen by configure and added to the link.
# We need the SHORTNAME- prefix so that they use the custom CPPFLAGS above.
libstdc___libbacktrace_la_LIBADD = \
	$(obj_prefix)-$(FORMAT_FILE) \
	$(obj_prefix)-$(VIEW_FILE) \
	$(obj_prefix)-$(ALLOC_FILE)

libstdc___libbacktrace_la_DEPENDENCIES = $(libstdc___libbacktrace_la_LIBADD)

# Use symlinks for the sources

%.c: ../../../libbacktrace/%.c
	$(LN_S) $< $@

cp-demangle.c: ../../../libiberty/cp-demangle.c
	$(LN_S) $< $@

LTCOMPILE = \
	$(LIBTOOL) --tag CC --tag disable-shared \
	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=compile $(CC) $(TOPLEVEL_INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)

LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))

LINK = \
	$(LIBTOOL) --tag CC --tag disable-shared \
	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=link $(CC) \
	$(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CFLAGS) $(LTLDFLAGS) -o $@
