diff options
author | Fred Hornsey <fred@hornsey.us> | 2018-10-16 18:00:31 -0500 |
---|---|---|
committer | Fred Hornsey <fred@hornsey.us> | 2018-10-16 18:00:31 -0500 |
commit | 85291bed9f9e941d64e3e2b91c36e9761908f55c (patch) | |
tree | e8d91eb0410cd07b0d4821af4ac5649d478b0fd3 | |
parent | c3f21bb6009ba58e0888304ca5a1011d7554936b (diff) | |
download | ATCD-85291bed9f9e941d64e3e2b91c36e9761908f55c.tar.gz |
Update platform make files to support android clang
-rw-r--r-- | ACE/include/makeinclude/platform_android.GNU | 245 | ||||
-rw-r--r-- | ACE/include/makeinclude/platform_clang_common.GNU | 28 |
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 |