Răsfoiți Sursa

Merge pull request #130 from tsoding/5

Add initial MacOS build
Alexey Kutepov 5 ani în urmă
părinte
comite
2aaeae8f84

+ 38 - 1
.github/workflows/ci.yml

@@ -41,6 +41,44 @@ jobs:
           name: output.mpeg
           path: ./output.mpeg
 
+  build-macos-clang:
+    runs-on: macOS-latest
+    steps:
+      - uses: actions/checkout@v1
+      - name: install dependencies
+        run: |
+          brew install nasm freetype2 openssl
+      - uses: actions/cache@v2
+        with:
+          path: |
+            ./third_party/ffmpeg-4.3-dist/
+            ./third_party/giflib-5.2.1-dist/
+          key: ${{ runner.os }}-ffmpeg-4.3-giflib-5.2.1
+      - name: build third-party things
+        run: |
+          cd third_party
+          ./build_third_party.sh
+          cd ..
+      - name: build vodus
+        run: |
+          make -B
+          ./emote_downloader
+          make render
+          pushd ./test/pajaWalk/
+          ./test.sh
+          popd
+          pushd ./test/utf8/
+          ./test.sh
+          popd
+        env:
+          CC: clang
+          CXX: clang++
+      - uses: actions/upload-artifact@v2
+        with:
+          name: output.mpeg
+          path: ./output.mpeg
+
+
   build-linux-clang:
     runs-on: ubuntu-18.04
     steps:
@@ -79,5 +117,4 @@ jobs:
           name: output.mpeg
           path: ./output.mpeg
 
-# TODO(#5): no MacOS build
 # TODO(#8): no Windows build

+ 7 - 1
Makefile

@@ -1,3 +1,5 @@
+UNAME:=$(shell uname)
+
 VODUS_EXTRA_CXXFLAGS=
 
 ifdef VODUS_SSE
@@ -7,7 +9,11 @@ endif
 # TODO(#87): we need an option to build with system libraries
 VODUS_PKGS=freetype2
 VODUS_CXXFLAGS=-Wall -fno-exceptions -std=c++17 $(VODUS_EXTRA_CXXFLAGS) -ggdb `pkg-config --cflags $(VODUS_PKGS)` -I./third_party/ffmpeg-4.3-dist/usr/local/include/ -I./third_party/giflib-5.2.1-dist/usr/local/include/
-VODUS_LIBS=`pkg-config --libs $(VODUS_PKGS)` -L./third_party/giflib-5.2.1-dist/usr/local/lib/ -l:libgif.a -L./third_party/ffmpeg-4.3-dist/usr/local/lib/ -lavcodec -lavutil -lswresample -pthread -lm -llzma -lz
+VODUS_LIBS=`pkg-config --libs $(VODUS_PKGS)` -L./third_party/giflib-5.2.1-dist/usr/local/lib/ ./third_party/giflib-5.2.1-dist/usr/local/lib/libgif.a -L./third_party/ffmpeg-4.3-dist/usr/local/lib/ -lavcodec -lavutil -lswresample -pthread -lm -llzma -lz
+
+ifeq ($(UNAME), Darwin)
+VODUS_LIBS += -framework AVFoundation -framework VideoToolbox -framework CoreVideo -framework AudioToolbox -framework CoreMedia -framework CoreFoundation -liconv
+endif
 
 EMOTE_DOWNLOADER_PKGS=libcurl
 EMOTE_DOWNLOADER_CXXFLAGS=-Wall -fno-exceptions -std=c++17 -ggdb `pkg-config --cflags $(EMOTE_DOWNLOADER_PKGS)`

+ 1 - 1
test/pajaWalk/test.sh

@@ -20,5 +20,5 @@ if [ "$EXPECTED_COUNT" != "$ACTUAL_COUNT" ]; then
 fi
 
 for frame in `ls ./expected-frames/`; do
-    $DIFFIMG -e "./expected-frames/$frame" -a "./actual-frames/$frame" -t 2
+    $DIFFIMG -e "./expected-frames/$frame" -a "./actual-frames/$frame" -t 5
 done

