try to compile directly for android without android build system

This commit is contained in:
Edouard Dupin 2012-08-08 18:15:54 +02:00
parent c20f2f4f84
commit d97b385a78
6 changed files with 158 additions and 128 deletions

View File

@ -5,62 +5,78 @@ JAVA_FOLDER=src/com/$(PROJECT_VENDOR)/$(PROJECT_NAME)
EWOL_JAVA_FOLDER=src/org/ewol
all:
@echo "------------------------------------------------------------------------"
@echo ' Project name : $(PROJECT_NAME)'
@echo ' Project Vendor : $(PROJECT_VENDOR)'
@echo ' Build date : $(BUILD_TIME) '
@echo ' Tag : $(PROJECT_VERSION_TAG) '
@echo "------------------------------------------------------------------------"
@rm -rf bin
@echo " (sh) Clear previous sources "
@rm -rf src jni/ewolAndroidAbstraction.cpp
@echo " (sh) Create folder : $(JAVA_FOLDER)/ & $(EWOL_JAVA_FOLDER)"
@mkdir -p $(JAVA_FOLDER)/
@mkdir -p $(EWOL_JAVA_FOLDER)/
@echo " (sh) copy the java Files & Replace __XXX__ element with project properties"
@cp $(EWOL_FOLDER)/Java/PROJECT_NAME.java $(JAVA_FOLDER)/$(PROJECT_NAME).java
@sed -i "s|__PROJECT_VENDOR__|$(PROJECT_VENDOR)|" $(JAVA_FOLDER)/$(PROJECT_NAME).java
@sed -i "s|__PROJECT_NAME__|$(PROJECT_NAME)|" $(JAVA_FOLDER)/$(PROJECT_NAME).java
@sed -i "s|__PROJECT_PACKAGE__|$(PROJECT_PACKAGE)|" $(JAVA_FOLDER)/$(PROJECT_NAME).java
# copy the Ewol java files :
@cp $(EWOL_FOLDER)/Java/interfaceJNI.java $(EWOL_JAVA_FOLDER)/
@cp $(EWOL_FOLDER)/Java/interfaceOpenGL.java $(EWOL_JAVA_FOLDER)/
@cp $(EWOL_FOLDER)/Java/interfaceSurfaceView.java $(EWOL_JAVA_FOLDER)/
@cp $(EWOL_FOLDER)/Java/interfaceAudio.java $(EWOL_JAVA_FOLDER)/
@echo " (sh) copy the cpp for jni File : $(EWOL_FOLDER)/SourcesJava/ewolAndroidAbstraction.cpp"
@cp $(EWOL_FOLDER)/Java/ewolAndroidAbstraction.cpp jni/
@sed -i "s|__PROJECT_VENDOR__|$(PROJECT_VENDOR)|" jni/ewolAndroidAbstraction.cpp
@sed -i "s|__PROJECT_NAME__|$(PROJECT_NAME)|" jni/ewolAndroidAbstraction.cpp
@sed -i "s|__PROJECT_PACKAGE__|$(PROJECT_PACKAGE)|" jni/ewolAndroidAbstraction.cpp
@echo " (ndk-build) build native code"
cd $(PROJECT_NDK) ; NDK_PROJECT_PATH=$(PROJECT_PATH) NDK_MODULE_PATH=$(PROJECT_MODULE) ./ndk-build
@echo " (ant) build java code"
PATH=$(PROJECT_SDK)/tools/:$(PROJECT_SDK)/platform-tools/:$(PATH) ant -Dsdk.dir=$(PROJECT_SDK) debug
@echo " (sh) Clear previous sources "
@rm -rf src jni/ewolAndroidAbstraction.cpp
USER_PACKAGES += $(EWOL_FOLDER)/Sources/
TARGET_OS = Android
TARGET_ARCH = ARM
CROSS = $(PROJECT_NDK)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-
install: all
@echo "------------------------------------------------------------------------"
@echo ' INSTALL : ./bin/$(PROJECT_NAME)-debug.apk'
@echo "------------------------------------------------------------------------"
@# $(PROJECT_SDK)/platform-tools/adb kill-server
@# install application
sudo $(PROJECT_SDK)/platform-tools/adb install -r ./bin/$(PROJECT_NAME)-debug.apk
clean:
@echo "------------------------------------------------------------------------"
@echo ' CLEANING : bin libs gen obj'
@echo "------------------------------------------------------------------------"
cd $(PROJECT_NDK) ; NDK_PROJECT_PATH=$(PROJECT_PATH) NDK_MODULE_PATH=$(PROJECT_MODULE) ./ndk-build clean
$(info ------------------------------------------------------------------------)
$(info Project name : $(PROJECT_NAME))
$(info Project Vendor : $(PROJECT_VENDOR))
$(info Build date : $(BUILD_TIME) )
$(info Tag : $(PROJECT_VERSION_TAG) )
$(info ------------------------------------------------------------------------)
localclean:
@echo "------------------------------------------------------------------------"
@echo ' Remove : bin libs gen obj'
@echo "------------------------------------------------------------------------"
rm -rf bin libs gen obj
$(info (sh) Create folder : $(JAVA_FOLDER)/ & $(EWOL_JAVA_FOLDER))
$(shell mkdir -p $(JAVA_FOLDER)/)
$(shell mkdir -p $(EWOL_JAVA_FOLDER)/)
$(info (sh) copy the java Files & Replace __XXX__ element with project properties)
tmp=$(shell cp -v $(EWOL_FOLDER)/Java/PROJECT_NAME.java $(JAVA_FOLDER)/$(PROJECT_NAME).java)
tmp+=$(shell sed -i "s|__PROJECT_VENDOR__|$(PROJECT_VENDOR)|" $(JAVA_FOLDER)/$(PROJECT_NAME).java)
tmp+=$(shell sed -i "s|__PROJECT_NAME__|$(PROJECT_NAME)|" $(JAVA_FOLDER)/$(PROJECT_NAME).java)
tmp+=$(shell sed -i "s|__PROJECT_PACKAGE__|$(PROJECT_PACKAGE)|" $(JAVA_FOLDER)/$(PROJECT_NAME).java)
# copy the Ewol java files :
tmp+=$(shell cp $(EWOL_FOLDER)/Java/interfaceJNI.java $(EWOL_JAVA_FOLDER)/)
tmp+=$(shell cp $(EWOL_FOLDER)/Java/interfaceOpenGL.java $(EWOL_JAVA_FOLDER)/)
tmp+=$(shell cp $(EWOL_FOLDER)/Java/interfaceSurfaceView.java $(EWOL_JAVA_FOLDER)/)
tmp+=$(shell cp $(EWOL_FOLDER)/Java/interfaceAudio.java $(EWOL_JAVA_FOLDER)/)
$(info $(tmp))
$(info (sh) copy the cpp for jni File : $(EWOL_FOLDER)/Java/ewolAndroidAbstraction.cpp)
tmp=$(shell cp -v $(EWOL_FOLDER)/Java/ewolAndroidAbstraction.cpp jni/)
tmp+=$(shell sed -i "s|__PROJECT_VENDOR__|$(PROJECT_VENDOR)|" jni/ewolAndroidAbstraction.cpp)
tmp+=$(shell sed -i "s|__PROJECT_NAME__|$(PROJECT_NAME)|" jni/ewolAndroidAbstraction.cpp)
tmp+=$(shell sed -i "s|__PROJECT_PACKAGE__|$(PROJECT_PACKAGE)|" jni/ewolAndroidAbstraction.cpp)
$(info $(tmp))
TARGET_GLOBAL_C_INCLUDES=-I/home/edupin/dev/perso/android/ndk/sources/cxx-stl/stlport/stlport
TARGET_GLOBAL_C_INCLUDES+=-I/home/edupin/dev/perso/android/ndk/sources/cxx-stl//gabi++/include
TARGET_GLOBAL_C_INCLUDES+=-I/home/edupin/dev/perso/android/ndk/platforms/android-14/arch-arm/usr/include
$(info ------------------------------------------------------------------------)
include $(EWOL_FOLDER)/Build/coreLinux/main.mk
$(info " (ant) build java code")
PATH:=$(PROJECT_SDK)/tools/:$(PROJECT_SDK)/platform-tools/:$(PATH) ant -Dsdk.dir=$(PROJECT_SDK) debug)
$(info " (sh) Clear previous sources ")
#$(shell rm -rf src jni/ewolAndroidAbstraction.cpp)
TARGET_GLOBAL_LDLIBS_SHARED = -shared --sysroot=/home/edupin/dev/perso/android/ndk/platforms/android-14/arch-arm \
/home/edupin/dev/perso/copyDirectServeur/yourDevFolder/edn/obj/local/armeabi/libstdc++.a \
/home/edupin/dev/perso/android/ndk/sources/cxx-stl/gnu-libstdc++/libs/armeabi/libsupc++.a \
-lstdc++
#install: all
# @echo "------------------------------------------------------------------------"
# @echo ' INSTALL : ./bin/$(PROJECT_NAME)-debug.apk'
# @echo "------------------------------------------------------------------------"
# @# $(PROJECT_SDK)/platform-tools/adb kill-server
# @# install application
# sudo $(PROJECT_SDK)/platform-tools/adb install -r ./bin/$(PROJECT_NAME)-debug.apk
#
#clean:
# @echo "------------------------------------------------------------------------"
# @echo ' CLEANING : bin libs gen obj'
# @echo "------------------------------------------------------------------------"
# cd $(PROJECT_NDK) ; NDK_PROJECT_PATH=$(PROJECT_PATH) NDK_MODULE_PATH=$(PROJECT_MODULE) ./ndk-build clean
#
#localclean:
# @echo "------------------------------------------------------------------------"
# @echo ' Remove : bin libs gen obj'
# @echo "------------------------------------------------------------------------"
# rm -rf bin libs gen obj

