diff options
author | Tor Lillqvist <tml@iki.fi> | 2011-05-07 00:25:55 +0300 |
---|---|---|
committer | Tor Lillqvist <tml@iki.fi> | 2011-05-13 20:24:40 +0300 |
commit | eaf8e0939a3d8b724dec7ff48d4ada48bbfe3ebc (patch) | |
tree | b6c3cac34c1c8e4a88065a42362b8aa7e10a4513 /solenv/gbuild | |
parent | 3a44b0d21d8d37943643330d8f9aa4152e613c8f (diff) |
Some initial baby steps towards cross-compilation
And some baby steps for cross-compiling for iOS in particular.
Diffstat (limited to 'solenv/gbuild')
-rw-r--r-- | solenv/gbuild/gbuild.mk | 2 | ||||
-rw-r--r-- | solenv/gbuild/platform/ios.mk | 466 |
2 files changed, 468 insertions, 0 deletions
diff --git a/solenv/gbuild/gbuild.mk b/solenv/gbuild/gbuild.mk index b173717364bb..72e41e5b90ba 100644 --- a/solenv/gbuild/gbuild.mk +++ b/solenv/gbuild/gbuild.mk @@ -163,6 +163,8 @@ else ifeq ($(OS),DRAGONFLY) include $(GBUILDDIR)/platform/dragonfly.mk else ifeq ($(OS),SOLARIS) include $(GBUILDDIR)/platform/solaris.mk +else ifeq ($(OS),IOS) +include $(GBUILDDIR)/platform/ios.mk else $(eval $(call gb_Output_error,Unsupported OS: $(OS))) endif diff --git a/solenv/gbuild/platform/ios.mk b/solenv/gbuild/platform/ios.mk new file mode 100644 index 000000000000..6bb7b3740351 --- /dev/null +++ b/solenv/gbuild/platform/ios.mk @@ -0,0 +1,466 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2011 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +GUI := UNX +COM := GCC + +# Darwin mktemp -t expects a prefix, not a pattern +gb_MKTEMP := /usr/bin/mktemp -t gbuild. + +gb_CC := "gcc-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk" +gb_CXX := "g++-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk" +gb_GCCP := "gcc-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk" +gb_AR := ar +gb_AWK := awk +gb_CLASSPATHSEP := : + +# use CC/CXX if they are nondefaults +ifneq ($(origin CC),default) +gb_CC := $(CC) +gb_GCCP := $(CC) +endif +ifneq ($(origin CXX),default) +gb_CXX := $(CXX) +endif + +gb_OSDEFS := \ + -D$(OS) \ + -D_PTHREADS \ + -DUNIX \ + -DUNX \ + -D_REENTRANT \ + -DNO_PTHREAD_PRIORITY \ + $(EXTRA_CDEFS) \ + +gb_COMPILERDEFS := \ + -D$(COM) \ + -DCPPU_ENV=gcc3 \ + -DGXX_INCLUDE_PATH=$(GXX_INCLUDE_PATH) \ + +gb_CPUDEFS := -DARM32 + +gb_SDKDIR := /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk + + +gb_CFLAGS := \ + -isysroot $(gb_SDKDIR) \ + -Wall \ + -Wendif-labels \ + -Wextra \ + -Wshadow \ + -fPIC \ + -fmessage-length=0 \ + -fno-common \ + -fno-strict-aliasing \ + -pipe \ + +gb_CXXFLAGS := \ + -isysroot $(gb_SDKDIR) \ + -Wall \ + -Wendif-labels \ + -Wextra \ + -Wno-ctor-dtor-privacy \ + -Wno-non-virtual-dtor \ + -fmessage-length=0 \ + -fno-common \ + -fno-strict-aliasing \ + -fsigned-char \ + -malign-natural \ + -pipe \ + #-Wshadow \ break in compiler headers already + #-fsigned-char \ might be removed? + #-malign-natural \ might be removed? + +# these are to get g++ to switch to Objective-C++ mode +# (see toolkit module for a case where it is necessary to do it this way) +gb_OBJCXXFLAGS := -x objective-c++ -fobjc-exceptions + +gb_OBJCFLAGS := -x objective-c + +ifneq ($(EXTERNAL_WARNINGS_NOT_ERRORS),TRUE) +gb_CFLAGS_WERROR := -Werror +gb_CXXFLAGS_WERROR := -Werror +endif + +gb_LinkTarget_EXCEPTIONFLAGS := \ + -DEXCEPTIONS_ON \ + -fexceptions \ + -fno-enforce-eh-specs \ + +gb_LinkTarget_NOEXCEPTIONFLAGS := \ + -DEXCEPTIONS_OFF \ + -fno-exceptions \ + +gb_LinkTarget_LDFLAGS := \ + -Wl,-syslibroot,$(gb_SDKDIR) \ + $(subst -L../lib , ,$(SOLARLIB)) \ +#man ld says: obsolete -Wl,-multiply_defined,suppress \ + +ifneq ($(gb_DEBUGLEVEL),0) +gb_COMPILEROPTFLAGS := -O0 +else +gb_COMPILEROPTFLAGS := -O2 +endif + +gb_COMPILERNOOPTFLAGS := -O0 + +# Helper class + +gb_Helper_abbreviate_dirs_native = $(gb_Helper_abbreviate_dirs) + +gb_Helper_set_ld_path := DYLD_LIBRARY_PATH=$(OUTDIR)/lib + +# convert parametters filesystem root to native notation +# does some real work only on windows, make sure not to +# break the dummy implementations on unx* +define gb_Helper_convert_native +$(1) +endef + + +# CObject class + +define gb_CObject__command +$(call gb_Output_announce,$(2),$(true),C ,3) +$(call gb_Helper_abbreviate_dirs,\ + mkdir -p $(dir $(1)) && \ + mkdir -p $(dir $(call gb_CObject_get_dep_target,$(2))) && \ + $(gb_CC) \ + $(DEFS) $(CFLAGS) \ + -c $(3) \ + -o $(1) \ + -MMD -MT $(call gb_CObject_get_target,$(2)) \ + -MF $(call gb_CObject_get_dep_target,$(2)) \ + -I$(dir $(3)) \ + $(INCLUDE)) +endef + + +# CxxObject class + +# N.B: $(CXXFLAGS) may contain -x objective-c++, which must come before -c +define gb_CxxObject__command +$(call gb_Output_announce,$(2),$(true),CXX,3) +$(call gb_Helper_abbreviate_dirs,\ + mkdir -p $(dir $(1)) && \ + mkdir -p $(dir $(call gb_CxxObject_get_dep_target,$(2))) && \ + $(gb_CXX) \ + $(DEFS) $(CXXFLAGS) \ + -c $(3) \ + -o $(1) \ + -MMD -MT $(call gb_CxxObject_get_target,$(2)) \ + -MF $(call gb_CxxObject_get_dep_target,$(2)) \ + -I$(dir $(3)) \ + $(INCLUDE_STL) $(INCLUDE)) +endef + + +# ObjCxxObject class + +define gb_ObjCxxObject__command +$(call gb_Output_announce,$(2),$(true),OCX,3) +$(call gb_Helper_abbreviate_dirs,\ + mkdir -p $(dir $(1)) && \ + mkdir -p $(dir $(call gb_ObjCxxObject_get_dep_target,$(2))) && \ + $(gb_CXX) \ + $(DEFS) $(OBJCXXFLAGS) \ + -c $(3) \ + -o $(1) \ + -MMD -MT $(call gb_ObjCxxObject_get_target,$(2)) \ + -MF $(call gb_ObjCxxObject_get_dep_target,$(2)) \ + -I$(dir $(3)) \ + $(INCLUDE_STL) $(INCLUDE)) +endef + +# ObjCObject class + +define gb_ObjCObject__command +$(call gb_Output_announce,$(2),$(true),OCC,3) +$(call gb_Helper_abbreviate_dirs,\ + mkdir -p $(dir $(1)) && \ + mkdir -p $(dir $(call gb_ObjCObject_get_dep_target,$(2))) && \ + $(gb_CC) \ + $(DEFS) $(OBJCFLAGS) \ + -c $(3) \ + -o $(1) \ + -MMD -MT $(call gb_ObjCObject_get_target,$(2)) \ + -MF $(call gb_ObjCObject_get_dep_target,$(2)) \ + -I$(dir $(3)) \ + $(INCLUDE_STL) $(INCLUDE)) +endef + + +# LinkTarget class + +define gb_LinkTarget__get_rpath_for_layer +$(patsubst $(1):%,%,$(filter $(1):%,$(gb_LinkTarget__RPATHS))) +endef + +gb_LinkTarget__RPATHS := \ + URELIB:@__________________________________________________URELIB/ \ + UREBIN: \ + OOO:@__________________________________________________OOO/ \ + BRAND: \ + SDKBIN: \ + NONEBIN: \ + +define gb_LinkTarget__get_installname +$(if $(2),-install_name '$(2)$(1)',) +endef + +gb_LinkTarget_CFLAGS := $(gb_CFLAGS) $(gb_CFLAGS_WERROR) $(gb_COMPILEROPTFLAGS) +gb_LinkTarget_CXXFLAGS := $(gb_CXXFLAGS) $(gb_CXXFLAGS_WERROR) +gb_LinkTarget_OBJCXXFLAGS := $(gb_CXXFLAGS) $(gb_OBJCXXFLAGS) $(gb_COMPILEROPTFLAGS) +gb_LinkTarget_OBJCFLAGS := $(gb_CFLAGS) $(gb_OBJCFLAGS) $(gb_COMPILEROPTFLAGS) + +ifeq ($(gb_SYMBOL),$(true)) +gb_LinkTarget_CFLAGS += -g +gb_LinkTarget_CXXFLAGS += -g +gb_LinkTarget_OBJCXXFLAGS += -g +gb_LinkTarget_OBJCFLAGS += -g +endif + +gb_LinkTarget_INCLUDE := $(filter-out %/stl, $(subst -I. , ,$(SOLARINC))) +gb_LinkTarget_INCLUDE_STL := $(filter %/stl, $(subst -I. , ,$(SOLARINC))) + +# FIXME framework handling very hackish +define gb_LinkTarget__get_liblinkflags +$(patsubst lib%.dylib,-l%,$(foreach lib,$(filter-out $(gb_Library__FRAMEWORKS),$(1)),$(call gb_Library_get_filename,$(lib)))) \ +$(addprefix -framework ,$(filter $(gb_Library__FRAMEWORKS),$(1))) +endef + +define gb_LinkTarget__get_layer +$(if $(filter Executable,$(1)),\ + $$(call gb_Executable_get_layer,$(2)),\ + $$(call gb_Library_get_layer,$(2))) +endef + +# FIXME the DYLIB_FILE mess is only necessary because +# solver layout is different from installation layout +define gb_LinkTarget__command_dynamiclink +$(call gb_Helper_abbreviate_dirs,\ + mkdir -p $(dir $(1)) && \ + DYLIB_FILE=`$(gb_MKTEMP)` && \ + $(PERL) $(SOLARENV)/bin/macosx-dylib-link-list.pl \ + $(if $(filter Executable,$(TARGETTYPE)),$(gb_Executable_TARGETTYPEFLAGS)) \ + $(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \ + $(subst \d,$$,$(RPATH)) $(LDFLAGS) \ + $(patsubst lib%.dylib,-l%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib)))) > $${DYLIB_FILE} && \ + $(gb_CXX) \ + $(if $(filter Executable,$(TARGETTYPE)),$(gb_Executable_TARGETTYPEFLAGS)) \ + $(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \ + $(subst \d,$$,$(RPATH)) $(LDFLAGS) \ + $(call gb_LinkTarget__get_liblinkflags,$(LINKED_LIBS)) \ + $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ + $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ + $(foreach object,$(OBJCOBJECTS),$(call gb_ObjCObject_get_target,$(object))) \ + $(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_target,$(object))) \ + $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ + $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),`cat $(extraobjectlist)`) \ + $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) \ + -o $(1) \ + `cat $${DYLIB_FILE}` && \ + $(if $(filter Library CppunitTest,$(TARGETTYPE)),\ + $(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl Library $(LAYER) $(1) && \ + ln -sf $(1) $(patsubst %.dylib,%.jnilib,$(1)) &&) \ + rm -f $${DYLIB_FILE}) +endef + +# parameters: 1-linktarget 2-cobjects 3-cxxobjects +define gb_LinkTarget__command_staticlink +$(call gb_Helper_abbreviate_dirs,\ + mkdir -p $(dir $(1)) && \ + $(gb_AR) -rsu $(1) \ + $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ + $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ + $(foreach object,$(OBJCOBJECTS),$(call gb_ObjCObject_get_target,$(object))) \ + $(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_target,$(object))) \ + $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ + $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),@$(extraobjectlist)) \ + 2> /dev/null) +endef + +define gb_LinkTarget__command +$(call gb_Output_announce,$(2),$(true),LNK,4) +$(if $(filter Library CppunitTest Executable,$(TARGETTYPE)),$(call gb_LinkTarget__command_dynamiclink,$(1),$(2))) +$(if $(filter StaticLibrary,$(TARGETTYPE)),$(call gb_LinkTarget__command_staticlink,$(1))) +endef + + +# Library class + +gb_Library_DEFS := +gb_Library_TARGETTYPEFLAGS := -dynamiclib -single_module +gb_Library_SYSPRE := lib +gb_Library_UNOVERPRE := $(gb_Library_SYSPRE)uno_ +gb_Library_PLAINEXT := .dylib +gb_Library_RTEXT := gcc3$(gb_Library_PLAINEXT) + +ifeq ($(CPUNAME),INTEL) +gb_Library_OOOEXT := mxi$(gb_Library_PLAINEXT) +gb_Library_UNOEXT := .uno$(gb_Library_PLAINEXT) +else # ifeq ($(CPUNAME),POWERPC) +gb_Library_OOOEXT := mxp$(gb_Library_PLAINEXT) +gb_Library_UNOEXT := .uno$(gb_Library_PLAINEXT) +endif + +gb_Library__FRAMEWORKS := \ + +gb_Library_PLAINLIBS_NONE += \ + jpeg \ + m \ + pthread \ + z \ + +gb_Library_FILENAMES := \ + $(foreach lib,$(gb_Library_OOOLIBS),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_OOOEXT)) \ + $(foreach lib,$(gb_Library_PLAINLIBS_NONE),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_PLAINEXT)) \ + $(foreach lib,$(gb_Library_PLAINLIBS_URE),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_PLAINEXT)) \ + $(foreach lib,$(gb_Library_PLAINLIBS_OOO),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_PLAINEXT)) \ + $(foreach lib,$(gb_Library_RTLIBS),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_RTEXT)) \ + $(foreach lib,$(gb_Library_RTVERLIBS),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_RTEXT)) \ + $(foreach lib,$(gb_Library_UNOLIBS_URE),$(lib):$(lib)$(gb_Library_UNOEXT)) \ + $(foreach lib,$(gb_Library_UNOLIBS_OOO),$(lib):$(lib)$(gb_Library_UNOEXT)) \ + $(foreach lib,$(gb_Library_UNOVERLIBS),$(lib):$(gb_Library_UNOVERPRE)$(lib)$(gb_Library_PLAINEXT)) \ + + +gb_Library_LAYER := \ + $(foreach lib,$(gb_Library_OOOLIBS),$(lib):OOO) \ + $(foreach lib,$(gb_Library_PLAINLIBS_URE),$(lib):URELIB) \ + $(foreach lib,$(gb_Library_PLAINLIBS_OOO),$(lib):OOO) \ + $(foreach lib,$(gb_Library_RTLIBS),$(lib):OOO) \ + $(foreach lib,$(gb_Library_RTVERLIBS),$(lib):URELIB) \ + $(foreach lib,$(gb_Library_UNOLIBS_URE),$(lib):URELIB) \ + $(foreach lib,$(gb_Library_UNOLIBS_OOO),$(lib):OOO) \ + $(foreach lib,$(gb_Library_UNOVERLIBS),$(lib):URELIB) \ + +define gb_Library_get_rpath +$(call gb_LinkTarget__get_installname,$(call gb_Library_get_filename,$(1)),$(call gb_LinkTarget__get_rpath_for_layer,$(call gb_Library_get_layer,$(1)))) +endef + +define gb_Library_Library_platform +$(call gb_LinkTarget_get_target,$(2)) : RPATH := $(call gb_Library_get_rpath,$(1)) +$(call gb_LinkTarget_get_target,$(2)) : LAYER := $(call gb_Library_get_layer,$(1)) + +endef + + +# StaticLibrary class + +gb_StaticLibrary_DEFS := +gb_StaticLibrary_SYSPRE := lib +gb_StaticLibrary_PLAINEXT := .a +gb_StaticLibrary_JPEGEXT := lib$(gb_StaticLibrary_PLAINEXT) + +gb_StaticLibrary_FILENAMES := \ + $(foreach lib,$(gb_StaticLibrary_JPEGLIBS),$(lib):$(gb_StaticLibrary_SYSPRE)$(lib)$(gb_StaticLibrary_JPEGEXT)) \ + $(foreach lib,$(gb_StaticLibrary_PLAINLIBS),$(lib):$(gb_StaticLibrary_SYSPRE)$(lib)$(gb_StaticLibrary_PLAINEXT)) \ + +gb_StaticLibrary_StaticLibrary_platform = + + +# Executable class + +gb_Executable_EXT := +gb_Executable_TARGETTYPEFLAGS := -bind_at_load + +gb_Executable_LAYER := \ + $(foreach exe,$(gb_Executable_UREBIN),$(exe):UREBIN) \ + $(foreach exe,$(gb_Executable_SDK),$(exe):SDKBIN) \ + $(foreach exe,$(gb_Executable_OOO),$(exe):OOO) \ + $(foreach exe,$(gb_Executable_BRAND),$(exe):BRAND) \ + $(foreach exe,$(gb_Executable_NONE),$(exe):NONEBIN) \ + + +define gb_Executable_get_rpath +$(call gb_LinkTarget__get_installname,$(1),$(call gb_LinkTarget__get_rpath_for_layer,$(call gb_Executable_get_layer,$(1)))) +endef + +define gb_Executable_Executable_platform +$(call gb_LinkTarget_get_target,$(2)) : RPATH := $(call gb_Executable_get_rpath,$(1)) +$(call gb_LinkTarget_get_target,$(2)) : LAYER := $(call gb_Executable_get_layer,$(1)) + +endef + + +# CppunitTest class + +gb_CppunitTest_CPPTESTPRECOMMAND := DYLD_LIBRARY_PATH=$(OUTDIR)/lib +gb_CppunitTest_SYSPRE := libtest_ +gb_CppunitTest_EXT := .dylib +gb_CppunitTest_get_filename = $(gb_CppunitTest_SYSPRE)$(1)$(gb_CppunitTest_EXT) +gb_CppunitTest_get_libfilename = $(gb_CppunitTest_get_filename) + +define gb_CppunitTest_CppunitTest_platform +$(call gb_LinkTarget_get_target,$(2)) : RPATH := +$(call gb_LinkTarget_get_target,$(2)) : LAYER := NONE + +endef + +# JunitTest class + +define gb_JunitTest_JunitTest_platform +$(call gb_JunitTest_get_target,$(1)) : DEFS := \ + -Dorg.openoffice.test.arg.soffice="$$$${OOO_TEST_SOFFICE:-path:$(OUTDIR)/installation/opt/OpenOffice.org.app/Contents/MacOS/soffice}" \ + -Dorg.openoffice.test.arg.env=DYLD_LIBRARY_PATH \ + -Dorg.openoffice.test.arg.user=file://$(call gb_JunitTest_get_userdir,$(1)) \ + +endef + +# SdiTarget class + +gb_SdiTarget_SVIDLPRECOMMAND := DYLD_LIBRARY_PATH=$(OUTDIR)/lib + +# SrsPartMergeTarget + +gb_SrsPartMergeTarget_TRANSEXPRECOMMAND := DYLD_LIBRARY_PATH=$(OUTDIR)/lib + +# SrsPartTarget class + +gb_SrsPartTarget_RSCTARGET := $(OUTDIR)/bin/rsc +gb_SrsPartTarget_RSCCOMMAND := DYLD_LIBRARY_PATH=$(OUTDIR)/lib SOLARBINDIR=$(OUTDIR)/bin $(gb_SrsPartTarget_RSCTARGET) + +define gb_SrsPartTarget__command_dep +$(call gb_Helper_abbreviate_dirs,\ + $(gb_GCCP) \ + -MM -MT $(call gb_SrsPartTarget_get_target,$(1)) \ + $(INCLUDE) \ + $(DEFS) \ + -c -x c++-header $(2) \ + -o $(call gb_SrsPartTarget_get_dep_target,$(1))) +endef + + +# ComponentTarget + +gb_XSLTPROCPRECOMMAND := DYLD_LIBRARY_PATH=$(OUTDIR)/lib +gb_Library_COMPONENTPREFIXES := \ + OOO:vnd.sun.star.expand:\dOOO_BASE_DIR/program/ \ + URELIB:vnd.sun.star.expand:\dURE_INTERNAL_LIB_DIR/ \ + + +# vim: set noet sw=4: |