# Copyright 2014 The Rust Project Developers. See the COPYRIGHT
# file at the top-level directory of this distribution and at
# http://rust-lang.org/COPYRIGHT.
#
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
# option. This file may not be copied, modified, or distributed
# except according to those terms.

################################################################################
# Native libraries built as part of the rust build process
#
# This portion of the rust build system is meant to keep track of native
# dependencies and how to build them. It is currently required that all native
# dependencies are built as static libraries, as slinging around dynamic
# libraries isn't exactly the most fun thing to do.
#
# This section should need minimal modification to add new libraries. The
# relevant variables are:
#
#   NATIVE_LIBS
#	This is a list of all native libraries which are built as part of the
#	build process. It will build all libraries into RT_OUTPUT_DIR with the
#	appropriate name of static library as dictated by the target platform
#
#   NATIVE_DEPS_<lib>
#	This is a list of files relative to the src/rt directory which are
#	needed to build the native library. Each file will be compiled to an
#	object file, and then all the object files will be assembled into an
#	archive (static library). The list contains files of any extension
#
# If adding a new library, you should update the NATIVE_LIBS list, and then list
# the required files below it. The list of required files is a list of files
# that's per-target so you're allowed to conditionally add files based on the
# target.
################################################################################
NATIVE_LIBS := hoedown miniz rust_test_helpers

# $(1) is the target triple
define NATIVE_LIBRARIES

NATIVE_DEPS_hoedown_$(1) := hoedown/src/autolink.c \
			hoedown/src/buffer.c \
			hoedown/src/document.c \
			hoedown/src/escape.c \
			hoedown/src/html.c \
			hoedown/src/html_blocks.c \
			hoedown/src/html_smartypants.c \
			hoedown/src/stack.c \
			hoedown/src/version.c
NATIVE_DEPS_miniz_$(1) = miniz.c
NATIVE_DEPS_rust_test_helpers_$(1) := rust_test_helpers.c

################################################################################
# You shouldn't find it that necessary to edit anything below this line.
################################################################################

# While we're defining the native libraries for each target, we define some
# common rules used to build files for various targets.

RT_OUTPUT_DIR_$(1) := $(1)/rt

$$(RT_OUTPUT_DIR_$(1))/%.o: $(S)src/rt/%.c $$(MKFILE_DEPS)
	@mkdir -p $$(@D)
	@$$(call E, compile: $$@)
	$$(Q)$$(call CFG_COMPILE_C_$(1), $$@, \
		$$(call CFG_CC_INCLUDE_$(1),$$(S)src/rt/hoedown/src) \
		$$(call CFG_CC_INCLUDE_$(1),$$(S)src/rt) \
                 $$(RUNTIME_CFLAGS_$(1))) $$<

$$(RT_OUTPUT_DIR_$(1))/%.o: $(S)src/rt/%.S $$(MKFILE_DEPS) \
	    $$(LLVM_CONFIG_$$(CFG_BUILD))
	@mkdir -p $$(@D)
	@$$(call E, compile: $$@)
	$$(Q)$$(call CFG_ASSEMBLE_$(1),$$@,$$<)

# On MSVC targets the compiler's default include path (e.g. where to find system
# headers) is specified by the INCLUDE environment variable. This may not be set
# so the ./configure script scraped the relevant values and this is the location
# that we put them into cl.exe's environment.
ifeq ($$(findstring msvc,$(1)),msvc)
$$(RT_OUTPUT_DIR_$(1))/%.o: \
	export INCLUDE := $$(CFG_MSVC_INCLUDE_PATH_$$(HOST_$(1)))
$(1)/rustllvm/%.o: \
	export INCLUDE := $$(CFG_MSVC_INCLUDE_PATH_$$(HOST_$(1)))
endif
endef

$(foreach target,$(CFG_TARGET),$(eval $(call NATIVE_LIBRARIES,$(target))))

# A macro for devining how to build third party libraries listed above (based
# on their dependencies).
#
# $(1) is the target
# $(2) is the lib name
define THIRD_PARTY_LIB