View File

@ -269,24 +269,24 @@ module-get-all-dependencies = \
# Recursively get dependency of a modules
__modules-get-closure = \
$(eval __closure_deps := $(strip $1)) \
$(if $(__closure_deps), \
$(eval __closure_deps := $(strip $1)) \
$(if $(__closure_deps), \
$(eval __closure_wq := $(__closure_deps)) \
$(eval __closure_field := $(strip $2)) \
$(call __modules-closure)) \
$(__closure_deps)
$(__closure_deps) \
# Used internally by modules-get-all-dependencies. Note the tricky use of
# conditional recursion to work around the fact that the GNU Make language does
# not have any conditional looping construct like 'while'.
__modules-closure = \
$(eval __closure_mod := $(call first,$(__closure_wq))) \
$(eval __closure_wq := $(call rest,$(__closure_wq))) \
$(eval __closure_val := $(__modules.$(__closure_mod).$(__closure_field))) \
$(eval __closure_new := $(filter-out $(__closure_deps),$(__closure_val))) \
$(eval __closure_deps += $(__closure_new)) \
$(eval __closure_wq := $(strip $(__closure_wq) $(__closure_new))) \
$(if $(__closure_wq),$(call __modules-closure)) \
$(eval __closure_mod := $(call first,$(__closure_wq))) \
$(eval __closure_wq := $(call rest,$(__closure_wq))) \
$(eval __closure_val := $(__modules.$(__closure_mod).$(__closure_field))) \
$(eval __closure_new := $(filter-out $(__closure_deps),$(__closure_val))) \
$(eval __closure_deps += $(__closure_new)) \
$(eval __closure_wq := $(strip $(__closure_wq) $(__closure_new))) \
$(if $(__closure_wq),$(call __modules-closure)) \
###############################################################################
## Get path of module main target file (in build or staging directory).
@ -296,10 +296,10 @@ module-get-build-dir = \
$(TARGET_OUT_BUILD)/$1
module-get-build-filename = \
$(TARGET_OUT_BUILD)/$1/$(__modules.$1.MODULE_FILENAME)
$(if $(__modules.$1.MODULE_FILENAME), $(TARGET_OUT_BUILD)/$1/$(__modules.$1.MODULE_FILENAME) )
module-get-staging-filename = \
$(TARGET_OUT_STAGING)/$(__modules.$1.DESTDIR)/$(__modules.$1.MODULE_FILENAME)
$(if $(__modules.$1.MODULE_FILENAME), $(TARGET_OUT_STAGING)/$(__modules.$1.DESTDIR)/$(__modules.$1.MODULE_FILENAME) )
###############################################################################
## Generate autoconf.h file from config file.
@ -357,7 +357,7 @@ $(Q)$(CCACHE) $(GXX) \
$(TARGET_GLOBAL_CFLAGS_$(PRIVATE_ARM_MODE)) \
$(TARGET_GLOBAL_CFLAGS) $(TARGET_GLOBAL_CPPFLAGS) $(GXX_FLAGS_WARNINGS) \
$(PRIVATE_CFLAGS) $(PRIVATE_CPPFLAGS) \
-c -MMD -MP -o $@ \
-c -MMD -MP -g -o $@ \
$(call path-from-top,$<)
endef
@ -374,7 +374,7 @@ $(Q)$(CCACHE) $(GCC) \
$(TARGET_GLOBAL_CFLAGS_$(PRIVATE_ARM_MODE)) \
$(TARGET_GLOBAL_CFLAGS) $(GCC_FLAGS_WARNINGS) \
$(PRIVATE_CFLAGS) \
-c -MMD -MP -o $@ \
-c -MMD -MP -g -o $@ \
$(call path-from-top,$<)
endef
@ -391,7 +391,7 @@ $(Q)$(CCACHE) $(GCC) \
$(TARGET_GLOBAL_CFLAGS_$(PRIVATE_ARM_MODE)) \
$(TARGET_GLOBAL_CFLAGS) $(GCC_FLAGS_WARNINGS) \
$(PRIVATE_CFLAGS) \
-c -MMD -MP -o $@ \
-c -MMD -MP -g -o $@ \
$(call path-from-top,$<)
endef
@ -417,7 +417,10 @@ define transform-o-to-shared-lib
@mkdir -p $(dir $@)
@echo "SharedLib: $(PRIVATE_MODULE) ==> $(call path-from-top,$@)"
$(call check-pwd-is-top-dir)
$(Q)$(GXX) \
@#$(info PRIVATE_ALL_SHARED_LIBRARIES = $(PRIVATE_ALL_SHARED_LIBRARIES))
@#$(info PRIVATE_ALL_STATIC_LIBRARIES = $(PRIVATE_ALL_STATIC_LIBRARIES))
$(Q)
$(GXX) \
$(TARGET_GLOBAL_LDFLAGS_SHARED) \
-Wl,-Map -Wl,$(basename $@).map \
-shared \

View File

@ -27,6 +27,13 @@ ifeq ("$(V)","0")
Q := @
endif
# Tools for host
HOST_GCC ?= gcc
HOST_GXX ?= g++
HOST_AR ?= ar
HOST_LD ?= ld
HOST_STRIP ?= strip
# Tools for target
ifneq ("$(CLANG)","1")
GCC ?= $(CROSS)gcc
@ -113,8 +120,6 @@ TARGET_OUT_FINAL ?= $(shell pwd)/out_$(TARGET_OS)/$(BUILD_DIRECTORY_MODE)/bin
# Makefile with the list of all makefiles available and include them
SCAN_TARGET := scan
#TODO : change this in function of the platform ...
USER_MAKEFILE_NAME := Linux.mk
#display the properties of the currend building folder ...
ifeq ("$(V)","1")
@ -122,10 +127,11 @@ ifeq ("$(V)","1")
$(info pwd="$(shell pwd)")
$(info TOP_DIR="$(TOP_DIR)")
$(info USER_PACKAGES="$(USER_PACKAGES)")
$(info list packet=$(shell find $(USER_PACKAGES) -name $(TARGET_OS).mk))
endif
# Get the list of all makefiles available and include them
makefiles += $(shell find $(USER_PACKAGES) -name $(USER_MAKEFILE_NAME))
makefiles += $(shell find $(USER_PACKAGES) -name $(TARGET_OS).mk)
include $(makefiles)

View File

@ -31,44 +31,42 @@ LOCAL_C_INCLUDES := $(build_dir) $(LOCAL_PATH) $(LOCAL_C_INCLUDES)
## ARM specific checks.
###############################################################################
ifeq ("$(TARGET_ARCH)","ARM")
# Make sure LOCAL_ARM_MODE is valid
# If not set, use default mode
# Convert to upper case for further use
LOCAL_ARM_MODE := $(call upcase,$(strip $(LOCAL_ARM_MODE)))
ifeq ("$(LOCAL_ARM_MODE)","")
LOCAL_ARM_MODE := $(TARGET_DEFAULT_ARM_MODE)
endif
ifneq ("$(LOCAL_ARM_MODE)","ARM")
ifneq ("$(LOCAL_ARM_MODE)","THUMB")
$(error $(LOCAL_PATH): LOCAL_ARM_MODE is not valid : $(LOCAL_ARM_MODE))
endif
endif
# for diplay :
ifeq ("$(LOCAL_ARM_MODE)","")
DISPLAY_ARM_MODE=
else
DISPLAY_ARM_MODE=$(LOCAL_ARM_MODE)_
endif
## Check that compilation flags do not include forbidden stuff.
check-flags-arm-mode := -marm -mthumb
check-flags = \
$(foreach flags,$1, \
$(if $(findstring $($3),$(flags)), \
$(error $(LOCAL_PATH): $3 contains $(flags) : $2) \
) \
)
# Check that -marm or -mthumb is not forced in compilation flags
flags-arm-mode := -marm -mthumb
check-message := please use LOCAL_ARM_MODE
check-flags-arm-mode = $(call check-flags,$(flags-arm-mode),$(check-message),$1)
# Make sure LOCAL_ARM_MODE is valid
# If not set, use default mode
# Convert to upper case for further use
LOCAL_ARM_MODE := $(call upcase,$(strip $(LOCAL_ARM_MODE)))
ifeq ("$(LOCAL_ARM_MODE)","")
LOCAL_ARM_MODE := $(TARGET_DEFAULT_ARM_MODE)
endif
ifneq ("$(LOCAL_ARM_MODE)","ARM")
ifneq ("$(LOCAL_ARM_MODE)","THUMB")
$(error $(LOCAL_PATH): LOCAL_ARM_MODE is not valid : $(LOCAL_ARM_MODE))
endif
endif
# for diplay :
ifeq ("$(LOCAL_ARM_MODE)","")
DISPLAY_ARM_MODE=
else
DISPLAY_ARM_MODE=$(LOCAL_ARM_MODE)_
endif
## Check that compilation flags do not include forbidden stuff.
check-flags-arm-mode := -marm -mthumb
check-flags = \
$(foreach flags,$1, \
$(if $(findstring $($3),$(flags)), \
$(error $(LOCAL_PATH): $3 contains $(flags) : $2) \
) \
)
# Check that -marm or -mthumb is not forced in compilation flags
flags-arm-mode := -marm -mthumb
check-message := please use LOCAL_ARM_MODE
check-flags-arm-mode = $(call check-flags,$(flags-arm-mode),$(check-message),$1)
$(call check-flags-arm-mode,LOCAL_CFLAGS)
$(call check-flags-arm-mode,LOCAL_CPPFLAGS)
$(call check-flags-arm-mode,LOCAL_EXPORT_CFLAGS)
$(call check-flags-arm-mode,LOCAL_EXPORT_CPPFLAGS)
endif
###############################################################################
@ -311,3 +309,4 @@ $(LOCAL_TARGETS): PRIVATE_ALL_WHOLE_STATIC_LIBRARIES := $(all_whole_static_libra
$(LOCAL_TARGETS): PRIVATE_ALL_EXTERNAL_LIBRARIES := $(all_external_libraries)
$(LOCAL_TARGETS): PRIVATE_ALL_OBJECTS := $(all_objects)

View File

@ -23,7 +23,7 @@ ifneq ("$(shell echo $$OSTYPE | grep msys)","")
HOST_EXE_SUFFIX := .exe
HOST_SHARED_LIB_SUFFIX := .dll
else
HOST_OS := LINUX
HOST_OS := Linux
HOST_EXE_SUFFIX :=
HOST_SHARED_LIB_SUFFIX := .so
endif

View File

@ -5,19 +5,27 @@
##
## Setup warning flags.
###############################################################################
COMMON_FLAGS_WARNINGS :=
GCC_FLAGS_WARNINGS :=
GXX_FLAGS_WARNINGS :=
ifeq ("$(TARGET_OS)","Android")
COMMON_FLAGS_WARNINGS := -DANDROID -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ \
-fpic -ffunction-sections -funwind-tables -fstack-protector \
-Wno-psabi -march=armv5te -mtune=xscale -msoft-float -fno-exceptions -mthumb \
-fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -MMD -MP -MF -D_STLP_USE_SIMPLE_NODE_ALLOC
GCC_FLAGS_WARNINGS :=
GXX_FLAGS_WARNINGS := -fno-rtti -Wa,--noexecstack
else
COMMON_FLAGS_WARNINGS :=
GCC_FLAGS_WARNINGS :=
GXX_FLAGS_WARNINGS :=
endif
# show option associated with warning (gcc >= 4.0.0)
ifneq (0,$(shell expr $(GCC_VERSION) \>= 4.0.0))
COMMON_FLAGS_WARNINGS += -fdiagnostics-show-option
COMMON_FLAGS_WARNINGS += -fdiagnostics-show-option
endif
COMMON_FLAGS_WARNINGS += -Wall
###COMMON_FLAGS_WARNINGS += -Wall
#COMMON_FLAGS_WARNINGS += -Wextra
COMMON_FLAGS_WARNINGS += -Wno-unused -Wno-unused-parameter -Wunused-value -Wunused-variable -Wunused-label
###COMMON_FLAGS_WARNINGS += -Wno-unused -Wno-unused-parameter -Wunused-value -Wunused-variable -Wunused-label
#COMMON_FLAGS_WARNINGS += -Wshadow
#COMMON_FLAGS_WARNINGS += -Wswitch-default
#COMMON_FLAGS_WARNINGS += -Wwrite-strings
@ -38,14 +46,16 @@ COMMON_FLAGS_WARNINGS += -Wno-unused -Wno-unused-parameter -Wunused-value -Wunus
#GXX_FLAGS_WARNINGS += -Wreorder
#GXX_FLAGS_WARNINGS += -Woverloaded-virtual
# gcc >= 4.5.0 (too many false positives with previous versions)
ifneq (0,$(shell expr $(GCC_VERSION) \>= 4.5.0))
#COMMON_FLAGS_WARNINGS += -Wunreachable-code
endif
# gcc >= 4.5.2
ifneq (0,$(shell expr $(GCC_VERSION) \>= 4.5.2))
#COMMON_FLAGS_WARNINGS += -Wlogical-op
ifneq ("$(CLANG)","1")
# gcc >= 4.5.0 (too many false positives with previous versions)
ifneq (0,$(shell expr $(GCC_VERSION) \>= 4.5.0))
COMMON_FLAGS_WARNINGS += -Wunreachable-code
endif
# gcc >= 4.5.2
ifneq (0,$(shell expr $(GCC_VERSION) \>= 4.5.2))
COMMON_FLAGS_WARNINGS += -Wlogical-op
endif
endif
# Extra warnings
@ -63,7 +73,3 @@ endif
GCC_FLAGS_WARNINGS += $(COMMON_FLAGS_WARNINGS)
GXX_FLAGS_WARNINGS += $(COMMON_FLAGS_WARNINGS)
ifeq ("$(DEBUG)","1")
TARGET_GLOBAL_CFLAGS += -g
TARGET_GLOBAL_CPPFLAGS += -g
endif