Skip to content

Commit

Permalink
working version with generation of thirdparty libraries
Browse files Browse the repository at this point in the history
  • Loading branch information
estebanlm committed Jul 12, 2016
1 parent 8ea1fbb commit 45a5112
Show file tree
Hide file tree
Showing 21 changed files with 291 additions and 47 deletions.
3 changes: 2 additions & 1 deletion build.macos32x86/common/Makefile.app
Expand Up @@ -44,6 +44,7 @@ endif
default: $(APP)

include ../common/Makefile.vm
include ../common/Makefile.extra

cleanall: cleanapp cleanastapp cleandbgapp cleanallvm

Expand Down Expand Up @@ -82,7 +83,7 @@ endif

$(APP): cleanbundles $(VMEXE) $(VMBUNDLES) $(VMPLUGINDYLIBS) \
$(VMPLIST) $(VMLOCALIZATION) $(VMMENUNIB) $(VMICONS) \
$(SOURCES) $(APPPOST) signapp touchapp
$(SOURCES) $(THIRDPARTYLIBS) $(APPPOST) signapp touchapp

# Bundles with missing prerequisites won't be built. But we need to force the
# attempt to make them every time in case the prerequisites /have/ been built.
Expand Down
9 changes: 9 additions & 0 deletions build.macos32x86/common/Makefile.extra
@@ -1,6 +1,15 @@
#
# THIRDPARTYLIBS The libraries to build (you define them in ./third-party/LIB/Makefile.lib)
# THIRDPARTYDIR Where to build libraries
# THIRDPARTYOUTDIR Where to first install libraries (output place)
#
# REQUIRES:
# USEPLUGINASDYLIB Used to define where to place built libraries (default is FALSE (or absent)).
#
THIRDPARTYDIR:=$(BLDDIR)/third-party
THIRDPARTYOUTDIR:=$(abspath $(THIRDPARTYDIR)/out)
THIRDPARTYLIBDIR:=$(THIRDPARTYOUTDIR)/lib
THIRDPARTYINCLUDEDIR=$(THIRDPARTYOUTDIR)/include

ifeq ($(USEPLUGINASDYLIB),TRUE)
THIRDPARTYINSTALLDIR:=$(APP)/Contents/MacOS/Plugins
Expand Down
39 changes: 21 additions & 18 deletions build.macos32x86/common/Makefile.plugin
Expand Up @@ -6,26 +6,19 @@
# platforms/iOS/plugins/AioPlugin/Makefile. Look at
# platforms/iOS/plugins/*/Makefile for examples.
#
# CFLAGS adds additional compilation flags to source file compilation
# XCFLAGS adds additional compilation flags after all other flags
# EXCLUDESRC defines patterns of source files to not compile, e.g. %/dump.c
# EXTRALIBS defines additional libraries to link into an external plugin bundle
# INCDIRS defines additonal directories in which to search for includes
# LIBSRC overrides the set of files to compile (if EXCLUDESRC inconvenient)
# LINK_WITH_CPP set to non-empty to link external plugin bundle with c++ runtime
# SRCDIRS supplies additional directories containing files to compile.
# PREREQUISITES supplies names of files that must exist to make lib or bundle
# CFLAGS adds additional compilation flags to source file compilation
# XCFLAGS adds additional compilation flags after all other flags
# EXCLUDESRC defines patterns of source files to not compile, e.g. %/dump.c
# EXTRALIBS defines additional libraries to link into an external plugin bundle
# INCDIRS defines additonal directories in which to search for includes
# LIBSRC overrides the set of files to compile (if EXCLUDESRC inconvenient)
# LINK_WITH_CPP set to non-empty to link external plugin bundle with c++ runtime
# SRCDIRS supplies additional directories containing files to compile.
# PREREQUISITES supplies names of files that must exist to make lib or bundle
# THIRDPARTYLIBS supplies names for third-party libraries that needs to be built

$(info $$(LIBNAME): $(LIBNAME))

ifeq ($(USEPLUGINASDYLIB),TRUE)
# I do not like to use lib "as is" because that will strip all "lib" occurences, but I do not
# find any better solution :(
LIBDIR:=$(subst lib,,$(LIBNAME))
else
LIBDIR:=$(LIBNAME)
endif

# VM config flags.
ifeq ($(CONFIGURATION),product)
OFLAGS:= -g -Os
Expand Down Expand Up @@ -60,6 +53,14 @@ CFLAGS:= $(CFLAGS) $(OFLAGS) $(COGDEFS) $(DEBUGVM) $(XDEFS)
#
#PLUGINSRCDIR:= ../../src/plugins