OBJS_$(2)_$(1) := $$(NATIVE_DEPS_$(2)_$(1):%=$$(RT_OUTPUT_DIR_$(1))/%)
OBJS_$(2)_$(1) := $$(OBJS_$(2)_$(1):.c=.o)
OBJS_$(2)_$(1) := $$(OBJS_$(2)_$(1):.cpp=.o)
OBJS_$(2)_$(1) := $$(OBJS_$(2)_$(1):.S=.o)
NATIVE_$(2)_$(1) := $$(call CFG_STATIC_LIB_NAME_$(1),$(2))
$$(RT_OUTPUT_DIR_$(1))/$$(NATIVE_$(2)_$(1)): $$(OBJS_$(2)_$(1))
	@$$(call E, link: $$@)
	$$(Q)$$(call CFG_CREATE_ARCHIVE_$(1),$$@) $$^

endef

$(foreach target,$(CFG_TARGET), \
 $(eval $(call RUNTIME_RULES,$(target))))
$(foreach lib,$(NATIVE_LIBS), \
 $(foreach target,$(CFG_TARGET), \
  $(eval $(call THIRD_PARTY_LIB,$(target),$(lib)))))


################################################################################
# Building third-party targets with external build systems
#
# This location is meant for dependencies which have external build systems. It
# is still assumed that the output of each of these steps is a static library
# in the correct location.
################################################################################

define DEF_THIRD_PARTY_TARGETS

# $(1) is the target triple

ifeq ($$(CFG_WINDOWSY_$(1)),1)
  # A bit of history here, this used to be --enable-lazy-lock added in #14006
  # which was filed with jemalloc in jemalloc/jemalloc#83 which was also
  # reported to MinGW: http://sourceforge.net/p/mingw-w64/bugs/395/
  #
  # When updating jemalloc to 4.0, however, it was found that binaries would
  # exit with the status code STATUS_RESOURCE_NOT_OWNED indicating that a thread
  # was unlocking a mutex it never locked. Disabling this "lazy lock" option
  # seems to fix the issue, but it was enabled by default for MinGW targets in
  # 13473c7 for jemalloc.
  #
  # As a result of all that, force disabling lazy lock on Windows, and after
  # reading some code it at least *appears* that the initialization of mutexes
  # is otherwise ok in jemalloc, so shouldn't cause problems hopefully...
  #
  # tl;dr: make windows behave like other platforms by disabling lazy locking,
  #        but requires passing an option due to a historical default with
  #        jemalloc.
  JEMALLOC_ARGS_$(1) := --disable-lazy-lock
else ifeq ($(OSTYPE_$(1)), apple-ios)
  JEMALLOC_ARGS_$(1) := --disable-tls
else ifeq ($(findstring android, $(OSTYPE_$(1))), android)
  # We force android to have prefixed symbols because apparently replacement of
  # the libc allocator doesn't quite work. When this was tested (unprefixed
  # symbols), it was found that the `realpath` function in libc would allocate
  # with libc malloc (not jemalloc malloc), and then the standard library would
  # free with jemalloc free, causing a segfault.
  #
  # If the test suite passes, however, without symbol prefixes then we should be
  # good to go!
  JEMALLOC_ARGS_$(1) := --disable-tls --with-jemalloc-prefix=je_
else ifeq ($(findstring dragonfly, $(OSTYPE_$(1))), dragonfly)
  JEMALLOC_ARGS_$(1) := --with-jemalloc-prefix=je_
endif

ifdef CFG_ENABLE_DEBUG_JEMALLOC
  JEMALLOC_ARGS_$(1) += --enable-debug --enable-fill
endif

################################################################################
# jemalloc
################################################################################

