blob: 60d776e2fc1d624fb9e9f5a5c168c7912c93b228 [file] [log] [blame]
# This makefile requires GNU make.
PACKAGE = x86_64-mingw-runtime
VERSION = 3.9
CYGRELEASE = 1
VPATH = .:./math:./complex:./stdio:./misc:./termios
srcdir = .
objdir = .
host_alias = x86_64-pc-mingw32
build_alias = x86_64-pc-mingw32
target_alias = x86_64-pc-mingw32
# prefix = /vol/m
prefix = /usr/local
conf_prefix = $(prefix)
EXEEXT=.exe
program_transform_name = s,x,x,
exec_prefix = $(prefix)
bindir = $(exec_prefix)/bin
libdir = $(exec_prefix)/lib
tooldir:=$(exec_prefix)/$(target_alias)
datadir = $(prefix)/share
infodir = $(prefix)/info
includedir = $(prefix)/$(target_alias)/include
inst_bindir:=$(tooldir)/bin
inst_includedir:=$(tooldir)/include/mingw
inst_libdir:=$(tooldir)/lib/mingw
inst_docdir:=$(tooldir)/share/doc/mingw-runtime
# The Mingw headers are installed under a subdirectory of
# $(tooldir)/include when configuring in Cygwin.
HEADER_SUBDIR =
SHELL = /bin/sh
INSTALL = /usr/bin/install -c
INSTALL_DATA = $(INSTALL) -m 644
INSTALL_PROGRAM = $(INSTALL)
mkinstalldirs = $(SHELL) mkinstalldirs
CC := $(prefix)/bin/x86_64-pc-mingw32-gcc$(EXEEXT)
override CC := $(filter-out -L% -B%,$(shell echo $(CC) | sed -e 's%\(-isystem\|-iwithprefixbefore\) *[^ ]*\( \|$$\)% %g'))
# FIXME: Which is it, CC or CC_FOR_TARGET?
CC_FOR_TARGET = $(CC)
AS_FOR_TARGET = $(AS)
CFLAGS = -g -O2 -I. -D_CRTBLD -D_SYSCRT=1 -DCRTDLL=1 -DWINHEAP=1
CXXFLAGS = $(CFLAGS)
# compiling with Cygwin?
MNO_CYGWIN =
ifdef MNO_CYGWIN
subdirforlib=/mingw
else
libdir=
endif
# Needed for threading dll.
# Various libraries.
LIBM_A=libm.a
W32API_INCLUDE =
INCLUDES+= -I.
ALL_CFLAGS = $(CFLAGS) $(W32API_INCLUDE) $(INCLUDES) $(MNO_CYGWIN)
ALL_CXXFLAGS = $(CXXFLAGS) $(W32API_INCLUDE) $(INCLUDES) -nostdinc++ $(MNO_CYGWIN)
AS = $(prefix)/bin/x86_64-pc-mingw32-as$(EXEEXT)
AR = $(prefix)/bin/x86_64-pc-mingw32-ar$(EXEEXT)
LD = $(prefix)/bin/x86_64-pc-mingw32-ld$(EXEEXT)
AR_FLAGS = rcv
RANLIB = $(prefix)/bin/x86_64-pc-mingw32-ranlib$(EXEEXT)
DLLTOOL = $(prefix)/bin/x86_64-pc-mingw32-dlltool$(EXEEXT)
DLLTOOLFLAGS =
DLLTOOL_FOR_TARGET = $(DLLTOOL)
DLLTOOL_FLAGS = --as $(AS_FOR_TARGET)
TAR = tar
TARFLAGS = z
TARFILEEXT = .tar.gz
SUBDIRS := mklibs
FLAGS_TO_PASS:=\
AS="$(AS)" \
CC="$(CC)" \
CFLAGS="$(CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_CONFIG)" \
CXXFLAGS="$(CXXFLAGS) $(CFLAGS_COMMON) $(CFLAGS_CONFIG)" \
EXE_LDFLAGS="$(EXE_LDFLAGS)" \
AR="$(AR)" \
RANLIB="$(RANLIB)" \
LD="$(LD)" \
DLLTOOL="$(DLLTOOL)" \
exec_prefix="$(exec_prefix)" \
bindir="$(bindir)" \
libdir="$(libdir)" \
tooldir="$(tooldir)" \
datadir="$(datadir)" \
infodir="$(infodir)" \
includedir="$(includedir)" \
inst_bindir="$(inst_bindir)" \
inst_includedir="$(inst_includedir)" \
inst_libdir="$(inst_libdir)" \
inst_docdir="$(inst_docdir)" \
prefix="$(prefix)" \
target_alias="$(target_alias)" \
TAR="$(TAR)" \
TARFLAGS="$(TARFLAGS)" \
TARFILEEXT="$(TARFILEEXT)"
CRT0S = crt1.o crt2.o dllcrt1.o dllcrt2.o \
CRT_fp8.o CRT_fp10.o txtmode.o binmode.o crtbegin.o crtend.o
MINGW_OBJS = crt0_c.o crt0_w.o dll_argv.o gccmain.o \
CRT_fp10.o \
pseudo-reloc.o pseudo-reloc-list.o pesect.o cinitexe.o \
natstart.o gs_support.o atonexit.o dllmain.o dllentry.o \
wildcard.o merr.o \
dllargv.o \
charmax.o xtxtmode.o \
tlssup.o xncommod.o _newmode.o \
xthdloc.o mingw_helpers.o
MATH_OBJS = \
acosf.o acosl.o asinf.o asinl.o atan2f.o atan2l.o \
atanf.o atanl.o cbrt.o cbrtf.o cbrtl.o ceilf.o ceill.o \
cephes_emath.o \
copysign.o copysignf.o copysignl.o cosf.o coshf.o coshl.o cosl.o \
erfl.o exp2.o exp2f.o exp2l.o expf.o expl.o expm1.o expm1l.o expm1f.o \
fabs.o fabsf.o fabsl.o \
fdim.o fdimf.o fdiml.o floorf.o floorl.o fma.o fmaf.o fmal.o \
fmax.o fmaxf.o fmaxl.o fmin.o fminf.o fminl.o fmodf.o \
fmodl.o fp_consts.o fp_constsf.o fp_constsl.o \
fpclassify.o fpclassifyf.o fpclassifyl.o \
frexpf.o frexpl.o fucom.o hypotf.o hypotl.o ilogb.o ilogbf.o \
ilogbl.o isnan.o isnanf.o isnanl.o ldexpf.o ldexpl.o \
lgamma.o lgammaf.o lgammal.o llrint.o \
llrintf.o llrintl.o llround.o llroundf.o llroundl.o \
log10f.o log10l.o log1p.o log1pf.o log1pl.o log2.o log2f.o \
log2l.o logb.o logbf.o logbl.o logf.o logl.o lrint.o lrintf.o \
lrintl.o lround.o lroundf.o lroundl.o modff.o modfl.o \
nearbyint.o nearbyintf.o nearbyintl.o \
nextafterf.o nextafterl.o nexttowardf.o nexttoward.o \
powf.o powi.o powif.o powil.o powl.o \
remainder.o remainderf.o remainderl.o remquo.o \
remquof.o remquol.o rint.o rintf.o rintl.o round.o roundf.o \
roundl.o scalbn.o scalbnf.o scalbnl.o s_erf.o sf_erf.o \
signbit.o signbitf.o signbitl.o sinf.o sinhf.o sinhl.o sinl.o \
sqrtf.o sqrtl.o tanf.o tanhf.o tanhl.o tanl.o tgamma.o \
tgammaf.o tgammal.o trunc.o truncf.o truncl.o \
acosh.o acoshf.o acoshl.o asinh.o asinhf.o asinhl.o \
atanh.o atanhf.o atanhl.o
FENV_OBJS = fesetround.o fegetround.o \
fegetenv.o fesetenv.o feupdateenv.o \
feclearexcept.o feholdexcept.o fegetexceptflag.o \
feraiseexcept.o fetestexcept.o fesetexceptflag.o
COMPLEX_OBJS = \
cabs.o cabsf.o cabsl.o cacos.o cacosf.o cacosl.o cacosh.o \
cacoshf.o cacoshl.o carg.o cargf.o cargl.o casin.o casinf.o \
casinl.o casinh.o casinhf.o casinhl.o catan.o catanf.o catanl.o \
catanh.o catanhf.o catanhl.o ccos.o ccosf.o ccosl.o ccosh.o \
ccoshf.o ccoshl.o cexp.o cexpf.o cexpl.o cimag.o cimagf.o \
cimagl.o clog.o clogf.o clogl.o cpow.o cpowf.o cpowl.o cproj.o \
cprojf.o cprojl.o creal.o crealf.o creall.o csin.o csinf.o \
csinl.o csinh.o csinhf.o csinhl.o csqrt.o csqrtf.o csqrtl.o \
ctan.o ctanf.o ctanl.o ctanh.o ctanhf.o ctanhl.o
STDIO_OBJS = \
fopen64.o fseeko64.o ftello64.o lseek64.o \
snprintf.o vsnprintf.o snwprintf.o vsnwprintf.o \
vfscanf.o vfwscanf.o vscanf.o vsscanf.o vswscanf.o vwscanf.o
STDLIB_STUB_OBJS = \
lltoa.o ulltoa.o \
lltow.o ulltow.o \
atoll.o wtoll.o \
strtof.o wcstof.o \
_Exit.o
FENV_OBJS = fesetround.o fegetround.o \
fegetenv.o fesetenv.o feupdateenv.o \
feclearexcept.o feholdexcept.o fegetexceptflag.o \
feraiseexcept.o fetestexcept.o fesetexceptflag.o
REPLACE_OBJS = \
mingw-aligned-malloc.o mingw-fseek.o
Q8_OBJS = \
fwide.o imaxabs.o imaxdiv.o mbsinit.o \
strtoimax.o strtoumax.o wcstoimax.o wcstoumax.o \
wmemchr.o wmemcmp.o wmemcpy.o wmemmove.o wmemset.o \
wctrans.o wctype.o wcrtomb.o wctob.o mbrtowc.o btowc.o seterrno.o \
sleep.o alarm.o getlogin.o gettimeofday.o wassert.o
STDLIB_OBJS = \
strtold.o wcstold.o
MINGWEX_OBJS = dirent.o wdirent.o getopt.o ftruncate.o
MOLD_OBJS = isascii.o iscsym.o iscsymf.o toascii.o \
strcasecmp.o strncasecmp.o wcscmpi.o
TERMIOS_OBJS = \
cfmakeraw.o cfsetspeed.o speed.o tcdrain.o tcflow.o tcflush.o \
tcgetattr.o tcgetpgrp.o tcgetsid.o tcsendbrk.o tcsetattr.o tcsetpgrp.o ioctl.o \
ttyname.o
LIBS = libcrtdll.a \
libmsvcrt.a \
libmsvcr80.a \
libmingw32.a \
libmoldname.a \
libmingwex.a \
$(LIBM_A)
DLLS =
SRCDIST_FILES = dll_argv.c ChangeLog \
README TODO config.guess config.sub configure configure.in \
crt1.c crtdll.def \
gccmain.c init.c install-sh jamfile mkinstalldirs \
natstart.c gs_support.c atonexit.c \
mthr.c mthr_init.c mthr_stub.c readme.txt \
isascii.c iscsym.c iscsymf.c toascii.c \
strcasecmp.c strncasecmp.c wcscmpi.c \
CRT_fp8.c CRT_fp10.c test_headers.c txtmode.c binmode.c pseudo-reloc.c \
pseudo-reloc-list.c atonexit.c dllmain.c dllentry.c \
wildcard.c merr.c \
dllargv.c charmax.c \
tlssup.c xtxtmode.c xncommod.c _newmode.c \
xthdloc.c crt0_c.c crt0_w.c mingw_helpers.c \
DISCLAIMER CONTRIBUTORS
all_dlls_host = all_dlls_host
install_dlls_host = install_dlls_host
all: $(CRT0S) $(LIBS) $(all_dlls_host)
@$(MAKE) subdirs DO=$@ $(FLAGS_TO_PASS)
all_dlls_host: $(DLLS)
install_dlls_host:
for i in $(DLLS); do \
$(INSTALL_PROGRAM) $$i $(inst_bindir)/$$i ; \
done
_libm_dummy.o:
rm -f _libm_dummy.c
echo "static int __mingw_libm_dummy;" > _libm_dummy.c
$(CC) -c $(ALL_CFLAGS) _libm_dummy.c
rm -f _libm_dummy.c
libm.a: _libm_dummy.o
$(AR) rc $@ _libm_dummy.o
$(RANLIB) $@
DLL_OFILES = mthr.o mthr_init.o
DLL_CC_STUFF = -B./ -mdll $(MNO_CYGWIN) -Wl,--image-base,0x6FBC0000 \
-Wl,--entry,_DllMainCRTStartup \
$(DLL_OFILES) \
-Lmingwex
libmingw32.a: $(MINGW_OBJS)
$(AR) rc $@ $(MINGW_OBJS)
$(RANLIB) $@
msvcrt.def \
$(CC) -DRUNTIME=$(basename $(notdir $@)) \
-D__$(basename $(notdir $@))__=1 \
-D__MSVCRT__ -C -E -P \
-xc-header $? > $@
msvcr80.def \
$(CC) -DRUNTIME=$(basename $(notdir $@)) \
-D__$(basename $(notdir $@))__=1 \
-D__MSVCRT__ -C -E -P \
-xc-header $? > $@
libmoldname.a: moldname-msvcrt.def $(MOLD_OBJS)
$(DLLTOOL) --as $(AS) -k -U \
--dllname msvcrt.dll \
--def moldname-msvcrt.def \
--output-lib $@
$(AR) rc $@ $(MOLD_OBJS)
$(RANLIB) $@
libmingwex.a: $(MINGWEX_OBJS) $(MATH_OBJS) $(COMPLEX_OBJS) $(STDIO_OBJS) $(STDLIB_STUB_OBJS) $(STDLIB_OBJS) $(FENV_OBJS) $(REPLACE_OBJS) $(Q8_OBJS)
$(AR) rc $@ $(MINGWEX_OBJS) $(MATH_OBJS) $(COMPLEX_OBJS) $(STDIO_OBJS) $(STDLIB_STUB_OBJS) $(STDLIB_OBJS) $(FENV_OBJS) $(REPLACE_OBJS) $(Q8_OBJS)
$(RANLIB) $@
# The special rules are necessary.
crt1.o:
$(CC) -c -D__CRTDLL__ -U__MSVCRT__ $(ALL_CFLAGS) $< -o $@
crt2.o:
$(CC) -c -D__MSVCRT__ -U__CRTDLL__ $(ALL_CFLAGS) $< -o $@
dllcrt1.o:
$(CC) -c -D__CRTDLL__ -U__MSVCRT__ $(ALL_CFLAGS) $< -o $@
dllcrt2.o:
$(CC) -c -D__MSVCRT__ -U__CRTDLL__ $(ALL_CFLAGS) $< -o $@
crtbegin.o:
$(CC) -c $(ALL_CFLAGS) $< -o $@
crtend.o:
$(CC) -c $(ALL_CFLAGS) $< -o $@
TEST_H_OPTIONS = $(ALL_CFLAGS) -Wall -W -Wsystem-headers -c \
$(srcdir)/test_headers.c -o test_headers.o
.PHONY: test_headers
test_headers:
@echo "Testing runtime headers..."
@for lang in c c++ objective-c ; do \
echo "$$lang ..."; \
$(CC) -x$$lang $(TEST_H_OPTIONS) ; \
echo "$$lang -ansi"; \
$(CC) -x$$lang -ansi $(TEST_H_OPTIONS) ; \
done
# specify -std=xx only for C
@for std in gnu89 gnu99 c89 c99 ; do \
echo "std = $$std"; \
$(CC) -std=$$std $(TEST_H_OPTIONS) ; \
done
@rm -f test_headers.o
clean:
-rm -f *.o *.a *~ core a.out
@$(MAKE) subdirs DO=$@ $(FLAGS_TO_PASS)
distclean: clean
@$(MAKE) subdirs DO=$@ $(FLAGS_TO_PASS)
-rm -f config.cache config.status config.log
distdir=$(PACKAGE)-$(VERSION)
TARFLAGS = j
TARFILEEXT = .tar.bz2
ifneq (,$(findstring mingw, $(target_alias)))
dist_prefix =
else
dist_prefix = $(conf_prefix)
endif
dist: srcdist bindist
srcdist:
rm -rf $(distdir)
mkdir $(distdir)
chmod 755 $(distdir)
for i in $(SRCDIST_FILES); do \
cp -p $(srcdir)/$$i $(distdir)/$$i ; \
done
for i in $(SUBDIRS); do \
(cd $$i; $(MAKE) distdir=../$(distdir) dist); \
done
#FIXME this needs to be done with SUBDIRS and Makefiles.
mkdir $(distdir)/include
mkdir $(distdir)/include/sys
cp $(srcdir)/include/*.h $(distdir)/include/
cp $(srcdir)/include/sys/*.h $(distdir)/include/sys/
#end FIXME
rm -f $(distdir)-src.tar.gz
$(TAR) $(TARFLAGS)cf $(distdir)-src$(TARFILEEXT) $(distdir)
bindist:
rm -rf $(distdir)
mkdir $(distdir)
chmod 755 $(distdir)
$(MAKE) install prefix=$(shell pwd)/$(distdir)$(dist_prefix)
rm -f $(distdir).tar.gz
cd $(distdir); \
$(TAR) $(TARFLAGS)cf ../$(distdir)$(TARFILEEXT) *
snapshot:
make dist SNAPDATE=$(shell date '+%Y%m%d')
info:
info-html:
install-info: info
install-dirs:
$(mkinstalldirs) $(inst_bindir)
$(mkinstalldirs) $(inst_includedir)
$(mkinstalldirs) $(inst_libdir)
$(mkinstalldirs) $(inst_docdir)
install: all install-dirs $(install_dlls_host)
for i in $(LIBS); do \
$(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
done
for i in $(CRT0S); do \
$(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
done
for sub in . sys ; do \
dstdir=$(inst_includedir)/$$sub ; \
$(mkinstalldirs) $$dstdir ; \
for i in $(srcdir)/include/$$sub/*.h ; do \
$(INSTALL_DATA) $$i $$dstdir/`basename $$i` ; \
done ; \
done
@$(MAKE) subdirs DO=$@ $(FLAGS_TO_PASS)
subdirs: $(SUBDIRS)
@true
# The . is here because SUBDIRS may be empty
. $(SUBDIRS): force
@if [ -d ./$@ ]; then \
echo "Making $(DO) in $@..." ; \
if (rootme=`pwd`/ ; export rootme ; \
rootsrc=`cd $(srcdir); pwd`/ ; export rootsrc ; \
cd ./$@; \
$(MAKE) $(FLAGS_TO_PASS) $(DO)) ; then true ; \
else exit 1 ; fi ; \
else true ; fi ; \
force:
#
# Dependancies
#
libcrtdll.a: crtdll.def
libmsvcrt.a: msvcrt.def
libmsvcr80.a: msvcr80.def
dll_argv.o: dll_argv.c
crtbegin.o: crtbegin.c
crtend.o: crtend.c
crt1.o: crtexe.c
crt2.o: crtexe.c
dllcrt1.o: crtdll.c
dllcrt2.o: crtdll.c
ctype_old.o: ctype_old.c
string_old.o: string_old.c
CRT_fp8.o: CRT_fp8.c
CRT_fp10.o: CRT_fp10.c
config.status: configure
$(SHELL) config.status --recheck
.SUFFIXES: .y $(SUFFIXES) .cc .o .def .a
.c.o:
$(CC) -c $(ALL_CFLAGS) $< -o $@
lib%.a: %.def
$(DLLTOOL) --as=$(AS) -k --dllname $*.dll --output-lib lib$*.a --def $<