ifeq ($(USEPLUGINASDYLIB),TRUE)
# I do not like to use lib "as is" because that will strip all "lib" occurences, but I do not
# find any better solution :(
LIBDIR:=$(subst lib,,$(LIBNAME))
else
LIBDIR:=$(LIBNAME)
endif

CROSSDIR:= $(PLATDIR)/Cross/plugins/$(LIBDIR)
OSXDIR:= $(PLATDIR)/iOS/vm/OSX
OSXPLGDIR:= $(PLATDIR)/iOS/plugins/$(LIBDIR)
Expand Down Expand Up @@ -198,12 +199,14 @@ $(PLUGINPLIST): $(PLATDIR)/iOS/plugins/Info.plist getversion
$(PLUGINDYLIB): $(PLUGINREQS) $(VMDIR) $(OBJDIR) $(LIBOBJ)
ifneq ($(LINK_WITH_CPP),)
$(LDCXX) \
$(DYFFLAGS) \
$(DYFLAGS) \
-install_name @executable_path/Plugins/$(LIBNAME).dylib \
$(LIBOBJ) $(EXTRALIBS) \
-o $(VMDIR)/$(LIBNAME).dylib
else
$(LD) \
$(DYFLAGS) \
-install_name @executable_path/Plugins/$(LIBNAME).dylib \
$(LIBOBJ) $(EXTRALIBS) \
-o $(VMDIR)/$(LIBNAME).dylib
endif
Expand Down
14 changes: 10 additions & 4 deletions build.macos32x86/pharo.cog.spur/Makefile
Expand Up @@ -10,12 +10,18 @@ COGDEFS:=-DPharoVM=1
APPNAME:=Pharo
APPNAMEDEF:=$(APPNAME)
USEPLUGINASDYLIB:=TRUE

APPPOST:=fix-libs
THIRDPARTYLIBS:=libssh2 libgit2 pkgconfig pixman libpng cairo

# Now include the Makefile proper, which is common to all Mac OS builds.
#
include ../common/Makefile.app

fix-libs:
# $(shell ./fix-libs.sh $(APP))
# third-party libraries
#
# include ../third-party/freetype2/Makefile.lib # this is already there because of the dependency on FT2Plugin
include ../third-party/libssh2/Makefile.lib
include ../third-party/libgit2/Makefile.lib
include ../third-party/pkgconfig/Makefile.lib
include ../third-party/pixman/Makefile.lib
include ../third-party/libpng/Makefile.lib
include ../third-party/cairo/Makefile.lib
5 changes: 5 additions & 0 deletions build.macos32x86/third-party/cairo/Makefile
@@ -0,0 +1,5 @@
.PHONY: all

include Makefile.lib

all: $(CAIROLIB)
34 changes: 34 additions & 0 deletions build.macos32x86/third-party/cairo/Makefile.lib
@@ -0,0 +1,34 @@
include ../common/Makefile.extra

$(info LIBRARY: cairo)

# plugin definitions
CAIROURL:=http://www.cairographics.org/releases/cairo-1.12.14.tar.xz
CAIROLIBNAME:=libcairo.2.dylib
CAIRODIR:=$(THIRDPARTYDIR)/cairo-1.12.14
CAIROLIB:=$(THIRDPARTYINSTALLDIR)/$(CAIROLIBNAME)

# ensure third-party library is built and recognised by plugins
INCDIRS:=$(INCDIRS) $(THIRDPARTYINCLUDEDIR)
THIRDPARTYLIBS:=$(THIRDPARTYLIBS) cairo
EXTRALIBS:=$(EXTRALIBS) $(CAIROLIB)
PLUGINREQS:=$(THIRDPARTYLIBS)

$(CAIRODIR): $(THIRDPARTYDIR)
curl -L $(CAIROURL) | tar x -C $(THIRDPARTYDIR)

$(CAIROLIB): $(THIRDPARTYINSTALLDIR) $(THIRDPARTYOUTDIR) $(CAIRODIR)
cd $(CAIRODIR) \
&& ./configure \
--prefix='$(THIRDPARTYOUTDIR)' \
CFLAGS='-arch i386' \
LDFLAGS='-arch i386' \
--disable-silent-rules \
--disable-xlib \
--disable-dependency-tracking \
&& make \
&& make install
cp -f $(THIRDPARTYLIBDIR)/$(CAIROLIBNAME) $(THIRDPARTYINSTALLDIR)
install_name_tool -id "@executable_path/Plugins/$(CAIROLIBNAME)" $(CAIROLIB)

cairo: $(CAIROLIB)
2 changes: 2 additions & 0 deletions build.macos32x86/third-party/freetype2/Makefile
@@ -1,3 +1,5 @@
.PHONY: all

