Skip to content

Instantly share code, notes, and snippets.

@Jessidhia
Created March 26, 2011 01:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Jessidhia/887950 to your computer and use it in GitHub Desktop.
Save Jessidhia/887950 to your computer and use it in GitHub Desktop.
mingw maker
prefix = /usr
target = i686-mingw32
# where cross-compiled libraries go / cross compiler searches for lib / include
tprefix = $(prefix)/$(target)
# version of packages to install
binutils_version = 2.21
gcc_version = 4.5.2
mingwrt_version = 3.18
pkgconfig_version = 0.25
# current w32api package is 3.17-1, the folder is 3.17; hack to support that
w32api_version = 3.17
w32api_tag = -1
# common options for autotools configures
# gcc always gives --disable-shared --enable-static to stage1,
# even if removed from common_opts, to avoid a circular dependency on mingwrt
common_opts = --disable-shared --enable-static
# additional options to give to gcc's configure
gcc_opts =
# for packages that go in $(prefix)
sudo = sudo
#sudo =
# for backages that go in $(tprefix)
#tsudo = sudo
tsudo =
# parameters to the inner make calls
MKARG = -j4
# edit to your favorite leeching program if you don't want wget
# wget NEEDS --content-disposition or it will misname downloads from sf.net
wget = wget -c -t 0 --content-disposition
# gcc depends on gmp, mpfr and mpc (`apt-get install libmpc-dev` on debian-based)
# ftp://gcc.gnu.org/pub/gcc/infrastructure/
# MUST NOT have a trailing slash
gnu_mirror = http://ftp.gnu.org/gnu
mingw_sfnet = http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/RuntimeLibrary
all: base-toolchain
base-toolchain: gcc-stage2 directx pthreads pkg-config
distclean: clean
clean:
rm -rf binutils-$(binutils_version) gcc-$(gcc_version) gccbuild \
pthreads-win32-CVS_17072009_1420-autostatic \
mingwrt-$(mingwrt_version)-mingw32 w32api \
w32api-$(w32api_version)$(w32api_tag)-mingw32 \
pkg-config-$(pkgconfig_version)
pkg-config: extract-pkg-config
cd pkg-config-$(pkgconfig_version) && \
./configure --prefix=$(prefix) --program-prefix=$(target)- --enable-indirect-deps \
--with-pc-path=$(tprefix)/lib/pkgconfig && \
make $(MKARG) && \
$(sudo) make install
pthreads: extract-pthreads
cd pthreads-w32-2-8-0-release && \
make $(MKARG) GC-static CROSS=$(target)- && \
$(tsudo) cp -fv libpthreadGC2.a $(tprefix)/lib/libpthread.a && \
$(tsudo) ln -fvs libpthread.a $(tprefix)/lib/libpthreadGC2.a && \
$(tsudo) cp -fv pthread.h semaphore.h $(tprefix)/include/ && \
$(tsudo) cp -fv sched2.h $(tprefix)/include/sched.h
gcc-stage2: mingwrt extract-gcc-gpp
cd gccbuild && \
../gcc-$(gcc_version)/configure --prefix=$(prefix) --target=$(target) \
$(gcc_opts) --with-sysroot=$(tprefix) && \
make $(MKARG) && \
$(sudo) make install
mingwrt: gcc-stage1 w32api extract-mingwrt
cd mingwrt-$(mingwrt_version)-mingw32 && \
./configure --prefix=$(tprefix) --host=$(target) $(common_opts) && \
make $(MKARG) && \
$(tsudo) make install
w32api: gcc-stage1 extract-w32api
cd w32api && \
./configure --prefix=$(tprefix) --host=$(target) $(common_opts) && \
make $(MKARG) && \
$(tsudo) make install
gcc-stage1: binutils extract-gcc-core mingw-headers
mkdir -p gccbuild && \
cd gccbuild && \
../gcc-$(gcc_version)/configure --prefix=$(prefix) --target=$(target) \
$(gcc_opts) --enable-languages=c \
--disable-shared --enable-static --with-sysroot=$(tprefix) && \
make $(MKARG) && \
$(sudo) make install
binutils: extract-binutils mkdirs
cd binutils-$(binutils_version) && \
./configure --prefix=$(prefix) --target=$(target) $(common_opts) \
--with-sysroot=$(tprefix) && \
make $(MKARG) && \
$(sudo) make install
mkdirs:
$(tsudo) mkdir -p $(tprefix)/bin $(tprefix)/lib $(tprefix)/include \
$(tprefix)/share
mingw-headers: extract-mingwrt extract-w32api mkdirs
$(tsudo) cp -r mingwrt-$(mingwrt_version)-mingw32/include/* w32api/include/* \
$(tprefix)/include/
extract-pkg-config: files/pkg-config-$(pkgconfig_version).tar.gz
tar xf $<
extract-pthreads: files/pthreads-w32-2-8-0-release.tar.gz
tar xf $<
sed 's/pid_t pid/int pid/g' pthreads-w32-2-8-0-release/sched.h > pthreads-w32-2-8-0-release/sched2.h
extract-gcc-gpp: files/gcc-g++-$(gcc_version).tar.bz2
tar xf $<
extract-mingwrt: files/mingwrt-$(mingwrt_version)-mingw32-src.tar.gz \
files/mingwrt_file64.diff
tar xf $<
cd mingwrt-$(mingwrt_version)-mingw32 && \
patch -Np1 -i ../files/mingwrt_file64.diff
extract-w32api: files/w32api-$(w32api_version)$(w32api_tag)-mingw32-src.tar.lzma
tar xf $< || xzcat $< | tar xf - # workaround for systems with old tars / bsdtars
ln -sf w32api-$(w32api_version)$(w32api_tag)-mingw32 w32api # needed by mingwrt
extract-gcc-core: files/gcc-core-$(gcc_version).tar.bz2
tar xf $<
test -h $(tprefix)/mingw || ln -s . $(tprefix)/mingw # stupid fixincludes script
extract-binutils: files/binutils-$(binutils_version).tar.bz2
tar xf $<
files:
# test not redundant (this might be reached by -B)
test -d files || mkdir files
FILES = files/binutils-$(binutils_version).tar.bz2 \
files/gcc-core-$(gcc_version).tar.bz2 \
files/gcc-g++-$(gcc_version).tar.bz2 \
files/mingwrt-$(mingwrt_version)-mingw32-src.tar.gz \
files/mingwrt_file64.diff \
files/pkg-config-$(pkgconfig_version).tar.gz \
files/pthreads-w32-2-8-0-release.tar.gz \
files/w32api-$(w32api_version)$(w32api_tag)-mingw32-src.tar.lzma
DXHEADERS = directx/Amvideo.h \
directx/control.h \
directx/ddraw.h \
directx/dshow.h \
directx/dsound.h \
directx/dxerr9.h \
directx/ksuuids.h \
directx/mingw_dshow_port.h \
directx/strmif.h \
directx/uuids.h
.PRECIOUS: $(FILES) $(DXHEADERS)
download: $(FILES) $(DXHEADERS)
directx: $(DXHEADERS) mkdirs
$(tsudo) cp directx/*.h $(tprefix)/include/
$(DXHEADERS): directxdir
cd directx && \
$(wget) http://git.gnome.org/browse/ekiga/plain/win32/$@
directxdir:
test -d directx || mkdir directx
redownload:
make -B download
.PHONY: all base-toolchain distclean clean pkg-config pthreads gcc-stage2 mingwrt \
w32api gcc-stage1 binutils extract-pkg-config extract-pthreads extract-gcc-gpp \
extract-mingwrt extract-w32api extract-gcc-core extract-binutils
files/binutils-$(binutils_version).tar.bz2: files
cd files && \
$(wget) $(gnu_mirror)/binutils/binutils-$(binutils_version).tar.bz2
files/gcc-core-$(gcc_version).tar.bz2: files
cd files && \
$(wget) $(gnu_mirror)/gcc/gcc-$(gcc_version)/gcc-core-$(gcc_version).tar.bz2
files/gcc-g++-$(gcc_version).tar.bz2: files
cd files && \
$(wget) $(gnu_mirror)/gcc/gcc-$(gcc_version)/gcc-g++-$(gcc_version).tar.bz2
files/mingwrt-$(mingwrt_version)-mingw32-src.tar.gz: files
cd files && \
$(wget) $(mingw_sfnet)/MinGW-RT/mingwrt-$(mingwrt_version)/mingwrt-$(mingwrt_version)-mingw32-src.tar.gz/download
files/mingwrt_file64.diff: files
cd files && \
$(wget) http://oss.netfarm.it/mplayer/misc/mingwrt_file64.diff
files/pkg-config-$(pkgconfig_version).tar.gz: files
cd files && \
$(wget) http://pkgconfig.freedesktop.org/releases/pkg-config-0.25.tar.gz
files/pthreads-w32-2-8-0-release.tar.gz: files
cd files && \
$(wget) ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-8-0-release.tar.gz
files/w32api-$(w32api_version)$(w32api_tag)-mingw32-src.tar.lzma: files
cd files && \
$(wget) $(mingw_sfnet)/Win32-API/w32api-$(w32api_version)/w32api-$(w32api_version)$(w32api_tag)-mingw32-src.tar.lzma/download
.NOTPARALLEL:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment