OK. I wonder if this helps icu4c as well.
On 2016/01/27 16:57, David Coppa wrote:
>
> With the diff below, I have a working cmake-3.4.3 package for arm.
>
> One can say I lost the battle and gave up, but let's face reality:
> base libstdc++ on arm is FUBAR, there's not much we can do...
>
> It is plagued by a plethora of bugs:
>
> It forced us to use '-O1 -fno-stack-protector'.
> It broke CMake's built-in ELF parser.
> And finally ifstream is bugged when linking with -lpthread.
>
> See my previous "std::ifstream is broken on arm" mail on bugs@.
>
> If you want to play, you can install my packages with:
>
> # export PKG_PATH=http://open.bsdgeek.it/arm/
> # pkg_add cmake ninja
>
> It will save you some pain, since it took me ~1 day to build cmake
> on a BBB.
>
> I've already built some cmake-based ports for testing purposes, and
> all seems good so far.
>
> Comments?
> OKs?
>
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/cmake/Makefile,v
> retrieving revision 1.139
> diff -u -p -u -p -r1.139 Makefile
> --- Makefile 26 Jan 2016 08:44:07 -0000 1.139
> +++ Makefile 27 Jan 2016 13:10:03 -0000
> @@ -2,12 +2,6 @@
>
> DPB_PROPERTIES =parallel
>
> -# avoid segfaults from binaries compiled and then used during the build
> -.if ${MACHINE_ARCH} == "arm"
> -CFLAGS += -O1 -fno-stack-protector
> -CXXFLAGS += -O1 -fno-stack-protector
> -.endif
> -
> COMMENT = portable build system
>
> VER = 3.4.3
> @@ -25,9 +19,14 @@ PERMIT_PACKAGE_CDROM = Yes
>
> WANTLIB += archive c curl expat form jsoncpp m ncurses pthread stdc++ z
>
> -# XXX: CMake's built-in ELF parser is broken on arm
> +# XXX: On arm libstdc++ from base (and especially iostream) seems
> +# to be broken, so use g++ from ports.
> +MODULES = gcc4
> +MODGCC4_ARCHS = arm
> +MODGCC4_LANGS = c++
> +
> # XXX: Ninja is broken on m88k
> -.if ${MACHINE_ARCH} != "arm" && ${MACHINE_ARCH} != "m88k"
> +.if ${MACHINE_ARCH} != "m88k"
> BUILD_DEPENDS = devel/ninja>=1.5.1
> .endif
>
> @@ -72,9 +71,8 @@ pre-configure:
> ${WRKSRC}/Modules/FindSDL.cmake \
> ${WRKSRC}/Modules/FindTCL.cmake
>
> -# XXX: CMake's built-in ELF parser is broken on arm
> # XXX: Ninja is broken on m88k
> -.if ${MACHINE_ARCH} != "arm" && ${MACHINE_ARCH} != "m88k"
> +.if ${MACHINE_ARCH} != "m88k"
> do-build:
> cd ${WRKBUILD} && exec ${SETENV} ${MAKE_ENV} ninja -v -j \
> ${MAKE_JOBS} ${ALL_TARGET}
> Index: cmake.port.mk
> ===================================================================
> RCS file: /cvs/ports/devel/cmake/cmake.port.mk,v
> retrieving revision 1.52
> diff -u -p -u -p -r1.52 cmake.port.mk
> --- cmake.port.mk 26 Jan 2016 08:44:07 -0000 1.52
> +++ cmake.port.mk 27 Jan 2016 13:10:03 -0000
> @@ -9,9 +9,8 @@ MAKE_ENV+=LIB${_n}_VERSION=${_v}
>
> USE_NINJA ?= Yes
>
> -# XXX: CMake's built-in ELF parser is broken on arm
> # XXX: Ninja is broken on m88k
> -.if ${MACHINE_ARCH} == "arm" || ${MACHINE_ARCH} == "m88k"
> +.if ${MACHINE_ARCH} == "m88k"
> USE_NINJA = No
> .endif
>
> Index: patches/patch-Source_CMakeLists_txt
> ===================================================================
> RCS file: patches/patch-Source_CMakeLists_txt
> diff -N patches/patch-Source_CMakeLists_txt
> --- patches/patch-Source_CMakeLists_txt 31 Dec 2014 11:06:02 -0000
> 1.6
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,15 +0,0 @@
> -$OpenBSD: patch-Source_CMakeLists_txt,v 1.6 2014/12/31 11:06:02 dcoppa Exp $
> -
> -XXX: CMake's built-in ELF parser is broken on arm
> -
> ---- Source/CMakeLists.txt.orig Mon Dec 15 14:07:43 2014
> -+++ Source/CMakeLists.txt Thu Dec 18 05:37:12 2014
> -@@ -16,7 +16,7 @@ if(CMAKE_CXX_PLATFORM_ID MATCHES "OpenBSD")
> - else()
> - CHECK_INCLUDE_FILE("elf.h" HAVE_ELF_H)
> - endif()
> --if(HAVE_ELF_H)
> -+if(HAVE_ELF_H AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
> - set(CMAKE_USE_ELF_PARSER 1)
> - elseif(HAIKU)
> - # On Haiku, we need to include elf32.h from the private headers
> Index: patches/patch-bootstrap
> ===================================================================
> RCS file: /cvs/ports/devel/cmake/patches/patch-bootstrap,v
> retrieving revision 1.10
> diff -u -p -u -p -r1.10 patch-bootstrap
> --- patches/patch-bootstrap 8 Dec 2015 17:18:59 -0000 1.10
> +++ patches/patch-bootstrap 27 Jan 2016 13:10:03 -0000
> @@ -1,7 +1,7 @@
> $OpenBSD: patch-bootstrap,v 1.10 2015/12/08 17:18:59 dcoppa Exp $
>
> Use Ninja to build CMake
> -XXX: broken on arm and m88k
> +XXX: broken on m88k
>
> --- bootstrap.orig Thu Nov 12 16:39:53 2015
> +++ bootstrap Mon Nov 23 16:54:15 2015
> @@ -10,7 +10,7 @@ XXX: broken on arm and m88k
> else
> # Bootstrapping from a standard UNIX prompt.
> - cmake_bootstrap_generator="Unix Makefiles"
> -+ if arch -s | egrep -q '^arm|^m88k'; then
> ++ if arch -s | grep -q '^m88k'; then
> + cmake_bootstrap_generator="Unix Makefiles"
> + else
> + cmake_bootstrap_generator="Ninja"
>