include Makefile.lib

all: $(FREETYPE2LIB)
25 changes: 19 additions & 6 deletions build.macos32x86/third-party/freetype2/Makefile.lib
@@ -1,15 +1,28 @@
FREETYPE2URL:=http://files.pharo.org/vm/src/lib/freetype-2.4.9.tar.gz
FREETYPE2DIR:=$(THIRDPARTYDIR)/freetype-2.4.9
FREETYPE2LIB:=$(THIRDPARTYINSTALLDIR)/libfreetype.6.dylib
include ../common/Makefile.extra

$(info LIBRARY: freetype2)

$(info $$(FREETYPE2LIB): $(FREETYPE2LIB))
# plugin definitions
FREETYPE2URL:=http://ftp.igh.cnrs.fr/pub/nongnu/freetype/freetype-2.4.9.tar.gz
FREETYPE2DIR:=$(THIRDPARTYDIR)/freetype-2.4.9
FREETYPE2LIBNAME:=libfreetype.6.dylib
FREETYPE2LIB:=$(THIRDPARTYINSTALLDIR)/$(FREETYPE2LIBNAME)

# ensure third-party library is built and recognised by plugins
INCDIRS:=$(INCDIRS) $(THIRDPARTYINCLUDEDIR) $(THIRDPARTYINCLUDEDIR)/freetype2
EXTRALIBS:=$(EXTRALIBS) $(FREETYPE2LIB)
THIRDPARTYLIBS:=$(THIRDPARTYLIBS) freetype2
PLUGINREQS:=$(PLUGINREQS) $(THIRDPARTYLIBS)

$(FREETYPE2DIR): $(THIRDPARTYDIR)
curl $(FREETYPE2URL) | tar x -C $(THIRDPARTYDIR)

$(FREETYPE2LIB): $(THIRDPARTYINSTALLDIR) $(THIRDPARTYOUTDIR) $(FREETYPE2DIR)
cd $(FREETYPE2DIR) \
&& ./configure --prefix='$(THIRDPARTYOUTDIR)' CFLAGS='-arch i386' LDFLAGS='-arch i386' \
&& ./configure --prefix='$(THIRDPARTYOUTDIR)' CFLAGS='-arch i386' LDFLAGS='-arch i386 ' \
&& make \
&& make install
cp -f $(THIRDPARTYOUTDIR)/lib/libfreetype.6.dylib $(THIRDPARTYINSTALLDIR)
cp -f $(THIRDPARTYLIBDIR)/$(FREETYPE2LIBNAME) $(THIRDPARTYINSTALLDIR)
install_name_tool -id "@executable_path/Plugins/$(FREETYPE2LIBNAME)" $(FREETYPE2LIB)

freetype2: $(FREETYPE2LIB)
5 changes: 5 additions & 0 deletions build.macos32x86/third-party/libgit2/Makefile
@@ -0,0 +1,5 @@
.PHONY: all

include Makefile.lib

all: $(LIBGIT2LIB)
38 changes: 38 additions & 0 deletions build.macos32x86/third-party/libgit2/Makefile.lib
@@ -0,0 +1,38 @@
include ../common/Makefile.extra

$(info LIBRARY: libgit2)

# plugin definitions
LIBGIT2URL:=https://github.com/libgit2/libgit2/archive/v0.23.0.tar.gz
LIBGIT2DIR:=$(THIRDPARTYDIR)/libgit2-0.23.0
LIBGIT2LIBNAME:=libgit2.0.23.0.dylib
LIBGIT2LIB:=$(THIRDPARTYINSTALLDIR)/$(LIBGIT2LIBNAME)

# ensure third-party library is built and recognised by plugins
INCDIRS:=$(INCDIRS) $(THIRDPARTYINCLUDEDIR)
THIRDPARTYLIBS:=$(THIRDPARTYLIBS) libgit2
EXTRALIBS:=$(EXTRALIBS) $(LIBGIT2LIB)
PLUGINREQS:=$(THIRDPARTYLIBS)

$(LIBGIT2DIR): $(THIRDPARTYDIR)
curl -L $(LIBGIT2URL) | tar x -C $(THIRDPARTYDIR)

