mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-19 04:49:25 +08:00
96bc16f6b2
Convert all the libc/ subdir makes into the top-level Makefile. This allows us to build all of libc from the top Makefile without using any recursive make calls. This is faster and avoids the funky lib.a logic where we unpack subdir archives to repack into a single libc.a. The machine override logic is maintained though by way of Makefile include ordering, and source file accumulation in libc_a_SOURCES. There's a few dummy.c files that are no longer necessary since we aren't doing the lib.a accumulating, so punt them. The winsup code has been pulling the internal newlib ssp library out, but that doesn't exist anymore, so change that to pull the objects.
803 lines
17 KiB
Makefile
803 lines
17 KiB
Makefile
# Makefile.am 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.
|
|
|
|
# This makefile requires GNU make.
|
|
|
|
AUTOMAKE_OPTIONS=-Wno-override
|
|
|
|
include $(top_srcdir)/Makefile.am.common
|
|
|
|
COMMON_CFLAGS=-Wimplicit-fallthrough=5 -Werror -fmerge-constants -ftracer
|
|
if TARGET_X86_64
|
|
COMMON_CFLAGS+=-mcmodel=small
|
|
endif
|
|
|
|
AM_CFLAGS=$(cflags_common) $(COMMON_CFLAGS)
|
|
AM_CXXFLAGS=$(cxxflags_common) $(COMMON_CFLAGS) -fno-threadsafe-statics
|
|
|
|
if TARGET_X86_64
|
|
# Needed by mcountFunc.S to choose the right code path and symbol names
|
|
AM_CCASFLAGS=-D_WIN64
|
|
endif
|
|
|
|
target_builddir=@target_builddir@
|
|
newlib_build=$(target_builddir)/newlib
|
|
|
|
#
|
|
# Specialize libdir and includedir to use tooldir prefixed paths (containing
|
|
# target_alias) as used by newlib, because we overwrite library and header files
|
|
# installed there by newlib.
|
|
#
|
|
|
|
toollibdir=$(tooldir)/lib
|
|
toolincludedir=$(tooldir)/include
|
|
|
|
# Parameters used in building the cygwin.dll.
|
|
|
|
DLL_NAME=cygwin1.dll
|
|
PRE_DLL_NAME=cygwin0.dll
|
|
DBG_DLL_NAME=cygwin1.dbg
|
|
NEW_DLL_NAME=new-cygwin1.dll
|
|
DIN_FILE=@DIN_FILE@
|
|
DEF_FILE=cygwin.def
|
|
TLSOFFSETS_H=@TLSOFFSETS_H@
|
|
LIB_NAME=libcygwin.a
|
|
TEST_LIB_NAME=libcygwin0.a
|
|
|
|
#
|
|
# sources
|
|
#
|
|
|
|
# These objects are included directly into the import library
|
|
LIB_FILES= \
|
|
lib/_cygwin_crt0_common.cc \
|
|
lib/atexit.c \
|
|
lib/cygwin_attach_dll.c \
|
|
lib/cygwin_crt0.c \
|
|
lib/dll_entry.c \
|
|
lib/dll_main.cc \
|
|
lib/dso_handle.c \
|
|
lib/libcmain.c \
|
|
lib/premain0.c \
|
|
lib/premain1.c \
|
|
lib/premain2.c \
|
|
lib/premain3.c \
|
|
lib/pseudo-reloc-dummy.c
|
|
|
|
LIBC_FILES= \
|
|
libc/arc4random_stir.c \
|
|
libc/base64.c \
|
|
libc/bsdlib.cc \
|
|
libc/call_once.c \
|
|
libc/cnd.c \
|
|
libc/fnmatch.c \
|
|
libc/fts.c \
|
|
libc/ftw.c \
|
|
libc/getentropy.cc \
|
|
libc/getopt.c \
|
|
libc/inet_addr.c \
|
|
libc/inet_network.c \
|
|
libc/minires-os-if.c \
|
|
libc/minires.c \
|
|
libc/msgcat.c \
|
|
libc/mtx.c \
|
|
libc/nftw.c \
|
|
libc/rcmd.cc \
|
|
libc/rexec.cc \
|
|
libc/strfmon.c \
|
|
libc/strptime.cc \
|
|
libc/thrd.c \
|
|
libc/tss.c \
|
|
libc/xsique.cc
|
|
|
|
MATH_FILES= \
|
|
math/acoshl.c \
|
|
math/acosl.c \
|
|
math/asinhl.c \
|
|
math/asinl.c \
|
|
math/atan2l.c \
|
|
math/atanhl.c \
|
|
math/atanl.c \
|
|
math/cabsl.c \
|
|
math/cacosl.c \
|
|
math/cargl.c \
|
|
math/casinl.c \
|
|
math/catanl.c \
|
|
math/cbrtl.c \
|
|
math/ccosl.c \
|
|
math/ceill.S \
|
|
math/cephes_emath.c \
|
|
math/cexpl.c \
|
|
math/cimagl.c \
|
|
math/clog10l.c \
|
|
math/clogl.c \
|
|
math/conjl.c \
|
|
math/copysignl.S \
|
|
math/coshl.c \
|
|
math/cosl.c \
|
|
math/cosl_internal.S \
|
|
math/cossin.c \
|
|
math/cpowl.c \
|
|
math/cprojl.c \
|
|
math/creall.c \
|
|
math/csinl.c \
|
|
math/csqrtl.c \
|
|
math/ctanl.c \
|
|
math/erfl.c \
|
|
math/exp10l.c \
|
|
math/exp2l.S \
|
|
math/expl.c \
|
|
math/expm1l.c \
|
|
math/fabsl.c \
|
|
math/fdiml.c \
|
|
math/finite.c \
|
|
math/floorl.S \
|
|
math/fmal.c \
|
|
math/fmaxl.c \
|
|
math/fminl.c \
|
|
math/fmodl.c \
|
|
math/frexpl.S \
|
|
math/hypotl.c \
|
|
math/ilogbl.S \
|
|
math/internal_logl.S \
|
|
math/isinf.c \
|
|
math/isnan.c \
|
|
math/ldexpl.c \
|
|
math/lgammal.c \
|
|
math/llrint.c \
|
|
math/llrintf.c \
|
|
math/llrintl.c \
|
|
math/llroundl.c \
|
|
math/log10l.S \
|
|
math/log1pl.S \
|
|
math/log2l.S \
|
|
math/logbl.c \
|
|
math/logl.c \
|
|
math/lrint.c \
|
|
math/lrintf.c \
|
|
math/lrintl.c \
|
|
math/lroundl.c \
|
|
math/modfl.c \
|
|
math/nearbyint.S \
|
|
math/nearbyintf.S \
|
|
math/nearbyintl.S \
|
|
math/nextafterl.c \
|
|
math/nexttoward.c \
|
|
math/nexttowardf.c \
|
|
math/pow10l.c \
|
|
math/powil.c \
|
|
math/powl.c \
|
|
math/remainder.S \
|
|
math/remainderf.S \
|
|
math/remainderl.S \
|
|
math/remquol.S \
|
|
math/rint.c \
|
|
math/rintf.c \
|
|
math/rintl.c \
|
|
math/roundl.c \
|
|
math/scalbl.S \
|
|
math/scalbnl.S \
|
|
math/sinhl.c \
|
|
math/sinl.c \
|
|
math/sinl_internal.S \
|
|
math/sqrtl.c \
|
|
math/tanhl.c \
|
|
math/tanl.S \
|
|
math/tgammal.c \
|
|
math/truncl.c
|
|
|
|
REGEX_FILES = \
|
|
regex/regcomp.c \
|
|
regex/regerror.c \
|
|
regex/regexec.c \
|
|
regex/regfree.c
|
|
|
|
TZCODE_FILES= \
|
|
tzcode/localtime_wrapper.c
|
|
|
|
DLL_FILES= \
|
|
advapi32.cc \
|
|
aio.cc \
|
|
assert.cc \
|
|
autoload.cc \
|
|
clock.cc \
|
|
ctype.cc \
|
|
cxx.cc \
|
|
cygheap.cc \
|
|
cygthread.cc \
|
|
cygtls.cc \
|
|
cygwait.cc \
|
|
cygxdr.cc \
|
|
dcrt0.cc \
|
|
debug.cc \
|
|
devices.cc \
|
|
dir.cc \
|
|
dlfcn.cc \
|
|
dll_init.cc \
|
|
dtable.cc \
|
|
environ.cc \
|
|
errno.cc \
|
|
exceptions.cc \
|
|
exec.cc \
|
|
external.cc \
|
|
fcntl.cc \
|
|
fenv.c \
|
|
fhandler.cc \
|
|
fhandler_clipboard.cc \
|
|
fhandler_console.cc \
|
|
fhandler_cygdrive.cc \
|
|
fhandler_dev.cc \
|
|
fhandler_dev_fd.cc \
|
|
fhandler_disk_file.cc \
|
|
fhandler_dsp.cc \
|
|
fhandler_fifo.cc \
|
|
fhandler_floppy.cc \
|
|
fhandler_mqueue.cc \
|
|
fhandler_netdrive.cc \
|
|
fhandler_nodevice.cc \
|
|
fhandler_pipe.cc \
|
|
fhandler_proc.cc \
|
|
fhandler_process.cc \
|
|
fhandler_process_fd.cc \
|
|
fhandler_procnet.cc \
|
|
fhandler_procsys.cc \
|
|
fhandler_procsysvipc.cc \
|
|
fhandler_random.cc \
|
|
fhandler_raw.cc \
|
|
fhandler_registry.cc \
|
|
fhandler_serial.cc \
|
|
fhandler_signalfd.cc \
|
|
fhandler_socket.cc \
|
|
fhandler_socket_inet.cc \
|
|
fhandler_socket_local.cc \
|
|
fhandler_socket_unix.cc \
|
|
fhandler_tape.cc \
|
|
fhandler_termios.cc \
|
|
fhandler_timerfd.cc \
|
|
fhandler_tty.cc \
|
|
fhandler_virtual.cc \
|
|
fhandler_windows.cc \
|
|
fhandler_zero.cc \
|
|
flock.cc \
|
|
fork.cc \
|
|
forkable.cc \
|
|
glob.cc \
|
|
glob_pattern_p.cc \
|
|
globals.cc \
|
|
grp.cc \
|
|
heap.cc \
|
|
hookapi.cc \
|
|
init.cc \
|
|
ioctl.cc \
|
|
ipc.cc \
|
|
kernel32.cc \
|
|
ldap.cc \
|
|
libstdcxx_wrapper.cc \
|
|
loadavg.cc \
|
|
lsearch.cc \
|
|
malloc_wrapper.cc \
|
|
miscfuncs.cc \
|
|
mktemp.cc \
|
|
mmap.cc \
|
|
mmap_alloc.cc \
|
|
msg.cc \
|
|
mount.cc \
|
|
net.cc \
|
|
netdb.cc \
|
|
nfs.cc \
|
|
nlsfuncs.cc \
|
|
ntea.cc \
|
|
passwd.cc \
|
|
path.cc \
|
|
pinfo.cc \
|
|
poll.cc \
|
|
posix_ipc.cc \
|
|
posix_timer.cc \
|
|
pseudo-reloc.cc \
|
|
pthread.cc \
|
|
quotactl.cc \
|
|
random.cc \
|
|
registry.cc \
|
|
resource.cc \
|
|
scandir.cc \
|
|
sched.cc \
|
|
sec_acl.cc \
|
|
sec_auth.cc \
|
|
sec_helper.cc \
|
|
sec_posixacl.cc \
|
|
security.cc \
|
|
select.cc \
|
|
sem.cc \
|
|
setlsapwd.cc \
|
|
shared.cc \
|
|
shm.cc \
|
|
signal.cc \
|
|
sigproc.cc \
|
|
smallprint.cc \
|
|
spawn.cc \
|
|
strace.cc \
|
|
strfuncs.cc \
|
|
strsep.cc \
|
|
strsig.cc \
|
|
sync.cc \
|
|
syscalls.cc \
|
|
sysconf.cc \
|
|
syslog.cc \
|
|
termios.cc \
|
|
thread.cc \
|
|
timerfd.cc \
|
|
times.cc \
|
|
tls_pbuf.cc \
|
|
tty.cc \
|
|
uinfo.cc \
|
|
uname.cc \
|
|
wait.cc \
|
|
wincap.cc \
|
|
window.cc \
|
|
winf.cc
|
|
|
|
MALLOC_FILES= \
|
|
malloc.cc
|
|
|
|
GMON_FILES= \
|
|
gmon.c \
|
|
mcount.c \
|
|
profil.c \
|
|
mcountFunc.S
|
|
|
|
GENERATED_FILES= \
|
|
sigfe.s
|
|
|
|
liblib_a_SOURCES= \
|
|
$(LIB_FILES)
|
|
|
|
libdll_a_SOURCES= \
|
|
$(DLL_FILES) \
|
|
$(REGEX_FILES) \
|
|
$(MALLOC_FILES) \
|
|
$(LIBC_FILES) \
|
|
$(MATH_FILES) \
|
|
$(TZCODE_FILES) \
|
|
$(GENERATED_FILES)
|
|
|
|
#
|
|
# generated sources
|
|
#
|
|
|
|
shared_info_magic.h: cygmagic shared_info.h
|
|
$(AM_V_GEN)$(srcdir)/cygmagic $@ "$(CC) $(INCLUDES) $(CPPFLAGS) -E -x c++" $(word 2,$^) SHARED_MAGIC 'class shared_info' USER_MAGIC 'class user_info'
|
|
|
|
child_info_magic.h: cygmagic child_info.h
|
|
$(AM_V_GEN)$(srcdir)/cygmagic $@ "$(CC) $(INCLUDES) $(CPPFLAGS) -E -x c++" $(word 2,$^) CHILD_INFO_MAGIC 'class child_info'
|
|
|
|
globals.h: mkglobals_h globals.cc
|
|
$(AM_V_GEN)$^ > $@
|
|
|
|
localtime.patched.c: tzcode/localtime.c tzcode/localtime.c.patch
|
|
$(AM_V_GEN)patch -u -o localtime.patched.c \
|
|
$(srcdir)/tzcode/localtime.c \
|
|
$(srcdir)/tzcode/localtime.c.patch
|
|
|
|
$(srcdir)/devices.cc: gendevices devices.in devices.h
|
|
$(wordlist 1,2,$^) $@
|
|
|
|
$(srcdir)/$(TLSOFFSETS_H): gentls_offsets cygtls.h
|
|
$^ $@ $(target_cpu) $(CC) $(AM_CFLAGS) -c || rm $@
|
|
|
|
BUILT_SOURCES = \
|
|
child_info_magic.h \
|
|
shared_info_magic.h \
|
|
globals.h \
|
|
localtime.patched.c
|
|
|
|
# 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
|
|
dirs = $(srcdir) $(srcdir)/regex $(srcdir)/lib $(srcdir)/libc $(srcdir)/math $(srcdir)/tzcode
|
|
find_src_files = $(wildcard $(dir)/*.[chS]) $(wildcard $(dir)/*.cc)
|
|
src_files := $(foreach dir,$(dirs),$(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)
|
|
|
|
winver.o: version.cc
|
|
|
|
VERSION_OFILES = version.o winver.o
|
|
|
|
#
|
|
# export renames for mkimport
|
|
#
|
|
|
|
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= \
|
|
)
|
|
|
|
if !TARGET_X86_64
|
|
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
|
|
|
|
#
|
|
# per-file compilation flags
|
|
#
|
|
# (these come after, and thus override, the user-supplied CXXFLAGS, as they need
|
|
# to be able to fiddle with the optimization level)
|
|
#
|
|
|
|
override CFLAGS += $($(*F)_CFLAGS)
|
|
override CXXFLAGS += $($(*F)_CFLAGS)
|
|
AM_CXXFLAGS += $(CFLAGS)
|
|
|
|
localtime_wrapper_CFLAGS=-I$(srcdir)/tzcode -fwrapv
|
|
|
|
# required since gcc 9.x
|
|
exec_CFLAGS=-fno-builtin-execve
|
|
|
|
fhandler_proc_CFLAGS=-DUSERNAME="\"$(USER)\"" -DHOSTNAME="\"$(HOSTNAME)\"" \
|
|
-DGCC_VERSION="\"`$(CC) -v 2>&1 | tail -n 1`\""
|
|
|
|
if !TARGET_X86_64
|
|
# on x86, exceptions.cc must be compiled with a frame-pointer as it uses RtlCaptureContext()
|
|
exceptions_CFLAGS=-fno-omit-frame-pointer
|
|
endif
|
|
|
|
dtable_CFLAGS=-fcheck-new
|
|
|
|
#
|
|
# libraries and installed objects
|
|
#
|
|
# (Don't ever try to use automake's shared library support via libtool to build
|
|
# Cygwin. Instead we have explicit rules to build it.)
|
|
#
|
|
|
|
SUBLIBS = \
|
|
libpthread.a \
|
|
libutil.a \
|
|
libm.a \
|
|
libc.a \
|
|
libdl.a \
|
|
libresolv.a \
|
|
librt.a \
|
|
libacl.a \
|
|
libssp.a
|
|
|
|
EXTRALIBS = \
|
|
libautomode.a \
|
|
libbinmode.a \
|
|
libtextmode.a \
|
|
libtextreadmode.a
|
|
|
|
noinst_LIBRARIES = \
|
|
libdll.a \
|
|
liblib.a
|
|
|
|
toollib_LIBRARIES = \
|
|
libgmon.a \
|
|
$(EXTRALIBS)
|
|
|
|
CYGWIN_START=crt0.o
|
|
GMON_START=gcrt0.o
|
|
INSTOBJS=automode.o binmode.o textmode.o textreadmode.o
|
|
|
|
toollib_DATA = \
|
|
$(CYGWIN_START) \
|
|
$(GMON_START) \
|
|
$(INSTOBJS) \
|
|
$(LIB_NAME) \
|
|
$(SUBLIBS)
|
|
|
|
libgmon_a_SOURCES = $(GMON_FILES)
|
|
libgmon_a_LIBADD =
|
|
|
|
libautomode_a_SOURCES =
|
|
libautomode_a_LIBADD = automode.o
|
|
|
|
libbinmode_a_SOURCES =
|
|
libbinmode_a_LIBADD = binmode.o
|
|
|
|
libtextmode_a_SOURCES =
|
|
libtextmode_a_LIBADD = textmode.o
|
|
|
|
libtextreadmode_a_SOURCES =
|
|
libtextreadmode_a_LIBADD = textreadmode.o
|
|
|
|
# cygserver library
|
|
cygserver_blddir = ${target_builddir}/winsup/cygserver
|
|
LIBSERVER = $(cygserver_blddir)/libcygserver.a
|
|
|
|
$(LIBSERVER):
|
|
$(MAKE) -C $(cygserver_blddir) libcygserver.a
|
|
|
|
# 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).
|
|
|
|
# linker script
|
|
LDSCRIPT=cygwin.sc
|
|
$(LDSCRIPT): $(LDSCRIPT).in
|
|
$(AM_V_GEN)$(CC) -E - -P < $^ -o $@
|
|
|
|
# cygwin dll
|
|
$(PRE_DLL_NAME): $(LDSCRIPT) libdll.a $(VERSION_OFILES) $(LIBSERVER)\
|
|
$(newlib_build)/libm.a $(newlib_build)/libc.a
|
|
$(AM_V_CXXLD)$(CXX) $(CXXFLAGS) \
|
|
-mno-use-libstdc-wrappers \
|
|
-Wl,--gc-sections -nostdlib -Wl,-T$(LDSCRIPT) -static \
|
|
-Wl,--heap=0 -Wl,--out-implib,cygdll.a -shared -o $@ \
|
|
-e @DLL_ENTRY@ $(DEF_FILE) \
|
|
-Wl,-whole-archive libdll.a -Wl,-no-whole-archive \
|
|
$(VERSION_OFILES) \
|
|
$(LIBSERVER) \
|
|
$(newlib_build)/libm.a \
|
|
$(newlib_build)/libc.a \
|
|
-lgcc -lkernel32 -lntdll -Wl,-Map,cygwin.map
|
|
|
|
# create cygwin1.dbg file
|
|
$(DBG_DLL_NAME): $(PRE_DLL_NAME)
|
|
$(AM_V_GEN)$(OBJCOPY) -R .gnu_debuglink_overlay \
|
|
--add-gnu-debuglink=/dev/null \
|
|
--only-keep-debug \
|
|
$(PRE_DLL_NAME) \
|
|
$(DBG_DLL_NAME)
|
|
|
|
# create stripped, temporary DLL, append .gnu_debuglink section, move
|
|
# .gnu_debuglink section in place of .gnu_debuglink_overlay placeholder
|
|
# section and store result in new-cygwin1.dll
|
|
$(NEW_DLL_NAME): $(PRE_DLL_NAME) $(DBG_DLL_NAME)
|
|
$(AM_V_GEN)TMP_DLL_NAME=$$( mktemp --suffix=.dll ) && \
|
|
$(OBJCOPY) -g \
|
|
--keep-section=.gnu_debuglink_overlay \
|
|
--add-gnu-debuglink=$(DBG_DLL_NAME) \
|
|
$(PRE_DLL_NAME) $${TMP_DLL_NAME} && \
|
|
vma=$$( objdump --headers $${TMP_DLL_NAME} | \
|
|
awk '/.gnu_debuglink_overlay/{print $$4;}' ) && \
|
|
$(OBJCOPY) -R .gnu_debuglink_overlay \
|
|
--change-section-address .gnu_debuglink=0x$${vma} \
|
|
--set-section-flag .gnu_debuglink=contents,readonly,debug,noload \
|
|
$${TMP_DLL_NAME} $(NEW_DLL_NAME) && \
|
|
rm $${TMP_DLL_NAME}
|
|
|
|
# cygwin import library
|
|
toolopts=--cpu=@target_cpu@ --ar=@AR@ --as=@AS@ --nm=@NM@ --objcopy=@OBJCOPY@
|
|
|
|
$(DEF_FILE): gendef $(srcdir)/$(TLSOFFSETS_H) $(DIN_FILE) common.din
|
|
$(AM_V_GEN)$(srcdir)/gendef --cpu=@target_cpu@ --output-def=$(DEF_FILE) --tlsoffsets=$(srcdir)/$(TLSOFFSETS_H) $(srcdir)/$(DIN_FILE) $(srcdir)/common.din
|
|
|
|
sigfe.s: $(DEF_FILE)
|
|
@[ -s $@ ] || \
|
|
{ rm -f $(DEF_FILE); $(MAKE) -s -j1 $(DEF_FILE); }; \
|
|
[ -s $@ ] && touch $@
|
|
|
|
LIBCOS=$(addsuffix .o,$(basename $(LIB_FILES)))
|
|
$(LIB_NAME): $(DEF_FILE) $(LIBCOS) | $(NEW_DLL_NAME)
|
|
$(AM_V_GEN)$(srcdir)/mkimport $(toolopts) $(NEW_FUNCTIONS) $@ cygdll.a $(wordlist 2,99,$^)
|
|
|
|
# cygwin import library used by testsuite
|
|
$(TEST_LIB_NAME): $(LIB_NAME)
|
|
$(AM_V_GEN)perl -p -e 'BEGIN{binmode(STDIN); binmode(STDOUT);}; s/cygwin1/cygwin0/g' < $? > $@
|
|
|
|
# sublibs
|
|
# import libraries for some subset of symbols indicated by given objects
|
|
speclib=\
|
|
$(srcdir)/speclib $(toolopts) \
|
|
--exclude='cygwin' \
|
|
--exclude='(?i:dll)' \
|
|
--exclude='reloc' \
|
|
--exclude='^main$$' \
|
|
--exclude='^_main$$'
|
|
|
|
libc.a: $(LIB_NAME) libm.a libpthread.a libutil.a
|
|
$(AM_V_GEN)$(speclib) $^ -v $(@F)
|
|
|
|
libm.a: $(LIB_NAME) $(newlib_build)/libm.a $(addsuffix .o,$(basename $(MATH_FILES)))
|
|
$(AM_V_GEN)$(speclib) $^ $(@F)
|
|
|
|
libpthread.a: $(LIB_NAME) pthread.o thread.o libc/call_once.o libc/cnd.o \
|
|
libc/mtx.o libc/thrd.o libc/tss.o
|
|
$(AM_V_GEN)$(speclib) $^ $(@F)
|
|
|
|
libutil.a: $(LIB_NAME) libc/bsdlib.o
|
|
$(AM_V_GEN)$(speclib) $^ $(@F)
|
|
|
|
libdl.a: $(LIB_NAME) dlfcn.o
|
|
$(AM_V_GEN)$(speclib) $^ $(@F)
|
|
|
|
libresolv.a: $(LIB_NAME) libc/minires.o
|
|
$(AM_V_GEN)$(speclib) $^ $(@F)
|
|
|
|
librt.a: $(LIB_NAME) posix_ipc.o
|
|
$(AM_V_GEN)$(speclib) $^ $(@F)
|
|
|
|
libacl.a: $(LIB_NAME) sec_posixacl.o
|
|
$(AM_V_GEN)$(speclib) $^ $(@F)
|
|
|
|
libssp.a: $(LIB_NAME) $(wildcard $(newlib_build)/libc/ssp/*.o)
|
|
$(AM_V_GEN)$(speclib) $^ $(@F)
|
|
|
|
#
|
|
# all
|
|
#
|
|
|
|
all-local: $(LIB_NAME) $(TEST_LIB_NAME) $(SUBLIBS)
|
|
|
|
#
|
|
# clean
|
|
#
|
|
|
|
clean-local:
|
|
-rm -f $(BUILT_SOURCES)
|
|
-rm -f $(DEF_FILE) sigfe.s
|
|
-rm -f cygwin.sc cygdll.a cygwin.map
|
|
-rm -f $(PRE_DLL_NAME) $(DBG_DLL_NAME) $(NEW_DLL_NAME)
|
|
-rm -f $(LIB_NAME) $(TEST_LIB_NAME) $(SUBLIBS)
|
|
-rm -f version.cc
|
|
|
|
maintainer-clean-local:
|
|
-rm -f $(srcdir)/$(TLSOFFSETS_H) $(srcdir)/devices.cc
|
|
|
|
#
|
|
# install
|
|
#
|
|
|
|
man_MANS = regex/regex.3 regex/regex.7
|
|
|
|
install-exec-hook: install-libs
|
|
install-data-local: install-headers install-ldif
|
|
|
|
install-libs:
|
|
@$(MKDIR_P) $(DESTDIR)$(bindir)
|
|
$(INSTALL_PROGRAM) $(NEW_DLL_NAME) $(DESTDIR)$(bindir)/$(DLL_NAME)
|
|
@$(MKDIR_P) $(DESTDIR)$(toollibdir)
|
|
(cd $(DESTDIR)$(toollibdir) && ln -sf $(LIB_NAME) libg.a)
|
|
|
|
install-headers:
|
|
cd $(srcdir)/include; \
|
|
for sub in `find . -type d -print | sort`; do \
|
|
$(MKDIR_P) $(DESTDIR)$(toolincludedir)/$$sub; \
|
|
for i in $$sub/*.h ; do \
|
|
$(INSTALL_DATA) $$i $(DESTDIR)$(toolincludedir)/$$sub/`basename $$i` ; \
|
|
done ; \
|
|
done ;
|
|
|
|
install-ldif:
|
|
@$(MKDIR_P) $(DESTDIR)$(datarootdir)/cygwin
|
|
$(INSTALL_DATA) $(srcdir)/cygwin.ldif $(DESTDIR)$(datarootdir)/cygwin
|
|
|
|
#
|
|
# uninstall
|
|
#
|
|
|
|
uninstall-hook: uninstall-headers uninstall-ldif uninstall-libs
|
|
|
|
uninstall-libs:
|
|
rm -f $(DESTDIR)$(bindir)/cygwin1.dll
|
|
rm -f $(DESTDIR)$(toollibdir)/libg.a
|
|
|
|
uninstall-headers:
|
|
cd $(srcdir)/include; \
|
|
for sub in `find . -type d -print | sort`; do \
|
|
for i in $$sub/*.h ; do \
|
|
rm -f $(DESTDIR)$(toolincludedir)/$$sub/`basename $$i` ; \
|
|
done ; \
|
|
done ;
|
|
|
|
uninstall-ldif:
|
|
rm -f $(DESTDIR)$(datarootdir)/cygwin/cygwin.ldif
|
|
|
|
ctags: CTAGS
|
|
tags: CTAGS
|
|
CTAGS:
|
|
-cd $(srcdir) && \
|
|
ctags -R --c++-kinds=+p --fields=+iaS --extras=+q \
|
|
--regex-C++='/EXPORT_ALIAS *\([a-zA-Z0-9_]*, *([a-zA-Z0-9_]*)\)/\1/' \
|
|
--regex-C++='/__ASMNAME *\("([a-zA-Z0-9_]+)"\)/\1/' \
|
|
.
|