ifdef CFG_ENABLE_FAST_MAKE
JEMALLOC_DEPS := $(S)/.gitmodules
else
JEMALLOC_DEPS := $(wildcard \
		   $(S)src/jemalloc/* \
		   $(S)src/jemalloc/*/* \
		   $(S)src/jemalloc/*/*/* \
		   $(S)src/jemalloc/*/*/*/*)
endif

# See #17183 for details, this file is touched during the build process so we
# don't want to consider it as a dependency.
JEMALLOC_DEPS := $(filter-out $(S)src/jemalloc/VERSION,$(JEMALLOC_DEPS))

JEMALLOC_NAME_$(1) := $$(call CFG_STATIC_LIB_NAME_$(1),jemalloc)
ifeq ($$(CFG_WINDOWSY_$(1)),1)
  JEMALLOC_REAL_NAME_$(1) := $$(call CFG_STATIC_LIB_NAME_$(1),jemalloc_s)
else
  JEMALLOC_REAL_NAME_$(1) := $$(call CFG_STATIC_LIB_NAME_$(1),jemalloc_pic)
endif
JEMALLOC_LIB_$(1) := $$(RT_OUTPUT_DIR_$(1))/$$(JEMALLOC_NAME_$(1))
JEMALLOC_BUILD_DIR_$(1) := $$(RT_OUTPUT_DIR_$(1))/jemalloc
JEMALLOC_LOCAL_$(1) := $$(JEMALLOC_BUILD_DIR_$(1))/lib/$$(JEMALLOC_REAL_NAME_$(1))

$$(JEMALLOC_LOCAL_$(1)): $$(JEMALLOC_DEPS) $$(MKFILE_DEPS)
	@$$(call E, make: jemalloc)
	cd "$$(JEMALLOC_BUILD_DIR_$(1))"; "$(S)src/jemalloc/configure" \
		$$(JEMALLOC_ARGS_$(1)) $(CFG_JEMALLOC_FLAGS) \
		--build=$$(CFG_GNU_TRIPLE_$(CFG_BUILD)) --host=$$(CFG_GNU_TRIPLE_$(1)) \
		CC="$$(CC_$(1)) $$(CFG_JEMALLOC_CFLAGS_$(1))" \
		AR="$$(AR_$(1))" \
		RANLIB="$$(AR_$(1)) s" \
		CPPFLAGS="-I $(S)src/rt/" \
		EXTRA_CFLAGS="-g1 -ffunction-sections -fdata-sections"
	$$(Q)$$(MAKE) -C "$$(JEMALLOC_BUILD_DIR_$(1))" build_lib_static

ifeq ($(1),$$(CFG_BUILD))
ifneq ($$(CFG_JEMALLOC_ROOT),)
$$(JEMALLOC_LIB_$(1)): $$(CFG_JEMALLOC_ROOT)/libjemalloc_pic.a
	@$$(call E, copy: jemalloc)
	$$(Q)cp $$< $$@
else
$$(JEMALLOC_LIB_$(1)): $$(JEMALLOC_LOCAL_$(1))
	$$(Q)cp $$< $$@
endif
else
$$(JEMALLOC_LIB_$(1)): $$(JEMALLOC_LOCAL_$(1))
	$$(Q)cp $$< $$@
endif

################################################################################
# compiler-rt
################################################################################

# Everything below is a manual compilation of compiler-rt, disregarding its
# build system. See comments in `src/bootstrap/native.rs` for more information.

COMPRT_NAME_$(1) := $$(call CFG_STATIC_LIB_NAME_$(1),compiler-rt)
COMPRT_LIB_$(1) := $$(RT_OUTPUT_DIR_$(1))/$$(COMPRT_NAME_$(1))
COMPRT_BUILD_DIR_$(1) := $$(RT_OUTPUT_DIR_$(1))/compiler-rt

# GENERIC_SOURCES in CMakeLists.txt
COMPRT_OBJS_$(1) := \
  absvdi2.o \
  absvsi2.o \
  adddf3.o \
  addsf3.o \
  addvdi3.o \
  addvsi3.o \
  apple_versioning.o \
  ashldi3.o \
  ashrdi3.o \
  clear_cache.o \
  clzdi2.o \
  clzsi2.o \
  cmpdi2.o \
  comparedf2.o \
  comparesf2.o \
  ctzdi2.o \
  ctzsi2.o \
  divdc3.o \
  divdf3.o \
  divdi3.o \
  divmoddi4.o \
  divmodsi4.o \
  divsc3.o \
  divsf3.o \
  divsi3.o \
  divxc3.o \
  extendsfdf2.o \
  extendhfsf2.o \
  ffsdi2.o \
  fixdfdi.o \
  fixdfsi.o \
  fixsfdi.o \
  fixsfsi.o \
  fixunsdfdi.o \
  fixunsdfsi.o \
  fixunssfdi.o \
  fixunssfsi.o \
  fixunsxfdi.o \
  fixunsxfsi.o \
  fixxfdi.o \
  floatdidf.o \
  floatdisf.o \
  floatdixf.o \
  floatsidf.o \
  floatsisf.o \
  floatundidf.o \
  floatundisf.o \
  floatundixf.o \
  floatunsidf.o \
  floatunsisf.o \
  int_util.o \
  lshrdi3.o \
  moddi3.o \
  modsi3.o \
  muldc3.o \
  muldf3.o \
  muldi3.o \
  mulodi4.o \
  mulosi4.o \
  muloti4.o \
  mulsc3.o \
  mulsf3.o \
  mulvdi3.o \
  mulvsi3.o \
  mulxc3.o \
  negdf2.o \
  negdi2.o \
  negsf2.o \
  negvdi2.o \
  negvsi2.o \
  paritydi2.o \
  paritysi2.o \
  popcountdi2.o \
  popcountsi2.o \
  powidf2.o \
  powisf2.o \
  powixf2.o \
  subdf3.o \
  subsf3.o \
  subvdi3.o \
  subvsi3.o \
  truncdfhf2.o \
  truncdfsf2.o \
  truncsfhf2.o \
  ucmpdi2.o \
  udivdi3.o \
  udivmoddi4.o \
  udivmodsi4.o \
  udivsi3.o \
  umoddi3.o \
  umodsi3.o

ifeq ($$(findstring ios,$(1)),)
COMPRT_OBJS_$(1) += \
  absvti2.o \
  addtf3.o \
  addvti3.o \
  ashlti3.o \
  ashrti3.o \
  clzti2.o \
  cmpti2.o \
  ctzti2.o \
  divtf3.o \
  divti3.o \
  ffsti2.o \
  fixdfti.o \
  fixsfti.o \
  fixunsdfti.o \
  fixunssfti.o \
  fixunsxfti.o \
  fixxfti.o \
  floattidf.o \
  floattisf.o \
  floattixf.o \
  floatuntidf.o \
  floatuntisf.o \
  floatuntixf.o \
  lshrti3.o \
  modti3.o \
  multf3.o \
  multi3.o \
  mulvti3.o \
  negti2.o \
  negvti2.o \
  parityti2.o \
  popcountti2.o \
  powitf2.o \
  subtf3.o \
  subvti3.o \
  trampoline_setup.o \
  ucmpti2.o \
  udivmodti4.o \
  udivti3.o \
  umodti3.o
endif

ifeq ($$(findstring apple,$(1)),apple)
COMPRT_OBJS_$(1) +=  \
	    atomic_flag_clear.o \
	    atomic_flag_clear_explicit.o \
	    atomic_flag_test_and_set.o \
	    atomic_flag_test_and_set_explicit.o \
	    atomic_signal_fence.o \
	    atomic_thread_fence.o
endif


ifeq ($$(findstring windows,$(1)),)
COMPRT_OBJS_$(1) += emutls.o
endif

ifeq ($$(findstring msvc,$(1)),)

ifeq ($$(findstring freebsd,$(1)),)
COMPRT_OBJS_$(1) += gcc_personality_v0.o
endif

COMPRT_OBJS_$(1) += emutls.o

ifeq ($$(findstring x86_64,$(1)),x86_64)
COMPRT_OBJS_$(1) += \
      x86_64/chkstk.o \
      x86_64/chkstk2.o \
      x86_64/floatdidf.o \
      x86_64/floatdisf.o \
      x86_64/floatdixf.o \
      x86_64/floatundidf.o \
      x86_64/floatundisf.o \
      x86_64/floatundixf.o
endif

ifeq ($$(findstring i686,$$(patsubts i%86,i686,$(1))),i686)
COMPRT_OBJS_$(1) += \
      i386/ashldi3.o \
      i386/ashrdi3.o \
      i386/chkstk.o \
      i386/chkstk2.o \
      i386/divdi3.o \
      i386/floatdidf.o \
      i386/floatdisf.o \
      i386/floatdixf.o \
      i386/floatundidf.o \
      i386/floatundisf.o \
      i386/floatundixf.o \
      i386/lshrdi3.o \
      i386/moddi3.o \
      i386/muldi3.o \
      i386/udivdi3.o \
      i386/umoddi3.o
endif

else

ifeq ($$(findstring x86_64,$(1)),x86_64)
COMPRT_OBJS_$(1) += \
      x86_64/floatdidf.o \
      x86_64/floatdisf.o \
      x86_64/floatdixf.o
endif

endif

# Generic ARM sources, nothing compiles on iOS though
ifeq ($$(findstring arm,$(1)),arm)
ifeq ($$(findstring ios,$(1)),)
COMPRT_OBJS_$(1) += \
  arm/aeabi_cdcmp.o \
  arm/aeabi_cdcmpeq_check_nan.o \
  arm/aeabi_cfcmp.o \
  arm/aeabi_cfcmpeq_check_nan.o \
  arm/aeabi_dcmp.o \
  arm/aeabi_div0.o \
  arm/aeabi_drsub.o \
  arm/aeabi_fcmp.o \
  arm/aeabi_frsub.o \
  arm/aeabi_idivmod.o \
  arm/aeabi_ldivmod.o \
  arm/aeabi_memcmp.o \
  arm/aeabi_memcpy.o \
  arm/aeabi_memmove.o \
  arm/aeabi_memset.o \
  arm/aeabi_uidivmod.o \
  arm/aeabi_uldivmod.o \
  arm/bswapdi2.o \
  arm/bswapsi2.o \
  arm/clzdi2.o \
  arm/clzsi2.o \
  arm/comparesf2.o \
  arm/divmodsi4.o \
  arm/divsi3.o \
  arm/modsi3.o \
  arm/switch16.o \
  arm/switch32.o \
  arm/switch8.o \
  arm/switchu8.o \
  arm/sync_synchronize.o \
  arm/udivmodsi4.o \
  arm/udivsi3.o \
  arm/umodsi3.o
endif
endif

# Thumb sources
ifeq ($$(findstring armv7,$(1)),armv7)
COMPRT_OBJS_$(1) += \
  arm/sync_fetch_and_add_4.o \
  arm/sync_fetch_and_add_8.o \
  arm/sync_fetch_and_and_4.o \
  arm/sync_fetch_and_and_8.o \
  arm/sync_fetch_and_max_4.o \
  arm/sync_fetch_and_max_8.o \
  arm/sync_fetch_and_min_4.o \
  arm/sync_fetch_and_min_8.o \
  arm/sync_fetch_and_nand_4.o \
  arm/sync_fetch_and_nand_8.o \
  arm/sync_fetch_and_or_4.o \
  arm/sync_fetch_and_or_8.o \
  arm/sync_fetch_and_sub_4.o \
  arm/sync_fetch_and_sub_8.o \
  arm/sync_fetch_and_umax_4.o \
  arm/sync_fetch_and_umax_8.o \
  arm/sync_fetch_and_umin_4.o \
  arm/sync_fetch_and_umin_8.o \
  arm/sync_fetch_and_xor_4.o \
  arm/sync_fetch_and_xor_8.o
endif

# VFP sources
ifeq ($$(findstring eabihf,$(1)),eabihf)
COMPRT_OBJS_$(1) += \
  arm/adddf3vfp.o \
  arm/addsf3vfp.o \
  arm/divdf3vfp.o \
  arm/divsf3vfp.o \
  arm/eqdf2vfp.o \
  arm/eqsf2vfp.o \
  arm/extendsfdf2vfp.o \
  arm/fixdfsivfp.o \
  arm/fixsfsivfp.o \
  arm/fixunsdfsivfp.o \
  arm/fixunssfsivfp.o \
  arm/floatsidfvfp.o \
  arm/floatsisfvfp.o \
  arm/floatunssidfvfp.o \
  arm/floatunssisfvfp.o \
  arm/gedf2vfp.o \
  arm/gesf2vfp.o \
  arm/gtdf2vfp.o \
  arm/gtsf2vfp.o \
  arm/ledf2vfp.o \
  arm/lesf2vfp.o \
  arm/ltdf2vfp.o \
  arm/ltsf2vfp.o \
  arm/muldf3vfp.o \
  arm/mulsf3vfp.o \
  arm/negdf2vfp.o \
  arm/negsf2vfp.o \
  arm/nedf2vfp.o \
  arm/nesf2vfp.o \
  arm/restore_vfp_d8_d15_regs.o \
  arm/save_vfp_d8_d15_regs.o \
  arm/subdf3vfp.o \
  arm/subsf3vfp.o \
  arm/truncdfsf2vfp.o \
  arm/unorddf2vfp.o \
  arm/unordsf2vfp.o
endif

ifeq ($$(findstring aarch64,$(1)),aarch64)
COMPRT_OBJS_$(1) += \
  comparetf2.o \
  extenddftf2.o \
  extendsftf2.o \
  fixtfdi.o \
  fixtfsi.o \
  fixtfti.o \
  fixunstfdi.o \
  fixunstfsi.o \
  fixunstfti.o \
  floatditf.o \
  floatsitf.o \
  floatunditf.o \
  floatunsitf.o \
  multc3.o \
  trunctfdf2.o \
  trunctfsf2.o
endif

ifeq ($$(findstring msvc,$(1)),msvc)
$$(COMPRT_BUILD_DIR_$(1))/%.o: CFLAGS += -Zl -D__func__=__FUNCTION__
else
$$(COMPRT_BUILD_DIR_$(1))/%.o: CFLAGS += -fno-builtin -fvisibility=hidden \
	-fomit-frame-pointer -ffreestanding
endif

COMPRT_OBJS_$(1) := $$(COMPRT_OBJS_$(1):%=$$(COMPRT_BUILD_DIR_$(1))/%)

$$(COMPRT_BUILD_DIR_$(1))/%.o: $(S)src/compiler-rt/lib/builtins/%.c
	@mkdir -p $$(@D)
	@$$(call E, compile: $$@)
	$$(Q)$$(call CFG_COMPILE_C_$(1),$$@,$$<)

$$(COMPRT_BUILD_DIR_$(1))/%.o: $(S)src/compiler-rt/lib/builtins/%.S \
	    $$(LLVM_CONFIG_$$(CFG_BUILD))
	@mkdir -p $$(@D)
	@$$(call E, compile: $$@)
	$$(Q)$$(call CFG_ASSEMBLE_$(1),$$@,$$<)

ifeq ($$(findstring msvc,$(1)),msvc)
$$(COMPRT_BUILD_DIR_$(1))/%.o: \
	export INCLUDE := $$(CFG_MSVC_INCLUDE_PATH_$$(HOST_$(1)))
endif

ifeq ($$(findstring emscripten,$(1)),emscripten)
# FIXME: emscripten doesn't use compiler-rt and can't build it without
# further hacks
COMPRT_OBJS_$(1) :=
endif

$$(COMPRT_LIB_$(1)): $$(COMPRT_OBJS_$(1))
	@$$(call E, link: $$@)
	$$(Q)$$(call CFG_CREATE_ARCHIVE_$(1),$$@) $$^

################################################################################
# libbacktrace
#
# We use libbacktrace on linux to get symbols in backtraces, but only on linux.
# Elsewhere we use other system utilities, so this library is only built on
# linux.
################################################################################

BACKTRACE_NAME_$(1) := $$(call CFG_STATIC_LIB_NAME_$(1),backtrace)
BACKTRACE_LIB_$(1) := $$(RT_OUTPUT_DIR_$(1))/$$(BACKTRACE_NAME_$(1))
BACKTRACE_BUILD_DIR_$(1) := $$(RT_OUTPUT_DIR_$(1))/libbacktrace

# We don't use this on platforms that aren't linux-based (with the exception of
# msys2/mingw builds on windows, which use it to read the dwarf debug
# information) so just make the file available, the compilation of libstd won't
# actually build it.
ifeq ($$(findstring darwin,$$(OSTYPE_$(1))),darwin)
# See comment above
$$(BACKTRACE_LIB_$(1)):
	touch $$@

else ifeq ($$(findstring ios,$$(OSTYPE_$(1))),ios)
# See comment above
$$(BACKTRACE_LIB_$(1)):
	touch $$@
else ifeq ($$(findstring msvc,$(1)),msvc)
# See comment above
$$(BACKTRACE_LIB_$(1)):
	touch $$@
else ifeq ($$(findstring emscripten,$(1)),emscripten)
# FIXME: libbacktrace doesn't understand the emscripten triple
$$(BACKTRACE_LIB_$(1)):
	touch $$@
else

ifdef CFG_ENABLE_FAST_MAKE
BACKTRACE_DEPS := $(S)/.gitmodules
else
BACKTRACE_DEPS := $(wildcard $(S)src/libbacktrace/*)
endif

# We need to export CFLAGS because otherwise it doesn't pick up cross compile
# builds. If libbacktrace doesn't realize this, it will attempt to read 64-bit
# elf headers when compiled for a 32-bit system, yielding blank backtraces.
#
# This also removes the -Werror flag specifically to prevent errors during
# configuration.
#
# Down below you'll also see echos into the config.h generated by the
# ./configure script. This is done to force libbacktrace to *not* use the
# atomic/sync functionality because it pulls in unnecessary dependencies and we
# never use it anyway.
#
# We also use `env PWD=` to clear the PWD environment variable, and then
# execute the command in a new shell. This is necessary to workaround a
# buildbot/msys2 bug: the shell is launched with PWD set to a windows-style path,
# which results in all further uses of `pwd` also printing a windows-style path,
# which breaks libbacktrace's configure script. Clearing PWD within the same
# shell is not sufficient.

$$(BACKTRACE_BUILD_DIR_$(1))/Makefile: $$(BACKTRACE_DEPS) $$(MKFILE_DEPS)
	@$$(call E, configure: libbacktrace for $(1))
	$$(Q)rm -rf $$(BACKTRACE_BUILD_DIR_$(1))
	$$(Q)mkdir -p $$(BACKTRACE_BUILD_DIR_$(1))
	$$(Q)(cd $$(BACKTRACE_BUILD_DIR_$(1)) && env \
	      PWD= \
	      CC="$$(CC_$(1))" \
	      AR="$$(AR_$(1))" \
	      RANLIB="$$(AR_$(1)) s" \
	      CFLAGS="$$(CFG_GCCISH_CFLAGS_$(1)) -Wno-error -fno-stack-protector" \
	      $(S)src/libbacktrace/configure --build=$(CFG_GNU_TRIPLE_$(CFG_BUILD)) --host=$(CFG_GNU_TRIPLE_$(1)))
	$$(Q)echo '#undef HAVE_ATOMIC_FUNCTIONS' >> \
	      $$(BACKTRACE_BUILD_DIR_$(1))/config.h
	$$(Q)echo '#undef HAVE_SYNC_FUNCTIONS' >> \
	      $$(BACKTRACE_BUILD_DIR_$(1))/config.h

$$(BACKTRACE_LIB_$(1)): $$(BACKTRACE_BUILD_DIR_$(1))/Makefile $$(MKFILE_DEPS)
	@$$(call E, make: libbacktrace)
	$$(Q)$$(MAKE) -C $$(BACKTRACE_BUILD_DIR_$(1)) \
		INCDIR=$(S)src/libbacktrace
	$$(Q)cp $$(BACKTRACE_BUILD_DIR_$(1))/.libs/libbacktrace.a $$@

endif

################################################################################
# libc/libunwind for musl
#
# When we're building a musl-like target we're going to link libc/libunwind
# statically into the standard library and liblibc, so we need to make sure
# they're in a location that we can find
################################################################################

ifeq ($$(findstring musl,$(1)),musl)
$$(RT_OUTPUT_DIR_$(1))/%: $$(CFG_MUSL_ROOT)/lib/%
	cp $$^ $$@
else
# Ask gcc where it is
$$(RT_OUTPUT_DIR_$(1))/%:
	cp $$(shell $$(CC_$(1)) -print-file-name=$$(@F)) $$@
endif

endef

# Instantiate template for all stages/targets
$(foreach target,$(CFG_TARGET), \
     $(eval $(call DEF_THIRD_PARTY_TARGETS,$(target))))