$(LIBGIT2LIB): $(THIRDPARTYINSTALLDIR) $(THIRDPARTYOUTDIR) $(LIBGIT2DIR)
cd $(LIBGIT2DIR) \
&& cmake \
-DCMAKE_INSTALL_PREFIX=$(THIRDPARTYOUTDIR) \
-DUSE_SSH=ON \
-DBUILD_CLAR=OFF \
-DLIBSSH2_FOUND=ON \
-DLIBSSH2_INCLUDE_DIRS=$(THIRDPARTYINCLUDEDIR) \
-DLIBSSH2_LIBRARIES=$(THIRDPARTYLIBDIR)/libssh2.1.dylib \
-DCMAKE_C_FLAGS=-m32 \
-DCMAKE_CXX_FLAGS=-m32 \
-DCMAKE_OSX_ARCHITECTURES=i386 \
-DCMAKE_SHARED_LINKER_FLAGS=-Wl,-rpath,@executable_path:@executable_path/Plugins \
&& make \
&& make install
cp -f $(THIRDPARTYLIBDIR)/$(LIBGIT2LIBNAME) $(THIRDPARTYINSTALLDIR)
install_name_tool -id "@executable_path/Plugins/$(LIBGIT2LIBNAME)" $(LIBGIT2LIB)

libgit2: $(LIBGIT2LIB)
5 changes: 5 additions & 0 deletions build.macos32x86/third-party/libpng/Makefile
@@ -0,0 +1,5 @@
.PHONY: all

include Makefile.lib

all: $(LIBPNGLIB)
28 changes: 28 additions & 0 deletions build.macos32x86/third-party/libpng/Makefile.lib
@@ -0,0 +1,28 @@
include ../common/Makefile.extra

$(info LIBRARY: pixman)

# plugin definitions
LIBPNGURL:=ftp://ftp.simplesystems.org/pub/libpng/png/src/history/libpng12/libpng-1.2.49.tar.gz
LIBPNGDIR:=$(THIRDPARTYDIR)/libpng-1.2.49
LIBPNGLIBNAME:=libpng12.0.dylib
LIBPNGLIB:=$(THIRDPARTYINSTALLDIR)/$(LIBPNGLIBNAME)

# ensure third-party library is built and recognised by plugins
INCDIRS:=$(INCDIRS) $(THIRDPARTYINCLUDEDIR)
THIRDPARTYLIBS:=$(THIRDPARTYLIBS) libpng
EXTRALIBS:=$(EXTRALIBS) $(LIBPNGLIB)
PLUGINREQS:=$(THIRDPARTYLIBS)

$(LIBPNGDIR): $(THIRDPARTYDIR)
curl -L $(LIBPNGURL) | tar x -C $(THIRDPARTYDIR)

$(LIBPNGLIB): $(THIRDPARTYINSTALLDIR) $(THIRDPARTYOUTDIR) $(LIBPNGDIR)
cd $(LIBPNGDIR) \
&& ./configure --prefix='$(THIRDPARTYOUTDIR)' CFLAGS='-arch i386' LDFLAGS='-arch i386' \
&& make \
&& make install
cp -f $(THIRDPARTYLIBDIR)/$(LIBPNGLIBNAME) $(THIRDPARTYINSTALLDIR)
install_name_tool -id "@executable_path/Plugins/$(LIBPNGLIBNAME)" $(LIBPNGLIB)

libpng: $(LIBPNGLIB)
19 changes: 17 additions & 2 deletions build.macos32x86/third-party/libsdl2/Makefile.lib
@@ -1,6 +1,18 @@
include ../common/Makefile.extra

$(info LIBRARY: libsdl2)

# plugin definitions
LIBSDL2URL:=http://www.libsdl.org/release/SDL2-2.0.4.tar.gz
LIBSDL2DIR:=$(THIRDPARTYDIR)/SDL2-2.0.4
LIBSDL2LIB:=$(THIRDPARTYINSTALLDIR)/libSDL2-2.0.0.dylib
LIBSDL2LIBNAME:=libSDL2-2.0.0.dylib
LIBSDL2LIB:=$(THIRDPARTYINSTALLDIR)/$(LIBSDL2LIBNAME)

# ensure third-party library is built and recognised by plugins
INCDIRS:=$(INCDIRS) $(THIRDPARTYINCLUDEDIR)
THIRDPARTYLIBS:=$(THIRDPARTYLIBS) libsdl2
EXTRALIBS:=$(EXTRALIBS) -undefined dynamic_lookup $(LIBSDL2LIB)
PLUGINREQS:=$(PLUGINREQS) $(THIRDPARTYLIBS)

