summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile238
1 files changed, 238 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..db8ffef
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,238 @@
+
+export SHELL := bash
+
+# Targets that will always be run (as they depend on stuff from installed packages)
+.PHONY: core.img g2ldr g2ldr.mbr loadlin.pif loadlin.exe pxe.lkrn
+
+PACKAGE := win32-loader
+VERSION := $(shell head -n 1 debian/changelog | sed -e "s/^$(PACKAGE) (\(.*\)).*/\1/g")
+BUILD_DATE ?= $(shell LC_ALL=C date +'%a, %d %b %Y %T %z')
+FOUR_DIGITS_DATE := $(shell date -u +'%Y.%m.%d.%H%M' --date="$(BUILD_DATE)")
+
+NSIS_CC := i686-w64-mingw32-gcc -Os -Xlinker --no-insert-timestamp
+NSIS_STRIP := i686-w64-mingw32-strip
+NSIS_CFLAGS := -Wl,--file-alignment,512 -Werror -D_WIN32_WINNT=0x0500
+
+ICONSIZES := 16 24 32 48 256
+
+ifeq ($(wildcard /usr/i686-w64-mingw32/include/exdll.h), /usr/i686-w64-mingw32/include/exdll.h)
+NSIS_CFLAGS += -DHAVE_EXDLL_H
+else
+NSIS_CFLAGS += -L/usr/i686-w64-mingw32/lib/nsis/ -lpluginapi
+endif
+
+# Standard makensis call
+MAKENSIS := makensis -V3
+
+# Add to it some version'ing and date
+MAKENSIS += -DVERSION=$(VERSION) -D4DIGITS_DATE=$(FOUR_DIGITS_DATE)
+
+ifdef OUTFILE_NAME
+MAKENSIS += -D_OUTFILE_NAME=$(OUTFILE_NAME)
+endif
+
+# Distributor/Company name (defaults to "The Debian Project")
+ifdef COMPANY_NAME
+MAKENSIS += -D_COMPANY_NAME=$(COMPANY_NAME)
+endif
+
+# Distribution name (ASCII only, please)
+ifdef TARGET_DISTRO
+MAKENSIS += -DTARGET_DISTRO=$(TARGET_DISTRO)
+endif
+
+# Standalone version : Not linked to a website with preseed.cfg
+ifdef STANDALONE
+MAKENSIS += -DNOCD=yes
+OPTIONS_TXT += +net
+endif
+
+# Network version : Linked to a website with preseed.cfg
+ifdef NETWORK_BASE_URL
+# Embed the md5sum or sha1sum of the $(NETWORK_BASE_URL)/preseed.cfg file for enhanced security.
+MAKENSIS += -DNETWORK_BASE_URL=$(NETWORK_BASE_URL) -DNOCD=yes -DNETWORK_BASE_URL_CHECKSUM=$(NETWORK_BASE_URL_CHECKSUM)
+OPTIONS_TXT += +url
+endif
+
+# PXE version (which is standalone too)
+ifdef PXE
+MAKENSIS += -DPXE=yes -DNOCD=yes
+OPTIONS_TXT += +pxe
+endif
+
+# Disabling the kFreeBSD download
+ifndef NOT_ALLKERNELS
+MAKENSIS += -DALLKERNELS=yes
+OPTIONS_TXT += +kernels
+endif
+
+# Allowing the branch selection
+ifdef DAILIES
+MAKENSIS += -DDAILIES=yes
+OPTIONS_TXT += +dailies
+endif
+
+ifdef OPTIONS_TXT
+MAKENSIS += -DOPTIONS_TXT="$(OPTIONS_TXT)"
+endif
+
+# hard disk
+GRUB_MODULES += biosdisk
+# partmap
+GRUB_MODULES += part_msdos part_gpt
+# fs
+GRUB_MODULES += fat ntfs ntfscomp
+# used in our grub.cfg
+GRUB_MODULES += search linux bsd multiboot vbe boot
+# might be useful for debugging
+GRUB_MODULES += minicmd cat cpuid chain halt help ls reboot
+# useful for loading files from ISO images
+GRUB_MODULES += loopback iso9660
+ifndef NOT_ALLKERNELS
+# gzio is needed for kFreeBSD
+GRUB_MODULES += gzio
+endif
+ifdef PXE
+# Booting the pxe.lkrn requires linux16
+GRUB_MODULES += linux16
+endif
+
+all: win32-loader.exe g2ldr g2ldr.mbr
+
+core.img:
+ grub-mkimage --output=$@ --prefix=/win32-loader --format=i386-pc $(GRUB_MODULES)
+
+g2ldr: /usr/lib/grub/i386-pc/g2hdr.bin core.img
+ cat $^ > $@
+
+g2ldr.mbr: /usr/lib/grub/i386-pc/g2ldr.mbr
+ cp $^ $@
+
+loadlin.pif: genpif
+ bash $^ > $@
+
+loadlin.exe: /usr/lib/loadlin/loadlin.exe.gz
+ gunzip -c $^ > $@
+
+pxe.lkrn: /usr/lib/ipxe/ipxe.lkrn
+ cp $^ $@
+
+ifdef PXE
+PXE_TARGETS = pxe.lkrn templates/ternary_choice.ini
+else
+PXE_TARGETS =
+endif
+
+templates/gtk.bmp: templates/gtk_orig.png
+ convert $^ -resize 107x80 BMP3:$@
+
+# Build icons out of the SVG source, force them being square
+icon/swirl-%.png: icon/swirl.svg
+ rsvg-convert -f png -h $* -w $* $^ > $@
+
+# Build the icon out of the PNG icons
+win32-loader.ico: $(ICONSIZES:%=icon/swirl-%.png)
+ icotool -c -o $@ $^
+
+win32-loader.exe: main.nsi maps.ini \
+ templates/binary_choice.ini templates/graphics.ini templates/custom.ini templates/4_choices.ini \
+ templates/gtk.bmp templates/text.bmp \
+ plugins/cpuid/test64.dll plugins/systeminfo/systeminfo.dll plugins/string.dll \
+ plugins/libgcrypt_hash.dll \
+ $(PXE_TARGETS) \
+ win32-loader.ico loadlin.pif loadlin.exe g2ldr g2ldr.mbr
+ find $^ -newermt "$(BUILD_DATE)" -print0 | xargs -0r touch --date="$(BUILD_DATE)"
+ $(MAKE) -C l10n
+ $(MAKENSIS) main.nsi
+ifndef OUTFILE_NAME
+ du -h win32-loader.exe
+else
+ du -h $(OUTFILE_NAME)
+endif
+
+plugins/cpuid/test64.dll: plugins/cpuid/cpuid.c plugins/cpuid/plugin.c
+ $(NSIS_CC) $^ $(NSIS_CFLAGS) -shared -o $@
+ $(NSIS_STRIP) $@
+
+plugins/systeminfo/systeminfo.dll: plugins/systeminfo/systeminfo.c
+ $(NSIS_CC) $^ $(NSIS_CFLAGS) -shared -o $@
+ $(NSIS_STRIP) $@
+
+plugins/string.dll: plugins/string.c
+ $(NSIS_CC) $^ $(NSIS_CFLAGS) -shared -o $@
+ $(NSIS_STRIP) $@
+
+plugins/libgcrypt_hash.dll: plugins/libgcrypt_hash.c
+ $(NSIS_CC) $^ $(NSIS_CFLAGS) -shared -static-libgcc /usr/i686-w64-mingw32/lib/libgcrypt.a /usr/i686-w64-mingw32/lib/libgpg-error.a -o $@
+ $(NSIS_STRIP) $@
+
+iso: stable.iso daily.iso
+stable.iso: \
+ netboot/download-stable-stamp \
+ netboot/stable/win32-loader.exe netboot/stable/g2ldr netboot/stable/g2ldr.mbr \
+ netboot/stable/autorun.inf netboot/stable/win32-loader.ini \
+ $(NULL)
+ genisoimage -r -J -o $@ netboot/stable
+
+daily.iso: \
+ netboot/download-daily-stamp \
+ netboot/daily/win32-loader.exe netboot/daily/g2ldr netboot/daily/g2ldr.mbr \
+ netboot/daily/autorun.inf netboot/daily/win32-loader.ini \
+ $(NULL)
+ genisoimage -r -J -o $@ netboot/daily
+
+BASE_URL=http://deb.debian.org/debian/dists/stable/main
+netboot/download-stable-stamp:
+ mkdir -p netboot/stable/install.{386,amd}/gtk
+ wget $(BASE_URL)/installer-i386/current/images/netboot/debian-installer/i386/linux \
+ -O netboot/stable/install.386/vmlinuz
+ wget $(BASE_URL)/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz \
+ -O netboot/stable/install.386/initrd.gz
+ wget $(BASE_URL)/installer-i386/current/images/netboot/gtk/debian-installer/i386/initrd.gz \
+ -O netboot/stable/install.386/gtk/initrd.gz
+ wget $(BASE_URL)/installer-amd64/current/images/netboot/debian-installer/amd64/linux \
+ -O netboot/stable/install.amd/vmlinuz
+ wget $(BASE_URL)/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz \
+ -O netboot/stable/install.amd/initrd.gz
+ wget $(BASE_URL)/installer-amd64/current/images/netboot/gtk/debian-installer/amd64/initrd.gz \
+ -O netboot/stable/install.amd/gtk/initrd.gz
+ touch $@
+
+netboot/download-daily-stamp:
+ mkdir -p netboot/daily/install.{386,amd}/gtk
+ wget https://d-i.debian.org/daily-images/i386/daily/netboot/debian-installer/i386/linux \
+ -O netboot/daily/install.386/vmlinuz
+ wget https://d-i.debian.org/daily-images/i386/daily/netboot/debian-installer/i386/initrd.gz \
+ -O netboot/daily/install.386/initrd.gz
+ wget https://d-i.debian.org/daily-images/i386/daily/netboot/gtk/debian-installer/i386/initrd.gz \
+ -O netboot/daily/install.386/gtk/initrd.gz
+ wget https://d-i.debian.org/daily-images/amd64/daily/netboot/debian-installer/amd64/linux \
+ -O netboot/daily/install.amd/vmlinuz
+ wget https://d-i.debian.org/daily-images/amd64/daily/netboot/debian-installer/amd64/initrd.gz \
+ -O netboot/daily/install.amd/initrd.gz
+ wget https://d-i.debian.org/daily-images/amd64/daily/netboot/gtk/debian-installer/amd64/initrd.gz \
+ -O netboot/daily/install.amd/gtk/initrd.gz
+ touch $@
+
+netboot/stable/autorun.inf netboot/daily/autorun.inf: autorun.inf
+ mkdir -p netboot/{stable,daily}
+ todos < $< > $@
+netboot/stable/win32-loader.ini netboot/daily/win32-loader.ini: win32-loader.ini
+ mkdir -p netboot/{stable,daily}
+ todos < $< > $@
+
+netboot/stable/win32-loader.exe netboot/daily/win32-loader.exe: win32-loader.exe
+ mkdir -p netboot/{stable,daily}
+ cp $^ $@
+
+netboot/stable/% netboot/daily/%: %
+ mkdir -p netboot/{stable,daily}
+ cp $(shell basename $@) $@
+
+clean:
+ $(MAKE) -C l10n clean
+ rm -f plugins/cpuid/*.dll plugins/cpuid/*.exe plugins/systeminfo/*.dll plugins/*.dll win32-loader.exe \
+ *.iso *~ */*~ core.img g2ldr g2ldr.mbr loadlin.pif loadlin.exe pxe.lkrn icon/*.png win32-loader.ico
+
+distclean: clean
+ rm -rf netboot