]> git.sesse.net Git - stockfish/commitdiff
Fixes for ARM compilation
authorJacques <jacques.bachellerie@mfglabs.com>
Sat, 8 Oct 2016 10:15:43 +0000 (12:15 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Thu, 13 Oct 2016 06:34:04 +0000 (08:34 +0200)
The target:

Odroid U3 (http://www.hardkernel.com/main/products/prdt_info.php?g_code=g138745696275)
Debian Jessie
As listed in #550 and #638 three modifications are needed for compilation to work:

float-abi flag for GCC If an FPU is present and supported by the installed os then passed value need to be hard.
I didn't find any better solution than using readelf to check for the availibilty of Tag_ABI_VFP_args which sould indicate support for the FPU. The check is only done if the arch is arm and if readelf is not present
on the system, there will be an error (/bin/sh: 1: readelf: not found) but it will not break and will continue with the default softfp value. Outputing the error is not really acceptable but I wanted some feedback on the
check itself.

-lpthread is needed on armv7 outside of Android
I replaced UNAME with KERNEL and OS to allow to differentiate Android.

m32 flag
My understanding is that outside of Android the flag is generating errors on armv7.

These modifications should introduce change only for non Android armv7 build.

No functional change.

src/Makefile

index e5564eff0ef39ee9152a7840c008e56e2a6d71f0..9ec071a1d0bdbcc10832bc8ab24f386b8f3a09b7 100644 (file)
 ### ==========================================================================
 
 ### Establish the operating system name
-UNAME = $(shell uname)
+KERNEL = $(shell uname -s)
+ifneq ($(KERNEL),Darwin)
+       OS = $(shell uname -o)
+endif
 
 ### Executable name
 EXE = stockfish
@@ -145,8 +148,17 @@ endif
 ifeq ($(COMP),gcc)
        comp=gcc
        CXX=g++
-       CXXFLAGS += -pedantic -Wextra -Wshadow -m$(bits)
-       ifneq ($(UNAME),Darwin)
+       CXXFLAGS += -pedantic -Wextra -Wshadow
+
+       ifeq ($(ARCH),armv7)
+               ifeq ($(OS),Android)
+                       CXXFLAGS += -m$(bits)
+               endif
+       else
+               CXXFLAGS += -m$(bits)
+       endif
+
+       ifneq ($(KERNEL),Darwin)
           LDFLAGS += -Wl,--no-as-needed
        endif
 endif
@@ -154,7 +166,7 @@ endif
 ifeq ($(COMP),mingw)
        comp=mingw
 
-       ifeq ($(UNAME),Linux)
+       ifeq ($(KERNEL),Linux)
                ifeq ($(bits),64)
                        ifeq ($(shell which x86_64-w64-mingw32-c++-posix),)
                                CXX=x86_64-w64-mingw32-c++
@@ -185,9 +197,19 @@ endif
 ifeq ($(COMP),clang)
        comp=clang
        CXX=clang++
-       CXXFLAGS += -pedantic -Wextra -Wshadow -m$(bits)
-       LDFLAGS += -m$(bits)
-       ifeq ($(UNAME),Darwin)
+       CXXFLAGS += -pedantic -Wextra -Wshadow
+
+       ifeq ($(ARCH),armv7)
+               ifeq ($(OS),Android)
+                       CXXFLAGS += -m$(bits)
+                       LDFLAGS += -m$(bits)
+               endif
+       else
+               CXXFLAGS += -m$(bits)
+               LDFLAGS += -m$(bits)
+       endif
+
+       ifeq ($(KERNEL),Darwin)
                CXXFLAGS += -stdlib=libc++
                DEPENDFLAGS += -stdlib=libc++
        endif
@@ -205,7 +227,7 @@ else
        profile_clean = gcc-profile-clean
 endif
 
-ifeq ($(UNAME),Darwin)
+ifeq ($(KERNEL),Darwin)
        CXXFLAGS += -arch $(arch) -mmacosx-version-min=10.9
        LDFLAGS += -arch $(arch) -mmacosx-version-min=10.9
 endif
@@ -223,9 +245,9 @@ endif
 ### On mingw use Windows threads, otherwise POSIX
 ifneq ($(comp),mingw)
        # On Android Bionic's C library comes with its own pthread implementation bundled in
-       ifneq ($(arch),armv7)
+       ifneq ($(OS),Android)
                # Haiku has pthreads in its libroot, so only link it in on other platforms
-               ifneq ($(UNAME),Haiku)
+               ifneq ($(KERNEL),Haiku)
                        LDFLAGS += -lpthread
                endif
        endif
@@ -245,7 +267,7 @@ ifeq ($(optimize),yes)
 
        ifeq ($(comp),gcc)
 
-               ifeq ($(UNAME),Darwin)
+               ifeq ($(KERNEL),Darwin)
                        ifeq ($(arch),i386)
                                CXXFLAGS += -mdynamic-no-pic
                        endif
@@ -254,19 +276,19 @@ ifeq ($(optimize),yes)
                        endif
                endif
 
-               ifeq ($(arch),armv7)
+               ifeq ($(OS), Android)
                        CXXFLAGS += -fno-gcse -mthumb -march=armv7-a -mfloat-abi=softfp
                endif
        endif
 
        ifeq ($(comp),icc)
-               ifeq ($(UNAME),Darwin)
+               ifeq ($(KERNEL),Darwin)
                        CXXFLAGS += -mdynamic-no-pic
                endif
        endif
 
        ifeq ($(comp),clang)
-               ifeq ($(UNAME),Darwin)
+               ifeq ($(KERNEL),Darwin)
                        ifeq ($(pext),no)
                                CXXFLAGS += -flto
                                LDFLAGS += $(CXXFLAGS)
@@ -326,7 +348,7 @@ ifeq ($(comp),gcc)
 endif
 
 ifeq ($(comp),mingw)
-       ifeq ($(UNAME),Linux)
+       ifeq ($(KERNEL),Linux)
        ifeq ($(optimize),yes)
        ifeq ($(debug),no)
                CXXFLAGS += -flto
@@ -338,7 +360,7 @@ endif
 
 ### 3.9 Android 5 can only run position independent executables. Note that this
 ### breaks Android 4.0 and earlier.
-ifeq ($(arch),armv7)
+ifeq ($(OS), Android)
        CXXFLAGS += -fPIE
        LDFLAGS += -fPIE -pie
 endif
@@ -446,6 +468,8 @@ config-sanity:
        @echo "optimize: '$(optimize)'"
        @echo "arch: '$(arch)'"
        @echo "bits: '$(bits)'"
+       @echo "kernel: '$(KERNEL)'"
+       @echo "os: '$(OS)'"
        @echo "prefetch: '$(prefetch)'"
        @echo "popcnt: '$(popcnt)'"
        @echo "sse: '$(sse)'"