$(LIBSDL2DIR): $(THIRDPARTYDIR)
curl $(LIBSDL2URL) | tar x -C $(THIRDPARTYDIR)
Expand All @@ -10,4 +22,7 @@ $(LIBSDL2LIB): $(THIRDPARTYINSTALLDIR) $(THIRDPARTYOUTDIR) $(LIBSDL2DIR)
&& ./configure --prefix='$(THIRDPARTYOUTDIR)' CFLAGS='-arch i386' LDFLAGS='-arch i386' \
&& make \
&& make install
cp -f $(THIRDPARTYOUTDIR)/lib/libSDL2-2.0.0.dylib $(THIRDPARTYINSTALLDIR)
cp -f $(THIRDPARTYLIBDIR)/$(LIBSDL2LIBNAME) $(THIRDPARTYINSTALLDIR)
install_name_tool -id "@executable_path/Plugins/$(LIBSDL2LIBNAME)" $(LIBSDL2LIB)

libsdl2: $(LIBSDL2LIB)
5 changes: 5 additions & 0 deletions build.macos32x86/third-party/libssh2/Makefile
@@ -0,0 +1,5 @@
.PHONY: all

include Makefile.lib

all: $(LIBSSH2LIB)
28 changes: 28 additions & 0 deletions build.macos32x86/third-party/libssh2/Makefile.lib
@@ -0,0 +1,28 @@
include ../common/Makefile.extra

$(info LIBRARY: libssh2)

# plugin definitions
LIBSSH2URL:=http://www.libssh2.org/download/libssh2-1.4.3.tar.gz
LIBSSH2DIR:=$(THIRDPARTYDIR)/libssh2-1.4.3
LIBSSH2LIBNAME:=libssh2.1.dylib
LIBSSH2LIB:=$(THIRDPARTYINSTALLDIR)/$(LIBSSH2LIBNAME)

# ensure third-party library is built and recognised by plugins
INCDIRS:=$(INCDIRS) $(THIRDPARTYINCLUDEDIR)
THIRDPARTYLIBS:=$(THIRDPARTYLIBS) libssh2
EXTRALIBS:=$(EXTRALIBS) $(LIBSSH2LIB)
PLUGINREQS:=$(THIRDPARTYLIBS)

$(LIBSSH2DIR): $(THIRDPARTYDIR)
curl -L $(LIBSSH2URL) | tar x -C $(THIRDPARTYDIR)

$(LIBSSH2LIB): $(THIRDPARTYINSTALLDIR) $(THIRDPARTYOUTDIR) $(LIBSSH2DIR)
cd $(LIBSSH2DIR) \
&& ./configure --prefix='$(THIRDPARTYOUTDIR)' CFLAGS='-arch i386' LDFLAGS='-arch i386' \
&& make \
&& make install
cp -f $(THIRDPARTYLIBDIR)/$(LIBSSH2LIBNAME) $(THIRDPARTYINSTALLDIR)
install_name_tool -id "@executable_path/Plugins/$(LIBSSH2LIBNAME)" $(LIBSSH2LIB)

libssh2: $(LIBSSH2LIB)
5 changes: 5 additions & 0 deletions build.macos32x86/third-party/pixman/Makefile
@@ -0,0 +1,5 @@
.PHONY: all

include Makefile.lib

all: $(PIXMANLIB)
27 changes: 27 additions & 0 deletions build.macos32x86/third-party/pixman/Makefile.lib
@@ -0,0 +1,27 @@
include ../common/Makefile.extra

$(info LIBRARY: pixman)

# plugin definitions
PIXMANURL:=http://www.cairographics.org/releases/pixman-0.26.0.tar.gz
PIXMANNAME:=libpixman-1.0.dylib
PIXMANDIR:=$(THIRDPARTYDIR)/pixman-0.26.0
PIXMANLIB:=$(THIRDPARTYINSTALLDIR)/$(PIXMANNAME)

# ensure third-party library is built and recognised by plugins
INCDIRS:=$(INCDIRS) $(THIRDPARTYINCLUDEDIR)
THIRDPARTYLIBS:=$(THIRDPARTYLIBS) pixman
EXTRALIBS:=$(EXTRALIBS) $(PIXMANLIB)
PLUGINREQS:=$(THIRDPARTYLIBS)

$(PIXMANDIR): $(THIRDPARTYDIR)
curl -L $(PIXMANURL) | tar x -C $(THIRDPARTYDIR)

$(PIXMANLIB): $(THIRDPARTYINSTALLDIR) $(THIRDPARTYOUTDIR) $(PIXMANDIR)
cd $(PIXMANDIR) \
&& ./configure --prefix='$(THIRDPARTYOUTDIR)' CFLAGS='-arch i386' LDFLAGS='-arch i386' \
&& make \
&& make install
cp -f $(THIRDPARTYLIBDIR)/$(PIXMANNAME) $(THIRDPARTYINSTALLDIR)

pixman: $(PIXMANLIB)

0 comments on commit 45a5112

Please sign in to comment.