4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-02-08 10:09:32 +08:00
Jon Turney dc93f7ef2d
Cygwin: Remove recursive configure
There's doesn't seem to be much use in independently distributing these
subdirectories, so allowing them to be independently configured seems
pointless and overcomplicated.

The order in which the subdirectories are built is still a little odd,
as cygwin is linked with libcygserver, and cygserver is then linked with
cygwin. So, we build the cygwin directory first, which invokes a build
of libcygserver in the cygserver directory, and then build in the
cygserver directory to build the cygserver executable.

Drop AC_CONFIGURE_ARGS, since we don't need to recursively call
configure with the same arguments anymore.

Slightly refine when we build utils: Previously we didn't build any
utils if MinGW compiler use was avoided, now we just avoid building
those utils which require that compiler.

Greatly simplify how winsup_srcdir and target_builddir are set, since
we're only configuring from one directory.  (These are still kept
absolute, since we don't adjust them where used for being used in a
subdirectory).

Remove configure.cygwin and put it's (greatly reduced) contents inline
in the one place it's used now.

Remove generated configure and aclocal.m4 in subdirectories.
2020-11-20 15:56:11 +00:00

781 lines
17 KiB
Makefile

# Makefile.in for Cygwin.
#
# 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.
# configure_input: @configure_input@
# This makefile requires GNU make.
srcdir:=@srcdir@
target_builddir:=@target_builddir@
winsup_srcdir:=@winsup_srcdir@
CC:=@CC@
CXX:=@CXX@
CFLAGS?=@CFLAGS@
CXXFLAGS?=@CXXFLAGS@
INCLUDES?=@INCLUDES@
include ${srcdir}/../Makefile.common
VPATH+=$(srcdir)/regex $(srcdir)/lib $(srcdir)/libc $(srcdir)/math $(srcdir)/tzcode
target_cpu:=@target_cpu@
target_alias:=@target_alias@
build_alias:=@build_alias@
host_alias:=@host_alias@
prefix:=@prefix@
program_transform_name:=@program_transform_name@
exec_prefix:=@exec_prefix@
bindir:=@bindir@
libdir:=@libdir@
mandir:=@mandir@
sysconfdir:=@sysconfdir@
datarootdir:=@datarootdir@
ifeq ($(target_alias),$(host_alias))
ifeq ($(build_alias),$(host_alias))
tooldir:=$(exec_prefix)
else
tooldir:=$(exec_prefix)/$(target_alias)
endif
else
tooldir:=$(exec_prefix)/$(target_alias)
endif
datadir:=@datadir@
infodir:=@infodir@
includedir:=@includedir@
override INSTALL:=@INSTALL@
override INSTALL_PROGRAM:=@INSTALL_PROGRAM@
override INSTALL_DATA:=@INSTALL_DATA@
cygserver_blddir:=${target_builddir}/winsup/cygserver
LIBSERVER:=${cygserver_blddir}/libcygserver.a
LIBC:=$(newlib_build)/libc/libc.a
LIBM:=$(newlib_build)/libm/libm.a
CRT0:=$(cygwin_build)/crt0.o
#
# --enable options from configure
#
CCEXTRA=
COMMON_CFLAGS=-MMD ${$(*F)_CFLAGS} -Wimplicit-fallthrough=5 -Werror -fmerge-constants -ftracer $(CCEXTRA)
ifeq ($(target_cpu),x86_64)
COMMON_CFLAGS+=-mcmodel=small
endif
COMPILE.cc+=${COMMON_CFLAGS} # -std=gnu++14
COMPILE.c+=${COMMON_CFLAGS}
AR:=@AR@
AR_FLAGS:=qv
RANLIB:=@RANLIB@
LD:=@LD@
DLLTOOL:=@DLLTOOL@
WINDRES:=@WINDRES@
AS:=@AS@
NM:=@NM@
OBJCOPY:=@OBJCOPY@
OBJDUMP:=@OBJDUMP@
STRIP:=@STRIP@
LDSCRIPT:=cygwin.sc
MKDIRP:=$(INSTALL) -m 755 -d
# Setup the testing framework, if you have one
EXPECT = `if [ -f $${rootme}/../../expect/expect$(EXEEXT) ] ; then \
echo $${rootme}/../../expect/expect$(EXEEXT) ; \
else echo expect ; fi`
RUNTEST = `if [ -f $${srcdir}/../dejagnu/runtest ] ; then \
echo $${srcdir}/../dejagnu/runtest ; \
else echo runtest; fi`
RUNTESTFLAGS =
# Parameters used in building the cygwin.dll.
# We build as cygwin0.dll and rename at install time to overcome
# native rebuilding issues (we don't want the build tools to see a partially
# built cygwin.dll and attempt to use it instead of the old one).
DLL_NAME:=cygwin1.dll
TEST_DLL_NAME:=${patsubst %1.dll,%0.dll,$(DLL_NAME)}
TEST_LIB_NAME:=libcygwin0.a
DIN_FILE=@DIN_FILE@ common.din
DEF_FILE:=cygwin.def
TLSOFFSETS_H:=@TLSOFFSETS_H@
DLL_ENTRY:=@DLL_ENTRY@
LIBGMON_A:=libgmon.a
CYGWIN_START:=crt0.o
GMON_START:=gcrt0.o
toolopts:=--cpu=${target_cpu} --ar=${AR} --as=${AS} --nm=${NM} --objcopy=${OBJCOPY}
speclib=\
${srcdir}/speclib ${toolopts} \
--exclude='cygwin' \
--exclude='(?i:dll)' \
--exclude='reloc' \
--exclude='^main$$' \
--exclude='^_main$$' \
$^
# Some things want these from libc, but they have their own static
# data which apps can get to, which is a pain in the dll, so we
# include them directly into the library.
LIBCOS:=${sort ${addsuffix .o,${basename ${notdir ${wildcard $(srcdir)/lib/*.c}}}} \
${addsuffix .o,${basename ${notdir ${wildcard $(srcdir)/lib/*.cc}}}}}
# Build all source files in the config directory
EXTRA_OFILES:=
MALLOC_OFILES:=malloc.o
DLL_IMPORTS:=${shell $(CC) -print-file-name=w32api/libkernel32.a} ${shell $(CC) -print-file-name=w32api/libntdll.a}
#
LIBC_OFILES:= \
arc4random_stir.o \
base64.o \
bsdlib.o \
call_once.o \
cnd.o \
fnmatch.o \
fts.o \
ftw.o \
getentropy.o \
getopt.o \
inet_addr.o \
inet_network.o \
minires-os-if.o \
minires.o \
msgcat.o \
mtx.o \
nftw.o \
rcmd.o \
rexec.o \
strfmon.o \
strptime.o \
thrd.o \
tss.o \
xsique.o
MATH_OFILES:= \
acoshl.o \
acosl.o \
asinhl.o \
asinl.o \
atan2l.o \
atanhl.o \
atanl.o \
cabsl.o \
cacosl.o \
cargl.o \
casinl.o \
catanl.o \
cbrtl.o \
ccosl.o \
ceill.o \
cephes_emath.o \
cexpl.o \
cimagl.o \
clog10l.o \
clogl.o \
conjl.o \
copysignl.o \
coshl.o \
cosl.o \
cosl_internal.o \
cossin.o \
cpowl.o \
cprojl.o \
creall.o \
csinl.o \
csqrtl.o \
ctanl.o \
erfl.o \
exp10l.o \
exp2l.o \
expl.o \
expm1l.o \
fabsl.o \
fdiml.o \
finite.o \
floorl.o \
fmal.o \
fmaxl.o \
fminl.o \
fmodl.o \
frexpl.o \
ilogbl.o \
internal_logl.o \
isinf.o \
isnan.o \
ldexpl.o \
lgammal.o \
llrint.o \
llrintf.o \
llrintl.o \
llroundl.o \
log10l.o \
log1pl.o \
log2l.o \
logbl.o \
logl.o \
lrint.o \
lrintf.o \
lrintl.o \
lroundl.o \
modfl.o \
nearbyint.o \
nearbyintf.o \
nearbyintl.o \
nextafterl.o \
nexttoward.o \
nexttowardf.o \
pow10l.o \
powil.o \
powl.o \
remainder.o \
remainderf.o \
remainderl.o \
remquol.o \
rint.o \
rintf.o \
rintl.o \
roundl.o \
scalbl.o \
scalbnl.o \
sinhl.o \
sinl.o \
sinl_internal.o \
sqrtl.o \
tanhl.o \
tanl.o \
tgammal.o \
truncl.o
TZCODE_OFILES:=localtime.o
DLL_OFILES:= \
advapi32.o \
aio.o \
assert.o \
autoload.o \
clock.o \
ctype.o \
cxx.o \
cygheap.o \
cygthread.o \
cygtls.o \
cygwait.o \
cygxdr.o \
dcrt0.o \
debug.o \
devices.o \
dir.o \
dlfcn.o \
dll_init.o \
dtable.o \
environ.o \
errno.o \
exceptions.o \
exec.o \
external.o \
fcntl.o \
fenv.o \
fhandler.o \
fhandler_clipboard.o \
fhandler_console.o \
fhandler_cygdrive.o \
fhandler_dev.o \
fhandler_disk_file.o \
fhandler_dsp.o \
fhandler_fifo.o \
fhandler_floppy.o \
fhandler_netdrive.o \
fhandler_nodevice.o \
fhandler_pipe.o \
fhandler_proc.o \
fhandler_process.o \
fhandler_process_fd.o \
fhandler_procnet.o \
fhandler_procsys.o \
fhandler_procsysvipc.o \
fhandler_random.o \
fhandler_raw.o \
fhandler_registry.o \
fhandler_serial.o \
fhandler_signalfd.o \
fhandler_socket.o \
fhandler_socket_inet.o \
fhandler_socket_local.o \
fhandler_socket_unix.o \
fhandler_tape.o \
fhandler_termios.o \
fhandler_timerfd.o \
fhandler_tty.o \
fhandler_virtual.o \
fhandler_windows.o \
fhandler_zero.o \
flock.o \
fork.o \
forkable.o \
glob.o \
glob_pattern_p.o \
globals.o \
grp.o \
heap.o \
hookapi.o \
init.o \
ioctl.o \
ipc.o \
kernel32.o \
ldap.o \
libstdcxx_wrapper.o \
loadavg.o \
lsearch.o \
malloc_wrapper.o \
miscfuncs.o \
mktemp.o \
mmap.o \
mmap_alloc.o \
msg.o \
mount.o \
net.o \
netdb.o \
nfs.o \
nlsfuncs.o \
ntea.o \
passwd.o \
path.o \
pinfo.o \
poll.o \
posix_ipc.o \
posix_timer.o \
pseudo-reloc.o \
pthread.o \
quotactl.o \
random.o \
regcomp.o \
regerror.o \
regexec.o \
regfree.o \
registry.o \
resource.o \
scandir.o \
sched.o \
sec_acl.o \
sec_auth.o \
sec_helper.o \
sec_posixacl.o \
security.o \
select.o \
sem.o \
setlsapwd.o \
shared.o \
shm.o \
sigfe.o \
signal.o \
sigproc.o \
smallprint.o \
spawn.o \
strace.o \
strfuncs.o \
strsep.o \
strsig.o \
sync.o \
syscalls.o \
sysconf.o \
syslog.o \
termios.o \
thread.o \
timerfd.o \
times.o \
tls_pbuf.o \
tty.o \
uinfo.o \
uname.o \
wait.o \
wincap.o \
window.o \
winf.o \
$(EXTRA_OFILES) \
$(MALLOC_OFILES) \
$(LIBC_OFILES) \
$(MATH_OFILES) \
$(TZCODE_OFILES)
VERSION_OFILES:=version.o winver.o
ifeq ($(target_cpu),x86_64)
# Needed by mcountFunc.S to choose the right code path and symbol names
ASFLAGS:=-D_WIN64
endif
GMON_OFILES:=gmon.o mcount.o profil.o mcountFunc.o
NEW_FUNCTIONS:=$(addprefix --replace=,\
atexit= \
timezone= \
uname=uname_x \
__xdrrec_getrec= \
__xdrrec_setnonblock= \
xdr_array= \
xdr_bool= \
xdr_bytes= \
xdr_char= \
xdr_double= \
xdr_enum= \
xdr_float= \
xdr_free= \
xdr_hyper= \
xdr_int= \
xdr_int16_t= \
xdr_int32_t= \
xdr_int64_t= \
xdr_int8_t= \
xdr_long= \
xdr_longlong_t= \
xdr_netobj= \
xdr_opaque= \
xdr_pointer= \
xdr_reference= \
xdr_short= \
xdr_sizeof= \
xdr_string= \
xdr_u_char= \
xdr_u_hyper= \
xdr_u_int= \
xdr_u_int16_t= \
xdr_u_int32_t= \
xdr_u_int64_t= \
xdr_u_int8_t= \
xdr_u_long= \
xdr_u_longlong_t= \
xdr_u_short= \
xdr_uint16_t= \
xdr_uint32_t= \
xdr_uint64_t= \
xdr_uint8_t= \
xdr_union= \
xdr_vector= \
xdr_void= \
xdr_wrapstring= \
xdrmem_create= \
xdrrec_create= \
xdrrec_endofrecord= \
xdrrec_eof= \
xdrrec_skiprecord= \
xdrstdio_create= \
)
ifeq ($(target_cpu),x86_64)
NEW_FUNCTIONS+=
else
NEW_FUNCTIONS+=$(addprefix --replace=,\
acl=_acl32 \
aclcheck=_aclcheck32 \
aclfrommode=_aclfrommode32 \
aclfrompbits=_aclfrompbits32 \
aclfromtext=_aclfromtext32 \
aclsort=_aclsort32 \
acltomode=_acltomode32 \
acltopbits=_acltopbits32 \
acltotext=_acltotext32 \
chown=_chown32 \
facl=_facl32 \
fchown=_fchown32 \
fcntl=_fcntl64 \
fdopen=_fdopen64 \
fgetpos=_fgetpos64 \
fopen=_fopen64 \
freopen=_freopen64 \
fseeko=_fseeko64 \
fsetpos=_fsetpos64 \
fstat=_fstat64 \
ftello=_ftello64 \
ftruncate=_ftruncate64 \
getegid=_getegid32 \
geteuid=_geteuid32 \
getgid=_getgid32 \
getgrent=_getgrent32 \
getgrgid=_getgrgid32 \
getgrnam=_getgrnam32 \
getgroups=_getgroups32 \
getpwuid=_getpwuid32 \
getpwuid_r=_getpwuid_r32 \
getuid=_getuid32 \
initgroups=_initgroups32 \
lchown=_lchown32 \
lseek=_lseek64 \
lstat=_lstat64 \
mknod=_mknod32 \
mmap=_mmap64 \
open=_open64 \
setegid=_setegid32 \
seteuid=_seteuid32 \
setgid=_setgid32 \
setgroups=_setgroups32 \
setregid=_setregid32 \
setreuid=_setreuid32 \
setuid=_setuid32 \
stat=_stat64 \
tmpfile=_tmpfile64 \
truncate=_truncate64 \
)
endif
API_VER:=$(srcdir)/include/cygwin/version.h
LIB_NAME:=libcygwin.a
SUBLIBS:=libpthread.a libutil.a ${CURDIR}/libm.a ${CURDIR}/libc.a libdl.a libresolv.a librt.a libacl.a libssp.a
EXTRALIBS:=libautomode.a libbinmode.a libtextmode.a libtextreadmode.a
INSTOBJS:=automode.o binmode.o textmode.o textreadmode.o
TARGET_LIBS:=$(LIB_NAME) $(CYGWIN_START) $(GMON_START) $(LIBGMON_A) $(SUBLIBS) $(INSTOBJS) $(EXTRALIBS)
ifneq "${filter -O%,$(CFLAGS)}" ""
dtable_CFLAGS:=-fcheck-new
localtime_CFLAGS:=-fwrapv
malloc_CFLAGS:=-O3
sync_CFLAGS:=-O3
ifeq ($(target_cpu),i686)
# on x86, exceptions.cc must be compiled with a frame-pointer as it uses RtlCaptureContext()
exceptions_CFLAGS:=-fno-omit-frame-pointer
endif
endif
# required since gcc 9.x
exec_CFLAGS:=-fno-builtin-execve
fhandler_proc_CFLAGS+=-DUSERNAME="\"$(USER)\"" -DHOSTNAME="\"$(HOSTNAME)\""
fhandler_proc_CFLAGS+=-DGCC_VERSION="\"`$(CC) -v 2>&1 | tail -n 1`\""
.PHONY: all force dll_ofiles install \
install install-libs install-headers \
clean distclean realclean maintainer-clean
all: $(TARGET_LIBS) $(TEST_LIB_NAME)
force:
install: install-libs install-headers install-man install-ldif
uninstall: uninstall-libs uninstall-headers uninstall-man
install-libs: $(TARGET_LIBS)
@$(MKDIRP) $(DESTDIR)$(bindir) $(DESTDIR)$(tooldir)/lib
$(INSTALL_PROGRAM) $(TEST_DLL_NAME) $(DESTDIR)$(bindir)/$(DLL_NAME); \
for i in $^; do \
$(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/lib/`basename $$i` ; \
done
cd $(DESTDIR)$(tooldir)/lib && ln -sf libcygwin.a libg.a
install-headers:
cd $(srcdir); \
for sub in `find include -name '[a-z]*' -type d -print | sort`; do \
$(MKDIRP) $(DESTDIR)$(tooldir)/$$sub; \
for i in $$sub/*.h ; do \
$(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/$$sub/`basename $$i` ; \
done ; \
done ; \
install-man:
@$(MKDIRP) $(DESTDIR)$(mandir)/man2 $(DESTDIR)$(mandir)/man3 $(DESTDIR)$(mandir)/man5 $(DESTDIR)$(mandir)/man7
cd $(srcdir); \
for i in `find . -type f ! -path './release/*' -name '*.2'`; do \
$(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man2/`basename $$i` ; \
done; \
for i in `find . -type f ! -path './release/*' -name '*.3'`; do \
$(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man3/`basename $$i` ; \
done; \
for i in `find . -type f ! -path './release/*' -name '*.5'`; do \
$(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man5/`basename $$i` ; \
done; \
for i in `find . -type f ! -path './release/*' -name '*.7'`; do \
$(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man7/`basename $$i` ; \
done
install-ldif:
@$(MKDIRP) $(DESTDIR)$(datarootdir)/cygwin
$(INSTALL_DATA) $(srcdir)/cygwin.ldif $(DESTDIR)$(datarootdir)/cygwin
uninstall-libs: $(TARGET_LIBS)
rm -f $(bindir)/$(DLL_NAME); \
for i in $^; do \
rm -f $(tooldir)/lib/$$i ; \
done
uninstall-headers:
cd $(srcdir); \
for sub in `find include -name '[a-z]*' -type d -print | sort`; do \
for i in $$sub/*.h ; do \
rm -f $(tooldir)/$$sub/`basename $$i` ; \
done ; \
done ; \
uninstall-man:
cd $(srcdir); \
for i in `find . -type f -name '*.2'`; do \
rm -f $(DESTDIR)$(mandir)/man2/`basename $$i` ; \
done; \
for i in `find . -type f -name '*.3'`; do \
rm -f $(DESTDIR)$(mandir)/man3/`basename $$i` ; \
done; \
for i in `find . -type f -name '*.5'`; do \
rm -f $(DESTDIR)$(mandir)/man5/`basename $$i` ; \
done; \
for i in `find . -type f -name '*.7'`; do \
rm -f $(DESTDIR)$(mandir)/man7/`basename $$i` ; \
done
clean distclean realclean:
-rm -f *.o *.dll *.dbg *.a *.exp junk *.base version.cc *.exe *.d \
*stamp* *_magic.h sigfe.s cygwin.def cygwin.map cygwin.sc \
globals.h localtime.patched.c
-@$(MAKE) -C ${cygserver_blddir} libclean
maintainer-clean: clean
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
-rm -fr configure
-rm -f $(srcdir)/$(TLSOFFSETS_H) $(srcdir)/devices.cc
# Rule to build LDSCRIPT
$(LDSCRIPT): $(LDSCRIPT).in
$(CC) -E - -P < $^ -o $@
# Rule to build cygwin.dll
$(TEST_DLL_NAME): $(LDSCRIPT) dllfixdbg $(DLL_OFILES) $(LIBSERVER) $(LIBC) $(LIBM) $(API_VER) Makefile $(VERSION_OFILES)
$(CXX) $(CXXFLAGS) \
-mno-use-libstdc-wrappers \
-Wl,--gc-sections -nostdlib -Wl,-T$(firstword $^) -static \
-Wl,--heap=0 -Wl,--out-implib,cygdll.a -shared -o $@ \
-e $(DLL_ENTRY) $(DEF_FILE) $(DLL_OFILES) $(VERSION_OFILES) \
$(MALLOC_OBJ) $(LIBSERVER) $(LIBM) $(LIBC) \
-lgcc $(DLL_IMPORTS) -Wl,-Map,cygwin.map
@$(word 2,$^) $(OBJDUMP) $(OBJCOPY) $@ ${patsubst %0.dll,%1.dbg,$@}
@ln -f $@ new-$(DLL_NAME)
# Rule to build libcygwin.a
$(LIB_NAME): $(DEF_FILE) $(LIBCOS) | $(TEST_DLL_NAME)
${srcdir}/mkimport ${toolopts} ${NEW_FUNCTIONS} $@ cygdll.a $(wordlist 2,99,$^)
# Rule to make stub library used by testsuite
# dependency set to $(LIB_NAME) to accommodate make -j2.
$(TEST_LIB_NAME): $(LIB_NAME)
perl -p -e 'BEGIN{binmode(STDIN); binmode(STDOUT);}; s/cygwin1/cygwin0/g' < $? > $@
$(LIBSERVER): ${cygserver_blddir}/Makefile
$(MAKE) -C ${cygserver_blddir} libcygserver.a
dll_ofiles: $(DLL_OFILES)
$(LIBGMON_A): $(GMON_OFILES) $(GMON_START)
$(AR) rcv $(LIBGMON_A) $(GMON_OFILES)
globals.h: mkglobals_h globals.cc
$^ > $@
${DLL_OFILES} ${LIBCOS}: globals.h $(srcdir)/$(TLSOFFSETS_H)
shared_info_magic.h: cygmagic shared_info.h
/bin/sh $(word 1,$^) $@ "${COMPILE.cc} -E -x c++" $(word 2,$^) SHARED_MAGIC 'class shared_info' USER_MAGIC 'class user_info'
child_info_magic.h: cygmagic child_info.h
/bin/sh $(word 1,$^) $@ "${COMPILE.cc} -E -x c++" $(word 2,$^) CHILD_INFO_MAGIC 'class child_info'
dcrt0.o sigproc.o: child_info_magic.h
shared.o: shared_info_magic.h
localtime.patched.c: tzcode/localtime.c tzcode/localtime.c.patch
patch -u -o localtime.patched.c \
$(srcdir)/tzcode/localtime.c \
$(srcdir)/tzcode/localtime.c.patch
localtime.o: tzcode/localtime_wrapper.c localtime.patched.c
$(CC) ${COMMON_CFLAGS} ${localtime_CFLAGS} \
-I$(target_builddir)/winsup/cygwin \
-I$(srcdir) -I$(srcdir)/tzcode -c -o $@ $<
$(srcdir)/devices.cc: gendevices devices.in devices.h
${wordlist 1,2,$^} $@
${CURDIR}/libc.a: ${LIB_NAME} ${CURDIR}/libm.a libpthread.a libutil.a
${speclib} -v ${@F}
${CURDIR}/libm.a: ${LIB_NAME} $(LIBM) $(MATH_OFILES)
${speclib} ${@F}
libpthread.a: ${LIB_NAME} pthread.o thread.o call_once.o cnd.o mtx.o \
thrd.o tss.o
${speclib} ${@F}
libutil.a: ${LIB_NAME} bsdlib.o
${speclib} ${@F}
libdl.a: ${LIB_NAME} dlfcn.o
${speclib} ${@F}
libresolv.a: ${LIB_NAME} minires.o
${speclib} ${@F}
librt.a: ${LIB_NAME} posix_ipc.o
${speclib} ${@F}
libacl.a: ${LIB_NAME} sec_posixacl.o
${speclib} ${@F}
libssp.a: ${LIB_NAME} $(newlib_build)/libc/ssp/lib.a
${speclib} ${@F}
${EXTRALIBS}: lib%.a: %.o
$(AR) cru $@ $?
# Every time we touch a source file, the version info has to be rebuilt
# to maintain a correct build date, especially in uname release output
find_src_files = $(wildcard $(dir)/*.[chS]) $(wildcard $(dir)/*.cc)
src_files := $(foreach dir,$(VPATH),$(find_src_files))
# mkvers.sh creates version.cc in the first place, winver.o always
# second, so version.cc is always older than winver.o
version.cc: mkvers.sh include/cygwin/version.h winver.rc $(src_files)
@echo "Making version.cc and winver.o";\
export CC="${CC}";\
/bin/sh ${word 1,$^} ${word 2,$^} ${word 3,$^} $(WINDRES) ${CFLAGS} -I${srcdir}/include
$(VERSION_OFILES): version.cc
$(DEF_FILE): gendef $(srcdir)/$(TLSOFFSETS_H) $(DIN_FILE)
$(word 1,$^) --cpu=${target_cpu} --output-def=$@ --tlsoffsets=$(word 2,$^) $(wordlist 3,99,$^)
$(srcdir)/$(TLSOFFSETS_H): gentls_offsets cygtls.h
$^ $@ $(target_cpu) $(COMPILE.cc) || rm $@
sigfe.s: $(DEF_FILE)
@[ -s $@ ] || \
{ rm -f $(DEF_FILE); $(MAKE) -s -j1 $(DEF_FILE); }; \
[ -s $@ ] && touch $@
sigfe.o: sigfe.s $(srcdir)/$(TLSOFFSETS_H)
$(CC) ${CFLAGS} -c -o $@ $<
ctags: CTAGS
tags: CTAGS
CTAGS:
-cd $(srcdir) && \
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q \
--regex-C++='/EXPORT_ALIAS *\([a-zA-Z0-9_]*, *([a-zA-Z0-9_]*)\)/\1/' \
--regex-C++='/__ASMNAME *\("([a-zA-Z0-9_]+)"\)/\1/' \
.
deps:=${wildcard *.d}
ifneq (,$(deps))
include $(deps)
endif
%: RCS/%,v