4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-01-21 05:49:19 +08:00
newlib-cygwin/winsup/utils/Makefile.in
Jon Turney 7fa743ca94
Cygwin: Restore setting CC and CXX Makefile variables
b55e3f19 was a bit too aggressive in dropping, rather than just
un-exporting these Makefile variables.  We need to set these to the
configured host compiler if we are cross-compiling, otherwise they
default to the build compiler.

Also export CC to the mkvers.sh script (which requires it since
4eca5e6a).  It's unclear why we can't just cause windres to use the
build 'cpp' as the pre-processor there.
2020-10-28 15:23:56 +00:00

183 lines
5.6 KiB
Makefile

# Makefile for Cygwin utilities
# This file is part of Cygwin.
# This software is a copyrighted work licensed under the terms of the
# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
# details.
srcdir:=@srcdir@
target_builddir:=@target_builddir@
winsup_srcdir:=@winsup_srcdir@
configure_args=@configure_args@
CC:=@CC@
CXX:=@CXX@
CFLAGS_COMMON=-Wimplicit-fallthrough=4 -Werror
CFLAGS:=@CFLAGS@
CXXFLAGS:=@CXXFLAGS@
INCLUDES:=@INCLUDES@
override CFLAGS+=${CFLAGS_COMMON}
override CXXFLAGS+=-fno-exceptions -fno-rtti ${CFLAGS_COMMON}
include ${srcdir}/../Makefile.common
cygwin_build:=${target_builddir}/winsup/cygwin
prefix:=@prefix@
exec_prefix:=@exec_prefix@
bindir:=@bindir@
override INSTALL:=@INSTALL@
override INSTALL_PROGRAM:=@INSTALL_PROGRAM@
override INSTALL_DATA:=@INSTALL_DATA@
EXEEXT:=@EXEEXT@
EXEEXT_FOR_BUILD:=@EXEEXT_FOR_BUILD@
.PHONY: all install clean realclean warn_dumper warn_cygcheck_zlib
LDLIBS := -lnetapi32 -ladvapi32 -lkernel32 -luser32
CYGWIN_LDFLAGS := -static -Wl,--enable-auto-import $(LDLIBS)
DEP_LDLIBS := $(cygwin_build)/libcygwin.a
MINGW_CXX := @MINGW_CXX@
# List all binaries to be linked in Cygwin mode. Each binary on this list
# must have a corresponding .o of the same name.
CYGWIN_BINS := ${addsuffix .exe,chattr cygpath gencat getconf getfacl ldd locale lsattr kill minidumper mkgroup \
mkpasswd mount passwd pldd ps regtool setfacl setmetamode ssp tzset umount}
# List all binaries to be linked in MinGW mode. Each binary on this list
# must have a corresponding .o of the same name.
MINGW_BINS := ${addsuffix .exe,cygcheck cygwin-console-helper ldh strace}
# List all objects to be compiled in MinGW mode. Any object not on this
# list will will be compiled in Cygwin mode implicitly, so there is no
# need for a CYGWIN_OBJS.
MINGW_OBJS := bloda.o cygcheck.o cygwin-console-helper.o dump_setup.o ldh.o path.o strace.o
MINGW_LDFLAGS:=-static
CYGCHECK_OBJS:=cygcheck.o bloda.o path.o dump_setup.o
ZLIB:=-lz
.PHONY: all
all:
# If a binary should link in any objects besides the .o with the same
# name as the binary, then list those here.
strace.exe: path.o
cygcheck.exe: cygcheck.o bloda.o path.o dump_setup.o
path-mount.o: path.cc
${COMPILE.cc} -c -DFSTAB_ONLY -o $@ $<
mount.exe: path-mount.o
.PHONY: tzmap
tzmap:
${srcdir}/tzmap-from-unicode.org > ${srcdir}/$@.h
tzmap.h:
[ -f "${srcdir}/tzmap.h" ] || ${srcdir}/tzmap-from-unicode.org > ${srcdir}/$@
tzset.o: tzmap.h
# Provide any necessary per-target variable overrides.
cygcheck.exe: MINGW_LDFLAGS += ${ZLIB} -lwininet -lpsapi -lntdll
cygcheck.exe: ${CYGCHECK_OBJS}
cygpath.o: CXXFLAGS += -fno-threadsafe-statics
cygpath.exe: CYGWIN_LDFLAGS += -lcygwin -luserenv -lntdll
ps.exe: CYGWIN_LDFLAGS += -lcygwin -lpsapi -lntdll
strace.exe: MINGW_LDFLAGS += -lntdll
ldd.exe:CYGWIN_LDFLAGS += -lpsapi -lntdll
pldd.exe: CYGWIN_LDFLAGS += -lpsapi
minidumper.exe: CYGWIN_LDFLAGS += -ldbghelp
ldh.exe: MINGW_LDFLAGS += -nostdlib -lkernel32
# Check for dumper's requirements and enable it if found.
libbfd := $(call libname,libbfd.a)
build_dumper := $(shell test -r "$(libbfd)" && echo 1)
ifdef build_dumper
CYGWIN_BINS += dumper.exe
dumper.o module_info.o: CXXFLAGS += -I$(top_srcdir)/include
dumper.o: dumper.h
dumper.exe: module_info.o
dumper.exe: CYGWIN_LDFLAGS += -lpsapi -lbfd -lintl -liconv -liberty ${ZLIB} -lntdll
else
all: warn_dumper
endif
all: Makefile $(CYGWIN_BINS) $(MINGW_BINS)
# test harness support (note: the "MINGW_BINS +=" should come after the
# "all:" above so that the testsuite is not run for "make" but only
# "make check".)
MINGW_BINS += testsuite.exe
MINGW_OBJS += path-testsuite.o testsuite.o
testsuite.exe: path-testsuite.o
path-testsuite.cc: path.cc ; @test -L $@ || ln -sf ${filter %.cc,$^} $@
path-testsuite.o: MINGW_CXXFLAGS += -DTESTSUITE
# this is necessary because this .c lives in the build dir instead of src
path-testsuite.o: MINGW_CXX := ${patsubst -I.,-I$(utils_source),$(MINGW_CXX)}
path-testsuite.cc path.cc testsuite.cc: testsuite.h
check: testsuite.exe ; $(<D)/$(<F)
# the rest of this file contains generic rules
# how to compile a MinGW object
$(MINGW_OBJS): %.o: %.cc
${MINGW_CXX} -c -o $@ ${CXXFLAGS} $(MINGW_CXXFLAGS) $<
# how to link a MinGW binary
$(MINGW_BINS): %.exe: %.o
$(MINGW_CXX) $(MINGW_CXXFLAGS) -o $@ ${filter %.o,$^} $(MINGW_LDFLAGS)
# how to link a Cygwin binary
$(CYGWIN_BINS): %.exe: %.o
${CXX} -o $@ $(filter %.o,$^) -B${cygwin_build}/ ${LDFLAGS} ${CYGWIN_LDFLAGS}
# note: how to compile a Cygwin object is covered by the pattern rule in Makefile.common
# these dependencies ensure that the required in-tree libs are built first
$(MINGW_BINS): $(DEP_LDLIBS)
$(CYGWIN_BINS): $(DEP_LDLIBS)
cygcheck.o cygpath.o module_info.o path.o ps.o regtool.o strace.o: loadlib.h
.PHONY: clean
clean:
rm -f *.o $(CYGWIN_BINS) $(MINGW_BINS) path-testsuite.cc testsuite.exe
.PHONY: realclean
realclean: clean
rm -f Makefile config.cache
.PHONY: install
install: all
/bin/mkdir -p ${DESTDIR}${bindir}
for i in $(CYGWIN_BINS) ${filter-out testsuite.exe,$(MINGW_BINS)} ; do \
$(INSTALL_PROGRAM) $$i $(DESTDIR)$(bindir)/$$i; \
done
$(cygwin_build)/libcygwin.a: $(cygwin_build)/Makefile
@$(MAKE) -C $(@D) $(@F)
.PHONY: warn_dumper
warn_dumper:
@echo '*** Not building dumper.exe since some required libraries or'
@echo '*** or headers are missing. Potential candidates are:'
@echo '*** bfd.h, libbfd.a, libiconv.a, or libintl.a'
@echo '*** If you need this program, check out the naked-bfd and naked-intl'
@echo '*** sources from sourceware.org. Then, configure and build these'
@echo '*** libraries. Otherwise, you can safely ignore this warning.'
Makefile: Makefile.in config.status
/bin/sh ./config.status