+ 1 - 1
test/utf8/test.sh

@@ -20,5 +20,5 @@ if [ "$EXPECTED_COUNT" != "$ACTUAL_COUNT" ]; then
 fi
 
 for frame in `ls ./expected-frames/`; do
-    $DIFFIMG -e "./expected-frames/$frame" -a "./actual-frames/$frame" -t 2
+    $DIFFIMG -e "./expected-frames/$frame" -a "./actual-frames/$frame" -t 5
 done

+ 108 - 0
third_party/Makefile.patch

@@ -0,0 +1,108 @@
+--- Makefile.orig	2019-06-26 12:08:33.000000000 +1000
++++ Makefile	2019-06-26 12:48:05.000000000 +1000
+@@ -37,6 +37,8 @@
+ UHEADERS = getarg.h
+ UOBJECTS = $(USOURCES:.c=.o)
+ 
++UNAME:=$(shell uname)
++
+ # Some utilities are installed
+ INSTALLABLE = \
+ 	gif2rgb \
+@@ -61,27 +63,53 @@
+ 
+ LDLIBS=libgif.a -lm
+ 
+-all: libgif.so libgif.a libutil.so libutil.a $(UTILS)
++SOEXTENION	= so
++LIBGIFSO	= libgif.$(SOEXTENSION)
++LIBGIFSOMAJOR	= libgif.$(SOEXTENSION).$(LIBMAJOR)
++LIBGIFSOVER	= libgif.$(SOEXTENSION).$(LIBVER)
++LIBUTILSO	= libutil.$(SOEXTENSION)
++LIBUTILSOMAJOR	= libutil.$(SOEXTENSION).$(LIBMAJOR)
++ifeq ($(UNAME), Darwin)
++SOEXTENSION	= dylib
++LIBGIFSO        = libgif.$(SOEXTENSION)
++LIBGIFSOMAJOR   = libgif.$(LIBMAJOR).$(SOEXTENSION)
++LIBGIFSOVER	= libgif.$(LIBVER).$(SOEXTENSION)
++LIBUTILSO	= libutil.$(SOEXTENSION)
++LIBUTILSOMAJOR	= libutil.$(LIBMAJOR).$(SOEXTENSION)
++endif
++
++all: $(LIBGIFSO) libgif.a $(LIBUTILSO) libutil.a $(UTILS)
++ifeq ($(UNAME), Darwin)
++else
+ 	$(MAKE) -C doc
++endif
+ 
+ $(UTILS):: libgif.a libutil.a
+ 
+-libgif.so: $(OBJECTS) $(HEADERS)
+-	$(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libgif.so.$(LIBMAJOR) -o libgif.so $(OBJECTS)
++$(LIBGIFSO): $(OBJECTS) $(HEADERS)
++ifeq ($(UNAME), Darwin)
++	$(CC) $(CFLAGS) -dynamiclib -current_version $(LIBVER) $(OBJECTS) -o $(LIBGIFSO)
++else
++	$(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,$(LIBGIFSOMAJOR) -o $(LIBGIFSO) $(OBJECTS)
++endif
+ 
+ libgif.a: $(OBJECTS) $(HEADERS)
+ 	$(AR) rcs libgif.a $(OBJECTS)
+ 
+-libutil.so: $(UOBJECTS) $(UHEADERS)
+-	$(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libutil.so.$(LIBMAJOR) -o libutil.so $(UOBJECTS)
++$(LIBUTILSO): $(UOBJECTS) $(UHEADERS)
++ifeq ($(UNAME), Darwin)
++	$(CC) $(CFLAGS) -dynamiclib -current_version $(LIBVER) $(OBJECTS) -o $(LIBUTILSO)
++else
++	$(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,$(LIBUTILMAJOR) -o $(LIBUTILSO) $(UOBJECTS)
++endif
+ 
+ libutil.a: $(UOBJECTS) $(UHEADERS)
+ 	$(AR) rcs libutil.a $(UOBJECTS)
+ 
+ clean:
+-	rm -f $(UTILS) $(TARGET) libgetarg.a libgif.a libgif.so libutil.a libutil.so *.o
+-	rm -f libgif.so.$(LIBMAJOR).$(LIBMINOR).$(LIBPOINT)
+-	rm -f libgif.so.$(LIBMAJOR)
++	rm -f $(UTILS) $(TARGET) libgetarg.a libgif.a $(LIBGIFSO) libutil.a $(LIBUTILSO) *.o
++	rm -f $(LIBGIFSOVER)
++	rm -f $(LIBGIFSOMAJOR)
+ 	rm -fr doc/*.1 *.html doc/staging
+ 
+ check: all
+@@ -89,7 +117,12 @@
+ 
+ # Installation/uninstallation
+ 
++ifeq ($(UNAME), Darwin)
++install: all install-bin install-include install-lib
++else
+ install: all install-bin install-include install-lib install-man
++endif
++
+ install-bin: $(INSTALLABLE)
+ 	$(INSTALL) -d "$(DESTDIR)$(BINDIR)"
+ 	$(INSTALL) $^ "$(DESTDIR)$(BINDIR)"
+@@ -99,9 +132,9 @@
+ install-lib:
+ 	$(INSTALL) -d "$(DESTDIR)$(LIBDIR)"
+ 	$(INSTALL) -m 644 libgif.a "$(DESTDIR)$(LIBDIR)/libgif.a"
+-	$(INSTALL) -m 755 libgif.so "$(DESTDIR)$(LIBDIR)/libgif.so.$(LIBVER)"
+-	ln -sf libgif.so.$(LIBVER) "$(DESTDIR)$(LIBDIR)/libgif.so.$(LIBMAJOR)"
+-	ln -sf libgif.so.$(LIBMAJOR) "$(DESTDIR)$(LIBDIR)/libgif.so"
++	$(INSTALL) -m 755 $(LIBGIFSO) "$(DESTDIR)$(LIBDIR)/$(LIBGIFSOVER)"
++	ln -sf $(LIBGIFSOVER) "$(DESTDIR)$(LIBDIR)/$(LIBGIFSOMAJOR)"
++	ln -sf $(LIBGIFSOMAJOR) "$(DESTDIR)$(LIBDIR)/$(LIBGIFSO)"
+ install-man:
+ 	$(INSTALL) -d "$(DESTDIR)$(MANDIR)/man1"
+ 	$(INSTALL) -m 644 doc/*.1 "$(DESTDIR)$(MANDIR)/man1"
+@@ -112,7 +145,7 @@
+ 	rm -f "$(DESTDIR)$(INCDIR)/gif_lib.h"
+ uninstall-lib:
+ 	cd "$(DESTDIR)$(LIBDIR)" && \
+-		rm -f libgif.a libgif.so libgif.so.$(LIBMAJOR) libgif.so.$(LIBVER)
++		rm -f libgif.a $(LIBGIFSO) $(LIBGIFSOMAJOR) $(LIBGIFSOVER)
+ uninstall-man:
+ 	cd "$(DESTDIR)$(MANDIR)/man1" && rm -f $(shell cd doc >/dev/null && echo *.1)
+ 

+ 2 - 0
third_party/build_third_party.sh

@@ -35,6 +35,8 @@ fi
 if [ ! -d "giflib-${GIFLIB_VERSION}-dist" ]; then
     wget --no-dns-cache "https://deac-riga.dl.sourceforge.net/project/giflib/giflib-${GIFLIB_VERSION}.tar.gz"
     tar fvx "giflib-${GIFLIB_VERSION}.tar.gz"
+    # NOTE: Taken from here https://sourceforge.net/p/giflib/bugs/133/
+    patch "giflib-${GIFLIB_VERSION}/Makefile" < Makefile.patch
     mkdir "giflib-${GIFLIB_VERSION}-dist"
 
     cd "giflib-${GIFLIB_VERSION}"