From 54edce6e1c6c9d966ff33eb568d929ccdb7786c3 Mon Sep 17 00:00:00 2001 From: Philippe Renon Date: Sat, 5 Sep 2015 19:08:55 +0200 Subject: [PATCH] LP-30 added build scripts for osg (including windows dependencies), osgearth and marble --- make/3rdparty/3rdparty.mk | 2 + make/3rdparty/marble/marble.mk | 160 ++++++++ .../osgearth/gdal_GNUmakefile_fix.diff | 48 +++ make/3rdparty/osgearth/osgearth.mk | 326 ++++++++++++++++ .../osgearth/osgearth_dependencies_win.sh | 348 ++++++++++++++++++ 5 files changed, 884 insertions(+) create mode 100644 make/3rdparty/3rdparty.mk create mode 100644 make/3rdparty/marble/marble.mk create mode 100644 make/3rdparty/osgearth/gdal_GNUmakefile_fix.diff create mode 100644 make/3rdparty/osgearth/osgearth.mk create mode 100644 make/3rdparty/osgearth/osgearth_dependencies_win.sh diff --git a/make/3rdparty/3rdparty.mk b/make/3rdparty/3rdparty.mk new file mode 100644 index 000000000..8e259e7c2 --- /dev/null +++ b/make/3rdparty/3rdparty.mk @@ -0,0 +1,2 @@ +-include $(ROOT_DIR)/make/3rdparty/osgearth/osgearth.mk +-include $(ROOT_DIR)/make/3rdparty/marble/marble.mk diff --git a/make/3rdparty/marble/marble.mk b/make/3rdparty/marble/marble.mk new file mode 100644 index 000000000..2f3d29c09 --- /dev/null +++ b/make/3rdparty/marble/marble.mk @@ -0,0 +1,160 @@ +################################ +# Targets to build Marble +# +################################ +# Linux prerequisites +################################ +# +# +################################ +# Windows prerequisites +################################ +# +# +################################ +# Building +################################ +# +# $ make all_marble +# +################################ + +# TODO should be discovered +QT_VERSION := 5.4.1 + +MARBLE_NAME_PREFIX := +MARBLE_NAME_SUFIX := -qt-$(QT_VERSION) + +################################ +# +# Marble +# +################################ + +MARBLE_VERSION := master +MARBLE_GIT_BRANCH := $(MARBLE_VERSION) + +MARBLE_BASE_NAME := marble-$(MARBLE_VERSION) +MARBLE_BUILD_CONF := Release + +ifeq ($(UNAME), Linux) + ifeq ($(ARCH), x86_64) + MARBLE_NAME := $(MARBLE_BASE_NAME)-linux-x64 + else + MARBLE_NAME := $(MARBLE_BASE_NAME)-linux-x86 + endif + MARBLE_DATA_BASE_DIR := share/marble/data + MARBLE_CMAKE_GENERATOR := "Unix Makefiles" + # for some reason Qt is not added to the path in make/tools.mk + MARBLE_BUILD_PATH := $(QT_SDK_PREFIX)/bin:$(PATH) +else ifeq ($(UNAME), Darwin) + MARBLE_NAME := $(MARBLE_BASE_NAME)-clang_64 + MARBLE_DATA_BASE_DIR := share/marble/data + MARBLE_CMAKE_GENERATOR := "Unix Makefiles" + # for some reason Qt is not added to the path in make/tools.mk + MARBLE_BUILD_PATH := $(QT_SDK_PREFIX)/bin:$(PATH) +else ifeq ($(UNAME), Windows) + MARBLE_NAME := $(MARBLE_BASE_NAME)-$(QT_SDK_ARCH) + MARBLE_DATA_BASE_DIR := data + MARBLE_CMAKE_GENERATOR := "MinGW Makefiles" + # CMake is quite picky about its PATH and will complain if sh.exe is found in it + MARBLE_BUILD_PATH := "$(TOOLS_DIR)/bin;$(QT_SDK_PREFIX)/bin;$(MINGW_DIR)/bin;$$SYSTEMROOT/System32" +endif + +MARBLE_NAME := $(MARBLE_NAME_PREFIX)$(MARBLE_NAME)$(MARBLE_NAME_SUFIX) +MARBLE_SRC_DIR := $(ROOT_DIR)/3rdparty/marble +MARBLE_BUILD_DIR := $(BUILD_DIR)/3rdparty/$(MARBLE_NAME) +MARBLE_INSTALL_DIR := $(BUILD_DIR)/3rdparty/install/$(MARBLE_NAME) +MARBLE_DATA_DIR := $(MARBLE_INSTALL_DIR)/$(MARBLE_DATA_BASE_DIR) +MARBLE_PATCH_FILE := $(ROOT_DIR)/make/3rdparty/marble-$(MARBLE_VERSION)_patch.diff + +.PHONY: marble +marble: + @$(ECHO) "Building marble $(call toprel, $(MARBLE_SRC_DIR)) into $(call toprel, $(MARBLE_BUILD_DIR))" + $(V1) $(MKDIR) -p $(MARBLE_BUILD_DIR) + $(V1) ( $(CD) $(MARBLE_BUILD_DIR) && \ + PATH=$(MARBLE_BUILD_PATH) && \ + $(CMAKE) -G $(MARBLE_CMAKE_GENERATOR) -DCMAKE_BUILD_TYPE=$(MARBLE_BUILD_CONF) \ + -DQTONLY=1 -DQT5BUILD=1 -DWITH_DESIGNER_PLUGIN=0 \ + -DCMAKE_INSTALL_PREFIX=$(MARBLE_INSTALL_DIR) $(MARBLE_SRC_DIR) && \ + $(MAKE) && \ + $(MAKE) install ; \ + ) + @$(ECHO) "Copying restricted maps to $(call toprel, $(MARBLE_DATA_DIR))" + @$(ECHO) "Copying Google Maps" + $(V1) $(MKDIR) -p $(MARBLE_DATA_DIR)/maps/earth/googlemaps + $(V1) $(CP) $(MARBLE_SRC_DIR)/googlemaps/googlemaps.dgml $(MARBLE_DATA_DIR)/maps/earth/googlemaps/ + $(V1) $(CP) $(MARBLE_SRC_DIR)/googlemaps/preview.png $(MARBLE_DATA_DIR)/maps/earth/googlemaps/ + $(V1) $(CP) -R $(MARBLE_SRC_DIR)/googlemaps/0 $(MARBLE_DATA_DIR)/maps/earth/googlemaps/ + @$(ECHO) "Copying Google Sat" + $(V1) $(MKDIR) -p $(MARBLE_DATA_DIR)/maps/earth/googlesat + $(V1) $(CP) $(MARBLE_SRC_DIR)/googlesat/googlesat.dgml $(MARBLE_DATA_DIR)/maps/earth/googlesat/ + $(V1) $(CP) $(MARBLE_SRC_DIR)/googlesat/preview.png $(MARBLE_DATA_DIR)/maps/earth/googlesat/ + $(V1) $(CP) -R $(MARBLE_SRC_DIR)/googlesat/0 $(MARBLE_DATA_DIR)/maps/earth/googlesat/ + $(V1) $(CP) -R $(MARBLE_SRC_DIR)/googlesat/bicycle $(MARBLE_DATA_DIR)/maps/earth/googlesat/ + $(V1) $(CP) -R $(MARBLE_SRC_DIR)/googlesat/streets $(MARBLE_DATA_DIR)/maps/earth/googlesat/ + +.PHONY: package_marble +package_marble: + @$(ECHO) "Packaging $(call toprel, $(MARBLE_INSTALL_DIR)) into $(notdir $(MARBLE_INSTALL_DIR)).tar" + $(V1) $(CP) $(ROOT_DIR)/make/3rdparty/OpenPilotReadme.txt $(MARBLE_INSTALL_DIR)/ + $(V1) ( \ + $(CD) $(MARBLE_INSTALL_DIR)/.. && \ + $(TAR) cf $(notdir $(MARBLE_INSTALL_DIR)).tar $(notdir $(MARBLE_INSTALL_DIR)) && \ + $(ZIP) -f $(notdir $(MARBLE_INSTALL_DIR)).tar && \ + $(call MD5_GEN_TEMPLATE,$(notdir $(MARBLE_INSTALL_DIR)).tar.gz) ; \ + ) + +.NOTPARALLEL: +.PHONY: prepare_marble +prepare_marble: clone_marble + +.PHONY: clone_marble +clone_marble: + $(V1) if [ ! -d "$(MARBLE_SRC_DIR)" ]; then \ + $(ECHO) "Cloning marble..." ; \ + $(GIT) clone --no-checkout git://anongit.kde.org/marble $(MARBLE_SRC_DIR) ; \ + fi + @$(ECHO) "Fetching marble..." + $(V1) ( $(CD) $(MARBLE_SRC_DIR) && $(GIT) fetch ; ) + @$(ECHO) "Checking out marble branch $(MARBLE_GIT_BRANCH)" + $(V1) ( $(CD) $(MARBLE_SRC_DIR) && $(GIT) checkout --quiet --force $(MARBLE_GIT_BRANCH) ; ) + $(V1) if [ -e $(MARBLE_PATCH_FILE) ]; then \ + $(ECHO) "Patching marble..." ; \ + ( $(CD) $(MARBLE_SRC_DIR) && $(GIT) apply $(MARBLE_PATCH_FILE) ; ) \ + fi + + $(V1) if [ ! -d "$(MARBLE_SRC_DIR)/googlemaps" ]; then \ + $(ECHO) "Cloning googlemaps to $(call toprel, $(MARBLE_SRC_DIR)/googlemaps)" ; \ + $(GIT) clone https://gitorious.org/marble-restricted-maps/googlemaps.git $(MARBLE_SRC_DIR)/googlemaps ; \ + fi + @$(ECHO) "Fetching googlemaps..." + $(V1) ( $(CD) $(MARBLE_SRC_DIR)/googlemaps && $(GIT) fetch ; ) + @$(ECHO) "Checking out googlemaps" + $(V1) ( $(CD) $(MARBLE_SRC_DIR)/googlemaps && $(GIT) checkout --quiet --force master ; ) + + $(V1) if [ ! -d "$(MARBLE_SRC_DIR)/googlesat" ]; then \ + $(ECHO) "Cloning googlesat to $(call toprel, $(MARBLE_SRC_DIR)/googlesat)" ; \ + $(GIT) clone https://gitorious.org/marble-restricted-maps/googlesat.git $(MARBLE_SRC_DIR)/googlesat ; \ + fi + @$(ECHO) "Fetching googlesat..." + $(V1) ( $(CD) $(MARBLE_SRC_DIR)/googlesat && $(GIT) fetch ; ) + @$(ECHO) "Checking out googlesat" + $(V1) ( $(CD) $(MARBLE_SRC_DIR)/googlesat && $(GIT) checkout --quiet --force master ; ) + +.PHONY: clean_marble +clean_marble: + @$(ECHO) $(MSG_CLEANING) $(call toprel, $(MARBLE_BUILD_DIR)) + $(V1) [ ! -d "$(MARBLE_BUILD_DIR)" ] || $(RM) -r "$(MARBLE_BUILD_DIR)" + @$(ECHO) $(MSG_CLEANING) $(call toprel, $(MARBLE_INSTALL_DIR)) + $(V1) [ ! -d "$(MARBLE_INSTALL_DIR)" ] || $(RM) -r "$(MARBLE_INSTALL_DIR)" + +.PHONY: clean_all_marble +clean_all_marble: clean_marble + @$(ECHO) $(MSG_CLEANING) $(call toprel, $(MARBLE_SRC_DIR)) + $(V1) [ ! -d "$(MARBLE_SRC_DIR)" ] || $(RM) -r "$(MARBLE_SRC_DIR)" + +.NOTPARALLEL: +.PHONY: all_marble +all_marble: prepare_marble marble package_marble + diff --git a/make/3rdparty/osgearth/gdal_GNUmakefile_fix.diff b/make/3rdparty/osgearth/gdal_GNUmakefile_fix.diff new file mode 100644 index 000000000..98f41527f --- /dev/null +++ b/make/3rdparty/osgearth/gdal_GNUmakefile_fix.diff @@ -0,0 +1,48 @@ +Index: GNUmakefile +=================================================================== +--- GNUmakefile (revision 22722) ++++ GNUmakefile (copie de travail) +@@ -1,13 +1,13 @@ + + include GDALmake.opt + +-GDAL_OBJ = $(GDAL_ROOT)/frmts/o/*.o \ +- $(GDAL_ROOT)/gcore/*.o \ +- $(GDAL_ROOT)/port/*.o \ +- $(GDAL_ROOT)/alg/*.o ++GDAL_OBJ = ./frmts/o/*.o \ ++ ./gcore/*.o \ ++ ./port/*.o \ ++ ./alg/*.o + + ifeq ($(OGR_ENABLED),yes) +-GDAL_OBJ += $(GDAL_ROOT)/ogr/ogrsf_frmts/o/*.o ++GDAL_OBJ += ./ogr/ogrsf_frmts/o/*.o + endif + + include ./ogr/file.lst +@@ -28,13 +28,8 @@ + $(LD_SHARED) $(GDAL_SLIB_SONAME) $(GDAL_OBJ) $(GDAL_LIBS) $(LDFLAGS) $(LIBS) \ + -o $(GDAL_SLIB) + +-$(GDAL_LIB): $(GDAL_OBJ) GDALmake.opt +- rm -f libgdal.a +- $(AR) r $(GDAL_LIB) $(GDAL_OBJ) +- $(RANLIB) $(GDAL_LIB) +- +-$(GDAL_SLIB): $(GDAL_OBJ) $(GDAL_LIB) +- $(LD_SHARED) $(GDAL_SLIB_SONAME) $(GDAL_OBJ) $(GDAL_LIBS) $(LDFLAGS) $(LIBS) \ ++$(GDAL_SLIB): $(GDAL_OBJ) ++ $(LD_SHARED) $(GDAL_SLIB_SONAME) $(GDAL_OBJ) $(LDFLAGS) $(LIBS) \ + -o $(GDAL_SLIB) + + $(LIBGDAL): $(GDAL_OBJ:.o=.lo) +@@ -47,7 +42,7 @@ + endif + + check-lib: port-target core-target frmts-target ogr-target +- $(MAKE) $(LIBGDAL-yes) ++ $(MAKE) $(GDAL_SLIB) + + port-target: + (cd port; $(MAKE)) diff --git a/make/3rdparty/osgearth/osgearth.mk b/make/3rdparty/osgearth/osgearth.mk new file mode 100644 index 000000000..c1777c15b --- /dev/null +++ b/make/3rdparty/osgearth/osgearth.mk @@ -0,0 +1,326 @@ +################################ +# Targets to build osg and osgearth +# +################################ +# Linux prerequisites +################################ +# +# Install development libraries for: +# - zlib +# - jpeg +# - png +# - tiff +# - curl +# - geos +# - gdal +# +# $ sudo apt-get build-dep openscenegraph +# +# $ sudo apt-get install libtiff5-dev libcurl4-openssl-dev libgeos++-dev libgdal-dev +# libpng-dev lipjpeg-dev +# +# $ curl --version +# curl 7.35.0 (i686-pc-linux-gnu) libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3 +# Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smtp smtps telnet tftp +# Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP +# +# $ gdal-config --version +# 1.10.1 +# +# If using Qt 5.3.1, you'll need to workaround this issue : https://bugreports.qt-project.org/browse/QTBUG-39859 +# by editing the file : ./tool/qt-5.3.1/5.3/gcc/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake +# and commenting out this line : _qt5gui_find_extra_libs(EGL "EGL" "" "/usr/include/libdrm") +# +################################ +# Windows prerequisites +################################ +# +# Windows versions of osg and osgearth require many additional libraries to be build +# See osg_win.sh +# +################################ +# OSX prerequisites +################################ +# +# brew install cmake +# brew install gdal +# +################################ +# Building +################################ +# +# $ make all_osg +# +# This will: +# - clone the git repositories into the ./3rdparty directory +# - build osg in the build directory, building steps are : cmake, make, make install +# - intall osg (in the OP tools directory) +# - create distribution files in the build directory +# - TODO: upload distribution files to the OP wiki download page +# +################################ +# Todo +# - install osgearth in osg (a minor issue in the osgearth cmake file prevents it) +# easy to fix then set INSTALL_TO_OSG_DIR=ON when running cmake on osgearth +# - don't build osg deprecated code (if we don't use it...) +# - add targets to publish distribution files to OP wiki. +# - provide complete list of dependencies for osg and osgearth (current list is most probably incomplete as I already had some stuff installed) +# +################################ + +# TODO should be discovered +QT_VERSION := 5.4.1 + +################################ +# +# common stuff +# +################################ + +OSG_BUILD_CONF := Release + +OSG_NAME_PREFIX := +OSG_NAME_SUFIX := -qt-$(QT_VERSION) + +################################ +# +# osg +# +################################ + +#OSG_VERSION := 0b63c8ffde +#OSG_GIT_BRANCH := $(OSG_VERSION) +#OSG_VERSION := 3.4.0-rc5 +#OSG_GIT_BRANCH := tags/OpenSceneGraph-$(OSG_VERSION) +OSG_VERSION := 3.4 +OSG_GIT_BRANCH := OpenSceneGraph-$(OSG_VERSION) + +OSG_BASE_NAME := osg-$(OSG_VERSION) + +ifeq ($(UNAME), Linux) + ifeq ($(ARCH), x86_64) + OSG_NAME := $(OSG_BASE_NAME)-linux-x64 + else + OSG_NAME := $(OSG_BASE_NAME)-linux-x86 + endif + OSG_CMAKE_GENERATOR := "Unix Makefiles" + OSG_WINDOWING_SYSTEM := "X11" + # for some reason Qt is not added to the path in make/tools.mk + OSG_BUILD_PATH := $(QT_SDK_PREFIX)/bin:$(PATH) +else ifeq ($(UNAME), Darwin) + OSG_NAME := $(OSG_BASE_NAME)-clang_64 + OSG_CMAKE_GENERATOR := "Unix Makefiles" + OSG_WINDOWING_SYSTEM := "Cocoa" + OSG_BUILD_PATH := $(QT_SDK_PREFIX)/bin:$(PATH) +else ifeq ($(UNAME), Windows) + OSG_NAME := $(OSG_BASE_NAME)-$(QT_SDK_ARCH) + OSG_CMAKE_GENERATOR := "MinGW Makefiles" + # CMake is quite picky about its PATH and will complain if sh.exe is found in it + OSG_BUILD_PATH := "$(TOOLS_DIR)/bin;$(QT_SDK_PREFIX)/bin;$(MINGW_DIR)/bin" +endif + +OSG_NAME := $(OSG_NAME_PREFIX)$(OSG_NAME)$(OSG_NAME_SUFIX) +OSG_SRC_DIR := $(ROOT_DIR)/3rdparty/osg +OSG_BUILD_DIR := $(BUILD_DIR)/3rdparty/$(OSG_NAME) +OSG_INSTALL_DIR := $(BUILD_DIR)/3rdparty/install/$(OSG_NAME) +OSG_PATCH_FILE := $(ROOT_DIR)/make/3rdparty/osg-$(OSG_VERSION)_patch.diff + +.PHONY: osg +osg: + @$(ECHO) "Building osg $(call toprel, $(OSG_SRC_DIR)) into $(call toprel, $(OSG_BUILD_DIR))" + $(V1) $(MKDIR) -p $(OSG_BUILD_DIR) + $(V1) ( $(CD) $(OSG_BUILD_DIR) && \ + PATH=$(OSG_BUILD_PATH) && \ + $(CMAKE) -G $(OSG_CMAKE_GENERATOR) -DCMAKE_BUILD_TYPE=$(OSG_BUILD_CONF) \ + -DOSG_USE_QT=ON \ + -DBUILD_OSG_APPLICATIONS=ON \ + -DBUILD_OSG_EXAMPLES=OFF \ + -DBUILD_OPENTHREADS_WITH_QT=OFF \ + -DOSG_GL3_AVAILABLE=OFF \ + -DOSG_PLUGIN_SEARCH_INSTALL_DIR_FOR_PLUGINS=OFF \ + -DCMAKE_PREFIX_PATH=$(BUILD_DIR)/3rdparty/osg_dependencies \ + -DCMAKE_OSX_ARCHITECTURES="x86_64" \ + -DOSG_WINDOWING_SYSTEM=$(OSG_WINDOWING_SYSTEM) \ + -DCMAKE_INSTALL_NAME_DIR=@executable_path/../Plugins \ + -DCMAKE_INSTALL_PREFIX=$(OSG_INSTALL_DIR) $(OSG_SRC_DIR) && \ + $(MAKE) && \ + $(MAKE) install ; \ + ) + +.PHONY: package_osg +package_osg: + @$(ECHO) "Packaging $(call toprel, $(OSG_INSTALL_DIR)) into $(notdir $(OSG_INSTALL_DIR)).tar" + #$(V1) $(CP) $(ROOT_DIR)/make/3rdparty/OpenPilotReadme.txt $(OSG_INSTALL_DIR)/ + $(V1) ( \ + $(CD) $(OSG_INSTALL_DIR)/.. && \ + $(TAR) cf $(notdir $(OSG_INSTALL_DIR)).tar $(notdir $(OSG_INSTALL_DIR)) && \ + $(ZIP) -f $(notdir $(OSG_INSTALL_DIR)).tar && \ + $(call MD5_GEN_TEMPLATE,$(notdir $(OSG_INSTALL_DIR)).tar.gz) ; \ + ) + +.PHONY: install_win_osg +install_win_osg: + $(V1) $(CP) $(BUILD_DIR)/3rdparty/osg_dependencies/bin/*.dll $(OSG_INSTALL_DIR)/bin/ + $(V1) $(CP) $(BUILD_DIR)/3rdparty/osg_dependencies/lib/*.dll $(OSG_INSTALL_DIR)/bin/ + +.NOTPARALLEL: +.PHONY: prepare_osg +prepare_osg: clone_osg + +.PHONY: clone_osg +clone_osg: + $(V1) if [ ! -d "$(OSG_SRC_DIR)" ]; then \ + $(ECHO) "Cloning osg..." ; \ + $(GIT) clone --no-checkout git://github.com/openscenegraph/osg.git $(OSG_SRC_DIR) ; \ + fi + @$(ECHO) "Fetching osg..." + $(V1) ( $(CD) $(OSG_SRC_DIR) && $(GIT) fetch ; ) + @$(ECHO) "Checking out osg $(OSG_GIT_BRANCH)" + $(V1) ( $(CD) $(OSG_SRC_DIR) && $(GIT) fetch --tags ; ) + $(V1) ( $(CD) $(OSG_SRC_DIR) && $(GIT) checkout --quiet --force $(OSG_GIT_BRANCH) ; ) + $(V1) if [ -e $(OSG_PATCH_FILE) ]; then \ + $(ECHO) "Patching osg..." ; \ + ( $(CD) $(OSG_SRC_DIR) && $(GIT) apply $(OSG_PATCH_FILE) ; ) \ + fi + +.PHONY: clean_osg +clean_osg: + @$(ECHO) $(MSG_CLEANING) $(call toprel, $(OSG_BUILD_DIR)) + $(V1) [ ! -d "$(OSG_BUILD_DIR)" ] || $(RM) -r "$(OSG_BUILD_DIR)" + @$(ECHO) $(MSG_CLEANING) $(call toprel, $(OSG_INSTALL_DIR)) + $(V1) [ ! -d "$(OSG_INSTALL_DIR)" ] || $(RM) -r "$(OSG_INSTALL_DIR)" + +.PHONY: clean_all_osg +clean_all_osg: clean_osg + @$(ECHO) $(MSG_CLEANING) $(call toprel, $(OSG_SRC_DIR)) + $(V1) [ ! -d "$(OSG_SRC_DIR)" ] || $(RM) -r "$(OSG_SRC_DIR)" + + +################################ +# +# osgearth +# +################################ +# TODO +# fix Debug build +# add option to not build the applications (in Debug mode in particular) + +#OSGEARTH_VERSION := 1873b3a9489 +#OSGEARTH_GIT_BRANCH := $(OSGEARTH_VERSION) +OSGEARTH_VERSION := 2.7 +OSGEARTH_GIT_BRANCH := osgearth-$(OSGEARTH_VERSION) + +OSGEARTH_BASE_NAME := osgearth-$(OSGEARTH_VERSION) +OSGEARTH_BUILD_CONF := $(OSG_BUILD_CONF) + +# osgearth cmake script calls the osgversion executable to find the osg version +# this makes it necessary to have osg in the pathes (bin and lib) to make sure the correct one is found +# ideally this should not be necessary +ifeq ($(UNAME), Linux) + ifeq ($(ARCH), x86_64) + OSGEARTH_NAME := $(OSGEARTH_BASE_NAME)-linux-x64 + else + OSGEARTH_NAME := $(OSGEARTH_BASE_NAME)-linux-x86 + endif + OSGEARTH_CMAKE_GENERATOR := "Unix Makefiles" + # for some reason Qt is not added to the path in make/tools.mk + OSGEARTH_BUILD_PATH := $(QT_SDK_PREFIX)/bin:$(OSG_INSTALL_DIR)/bin:$(PATH) +else ifeq ($(UNAME), Darwin) + OSGEARTH_NAME := $(OSGEARTH_BASE_NAME)-clang_64 + OSGEARTH_CMAKE_GENERATOR := "Unix Makefiles" + OSG_WINDOWING_SYSTEM := "Cocoa" + OSGEARTH_BUILD_PATH := $(QT_SDK_PREFIX)/bin:$(OSG_INSTALL_DIR)/bin:$(PATH) +else ifeq ($(UNAME), Windows) + OSGEARTH_NAME := $(OSGEARTH_BASE_NAME)-$(QT_SDK_ARCH) + OSGEARTH_CMAKE_GENERATOR := "MinGW Makefiles" + # CMake is quite picky about its PATH and will complain if sh.exe is found in it + OSGEARTH_BUILD_PATH := "$(TOOLS_DIR)/bin;$(QT_SDK_PREFIX)/bin;$(MINGW_DIR)/bin;$(OSG_INSTALL_DIR)/bin" +endif + +OSGEARTH_NAME := $(OSG_NAME_PREFIX)$(OSGEARTH_NAME)$(OSG_NAME_SUFIX) +OSGEARTH_SRC_DIR := $(ROOT_DIR)/3rdparty/osgearth +OSGEARTH_BUILD_DIR := $(BUILD_DIR)/3rdparty/$(OSGEARTH_NAME) +# osgearth will be installed into osg (there is an offical option to do that but it seems broken on mingw) +#OSGEARTH_INSTALL_DIR := $(BUILD_DIR)/3rdparty/install/$(OSGEARTH_NAME) +OSGEARTH_INSTALL_DIR := $(OSG_INSTALL_DIR) +OSGEARTH_PATCH_FILE := $(ROOT_DIR)/make/3rdparty/osgearth-$(OSGEARTH_VERSION)_patch.diff + +.PHONY: osgearth +osgearth: + @$(ECHO) "Building osgEarth $(call toprel, $(OSGEARTH_SRC_DIR)) into $(call toprel, $(OSGEARTH_BUILD_DIR))" + $(V1) $(MKDIR) -p $(OSGEARTH_BUILD_DIR) + $(V1) ( $(CD) $(OSGEARTH_BUILD_DIR) && \ + PATH=$(OSGEARTH_BUILD_PATH) && \ + LD_LIBRARY_PATH=$(OSG_INSTALL_DIR)/lib && \ + export DYLD_LIBRARY_PATH=$(OSG_INSTALL_DIR)/lib && \ + $(CMAKE) -G $(OSGEARTH_CMAKE_GENERATOR) -DCMAKE_BUILD_TYPE=$(OSGEARTH_BUILD_CONF) \ + -DOSGEARTH_USE_QT=ON \ + -DINSTALL_TO_OSG_DIR=OFF \ + -DOSG_DIR=$(OSG_INSTALL_DIR) \ + -DCMAKE_INCLUDE_PATH=$(OSG_INSTALL_DIR)/include \ + -DCMAKE_LIBRARY_PATH=$(OSG_INSTALL_DIR)/lib \ + -DCMAKE_PREFIX_PATH=$(BUILD_DIR)/3rdparty/osg_dependencies \ + -DCMAKE_OSX_ARCHITECTURES="x86_64" \ + -DOSG_WINDOWING_SYSTEM=$(OSG_WINDOWING_SYSTEM) \ + -DCMAKE_INSTALL_NAME_DIR=@executable_path/../Plugins \ + -DCMAKE_INSTALL_PREFIX=$(OSGEARTH_INSTALL_DIR) $(OSGEARTH_SRC_DIR) && \ + $(MAKE) && \ + $(MAKE) install ; \ + ) + +.PHONY: package_osgearth +package_osgearth: + @$(ECHO) "Packaging $(call toprel, $(OSGEARTH_INSTALL_DIR)) into $(notdir $(OSGEARTH_INSTALL_DIR)).tar" + $(V1) ( \ + $(CD) $(OSGEARTH_INSTALL_DIR)/.. && \ + $(TAR) cf $(notdir $(OSGEARTH_INSTALL_DIR)).tar $(notdir $(OSGEARTH_INSTALL_DIR)) && \ + $(ZIP) -f $(notdir $(OSGEARTH_INSTALL_DIR)).tar && \ + $(call MD5_GEN_TEMPLATE,$(notdir $(OSGEARTH_INSTALL_DIR)).tar.gz) ; \ + ) + +.NOTPARALLEL: +.PHONY: prepare_osgearth +prepare_osgearth: clone_osgearth + +.PHONY: clone_osgearth +clone_osgearth: + $(V1) if [ ! -d "$(OSGEARTH_SRC_DIR)" ]; then \ + $(ECHO) "Cloning osgearth..." ; \ + $(GIT) clone --no-checkout git://github.com/gwaldron/osgearth.git $(OSGEARTH_SRC_DIR) ; \ + fi + @$(ECHO) "Fetching osgearth..." + $(V1) ( $(CD) $(OSGEARTH_SRC_DIR) && $(GIT) fetch ; ) + @$(ECHO) "Checking out osgearth $(OSGEARTH_GIT_BRANCH)" + $(V1) ( $(CD) $(OSGEARTH_SRC_DIR) && $(GIT) fetch --tags ; ) + $(V1) ( $(CD) $(OSGEARTH_SRC_DIR) && $(GIT) checkout --quiet --force $(OSGEARTH_GIT_BRANCH) ; ) + $(V1) if [ -f "$(OSGEARTH_PATCH_FILE)" ]; then \ + $(ECHO) "Patching osgearth..." ; \ + ( $(CD) $(OSGEARTH_SRC_DIR) && $(GIT) apply $(OSGEARTH_PATCH_FILE) ; ) \ + fi + +.PHONY: clean_osgearth +clean_osgearth: + @$(ECHO) $(MSG_CLEANING) $(call toprel, $(OSGEARTH_BUILD_DIR)) + $(V1) [ ! -d "$(OSGEARTH_BUILD_DIR)" ] || $(RM) -r "$(OSGEARTH_BUILD_DIR)" + @$(ECHO) $(MSG_CLEANING) $(call toprel, $(OSGEARTH_INSTALL_DIR)) + $(V1) [ ! -d "$(OSGEARTH_INSTALL_DIR)" ] || $(RM) -r "$(OSGEARTH_INSTALL_DIR)" + +.PHONY: clean_all_osgearth +clean_all_osgearth: clean_osgearth + @$(ECHO) $(MSG_CLEANING) $(call toprel, $(OSGEARTH_SRC_DIR)) + $(V1) [ ! -d "$(OSGEARTH_SRC_DIR)" ] || $(RM) -r "$(OSGEARTH_SRC_DIR)" + +################################ +# +# all +# +################################ + +.NOTPARALLEL: +.PHONY: all_osg + +ifeq ($(UNAME), Windows) +all_osg: prepare_osg prepare_osgearth osg osgearth install_win_osg package_osg +else +all_osg: prepare_osg prepare_osgearth osg osgearth package_osg +endif diff --git a/make/3rdparty/osgearth/osgearth_dependencies_win.sh b/make/3rdparty/osgearth/osgearth_dependencies_win.sh new file mode 100644 index 000000000..49a4f07bf --- /dev/null +++ b/make/3rdparty/osgearth/osgearth_dependencies_win.sh @@ -0,0 +1,348 @@ +################################################################################ +#!/bin/bash +################################################################################ +# +# This script compiles GDAL and other dependencies needed by OSG and OSGEarth +# +# A good source for building with mingw : +# http://www.gaia-gis.it/gaia-sins/mingw_how_to.html +# +################################################################################ + +################################################################################ +# Environment +################################################################################ + +WORKING_DIR=$PWD + +ROOT_DIR=/d/Projects/OpenPilot + +DOWNLOAD_DIR=$ROOT_DIR/downloads/osgearth +SOURCE_DIR=$ROOT_DIR/3rdparty/osgearth_dependencies +BUILD_DIR=$ROOT_DIR/build/3rdparty/osgearth_dependencies + +HOST=mingw32 + +# list of libraries to build +# other candidates include bzip2, libxml2, gif, geotiff, ssl, gl... +BUILD_PKGCONFIG=1 +BUILD_ZLIB=1 +BUILD_LIBJPEG=1 +BUILD_LIBPNG=1 +BUILD_LIBTIFF=1 +BUILD_FREETYPE=1 +BUILD_OPENSSL=2 +BUILD_CURL=1 +BUILD_PROJ4=1 +BUILD_GEOS=1 +BUILD_GDAL=1 + +# TODO +# libcurl needs to be built with zlib and ssl support +# gdal does not seem to link with shared proj4 +# document libraries (required by, requires) + +mkdir -p $SOURCE_DIR/ +mkdir -p $BUILD_DIR/bin/ +mkdir -p $BUILD_DIR/include/ +mkdir -p $BUILD_DIR/lib/ + +# make sure all libraries see each others +export PATH=$BUILD_DIR/bin:$PATH +export CPATH=$BUILD_DIR/include +export LIBRARY_PATH=$BUILD_DIR/lib +export PKG_CONFIG_PATH=$BUILD_DIR/lib/pkgconfig + +# reduce binary sizes by removing the -g option (not picked up by all libraries) +export CFLAGS=-O2 +export CXXFLAGS=-O2 + +################################################################################ +# pkg-config +# required by libcurl, gdal, osg, osgearth +################################################################################ + +if [ "$BUILD_PKGCONFIG" -eq 1 ]; then + +echo "****************************************" +echo "Building pkg-config..." +echo "****************************************" + +cd $SOURCE_DIR +tar xzf $DOWNLOAD_DIR/pkg-config-0.28.tar.gz -C . +cd pkg-config-0.28 + +./configure --prefix=$BUILD_DIR --build=$HOST \ + --with-internal-glib +make +make install + +fi + +################################################################################ +# ZLIB +# required by libcurl, gdal, osg, osgearth +################################################################################ + +if [ "$BUILD_ZLIB" -eq 1 ]; then + +echo "****************************************" +echo "Building zlib..." +echo "****************************************" + +cd $SOURCE_DIR +tar xzf $DOWNLOAD_DIR/zlib-1.2.8.tar.gz -C . +cd zlib-1.2.8 + +make -f win32/Makefile.gcc clean +make -f win32/Makefile.gcc + +cp -f zlib1.dll $BUILD_DIR/bin/ +cp -f zconf.h $BUILD_DIR/include/ +cp -f zlib.h $BUILD_DIR/include/ +cp -f libz.a $BUILD_DIR/lib/ +cp -f libz.dll.a $BUILD_DIR/lib/ + +fi + +################################################################################ +# LIBJPEG +# required by gdal, osg, osgearth +################################################################################ + +if [ "$BUILD_LIBJPEG" -eq 1 ]; then + +echo "****************************************" +echo "Building libjpeg..." +echo "****************************************" + +cd $SOURCE_DIR +tar xzf $DOWNLOAD_DIR/jpegsrc.v9a.tar.gz -C . +cd jpeg-9a + +./configure --prefix=$BUILD_DIR --build=$HOST +make +make install-strip + +fi + +################################################################################ +# LIBPNG +# required by gdal, osg, osgearth +################################################################################ + +if [ "$BUILD_LIBPNG" -eq 1 ]; then + +echo "****************************************" +echo "Building libpng..." +echo "****************************************" + +cd $SOURCE_DIR +tar xzf $DOWNLOAD_DIR/libpng-1.6.14.tar.gz -C . +cd libpng-1.6.14 + +./configure --prefix=$BUILD_DIR --build=$HOST +make +make install-strip + +fi + +################################################################################ +# LIBTIFF +# reqires zlib +# required by gdal, osg, osgearth +################################################################################ + +if [ "$BUILD_LIBTIFF" -eq 1 ]; then + +echo "****************************************" +echo "Building libtiff..." +echo "****************************************" + +cd $SOURCE_DIR +tar xzf $DOWNLOAD_DIR/tiff-4.0.3.tar.gz -C . +cd tiff-4.0.3 + +./configure --prefix=$BUILD_DIR --build=$HOST +make +make install-strip + +fi + +################################################################################ +# FreeType +################################################################################ + +if [ "$BUILD_FREETYPE" -eq 1 ]; then + +echo "****************************************" +echo "Building FreeType..." +echo "****************************************" + +cd $SOURCE_DIR +tar xzf $DOWNLOAD_DIR/freetype-2.5.3.tar.gz -C . +cd freetype-2.5.3 + +#unzip -q $DOWNLOAD_DIR/freetype-2.3.5-1-src.zip src/freetype/2.3.5/freetype-2.3.5/* -d $TEMP/freetype-2.3.5 +#cp -r $TEMP/freetype-2.3.5/src/freetype/2.3.5/freetype-2.3.5 ./ +#rm -rf $TEMP/freetype-2.3.5 +#cd freetype-2.3.5 + +./configure --prefix=$BUILD_DIR +make +make install + +# hack for osg +#mv $BUILD_DIR/include/freetype2 $BUILD_DIR/include/freetype + +fi + +################################################################################ +# OpenSSL +################################################################################ + +if [ "$BUILD_OPENSSL" -eq 1 ]; then + +echo "****************************************" +echo "Building OpenSSL..." +echo "****************************************" + +cd $SOURCE_DIR +tar xzf $DOWNLOAD_DIR/curl-7.38.0.tar.gz -C . +cd curl-7.38.0 + +./configure --prefix=$BUILD_DIR --build=$HOST +make +make install + +fi + +################################################################################ +# cURL +# required by gdal, osgearth +################################################################################ + +if [ "$BUILD_CURL" -eq 1 ]; then + +echo "****************************************" +echo "Building cURL..." +echo "****************************************" + +cd $SOURCE_DIR +tar xzf $DOWNLOAD_DIR/curl-7.38.0.tar.gz -C . +cd curl-7.38.0 + +# see http://curl.haxx.se/docs/install.html +#set ZLIB_PATH=c:\zlib-1.2.8 +#set OPENSSL_PATH=c:\openssl-0.9.8y +#set LIBSSH2_PATH=c:\libssh2-1.4.3 +#mingw32-make mingw32-zlib' to build with Zlib support; +#mingw32-make mingw32-ssl-zlib' to build with SSL and Zlib enabled; +#mingw32-make mingw32-ssh2-ssl-zlib' to build with SSH2, SSL, Zlib; +#mingw32-make mingw32-ssh2-ssl-sspi-zlib' to build with SSH2, SSL, Zlib + +#mingw32-make mingw32 + +#cp -f src/curl.exe $BUILD_DIR/bin/ +#cp -rf include/curl $BUILD_DIR/include/ +#cp -f lib/libcurl.dll $BUILD_DIR/bin/ +#cp -f lib/libcurldll.a $BUILD_DIR/lib/ +#cp -f lib/libcurl.a $BUILD_DIR/lib/ + +./configure --prefix=$BUILD_DIR --build=$HOST \ + --enable-shared=yes --with-zlib=$BUILD_DIR +make +make install-strip + +fi + +################################################################################ +# PROJ.4 +# required by osgearth +################################################################################ + +if [ "$BUILD_PROJ4" -eq 1 ]; then + +echo "****************************************" +echo "Building PROJ.4..." +echo "****************************************" + +cd $SOURCE_DIR +tar -xzf $DOWNLOAD_DIR/proj-4.8.0.tar.gz -C . +tar -xzf $DOWNLOAD_DIR/proj-datumgrid-1.5.tar.gz -C proj-4.8.0/nad/ +cd proj-4.8.0 + +./configure --prefix=$BUILD_DIR --build=$HOST \ + --enable-static=no --enable-shared=yes +make +make install + +fi + +################################################################################ +# GEOS +# required by gdal +################################################################################ + +if [ "$BUILD_GEOS" -eq 1 ]; then + +echo "****************************************" +echo "Building GEOS..." +echo "****************************************" + +cd $SOURCE_DIR +tar xjf $DOWNLOAD_DIR/geos-3.3.8.tar.bz2 -C . +cd geos-3.3.8 + +# TODO why --disable-inline? +./configure --prefix=$BUILD_DIR --build=$HOST \ + --enable-static=no --enable-shared=yes --disable-inline +make +make install + +fi + +################################################################################ +# GDAL +# requires zlib, libcurl, libpng, libjpeg, libtiff, geos +# required by osgearth +################################################################################ + +if [ "$BUILD_GDAL" -eq 1 ]; then + +echo "****************************************" +echo "Building GDAL..." +echo "****************************************" + +cd $SOURCE_DIR +tar xzf $DOWNLOAD_DIR/gdal-1.10.1.tar.gz -C . +cd gdal-1.10.1 + +# fix GNUmakefile as described here http://trac.osgeo.org/gdal/wiki/BuildingWithMinGW +patch < $WORKING_DIR/gdal_GNUmakefile_fix.diff + +./configure --prefix=$BUILD_DIR --build=$HOST \ + --without-python --without-libtool \ + --with-xerces=no \ + --with-libz=$BUILD_DIR --with-curl=$BUILD_DIR \ + --with-png=$BUILD_DIR --with-jpeg=$BUILD_DIR --with-libtiff=$BUILD_DIR \ + --with-geos=$BUILD_DIR/bin/geos-config +make +make install + +# --with-xerces=no --with-libz=$BUILD_DIR \ +# --with-png=$BUILD_DIR --with-jpeg=$BUILD_DIR --with-curl=$BUILD_DIR +# --with-libtiff=$BUILD_DIR --with-geos=$BUILD_DIR/bin/geos-config + +# $(CONFIGURE) --prefix=$BUILD_DIR --build=$(HOST) --enable-static=no --enable-shared=yes --without-python --without-libtool --with-libz=$(DEP_INSTALL_DIR) --with-libtiff=$(DEP_INSTALL_DIR) --with-png=$(DEP_INSTALL_DIR) --with-jpeg=$(DEP_INSTALL_DIR) && \ + + +# --enable-static=no --enable-shared=yes + + +#./configure --prefix=$WORKSPACE/dist --enable-shared=yes --enable-static=yes --with-python=no --with-xerces=no --with-expat=$WORKSPACE/dist --with-expat-lib=-L$WORKSPACE/dist/lib --with-curl=no --with-sqlite3=$WORKSPACE/dist --with-odbc=no --with-mysql=no --with-oci=no --with-pg=$WORKSPACE/dist/bin/pg_config --with-geos=no --with-libz=internal --with-png=internal --with-libtiff=internal --with-geotiff=internal --with-jpeg=internal --with-gif=internal --with-jasper=no --with-mrsid=no --with-mrsid_lidar=no --with-ecw=no --with-pcraster=internal --with-xml2=no --with-threads=yes --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --without-libtool --enable-fast-install +#./configure --prefix=$WORKSPACE/dist --enable-shared=yes --enable-static=no --with-python=no --with-xerces=no --with-expat=$WORKSPACE/dist --with-curl=no --with-sqlite3=$WORKSPACE/dist --with-odbc=no --with-mysql=no --with-oci=no --with-pg=$WORKSPACE/dist/bin/pg_config --with-geos=yes --with-libz=internal --with-png=internal --with-libtiff=internal --with-geotiff=internal --with-jpeg=internal --with-gif=internal --with-jasper=no --with-mrsid=no --with-mrsid_lidar=no --with-ecw=no --with-pcraster=internal --with-threads=yes --host=$HOST --build=$HOST --without-libtool --enable-fast-install --with-expat-lib=-L$WORKSPACE/dist/lib + +fi + +################################################################################