summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFred Hornsey <fred@hornsey.us>2018-10-16 18:00:31 -0500
committerFred Hornsey <fred@hornsey.us>2018-10-16 18:00:31 -0500
commit85291bed9f9e941d64e3e2b91c36e9761908f55c (patch)
treee8d91eb0410cd07b0d4821af4ac5649d478b0fd3
parentc3f21bb6009ba58e0888304ca5a1011d7554936b (diff)
downloadATCD-85291bed9f9e941d64e3e2b91c36e9761908f55c.tar.gz
Update platform make files to support android clang
-rw-r--r--ACE/include/makeinclude/platform_android.GNU245
-rw-r--r--ACE/include/makeinclude/platform_clang_common.GNU28
2 files changed, 97 insertions, 176 deletions
diff --git a/ACE/include/makeinclude/platform_android.GNU b/ACE/include/makeinclude/platform_android.GNU
index 85795a9e102..773542bf2d3 100644
--- a/ACE/include/makeinclude/platform_android.GNU
+++ b/ACE/include/makeinclude/platform_android.GNU
@@ -6,197 +6,90 @@
# We always include config-android.h on Android platforms.
ACE_PLATFORM_CONFIG ?= config-android.h
+# Common Linux Functionality
+include $(ACE_ROOT)/include/makeinclude/platform_linux_common.GNU
+
# The standalone gcc compilers in NDK r6-r9 have issues with the visibility.
no_hidden_visibility ?= 1
# as of NDK r6 inlining is required
inline ?= 1
-debug ?= 1
-optimize ?= 1
-threads ?= 1
-insure ?= 0
-
-LSB_RELEASE_ID := $(shell lsb_release -i 2> /dev/null || echo Distributor ID: Unknown)
-LSB_RELEASE_RELEASE := $(shell lsb_release -r 2> /dev/null || echo Release: Unknown)
-
-PLATFORM_XT_CPPFLAGS=
-PLATFORM_XT_LIBS=-lXt
-PLATFORM_XT_LDFLAGS=
-
-PLATFORM_FL_CPPFLAGS=
-PLATFORM_FL_LIBS=-lfltk -lfltk_forms -lfltk_gl
-PLATFORM_FL_LDFLAGS=
-
-PLATFORM_X11_CPPFLAGS=-I/usr/X11R6/include
-PLATFORM_X11_LIBS=-lX11
-PLATFORM_X11_LDFLAGS=-L/usr/X11R6/lib
+# as of API level 16 executables can be linked as Position Independent Executables
+# as of API level 21 PIE is mandatory
+PIE ?= -pie
-PLATFORM_GL_CPPFLAGS=-I/usr/X11R6/include
-PLATFORM_GL_LIBS =-lGL
-PLATFORM_GL_LDFLAGS =-L/usr/X11R6/lib
+#No rwho on Android
+rwho = 0
-PLATFORM_GTK_CPPFLAGS=$(shell gtk-config --cflags)
-PLATFORM_GTK_LIBS =$(shell gtk-config --libs)
-PLATFORM_GTK_LDFLAGS =
+# This section deals with selecting the architecture/compiler
+# As of writing information on ABIs can be found at https://developer.android.com/ndk/guides/abis
-PLATFORM_FOX_CPPFLAGS ?= -I/usr/include/fox
-PLATFORM_FOX_LIBS ?= -lFOX
-PLATFORM_FOX_LDFLAGS ?=
+ifndef ANDROID_ABI
+ ifdef ANDROID_ARCH # Handle Possiblity of ANDROID_ARCH being passed
+ ifeq ($(ANDROID_ARCH),arm)
+ ANDROID_ABI := armeabi-v7a
+ else
+ ANDROID_ABI := $(ANDROID_ARCH)
+ endif
+ else # Else default to ARMv7
+ ANDROID_ABI := armeabi-v7a
+ endif
+endif
-# NOTE: we only support wxWindows over GTK
-PLATFORM_WX_CPPFLAGS= $(shell wx-config --cxxflags) $(PLATFORM_GTK_CPPFLAGS)
-PLATFORM_WX_LIBS = $(shell wx-config --libs) $(PLATFORM_GTK_LIBS)
-PLATFORM_WX_LDFLAGS = $(shell wx-config --ldflags) $(PLATFORM_GTK_LDFLAGS)
+# Alias neon
+ifeq ($(ANDROID_ABI), neon)
+ ANDROID_ABI := armeabi-v7a-with-neon
+endif
-PLATFORM_BOOST_CPPFLAGS ?=
-PLATFORM_BOOST_LDLAGS ?=
-PLATFORM_BOOST_UTF_LIBS ?= -lboost_unit_test_framework
+# NDK says -Wl,--fix-cortex-a8 is required for working around a CPU bug
+# in some Cortex-A8 implementations
-ifeq ($(buildbits),64)
-PLATFORM_TK_CPPFLAGS=$(shell . /usr/lib64/tkConfig.sh && echo -n $$TK_INCLUDE_SPEC $$TK_DEFS)
-PLATFORM_TK_LIBS=$(shell . /usr/lib64/tkConfig.sh && echo -n $$TK_LIB_FLAG)
-else
-PLATFORM_TK_CPPFLAGS=$(shell . /usr/lib/tkConfig.sh && echo -n $$TK_INCLUDE_SPEC $$TK_DEFS)
-PLATFORM_TK_LIBS=$(shell . /usr/lib/tkConfig.sh && echo -n $$TK_LIB_FLAG)
+ifeq ($(ANDROID_ABI),armeabi-v7a)
+ CROSS_COMPILE := arm-linux-androideabi-
+ FLAGS_C_CC += -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
+ LDFLAGS += -march=armv7-a -Wl,--fix-cortex-a8
endif
-PLATFORM_TK_LDFLAGS=
-ifeq ($(buildbits),64)
-PLATFORM_TCL_CPPFLAGS=$(shell . /usr/lib64/tclConfig.sh && echo -n $$TCL_INCLUDE_SPEC $$TCL_DEFS)
-PLATFORM_TCL_LIBS=$(shell . /usr/lib64/tclConfig.sh && echo -n $$(eval echo $$TCL_LIB_FLAG))
-else
-PLATFORM_TCL_CPPFLAGS=$(shell . /usr/lib/tclConfig.sh && echo -n $$TCL_INCLUDE_SPEC $$TCL_DEFS)
-PLATFORM_TCL_LIBS=$(shell . /usr/lib/tclConfig.sh && echo -n $$(eval echo $$TCL_LIB_FLAG))
-endif
-PLATFORM_TCL_LDFLAGS=
-
-PLATFORM_QT_CPPFLAGS ?= -I$(QTDIR)/include
-PLATFORM_QT_LIBS ?= -lqt-mt
-PLATFORM_QT_LDFLAGS ?= -L$(QTDIR)/lib
-
-sctp ?=
-# support for OpenSS7 SCTP
-ifeq ($(sctp),openss7)
- PLATFORM_SCTP_CPPFLAGS+= -DACE_HAS_OPENSS7_SCTP
- PLATFORM_SCTP_LDFLAGS?=
- PLATFORM_SCTP_LIBS?=
+ifeq ($(ANDROID_ABI),arm64-v8a)
+ CROSS_COMPILE := aarch64-linux-android-
+ FLAGS_C_CC += -march=armv8-a
+ LDFLAGS += -march=armv8-a
endif
-# support for LKSCTP (Linux Kernel 2.5)
-ifeq ($(sctp),lksctp)
- PLATFORM_SCTP_CPPFLAGS+= -DACE_HAS_LKSCTP
- PLATFORM_SCTP_LDFLAGS?= -L/usr/local/lib
- PLATFORM_SCTP_LIBS?= -lsctp
+ifeq ($(ANDROID_ABI),armeabi-v7a-with-neon)
+ CROSS_COMPILE := arm-linux-androideabi-
+ FLAGS_C_CC += -march=armv7-a -mfloat-abi=softfp -mfpu=neon
+ LDFLAGS += -march=armv7-a -Wl,--fix-cortex-a8
endif
-GNU_LIBPTHREAD_VERSION := $(shell getconf GNU_LIBPTHREAD_VERSION 2> /dev/null || echo Unknown)
-ifeq (NPTL, $(word 1,$(GNU_LIBPTHREAD_VERSION)))
- NPTL_VERS := $(subst ., ,$(word 2,$(GNU_LIBPTHREAD_VERSION)))
- ifneq (0, $(word 1,$(NPTL_VERS)))
- nptl ?= 1
- endif
+ifeq ($(ANDROID_ABI),x86)
+ CROSS_COMPILE := i686-linux-android-
endif
-nptl ?= 0
-ifeq ($(nptl),0)
- CPPFLAGS += -DACE_LACKS_LINUX_NPTL
-endif
-
-ssl ?= 0
-ifeq ($(ssl),1)
- # Some Linux OpenSSL installations compile in Kerberos support. Add
- # the Kerberos include path to preprocessor include path.
- #
- # We should probably also add the Kerberos libraries to
- # PLATFORM_SSL_LIBS but we can't be sure if they are needed without
- # a more sophisticated check. This will only be a problem when
- # statically linking the OpenSSL library. The majority of
- # installations use shared OpenSSL libraries so we should be okay,
- # at least until we migrate to Autoconf.
- PLATFORM_SSL_CPPFLAGS += -I/usr/kerberos/include
-endif # ssl
-
-SYSARCH := $(shell uname -m)
-
-# as of API level 16 executables can be linked as Position Independent Executables
-# as of API level 21 PIE is mandatory
-PIE ?= -pie
-PIC = -fPIC
-AR ?= ar
-ARFLAGS ?= rsuv
-RANLIB = @true
-# end of: include most of platform_linux_common.GNU
-
-#No rwho on Android
-rwho = 0
-
-#Standalone toolchain required.
-#Required environment variables are
-#$NDK - install directory for android NDK, at least r5c
-#$SDK - install directory for android SDK
-#$SYSROOT - $NDK/platform/android-9
-#$TOOLCHAIN/bin in path, $TOOLCHAIN is root of standalone toolchain
-#
-#Optionally ANDROID_ABI can be set to select specific architecture ABIs like armeabi-v7a or neon
-#ANDROID_ABI ?= arm64-v8a
-#
-#Toolchain defaults to arm architecture
-ANDROID_ARCH ?= arm
-
-#SYSROOT ?= $(NDK)/platforms/android-9/arch-$(ANDROID_ARCH)
-
-ifeq (,$(CROSS_COMPILE))
- ifeq ($(ANDROID_ARCH),arm)
- CROSS_COMPILE=arm-linux-androideabi-
- else
- ifeq ($(ANDROID_ARCH),x86)
- CROSS_COMPILE=i686-linux-android-
- else
- CROSS_COMPILE=unknown-android-arch-
- endif
- endif
+ifeq ($(ANDROID_ABI),x86_64)
+ CROSS_COMPILE := x86_64-linux-android-
endif
-# fix this
-pipes ?= 1
-
-# set architecture specific build flags
-ifeq (arm,$(findstring arm,$(ANDROID_ARCH)))
- # NDK says -Wl,--fix-cortex-a8 is required for working around a CPU bug
- # in some Cortex-A8 implementations
-
- # Set ABI specific flags
- ifeq ($(ANDROID_ABI),armeabi-v7a)
- FLAGS_C_CC += -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
- LDFLAGS += -march=armv7-a -Wl,--fix-cortex-a8
- endif
-
- ifeq ($(ANDROID_ABI),arm64-v8a)
- CROSS_COMPILE=aarch64-linux-android-
- FLAGS_C_CC += -march=armv8-a
- LDFLAGS += -march=armv8-a
- endif
-
- ifeq ($(ANDROID_ABI),neon)
- FLAGS_C_CC += -march=armv7-a -mfloat-abi=softfp -mfpu=neon
- LDFLAGS += -march=armv7-a -Wl,--fix-cortex-a8
- endif
-
+ifndef CROSS_COMPILE
+ $(error ANDROID_ABI passed (set to: $(ANDROID_ABI)) is not valid)
endif
-FLAGS_C_CC += -W -Wall -Wpointer-arith -Wno-psabi
+# Determine if the g++ compiler is GCC or Clang.
+# There are at least 3 assumptions being made here:
+# - There is a g++ command to get the version from
+# - Clang will have "clang" in the version string
+# - If g++ is actually clang, then we can replace that with clang++
+gplusplus_version = $(shell $(CROSS_COMPILE)g++$(CROSS_COMPILE_SUFFIX) --version)
+actually_is_clang := $(strip $(findstring clang,$(gplusplus_version)))
+
+FLAGS_C_CC += -W -Wall -Wpointer-arith
ifeq ($(threads),1)
CPPFLAGS += -D_REENTRANT $(PLATFORM_AIO_SUPPORT)
endif # threads
-ifeq ($(buildbits),32)
- FLAGS_C_CC += -m32
- LDFLAGS += -m32
-endif
-ifeq ($(buildbits),64)
- FLAGS_C_CC += -m64
-endif
+# Use -pipes by default
+pipes ?= 1
# DT_RUNPATH is preferred over DT_RPATH, but the linker will only use it when
# this extra flag option (enable-new-dtags) is present
@@ -211,13 +104,16 @@ DCFLAGS += -ggdb
DCCFLAGS += -ggdb
DLD = $(CXX)
LD = $(CXX) $(PIE)
-# make sure to add the required libs for RTTI and exceptions (libsupc++)
-# and a shared STL lib (libgnustl_shared by default)
-static_libs_only ?=
-ANDROID_STL_DLL ?= gnustl_shared
-LIBS += -ldl -lsupc++
-ifneq ($(static_libs_only),1)
- LIBS += -l$(ANDROID_STL_DLL)
+
+ifndef actually_is_clang
+ # make sure to add the required libs for RTTI and exceptions (libsupc++)
+ # and a shared STL lib (libgnustl_shared by default)
+ static_libs_only ?=
+ ANDROID_STL_DLL ?= gnustl_shared
+ LIBS += -ldl -lsupc++
+ ifneq ($(static_libs_only),1)
+ LIBS += -l$(ANDROID_STL_DLL)
+ endif
endif
ifeq ($(optimize),1)
@@ -229,10 +125,11 @@ SOBUILD = $(COMPILE.cc) $(PIC) -o $(VSHDIR)$*.so $<; \
$(SOLINK.cc) -o $@ $(LDFLAGS) $(VSHDIR)$*.o
PRELIB = @true
-# Test for template instantiation, add to SOFLAGS if SONAME set,
-# add -E to LDFLAGS if using GNU ld
-#
-include $(ACE_ROOT)/include/makeinclude/platform_g++_common.GNU
+ifdef actually_is_clang
+ include $(ACE_ROOT)/include/makeinclude/platform_clang_common.GNU
+else
+ include $(ACE_ROOT)/include/makeinclude/platform_g++_common.GNU
+endif
OCFLAGS ?= -O3
OCCFLAGS ?= -O3
diff --git a/ACE/include/makeinclude/platform_clang_common.GNU b/ACE/include/makeinclude/platform_clang_common.GNU
index d06e624d6cb..51ccc49feda 100644
--- a/ACE/include/makeinclude/platform_clang_common.GNU
+++ b/ACE/include/makeinclude/platform_clang_common.GNU
@@ -1,6 +1,30 @@
# -*- Makefile -*-
-#
-# Common file help turn on/off explicit template instantiation
+
+# Compiling TAO requires relaxing strict 2-phase name lookup rules:
+CCFLAGS += -fdelayed-template-parsing
+
+ifneq ($(CROSS_COMPILE),)
+ CROSS-COMPILE = 1
+ # Build using the cross-tools
+ CC = ${CROSS_COMPILE}clang${CROSS_COMPILE_SUFFIX}
+ CXX = ${CROSS_COMPILE}clang++${CROSS_COMPILE_SUFFIX}
+ AR = ${CROSS_COMPILE}ar${CROSS_COMPILE_SUFFIX}
+ # Cross-linker requires this for linked in shared libs that depend
+ # themselves on other shared libs (not directly linked in)
+ LDFLAGS += -Wl,-rpath-link,$(ACE_ROOT)/lib
+ ifneq (,$(HOST_ROOT))
+ TAO_IDLFLAGS += -g $(HOST_ROOT)/bin/ace_gperf
+ TAO_IDL = $(HOST_ROOT)/bin/tao_idl
+ TAO_IDL_DEP = $(TAO_IDL)
+ TAO_IDL3_TO_IDL2 = $(HOST_ROOT)/bin/tao_idl3_to_idl2
+ TAO_IDL3_TO_IDL2_DEP = $(TAO_IDL3_TO_IDL2)
+ TAO_IDL3_TO_XMI = $(HOST_ROOT)/bin/tao_idl3_to_xmi
+ TAO_IDL3_TO_XMI_DEP = $(TAO_IDL3_TO_XMI)
+ # make sure to use the target compiler, not the cross-compiler
+ # as preprocessor for the cross-compiled idl tools
+ TAO_IDL_PREPROCESSOR = clang
+ endif
+endif
ifeq ($(openmp),1)
FLAGS_C_CC += -fopenmp