office-gobmx/external/cppunit/ExternalProject_cppunit.mk
Jan-Marek Glogowski 79365d6f5a WASM fix native EH build since Emscripten 3.1.6
Building LO with WASM native EH and Emscripten 3.1.6+, the link
fails with a missing "emscripten_longjmp" symbol. Actually the
old build was simply wrong, because the emscripten_longjmp
function is just used for the Emscripten SjLj and not the native
WASM SjLj implementation. Linking just worked, because the used
libcompiler_rt-wasm-sjlj-mt.a lib was incorrectly providing that
symbol, which 3.1.6 removed.

But since running the NEH build still fails early in the same way
then before in FF nightly 100 and Chrome (= failure in the LO job
scheduler calling Task::UpdateMinPeriod for the "desktop::Desktop
m_firstRunTimer" timer, resulting in a WASM VM "RuntimeError:
indirect call signature mismatch"), there is still no way to know,
if nothing else it missing. The Emscripten / JS EH build still
works without any code changes. And it's not the first call on
a job object that fails...

And unfortunatly, because Qt itself also uses libpng, it also uses
SjLj for error handling, like LO in the image import, so the Qt
build must also be patched to build with "-s SUPPORT_LONGJMP=wasm".
Simply enough to do (see README.wasm.md). LO's configure now
detects that symbol and will bail out on incompatible Qt and LO
build setup.

See https://github.com/emscripten-core/emscripten/issues/16572

Change-Id: I3a1877f3aeb77873906176b9d3cd1ea92973f1f6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132139
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
2022-03-30 15:12:21 +02:00

62 lines
2.2 KiB
Makefile

# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
$(eval $(call gb_ExternalProject_ExternalProject,cppunit))
$(eval $(call gb_ExternalProject_register_targets,cppunit,\
build \
))
ifeq ($(OS),WNT)
$(call gb_ExternalProject_get_state_target,cppunit,build) :
$(call gb_Trace_StartRange,cppunit,EXTERNAL)
$(call gb_ExternalProject_run,build,\
PROFILEFLAGS="$(gb_MSBUILD_CONFIG) \
/p:Platform=$(gb_MSBUILD_PLATFORM) \
/p:PlatformToolset=$(VCTOOLSET) /p:VisualStudioVersion=$(VCVER) /ToolsVersion:Current \
$(if $(filter 10,$(WINDOWS_SDK_VERSION)),/p:WindowsTargetPlatformVersion=$(UCRTVERSION))" \
&& msbuild.exe cppunit_dll.vcxproj /p:Configuration=$${PROFILEFLAGS} \
&& cd ../DllPlugInTester \
&& msbuild.exe DllPlugInTester.vcxproj /p:Configuration=$${PROFILEFLAGS} \
,src/cppunit)
$(call gb_Trace_EndRange,cppunit,EXTERNAL)
else
cppunit_CXXFLAGS=$(CXXFLAGS) $(gb_EMSCRIPTEN_CXXFLAGS)
cppunit_CXXFLAGS+=$(gb_COMPILERDEFS_STDLIB_DEBUG)
ifneq (,$(call gb_LinkTarget__symbols_enabled,cppunit))
cppunit_CXXFLAGS+=-g
endif
$(call gb_ExternalProject_get_state_target,cppunit,build) :
$(call gb_Trace_StartRange,cppunit,EXTERNAL)
$(call gb_ExternalProject_run,build,\
$(gb_RUN_CONFIGURE) ./configure \
--disable-dependency-tracking \
$(if $(filter TRUE,$(DISABLE_DYNLOADING)),--disable-shared,--disable-static) \
--disable-doxygen \
--disable-html-docs \
--disable-latex-docs \
--disable-werror \
$(gb_CONFIGURE_PLATFORMS) \
$(if $(filter MACOSX,$(OS)),--prefix=/@.__________________________________________________NONE) \
$(if $(filter WNT,$(OS)),LDFLAGS="-Wl$(COMMA)--enable-runtime-pseudo-reloc-v2") \
$(if $(filter SOLARIS,$(OS)),LIBS="-lm") \
$(if $(filter ANDROID,$(OS)),LIBS="$(gb_STDLIBS)") \
$(if $(verbose),--disable-silent-rules,--enable-silent-rules) \
CXXFLAGS="$(cppunit_CXXFLAGS)" \
&& cd src \
&& $(MAKE) \
)
$(call gb_Trace_EndRange,cppunit,EXTERNAL)
endif
# vim: set noet sw=4 ts=4: