]> wimlib.net Git - wimlib/blobdiff - tools/windeps/Makefile
Windows build updates
[wimlib] / tools / windeps / Makefile
diff --git a/tools/windeps/Makefile b/tools/windeps/Makefile
new file mode 100644 (file)
index 0000000..060e63b
--- /dev/null
@@ -0,0 +1,131 @@
+#
+# This Makefile builds the third-party libraries needed to build a standalone
+# libwim.dll for Windows.  We build these third-party libraries ourselves mainly
+# to cut down on bloat.
+#
+# Among other things, this Makefile requires MinGW-w64 (i686 and x86_64
+# versions) and a windeps.wim containing the following images:
+#
+#      - libxml2-2.9.2
+#      - winpthreads
+#      - win-iconv-0.0.6
+
+ARCHITECTURES          := i686 x86_64
+LIBXML_VERSION         := 2-2.9.2
+WINPTHREADS_VERSION    :=
+WINICONV_VERSION       := -0.0.6
+
+LIBXML_SRCDIR          := libxml$(LIBXML_VERSION)
+SOURCE_TARGETS         += $(LIBXML_SRCDIR)
+$(LIBXML_SRCDIR):
+       wimapply --unix-data windeps.wim $(LIBXML_SRCDIR) $(LIBXML_SRCDIR)
+       cp $(LIBXML_SRCDIR)/COPYING COPYING.libxml2
+MAKE_CLEAN_FILES += $(LIBXML_SRCDIR) COPYING.libxml2
+
+WINPTHREADS_SRCDIR     := winpthreads$(WINPTHREADS_VERSION)
+SOURCE_TARGETS         += $(WINPTHREADS_SRCDIR)
+$(WINPTHREADS_SRCDIR):
+       wimapply --unix-data windeps.wim $(WINPTHREADS_SRCDIR) $(WINPTHREADS_SRCDIR)
+       cp $(WINPTHREADS_SRCDIR)/COPYING COPYING.winpthreads
+MAKE_CLEAN_FILES += $(WINPTHREADS_SRCDIR) COPYING.winpthreads
+
+WINICONV_SRCDIR                := win-iconv$(WINICONV_VERSION)
+SOURCE_TARGETS         += $(WINICONV_SRCDIR)
+$(WINICONV_SRCDIR):
+       wimapply --unix-data windeps.wim $(WINICONV_SRCDIR) $(WINICONV_SRCDIR)
+# win-iconv is public domain, so there's no license file.
+MAKE_CLEAN_FILES       += $(WINICONV_SRCDIR)
+
+#
+# declare_libxml_target(arch)
+#
+define declare_libxml_target
+libxml_$(1):$(LIBXML_SRCDIR)
+       builddir=build_libxml_$(1);                             \
+       rm -rf $$$$builddir;                                    \
+       mkdir $$$$builddir;                                     \
+       cd $$$$builddir;                                        \
+       ../$(LIBXML_SRCDIR)/configure                           \
+               --host=$(1)-w64-mingw32                         \
+               --enable-static                                 \
+               --disable-shared                                \
+               --prefix=$$$$PWD/../sysroot_$(1)                \
+               CFLAGS=-Os                                      \
+               --with-minimum                                  \
+               --without-lzma                                  \
+               --with-writer;                                  \
+       $(MAKE) install;                                        \
+       rm -f ../sysroot_$(1)/lib/libxml2.la;
+
+$(1)_BUILD_TARGETS += libxml_$(1)
+MAKE_CLEAN_FILES += build_libxml_$(1)
+endef
+
+#
+# declare_winpthreads_target(arch)
+#
+define declare_winpthreads_target
+winpthreads_$(1):$(WINPTHREADS_SRCDIR)
+       builddir=build_winpthreads_$(1);                        \
+       rm -rf $$$$builddir;                                    \
+       cp -r $(WINPTHREADS_SRCDIR) $$$$builddir;               \
+       cd $$$$builddir;                                        \
+       ./configure                                             \
+               --host=$(1)-w64-mingw32                         \
+               --enable-static                                 \
+               --disable-shared                                \
+               --prefix=$$$$PWD/../sysroot_$(1)                \
+               CFLAGS=-O2;                                     \
+       $(MAKE) install;                                        \
+       sed -i 's/if defined DLL_EXPORT/if 0/' ../sysroot_$(1)/include/pthread.h;
+
+$(1)_BUILD_TARGETS += winpthreads_$(1)
+MAKE_CLEAN_FILES += build_winpthreads_$(1)
+endef
+
+#
+# declare_winiconv_target(arch)
+#
+define declare_winiconv_target
+winiconv_$(1):$(WINICONV_SRCDIR)
+       builddir=build_winiconv_$(1);                           \
+       rm -rf $$$$builddir;                                    \
+       cp -r $(WINICONV_SRCDIR) $$$$builddir;                  \
+       cd $$$$builddir;                                        \
+       $(MAKE) CC=$(1)-w64-mingw32-gcc                         \
+               AR=$(1)-w64-mingw32-ar                          \
+               RANLIB=$(1)-w64-mingw32-ranlib                  \
+               DLLTOOL=$(1)-w64-mingw32-dlltool                \
+               CFLAGS=-O2                                      \
+               prefix=$$$$PWD/../sysroot_$(1)                  \
+               install;                                        \
+       rm -f ../sysroot_$(1)/lib/libiconv.dll.a;
+
+$(1)_BUILD_TARGETS += winiconv_$(1)
+MAKE_CLEAN_FILES += build_winiconv_$(1)
+endef
+
+#
+# declare_arch_targets(arch)
+#
+define declare_arch_targets
+$(eval $(call declare_libxml_target,$(1)))
+$(eval $(call declare_winpthreads_target,$(1)))
+$(eval $(call declare_winiconv_target,$(1)))
+
+sysroot_$(1): $($(1)_BUILD_TARGETS)
+
+ALL_SYSROOTS += sysroot_$(1)
+MAKE_CLEAN_FILES += sysroot_$(1)
+endef
+
+$(foreach arch,$(ARCHITECTURES),$(eval $(call declare_arch_targets,$(arch))))
+
+all: $(ALL_SYSROOTS)
+
+clean:
+       rm -rf $(MAKE_CLEAN_FILES)
+
+.PHONY: all clean $(SOURCE_TARGETS)
+
+.DEFAULT_GOAL = all