1LIB_NAME := "libttfautohint" 2 3SRC := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) 4ROOT := $(shell dirname $(shell dirname $(SRC))) 5BUILD := $(ROOT)/build 6TMP := $(BUILD)/temp 7PREFIX := $(BUILD)/local 8 9CPPFLAGS := -I$(PREFIX)/include 10CFLAGS := -g -O2 -fPIC 11CXXFLAGS := -g -O2 -fPIC 12LDFLAGS := -fPIC -L$(PREFIX)/lib -L$(PREFIX)/lib64 13 14# on Windows, libtool cannot be used to build the ttfautohint.dll, we run 15# dllwrap ourselves on the static libraries, so we --disable-shared 16# https://lists.gnu.org/archive/html/freetype-devel/2017-12/msg00013.html 17# http://lists.gnu.org/archive/html/libtool/2017-12/msg00003.html 18LIBTTFAUTOHINT_OPTIONS := --enable-static 19ifeq ($(OS), Windows_NT) 20 LIBTTFAUTOHINT_OPTIONS += --disable-shared 21 LIBTTFAUTOHINT := "$(LIB_NAME).dll" 22else 23 LIBTTFAUTOHINT_OPTIONS += --enable-shared 24 ifeq ($(shell uname -s), Darwin) 25 LIBTTFAUTOHINT := "$(LIB_NAME).dylib" 26 # on macOS, we want a 64-bit only lib targeting >= 10.9, since harfbuzz >= 2.4 27 # requires c++11 28 MACOSX_DEPLOYMENT_TARGET ?= 10.9 29 CFLAGS += -m64 -arch x86_64 -arch arm64 -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) 30 CXXFLAGS += -m64 -arch x86_64 -arch arm64 -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) 31 LDFLAGS += -m64 -arch x86_64 -arch arm64 -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) 32 else ifeq ($(shell uname -s), Linux) 33 LIBTTFAUTOHINT := "$(LIB_NAME).so" 34 endif 35endif 36 37all: libttfautohint 38 39libttfautohint: $(PREFIX)/lib/$(LIBTTFAUTOHINT) 40 41freetype: $(TMP)/.freetype-stamp 42 43harfbuzz: $(TMP)/.harfbuzz-stamp 44 45ttfautohint: $(TMP)/.ttfautohint-stamp 46 47$(TMP)/.freetype-stamp: 48 cd $(SRC)/freetype2; ./autogen.sh 49 @rm -rf $(TMP)/freetype 50 @mkdir -p $(TMP)/freetype 51 cd $(TMP)/freetype; $(SRC)/freetype2/configure \ 52 --without-bzip2 \ 53 --without-png \ 54 --without-zlib \ 55 --without-harfbuzz \ 56 --prefix="$(PREFIX)" \ 57 --enable-static \ 58 --disable-shared \ 59 --enable-freetype-config \ 60 PKG_CONFIG=" " \ 61 CFLAGS="$(CPPFLAGS) $(CFLAGS)" \ 62 CXXFLAGS="$(CPPFLAGS) $(CXXFLAGS)" \ 63 LDFLAGS="$(LDFLAGS)" 64 cd $(TMP)/freetype; make 65 cd $(TMP)/freetype; make install 66 @touch $(TMP)/.freetype-stamp 67 68$(TMP)/.harfbuzz-stamp: $(TMP)/.freetype-stamp 69 cd $(SRC)/harfbuzz; NOCONFIGURE=1 ./autogen.sh 70 @rm -rf $(TMP)/harfbuzz 71 @mkdir -p $(TMP)/harfbuzz 72 cd $(TMP)/harfbuzz; $(SRC)/harfbuzz/configure \ 73 --disable-dependency-tracking \ 74 --disable-gtk-doc-html \ 75 --with-glib=no \ 76 --with-cairo=no \ 77 --with-fontconfig=no \ 78 --with-icu=no \ 79 --prefix=$(PREFIX) \ 80 --enable-static \ 81 --disable-shared \ 82 CFLAGS="$(CPPFLAGS) $(CFLAGS)" \ 83 CXXFLAGS="$(CPPFLAGS) $(CXXFLAGS)" \ 84 LDFLAGS="$(LDFLAGS)" \ 85 PKG_CONFIG=true \ 86 FREETYPE_CFLAGS="$(CPPFLAGS)/freetype2" \ 87 FREETYPE_LIBS="$(LDFLAGS) -lfreetype" 88 cd $(TMP)/harfbuzz; make 89 cd $(TMP)/harfbuzz; make install 90 @touch $(TMP)/.harfbuzz-stamp 91 92$(TMP)/.ttfautohint-stamp: $(TMP)/.harfbuzz-stamp 93 cd $(SRC)/ttfautohint; ./bootstrap 94 @rm -rf $(TMP)/ttfautohint 95 @mkdir -p $(TMP)/ttfautohint 96 cd $(TMP)/ttfautohint; $(SRC)/ttfautohint/configure \ 97 --disable-dependency-tracking \ 98 --without-qt \ 99 --without-doc \ 100 --prefix="$(PREFIX)" \ 101 $(LIBTTFAUTOHINT_OPTIONS) \ 102 --with-freetype-config="$(PREFIX)/bin/freetype-config" \ 103 CFLAGS="$(CPPFLAGS) -I$(TMP)/ttfautohint/lib $(CFLAGS)" \ 104 CXXFLAGS="$(CPPFLAGS) -I$(TMP)/ttfautohint/lib $(CXXFLAGS)" \ 105 LDFLAGS="$(LDFLAGS)" \ 106 PKG_CONFIG=true \ 107 HARFBUZZ_CFLAGS="$(CPPFLAGS)/harfbuzz" \ 108 HARFBUZZ_LIBS="$(LDFLAGS) -lharfbuzz -lfreetype" 109 cd $(TMP)/ttfautohint; make 110 cd $(TMP)/ttfautohint; make install 111 @touch $(TMP)/.ttfautohint-stamp 112 113$(PREFIX)/lib/$(LIBTTFAUTOHINT): $(TMP)/.ttfautohint-stamp 114ifeq ($(OS), Windows_NT) 115 dllwrap -v --def $(SRC)/ttfautohint.def -o $@ \ 116 $(PREFIX)/lib/libttfautohint.a \ 117 $(PREFIX)/lib/libharfbuzz.a \ 118 $(PREFIX)/lib/libfreetype.a 119endif 120 121clean: 122 @git submodule foreach git clean -fdx . 123 @rm -rf $(TMP) $(PREFIX) 124 125.PHONY: clean all libttfautohint freetype harfbuzz ttfautohint 126