1# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- 2# 3# This file is part of the LibreOffice project. 4# 5# This Source Code Form is subject to the terms of the Mozilla Public 6# License, v. 2.0. If a copy of the MPL was not distributed with this 7# file, You can obtain one at http://mozilla.org/MPL/2.0/. 8# 9# This file incorporates work covered by the following license notice: 10# 11# Licensed to the Apache Software Foundation (ASF) under one or more 12# contributor license agreements. See the NOTICE file distributed 13# with this work for additional information regarding copyright 14# ownership. The ASF licenses this file to you under the Apache 15# License, Version 2.0 (the "License"); you may not use this file 16# except in compliance with the License. You may obtain a copy of 17# the License at http://www.apache.org/licenses/LICENSE-2.0 . 18# 19 20gb_SDKDIR := $(MACOSX_SDK_PATH) 21 22include $(GBUILDDIR)/platform/com_GCC_defs.mk 23 24# Darwin mktemp -t expects a prefix, not a pattern 25gb_MKTEMP ?= /usr/bin/mktemp -t gbuild 26 27gb_OSDEFS := \ 28 -D$(OS) \ 29 -D_PTHREADS \ 30 -DUNIX \ 31 -DUNX \ 32 -D_REENTRANT \ 33 -DNO_PTHREAD_PRIORITY \ 34 -DMAC_OS_X_VERSION_MIN_REQUIRED=$(MAC_OS_X_VERSION_MIN_REQUIRED) \ 35 -DMAC_OS_X_VERSION_MAX_ALLOWED=$(MAC_OS_X_VERSION_MAX_ALLOWED) \ 36 $(LFS_CFLAGS) \ 37 38 39gb_CFLAGS := \ 40 $(gb_CFLAGS_COMMON) \ 41 -fPIC \ 42 -fno-strict-aliasing \ 43 -Wshadow 44 45gb_CXXFLAGS := \ 46 $(gb_CXXFLAGS_COMMON) \ 47 -fPIC \ 48 -Woverloaded-virtual \ 49 -Wshadow \ 50 -Wno-ctor-dtor-privacy \ 51 -fno-strict-aliasing \ 52 -fsigned-char \ 53 $(CXXFLAGS_CXX11) 54 55 #-fsigned-char \ might be removed? 56 57# these are to get g++ to switch to Objective-C++ mode 58# (see toolkit module for a case where it is necessary to do it this way) 59gb_OBJCXXFLAGS := -x objective-c++ -fobjc-exceptions 60 61gb_OBJCFLAGS := -x objective-c -fobjc-exceptions 62 63# LinkTarget class 64 65define gb_LinkTarget__get_rpath_for_layer 66$(patsubst $(1):%,%,$(filter $(1):%,$(gb_LinkTarget__RPATHS))) 67endef 68 69gb_LinkTarget__RPATHS := \ 70 URELIB:@__________________________________________________URELIB/ \ 71 UREBIN: \ 72 OOO:@__________________________________________________OOO/ \ 73 SDKBIN: \ 74 OXT: \ 75 NONE:@__________________________________________________NONE/ \ 76 77# $(call gb_LinkTarget__get_installname,libfilename,layerprefix) 78define gb_LinkTarget__get_installname 79$(if $(2),-install_name '$(2)$(1)') 80endef 81 82gb_LinkTarget_CFLAGS := $(gb_CFLAGS) 83gb_LinkTarget_CXXFLAGS := $(gb_CXXFLAGS) 84gb_LinkTarget_OBJCXXFLAGS := $(gb_CXXFLAGS) $(gb_OBJCXXFLAGS) 85gb_LinkTarget_OBJCFLAGS := $(gb_CFLAGS) $(gb_OBJCFLAGS) 86 87define gb_LinkTarget__get_layer 88$(if $(filter Executable,$(1)),\ 89 $$(call gb_Executable_get_layer,$(2)),\ 90 $$(call gb_Library_get_layer,$(2))) 91endef 92 93# We cannot sign executables early since Mojave/Catalina would treat them as 94# restricted binary and ignore any DYLD_LIBRARY_PATH setting - So all 95# signing is handled by the solenv/bin/macosx-codesign-app-bundle script. 96# And the soffice executable needs to be signed last in 97# macosx-codesign-app-bundle, as codesign would fail complaining that other 98# parts of the app have not yet been signed: 99 100define gb_LinkTarget__command_dynamiclink 101$(call gb_Helper_abbreviate_dirs,\ 102 FILELIST=$(call var2file,$(shell $(gb_MKTEMP)),100, \ 103 $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ 104 $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ 105 $(foreach object,$(ASMOBJECTS),$(call gb_AsmObject_get_target,$(object))) \ 106 $(foreach object,$(OBJCOBJECTS),$(call gb_ObjCObject_get_target,$(object))) \ 107 $(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_target,$(object))) \ 108 $(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \ 109 $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ 110 $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),$(shell cat $(extraobjectlist)))) && \ 111 cat $${FILELIST} | tr "[:space:]" "\n" | grep -v '^$$' > $${FILELIST}.1 && \ 112 mv $${FILELIST}.1 $${FILELIST} && \ 113 $(if $(CXXOBJECTS)$(OBJCXXOBJECTS)$(GENCXXOBJECTS)$(EXTRAOBJECTLISTS),$(gb_CXX),$(gb_CC)) \ 114 $(if $(filter Executable,$(TARGETTYPE)),$(gb_Executable_TARGETTYPEFLAGS)) \ 115 $(if $(filter Bundle,$(TARGETTYPE)),$(gb_Bundle_TARGETTYPEFLAGS)) \ 116 $(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \ 117 $(subst \d,$$,$(RPATH)) \ 118 $(T_USE_LD) $(T_LDFLAGS) \ 119 $(patsubst lib%.dylib,-l%,$(patsubst %.$(gb_Library_UDK_MAJORVER),%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib))))) \ 120 -Wl$(COMMA)-filelist$(COMMA)$${FILELIST} \ 121 $(T_LIBS) \ 122 $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) \ 123 -o $(1) && \ 124 rm -f $${FILELIST} && \ 125 $(if $(SOVERSIONSCRIPT),ln -sf $(1) $(ILIBTARGET),:) && \ 126 $(if $(filter Executable,$(TARGETTYPE)), \ 127 $(PERL) $(SRCDIR)/solenv/bin/macosx-change-install-names.pl app $(LAYER) $(1) &&) \ 128 $(if $(filter Library Bundle CppunitTest,$(TARGETTYPE)),\ 129 $(PERL) $(SRCDIR)/solenv/bin/macosx-change-install-names.pl shl $(LAYER) $(1) &&) \ 130 $(if $(filter Library,$(TARGETTYPE)),\ 131 otool -l $(1) | grep -A 5 LC_ID_DYLIB \ 132 > $(WORKDIR)/LinkTarget/$(2).exports.tmp && \ 133 $(NM) -g -P $(1) | cut -d' ' -f1-2 | grep -v U$$ \ 134 >> $(WORKDIR)/LinkTarget/$(2).exports.tmp && \ 135 $(call gb_Helper_replace_if_different_and_touch,$(WORKDIR)/LinkTarget/$(2).exports.tmp, \ 136 $(WORKDIR)/LinkTarget/$(2).exports,$(1)) &&) \ 137 :) 138endef 139 140# parameters: 1-linktarget 2-cobjects 3-cxxobjects 141define gb_LinkTarget__command_staticlink 142$(call gb_Helper_abbreviate_dirs,\ 143 rm -f $(1) && \ 144 $(gb_AR) -rsu $(1) \ 145 $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ 146 $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ 147 $(foreach object,$(ASMOBJECTS),$(call gb_AsmObject_get_target,$(object))) \ 148 $(foreach object,$(OBJCOBJECTS),$(call gb_ObjCObject_get_target,$(object))) \ 149 $(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_target,$(object))) \ 150 $(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \ 151 $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ 152 $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),@$(extraobjectlist)) \ 153 $(if $(findstring s,$(MAKEFLAGS)),2> /dev/null)) 154endef 155 156define gb_LinkTarget__command 157$(call gb_Output_announce,$(2),$(true),LNK,4) 158 $(call gb_Trace_StartRange,$(2),LNK) 159$(if $(filter Library Bundle CppunitTest Executable,$(TARGETTYPE)),$(call gb_LinkTarget__command_dynamiclink,$(1),$(2))) 160$(if $(filter StaticLibrary,$(TARGETTYPE)),$(call gb_LinkTarget__command_staticlink,$(1))) 161 $(call gb_Trace_EndRange,$(2),LNK) 162endef 163 164define gb_LinkTarget_use_system_darwin_frameworks 165$(call gb_LinkTarget_add_libs,$(1),$(foreach fw,$(2),-framework $(fw))) 166$(if $(call gb_LinkTarget__is_merged,$(1)),\ 167 $(call gb_LinkTarget_add_libs,$(call gb_Library_get_linktarget,merged),$(foreach fw,$(2),-framework $(fw)))) 168endef 169 170 171# Library class 172 173gb_Library_DEFS := 174gb_Library_TARGETTYPEFLAGS := -dynamiclib -single_module 175gb_Bundle_TARGETTYPEFLAGS := -bundle 176gb_Library_UDK_MAJORVER := 3 177gb_Library_SYSPRE := lib 178gb_Library_UNOVERPRE := $(gb_Library_SYSPRE)uno_ 179gb_Library_PLAINEXT := .dylib 180gb_Library_PLAINEXT_FOR_BUILD := .dylib 181gb_Library_DLLEXT := .dylib 182gb_Library_RTEXT := gcc3$(gb_Library_PLAINEXT) 183 184gb_Library_OOOEXT := $(gb_Library_DLLPOSTFIX)$(gb_Library_PLAINEXT) 185gb_Library_UNOEXT := .uno$(gb_Library_PLAINEXT) 186 187gb_Library_FILENAMES := \ 188 $(foreach lib,$(gb_Library_OOOLIBS),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_OOOEXT)) \ 189 $(foreach lib,$(gb_Library_PLAINLIBS_NONE),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_PLAINEXT)) \ 190 $(foreach lib,$(gb_Library_PLAINLIBS_URE),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_PLAINEXT)) \ 191 $(foreach lib,$(gb_Library_PLAINLIBS_OOO),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_PLAINEXT)) \ 192 $(foreach lib,$(gb_Library_PLAINLIBS_OXT),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_PLAINEXT)) \ 193 $(foreach lib,$(gb_Library_PRIVATELIBS_URE),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_OOOEXT)) \ 194 $(foreach lib,$(gb_Library_RTVERLIBS),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_RTEXT).$(gb_Library_UDK_MAJORVER)) \ 195 $(foreach lib,$(gb_Library_UNOVERLIBS),$(lib):$(gb_Library_UNOVERPRE)$(lib)$(gb_Library_PLAINEXT).$(gb_Library_UDK_MAJORVER)) \ 196 $(foreach lib,$(gb_Library_EXTENSIONLIBS),$(lib):$(lib)$(gb_Library_UNOEXT)) \ 197 198 199gb_Library_LAYER := \ 200 $(foreach lib,$(gb_Library_OOOLIBS),$(lib):OOO) \ 201 $(foreach lib,$(gb_Library_PLAINLIBS_URE),$(lib):URELIB) \ 202 $(foreach lib,$(gb_Library_PLAINLIBS_OOO),$(lib):OOO) \ 203 $(foreach lib,$(gb_Library_PLAINLIBS_OXT),$(lib):OXT) \ 204 $(foreach lib,$(gb_Library_PLAINLIBS_NONE),$(lib):NONE) \ 205 $(foreach lib,$(gb_Library_PRIVATELIBS_URE),$(lib):URELIB) \ 206 $(foreach lib,$(gb_Library_RTVERLIBS),$(lib):URELIB) \ 207 $(foreach lib,$(gb_Library_UNOVERLIBS),$(lib):URELIB) \ 208 $(foreach lib,$(gb_Library_EXTENSIONLIBS),$(lib):OXT) \ 209 210define gb_Library_get_rpath 211$(call gb_LinkTarget__get_installname,$(call gb_Library_get_filename,$(1)),$(call gb_LinkTarget__get_rpath_for_layer,$(call gb_Library_get_layer,$(1)))) 212endef 213 214define gb_Library_Library_platform 215$(call gb_LinkTarget_get_target,$(2)) : RPATH := $(call gb_Library_get_rpath,$(1)) 216$(call gb_LinkTarget_get_target,$(2)) : LAYER := $(call gb_Library_get_layer,$(1)) 217 218endef 219 220gb_Library__set_soversion_script_platform = $(gb_Library__set_soversion_script) 221 222gb_Library_get_sdk_link_dir = $(WORKDIR)/LinkTarget/Library 223 224gb_Library_get_sdk_link_lib = $(gb_Library_get_versionlink_target) 225 226# bundle is a special kind of library that exists only on Darwin/OSX 227# set the TARGETTYPE to Bundle, and clear install_name(RPATH) 228define gb_Library_Bundle 229$(call gb_Library_Library,$(1)) 230$(call gb_LinkTarget_set_targettype,$(call gb_Library_get_linktarget,$(1)),Bundle) 231$(call gb_LinkTarget_get_target,$(call gb_Library_get_linktarget,$(1))) : \ 232 RPATH := 233endef 234 235# Executable class 236 237gb_Executable_EXT := 238gb_Executable_TARGETTYPEFLAGS := -bind_at_load 239 240gb_Executable_LAYER := \ 241 $(foreach exe,$(gb_Executable_UREBIN),$(exe):UREBIN) \ 242 $(foreach exe,$(gb_Executable_SDK),$(exe):SDKBIN) \ 243 $(foreach exe,$(gb_Executable_OOO),$(exe):OOO) \ 244 $(foreach exe,$(gb_Executable_NONE),$(exe):NONE) \ 245 246 247gb_Executable_get_rpath := 248 249define gb_Executable_Executable_platform 250$(call gb_LinkTarget_get_target,$(2)) : RPATH := 251$(call gb_LinkTarget_get_target,$(2)) : LAYER := $(call gb_Executable_get_layer,$(1)) 252 253endef 254 255 256# CppunitTest class 257 258gb_CppunitTest_UNITTESTFAILED := $(GBUILDDIR)/platform/unittest-failed-MACOSX.sh 259gb_CppunitTest_PYTHONDEPS := $(call gb_Library_get_target,pyuno_wrapper) $(if $(SYSTEM_PYTHON),,$(call gb_GeneratedPackage_get_target,python3)) 260gb_CppunitTest_CPPTESTPRECOMMAND := \ 261 $(call gb_Helper_extend_ld_path,$(gb_Library_DLLDIR):$(WORKDIR)/UnpackedTarball/cppunit/src/cppunit/.libs) 262gb_CppunitTest_get_filename = libtest_$(1).dylib 263gb_CppunitTest_get_ilibfilename = $(gb_CppunitTest_get_filename) 264gb_CppunitTest_malloc_check := -o "env MallocScribble=1" -o "env MallocPreScribble=1" 265 266define gb_CppunitTest_CppunitTest_platform 267$(call gb_LinkTarget_get_target,$(2)) : RPATH := 268$(call gb_LinkTarget_get_target,$(2)) : LAYER := NONE 269 270endef 271 272# JunitTest class 273 274ifneq ($(OOO_TEST_SOFFICE),) 275gb_JunitTest_SOFFICEARG:=$(OOO_TEST_SOFFICE) 276else 277ifneq ($(gb_JunitTest_DEBUGRUN),) 278gb_JunitTest_SOFFICEARG:=connect:pipe,name=$(USER) 279else 280gb_JunitTest_SOFFICEARG:=path:$(INSTROOT)/$(LIBO_BIN_FOLDER)/soffice 281endif 282endif 283 284define gb_JunitTest_JunitTest_platform 285$(call gb_JunitTest_get_target,$(1)) : DEFS := \ 286 -Dorg.openoffice.test.arg.soffice="$(gb_JunitTest_SOFFICEARG)" \ 287 -Dorg.openoffice.test.arg.env=DYLD_LIBRARY_PATH"$$$${DYLD_LIBRARY_PATH+=$$$$DYLD_LIBRARY_PATH}" \ 288 -Dorg.openoffice.test.arg.user=$(call gb_Helper_make_url,$(call gb_JunitTest_get_userdir,$(1))) \ 289 -Dorg.openoffice.test.arg.workdir=$(call gb_JunitTest_get_userdir,$(1)) \ 290 291endef 292 293# PythonTest class 294 295gb_PythonTest_UNITTESTFAILED := $(GBUILDDIR)/platform/unittest-failed-MACOSX.sh 296gb_PythonTest_DEPS := $(call gb_GeneratedPackage_get_target,python3) $(call gb_Package_get_target,python_shell) 297gb_PythonTest_PRECOMMAND := $(gb_Helper_LIBRARY_PATH_VAR)=$${$(gb_Helper_LIBRARY_PATH_VAR):+$$$(gb_Helper_LIBRARY_PATH_VAR):}$(INSTROOT)/$(LIBO_URE_LIB_FOLDER) 298ifneq ($(LIBO_LIB_FOLDER),$(LIBO_URE_LIB_FOLDER)) 299gb_PythonTest_PRECOMMAND := $(gb_PythonTest_PRECOMMAND):$(INSTROOT)/$(LIBO_LIB_FOLDER) 300endif 301gb_PythonTest_PRECOMMAND := $(gb_PythonTest_PRECOMMAND):$(WORKDIR)/UnpackedTarball/cppunit/src/cppunit/.libs 302 303# UITest class 304 305gb_UITest_DEPS := $(call gb_GeneratedPackage_get_target,python3) 306 307# Module class 308 309define gb_Module_DEBUGRUNCOMMAND 310lldb -f $(INSTROOT)/$(LIBO_BIN_FOLDER)/soffice -- --norestore --nologo \ 311 '"--accept=pipe,name=$(USER)\;urp"' 312endef 313 314# InstallModuleTarget class 315 316define gb_InstallModuleTarget_InstallModuleTarget_platform 317$(call gb_InstallModuleTarget_add_defs,$(1),\ 318 $(gb_CPUDEFS) \ 319 $(gb_OSDEFS) \ 320 -DCOMID=gcc3 \ 321 -D_gcc3 \ 322) 323 324endef 325 326# InstallScript class 327 328gb_InstallScript_EXT := .ins 329 330# CliAssemblyTarget class 331 332gb_CliAssemblyTarget_POLICYEXT := 333gb_CliAssemblyTarget_get_dll := 334 335# Extension class 336 337gb_Extension_LICENSEFILE_DEFAULT := $(INSTROOT)/Resources/LICENSE 338 339# UnpackedTarget class 340 341gb_UnpackedTarget_TARFILE_LOCATION := $(TARFILE_LOCATION) 342 343# UnoApiHeadersTarget class 344 345ifneq ($(filter TRUE,$(DISABLE_DYNLOADING)),) 346gb_UnoApiHeadersTarget_select_variant = $(if $(filter udkapi,$(1)),comprehensive,$(2)) 347else 348gb_UnoApiHeadersTarget_select_variant = $(2) 349endif 350 351# UIMenubarTarget class 352 353define gb_UIMenubarTarget__command 354$(call gb_Output_announce,$(2),$(true),UIM,1) 355$(call gb_Trace_StartRange,$(2),UIM) 356$(call gb_ExternalExecutable_get_command,xsltproc) --nonet -o $(1) $(UI_MENUBAR_XSLT) $(3) 357$(call gb_Trace_EndRange,$(2),UIM) 358 359endef 360 361define gb_UIMenubarTarget_UIMenubarTarget_platform 362$(call gb_UIMenubarTarget_get_target,$(1)) : UI_MENUBAR_XSLT := $(SRCDIR)/solenv/bin/macosx_menubar_modification.xsl 363$(call gb_UIMenubarTarget_get_target,$(1)) : $(SRCDIR)/solenv/bin/macosx_menubar_modification.xsl 364$(call gb_UIMenubarTarget_get_target,$(1)) :| $(call gb_ExternalExecutable_get_dependencies,xsltproc) 365 366endef 367 368# Python 369gb_Python_PRECOMMAND := PYTHONPATH="$$PYPATH" 370gb_Python_INSTALLED_EXECUTABLE := $(INSTROOT)/$(LIBO_LIB_FOLDER)/LibreOfficePython.framework/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/Resources/Python.app/Contents/MacOS/LibreOfficePython 371# this is passed to gdb as executable when running tests 372gb_Python_INSTALLED_EXECUTABLE_GDB := $(gb_Python_INSTALLED_EXECUTABLE) 373 374include $(GBUILDDIR)/platform/com_GCC_class.mk 375 376# vim: set noet sw=4: 377