Search code examples
c++makefileandroid-ndkg++ndk-build

Why does NDK compiler not recognize a LOCAL_CFLAGS definition?


I have some pre-existing code I'm trying to compile into an NDK library. There's a simply #ifndef I need to execute correctly, but in my Android.mk the var I've defined with LOCAL_CFLAGS is not recognized. It thinks it's a command line option

When I run ndk-build with the NDK_LOG option it all compiles fine until I see this:

[armeabi-v7a] Compile++ thumb: NDKImageProcessor <= NDKImageProcessor.cpp
arm-linux-androideabi-g++: error: unrecognized command line option '-WINONLY=1'
make: *** [obj/local/armeabi-v7a/objs/NDKImageProcessor/NDKImageProcessor.o] Error 1

I'm simply trying to get the following from being included in compilation:

#ifndef WINONLY
    #import <CoreGraphics/CGGeometry.h>
#endif

Android.mk is pretty straightforward:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := NDKImageProcessor

LOCAL_SRC_FILES := NDKImageProcessor.cpp
LOCAL_SRC_FILES += ../../../../SharedSrc/Image.cpp

LOCAL_LDLIBS := -llog

LOCAL_CFLAGS := -WINONLY=1

include $(BUILD_SHARED_LIBRARY)

If I simply do not add that LOCAL_CFLAGS line the compiler tries to compile that iOS code, which is a no-go obviously.


Solution

  • From the GCC documentation (it should be the same if you use Clang):

    -D name
    Predefine name as a macro, with definition 1.

    -D name=definition
    The contents of definition are tokenized and processed as if they appeared during translation phase three in a ‘#define’ directive. In particular, the definition will be truncated by embedded newline characters.

    So to define WINONLY with the value 1 you'd use:

    LOCAL_CFLAGS := -DWINONLY=1
    

    or simply

    LOCAL_CFLAGS := -DWINONLY