From 8c9455a2a5febbf48d126bc6f4bf0bab3ff2f2de Mon Sep 17 00:00:00 2001 From: Edouard Dupin Date: Tue, 17 Jul 2012 10:05:20 +0200 Subject: [PATCH] Externalise build system --- .gitmodules | 4 + Build | 1 + Build/Makefile.Android.mk | 66 ---- Build/Makefile.Linux.mk | 37 --- Build/Makefile.mk | 35 -- Build/coreLinux/clearvars.mk | 17 - Build/coreLinux/conf | Bin 78029 -> 0 bytes Build/coreLinux/config.mk | 330 ------------------ Build/coreLinux/defs.mk | 553 ------------------------------- Build/coreLinux/executable.mk | 16 - Build/coreLinux/main.mk | 220 ------------ Build/coreLinux/make-autoconf.sh | 24 -- Build/coreLinux/make-final.py | 141 -------- Build/coreLinux/module.mk | 66 ---- Build/coreLinux/qconf | Bin 272043 -> 0 bytes Build/coreLinux/rules.mk | 307 ----------------- Build/coreLinux/setup.mk | 115 ------- Build/coreLinux/shared.mk | 16 - Build/coreLinux/static.mk | 16 - Build/coreLinux/warnings.mk | 68 ---- 20 files changed, 5 insertions(+), 2027 deletions(-) create mode 100644 .gitmodules create mode 160000 Build delete mode 100644 Build/Makefile.Android.mk delete mode 100644 Build/Makefile.Linux.mk delete mode 100644 Build/Makefile.mk delete mode 100644 Build/coreLinux/clearvars.mk delete mode 100755 Build/coreLinux/conf delete mode 100644 Build/coreLinux/config.mk delete mode 100644 Build/coreLinux/defs.mk delete mode 100644 Build/coreLinux/executable.mk delete mode 100644 Build/coreLinux/main.mk delete mode 100755 Build/coreLinux/make-autoconf.sh delete mode 100755 Build/coreLinux/make-final.py delete mode 100644 Build/coreLinux/module.mk delete mode 100755 Build/coreLinux/qconf delete mode 100644 Build/coreLinux/rules.mk delete mode 100644 Build/coreLinux/setup.mk delete mode 100644 Build/coreLinux/shared.mk delete mode 100644 Build/coreLinux/static.mk delete mode 100644 Build/coreLinux/warnings.mk diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..09cf67f7 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "Build"] + path = Build + url = https://github.com/HeeroYui/Build.git + diff --git a/Build b/Build new file mode 160000 index 00000000..1ddf753a --- /dev/null +++ b/Build @@ -0,0 +1 @@ +Subproject commit 1ddf753af41276f480ed01eb2fb63228e25aeeab diff --git a/Build/Makefile.Android.mk b/Build/Makefile.Android.mk deleted file mode 100644 index 88941688..00000000 --- a/Build/Makefile.Android.mk +++ /dev/null @@ -1,66 +0,0 @@ - - -PROJECT_PACKAGE=$(PROJECT_NAME)package -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 - -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 diff --git a/Build/Makefile.Linux.mk b/Build/Makefile.Linux.mk deleted file mode 100644 index 6d59f3db..00000000 --- a/Build/Makefile.Linux.mk +++ /dev/null @@ -1,37 +0,0 @@ - -USER_PACKAGES += $(EWOL_FOLDER)/Sources/ - -include $(EWOL_FOLDER)/Build/coreLinux/main.mk - - -# http://alp.developpez.com/tutoriels/debian/creer-paquet/ -#package: .encadrer -# @echo 'Create Folders ...' -# @mkdir -p package/$(PROJECT_NAME)/DEBIAN/ -# @mkdir -p package/$(PROJECT_NAME)/usr/bin/ -# @mkdir -p package/$(PROJECT_NAME)/usr/share/doc/ -# @mkdir -p package/$(PROJECT_NAME)/usr/share/edn/ -# # Create the control file -# @echo "Package: "$(PROJECT_NAME) > package/$(PROJECT_NAME)/DEBIAN/control -# @echo "Version: "$(VERSION_TAG_SHORT) >> package/$(PROJECT_NAME)/DEBIAN/control -# @echo "Section: Development,Editors" >> package/$(PROJECT_NAME)/DEBIAN/control -# @echo "Priority: optional" >>package/$(PROJECT_NAME)/DEBIAN/control -# @echo "Architecture: all" >> package/$(PROJECT_NAME)/DEBIAN/control -# @echo "Depends: bash" >> package/$(PROJECT_NAME)/DEBIAN/control -# @echo "Maintainer: Mr DUPIN Edouard " >> package/$(PROJECT_NAME)/DEBIAN/control -# @echo "Description: Text editor for sources code with ctags management" >> package/$(PROJECT_NAME)/DEBIAN/control -# @echo "" >> package/$(PROJECT_NAME)/DEBIAN/control -# # Create the PostRm -# @echo "#!/bin/bash" > package/$(PROJECT_NAME)/DEBIAN/postrm -# @echo "rm ~/."$(PROJECT_NAME) >> package/$(PROJECT_NAME)/DEBIAN/postrm -# @echo "" >> package/$(PROJECT_NAME)/DEBIAN/postrm -# # Enable Execution in script -# @chmod 755 package/$(PROJECT_NAME)/DEBIAN/post* -# @#chmod 755 package/$(PROJECT_NAME)/DEBIAN/pre* -# # copy licence and information : -# @cp README package/$(PROJECT_NAME)/usr/share/doc/README -# @cp licence.txt package/$(PROJECT_NAME)/usr/share/doc/copyright -# @echo "First generation in progress" >> package/$(PROJECT_NAME)/usr/share/doc/changelog -# @cp -vf $(PROJECT_NAME) package/$(PROJECT_NAME)/usr/bin/ -# @cp -vf data/*.xml package/$(PROJECT_NAME)/usr/share/edn/ -# @cd package; dpkg-deb --build $(PROJECT_NAME) diff --git a/Build/Makefile.mk b/Build/Makefile.mk deleted file mode 100644 index 66557ecc..00000000 --- a/Build/Makefile.mk +++ /dev/null @@ -1,35 +0,0 @@ - -############################################################################### -### Platform specificity : ### -############################################################################### -SUPPORTED_PLATFORM=Linux CygWin MacOS IOS Android -DEFAULT_PLATFORM=Linux - -# default platform can be overridden -PLATFORM?=$(DEFAULT_PLATFORM) - -PROJECT_PATH=$(shell pwd) - -PROJECT_MODULE=$(PROJECT_PATH)/../ - -ifeq ($(PLATFORM), Linux) - PROJECT_NDK?=$(realpath $(PROJECT_MODULE)/ewol/) -else ifeq ($(PLATFORM), MacOS) - -else ifeq ($(PLATFORM), IOS) - -else ifeq ($(PLATFORM), CygWin) - -else ifeq ($(PLATFORM), Android) - PROJECT_NDK:=$(PROJECT_MODULE)/android/ndk/ - PROJECT_SDK:=$(PROJECT_MODULE)/android/sdk/ -else - $(error you must specify a corect platform : make PLATFORM=$(SUPPORTED_PLATFORM)) -endif - -# get the compilation date and time : -BUILD_TIME=$(shell date) - -EWOL_FOLDER?=$(realpath $(PROJECT_MODULE)/ewol) - -include $(EWOL_FOLDER)/Build/Makefile.$(PLATFORM).mk diff --git a/Build/coreLinux/clearvars.mk b/Build/coreLinux/clearvars.mk deleted file mode 100644 index 12738a3a..00000000 --- a/Build/coreLinux/clearvars.mk +++ /dev/null @@ -1,17 +0,0 @@ -############################################################################### -## @file clearvars.mk -## @author Y.M. Morgan -## @date 2011/05/14 -## -## Clear out values of all variables used by rule templates. -############################################################################### - -# Do NOT clear LOCAL_PATH, it is set BEFORE including this makefile - -$(call clear-vars, $(filter-out LOCAL_PATH,$(modules-LOCALS:%=LOCAL_%))) - -# Trim MAKEFILE_LIST so that $(call my-dir) doesn't need to -# iterate over thousands of entries every time. -# Leave the current makefile to make sure we don't break anything -# that expects to be able to find the name of the current makefile. -MAKEFILE_LIST := $(lastword $(MAKEFILE_LIST)) diff --git a/Build/coreLinux/conf b/Build/coreLinux/conf deleted file mode 100755 index fbb93730ccb26506306d4982273a56bed90b9c26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78029 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 I;HKjL0k`JYTL1t6 diff --git a/Build/coreLinux/config.mk b/Build/coreLinux/config.mk deleted file mode 100644 index fc7aa79a..00000000 --- a/Build/coreLinux/config.mk +++ /dev/null @@ -1,330 +0,0 @@ -############################################################################### -## @file config.mk -## @author Y.M. Morgan -## @date 2012/07/09 -## -## Configuration management. -############################################################################### - -# Tools (absolute path) -CONF := KCONFIG_NOTIMESTAMP=1 $(call fullpath,$(BUILD_SYSTEM)/conf) -QCONF := KCONFIG_NOTIMESTAMP=1 $(call fullpath,$(BUILD_SYSTEM)/qconf) - -# Directory where original configurations are stored -CONFIG_ORIG_DIR := $(TOP_DIR)/config-ymm - -# File where global configuration is stored -CONFIG_GLOBAL_FILE := $(CONFIG_ORIG_DIR)/global.config - -############################################################################### -## Begin conf/qconf by copying configuration file to a temp .config file. -## $1 : configuration file. -############################################################################### -__begin-conf = \ - __tmpconfdir=$$(mktemp --directory); \ - __tmpconf=$${__tmpconfdir}/.config; \ - if [ -f $1 ]; then \ - cp -pf $1 $${__tmpconf}; \ - fi; - -############################################################################### -## End conf/qconf by copying temp .config file to configuration file. -## $1 : configuration file. -############################################################################### -__end-conf = \ - if [ -f $${__tmpconf} ]; then \ - mv -f $${__tmpconf} $1; \ - fi; \ - rm -rf $${__tmpconfdir}; - -############################################################################### -## Exceute qconf/conf. -## $1 : Config.in file. -## $2 : options. -############################################################################### -__exec-conf = (cd $$(dirname $${__tmpconf}) && $(CONF) $2 $1); -__exec-qconf = (cd $$(dirname $${__tmpconf}) && $(QCONF) $2 $1); - -############################################################################### -## Get the name of the configuration file of a module. -## $1 : module name. -############################################################################### -__get_module-config = $(CONFIG_ORIG_DIR)/$1.config - -############################################################################### -## Get the list of path to Config.in files of a module. -## $1 : module name. -## Remark : should be called only after the module database have been built. -############################################################################### -__get_module-config-in-files = \ - $(eval __path := $(__modules.$1.PATH)) \ - $(eval __files := $(__modules.$1.CONFIG_FILES)) \ - $(addprefix $(__path)/,$(__files)) - -############################################################################### -## Begin the update/check operation by creating a temp diff file. -############################################################################### -__begin-diff = \ - __tmpdiff=$$(mktemp); \ - -############################################################################### -## End the update/check operation. -## $1 : 1 to exit, 0 or empty to continue. -############################################################################### -__end-diff = \ - if [ "$$(stat -c %s $${__tmpdiff})" != "0" ]; then \ - echo "Configuration diff can be found in $${__tmpdiff}"; \ - if [ "$1" == "1" ]; then exit 1; fi; \ - else \ - rm -f $${__tmpdiff}; \ - fi; - -############################################################################### -## Generate Config.in for global configuration. -## $1 : destination file. -############################################################################### -define __generate-config-in-global - rm -f $1; \ - mkdir -p $(dir $1); \ - touch $1; \ - echo "menu Modules" >> $1; \ - $(foreach __mod,$(__modules), \ - $(eval __build := BUILD_$(call get-define,$(__mod))) \ - echo "config $(__build)" >> $1; \ - echo " bool 'Build $(__mod)'" >> $1; \ - echo " default y" >> $1; \ - echo " help" >> $1; \ - echo " Build $(__mod)" >> $1; \ - ) \ - echo "endmenu" >> $1; -endef - -############################################################################### -## Generate Config.in for one module. -## $1 : destination file. -## $2 : module name. -## $3 : list of path to Config.in files. -############################################################################### -define __generate-config-in-module - rm -f $1; \ - mkdir -p $(dir $1); \ - touch $1; \ - echo "menu $2" >> $1; \ - $(if $(strip $3), \ - $(foreach __f,$3, \ - echo "source $(call fullpath,$(__f))" >> $1; \ - ) \ - ) \ - echo "endmenu" >> $1; -endef - -############################################################################### -## Update a configuration automatically. -## $1 Config.in input file. -## $2 current config file. -## $3 update config file (can be the same as $2). -############################################################################### -define __update-config-internal - $(call __begin-conf,$2,) \ - (yes "" | $(call __exec-conf,$1,-o)) > /dev/null; \ - $(call __end-conf,$3) -endef - -############################################################################### -## Update a configuration automatically. -## $1 Config.in input file. -## $2 current config file. -############################################################################### -define __update-config - __tmpcheck=$$(mktemp); \ - $(call __update-config-internal,$1,$2,$${__tmpcheck}) \ - if ! cmp -s $2 $${__tmpcheck}; then \ - cp -pf $${__tmpcheck} $2; \ - echo "Configuration file $2 has been updated"; \ - fi; \ - rm -f $${__tmpcheck}; -endef - -############################################################################### -## Check a configuration. -## $1 Config.in input file. -## $2 current config file. -############################################################################### -define __check-config - __tmpcheck=$$(mktemp); \ - if [ ! -f $2 ]; then \ - echo "Configuration file $2 does not exist" | tee $${__tmpdiff}; \ - else \ - $(call __update-config-internal,$1,$2,$${__tmpcheck}) \ - if ! cmp -s $2 $${__tmpcheck}; then \ - echo "Configuration file $2 is not up to date"; \ - diff -u $2 $${__tmpcheck} >> $${__tmpdiff}; \ - fi; \ - fi; \ - rm -f $${__tmpcheck}; -endef - -############################################################################### -## Load configuration of a module. -############################################################################### - -# Do NOT check the config if a config is explicitely requested -define __load-config-internal -$(eval __config := $(call __get_module-config,$1)) --include $(__config) -ifeq ("$(findstring config,$(MAKECMDGOALS))","") -$(__config): __config-modules-check-$1 -endif -endef - -############################################################################### -## Load configuration of a module. -## Simply evaluate a call to simplify job of caller. -############################################################################### -load-config = $(eval $(call __load-config-internal,$(LOCAL_MODULE))) - -############################################################################### -## Rules. -############################################################################### - -# Update everything -.PHONY: config-update -config-update: config-global-update config-modules-update - -# Check everything -.PHONY: config-check -config-check: config-global-check config-modules-check - -# Display the global configuration -.PHONY: config-global -config-global: - @( \ - __tmpconfigin=$$(mktemp); \ - $(eval __config := $(CONFIG_GLOBAL_FILE)) \ - $(call __generate-config-in-global,$${__tmpconfigin}) \ - $(call __begin-conf,$(__config)) \ - $(call __exec-qconf,$${__tmpconfigin}) \ - $(call __end-conf,$(__config)) \ - rm -f $${__tmpconfigin}; \ - ) - -# Update the global configuration by selecting new option at their default value -.PHONY: config-global-update -config-global-update: - @( \ - __tmpconfigin=$$(mktemp); \ - $(eval __config := $(CONFIG_GLOBAL_FILE)) \ - $(call __generate-config-in-global,$${__tmpconfigin}) \ - $(call __update-config,$${__tmpconfigin},$(__config)) \ - rm -f $${__tmpconfigin}; \ - ) - -# Check the global configuration -.PHONY: config-global-check -config-global-check: - @( \ - __tmpconfigin=$$(mktemp); \ - $(eval __config := $(CONFIG_GLOBAL_FILE)) \ - $(call __generate-config-in-global,$${__tmpconfigin}) \ - $(call __check-config,$${__tmpconfigin},$(__config)) \ - rm -f $${__tmpconfigin}; \ - ) - @echo "Global configuration is up to date"; - -# Update all module configurations by selecting new option at their default value -.PHONY: config-modules-update -config-modules-update: - @( \ - $(foreach __mod,$(__modules), \ - $(eval __config := $(call __get_module-config,$(__mod))) \ - $(eval __files := $(call __get_module-config-in-files,$(__mod))) \ - if [ "$(__files)" != "" ]; then \ - __tmpconfigin=$$(mktemp); \ - $(call __generate-config-in-module,$${__tmpconfigin},$(__mod),$(__files)) \ - $(call __update-config,$${__tmpconfigin},$(__config)) \ - rm -f $${__tmpconfigin}; \ - fi; \ - ) \ - ) - -# Update a specific module configuration by selecting new option at their default value -.PHONY: config-modules-update-% -config-modules-update-%: - @( \ - $(eval __mod := $*) \ - $(eval __config := $(call __get_module-config,$(__mod))) \ - $(eval __files := $(call __get_module-config-in-files,$(__mod))) \ - if [ "$(__files)" != "" ]; then \ - __tmpconfigin=$$(mktemp); \ - $(call __generate-config-in-module,$${__tmpconfigin},$(__mod),$(__files)) \ - $(call __update-config,$${__tmpconfigin},$(__config)) \ - rm -f $${__tmpconfigin}; \ - fi; \ - ) - -# Check if module configurations are OK -.PHONY: config-modules-check -config-modules-check: __config-modules-check - @echo "Modules configuration are up to date"; - -# Internal version with no message -.PHONY: __config-modules-check -__config-modules-check: - @( \ - $(call __begin-diff) \ - $(foreach __mod,$(__modules), \ - $(eval __config := $(call __get_module-config,$(__mod))) \ - $(eval __files := $(call __get_module-config-in-files,$(__mod))) \ - if [ "$(__files)" != "" ]; then \ - __tmpconfigin=$$(mktemp); \ - $(call __generate-config-in-module,$${__tmpconfigin},$(__mod),$(__files)) \ - $(call __check-config,$${__tmpconfigin},$(__config)) \ - rm -f $${__tmpconfigin}; \ - fi; \ - ) \ - $(call __end-diff,1) \ - ) - -# Check if a specific module configuration is OK -.PHONY: config-modules-check-% -config-modules-check-%: __config-modules-check-% - $(eval __mod := $*) - @echo "Configuration of $(__mod) is up to date"; - -# Internal version with no message -.PHONY: __config-modules-check-% -__config-modules-check-%: - @( \ - $(call __begin-diff) \ - $(eval __mod := $*) \ - $(eval __config := $(call __get_module-config,$(__mod))) \ - $(eval __files := $(call __get_module-config-in-files,$(__mod))) \ - if [ "$(__files)" != "" ]; then \ - __tmpconfigin=$$(mktemp); \ - $(call __generate-config-in-module,$${__tmpconfigin},$(__mod),$(__files)) \ - $(call __check-config,$${__tmpconfigin},$(__config)) \ - rm -f $${__tmpconfigin}; \ - fi; \ - $(call __end-diff,1) \ - ) - -# Configure a module specifically -.PHONY: config-modules-% -config-modules-%: - @( \ - $(eval __mod := $*) \ - $(eval __config := $(call __get_module-config,$(__mod))) \ - $(eval __files := $(call __get_module-config-in-files,$(__mod))) \ - if [ "$(__files)" == "" ]; then \ - echo "Nothing to configure for $(__mod)"; \ - else \ - __tmpconfigin=$$(mktemp); \ - $(call __generate-config-in-module,$${__tmpconfigin},$(__mod),$(__files)) \ - $(call __begin-conf,$(__config)) \ - $(call __exec-qconf,$${__tmpconfigin}) \ - $(call __end-conf,$(__config)) \ - rm -f $${__tmpconfigin}; \ - echo "Configuration of $(__mod) saved in $(__config)"; \ - fi; \ - ) - diff --git a/Build/coreLinux/defs.mk b/Build/coreLinux/defs.mk deleted file mode 100644 index 7890cbf0..00000000 --- a/Build/coreLinux/defs.mk +++ /dev/null @@ -1,553 +0,0 @@ -############################################################################### -## @file defs.mk -## @author Y.M. Morgan -## @date 2011/05/14 -## -## This file contains macros used by other makefiles. -############################################################################### - -############################################################################### -## Some useful macros. -############################################################################### -empty := -space := $(empty) $(empty) -space4 := $(space)$(space)$(space)$(space) - -# Return the first element of a list. -# $ 1 : input list. -first = $(firstword $1) - -# Return the list with the first element removed. -# $ 1 : input list. -rest = $(wordlist 2,$(words $1),$1) - -# Get a path relative to top directory. -# $1 : full path to convert. -path-from-top = $(patsubst $(TOP_DIR)%,.%,$1) - -# Translate characters. -# $1 : text to convert. -# $2 : characters to convert from. -# $3 : characters to convert to. -tr = $(shell echo $1 | tr $2 $3) - -# Convert to upper case. -# $1 : text to convert. -upcase = $(shell echo $1 | tr [:lower:] [:upper:]) - -# Convert to lower case. -# $1 : text to convert. -locase = $(shell echo $1 | tr [:upper:] [:lower:]) - -# Replace '-' by '_' and convert to upper case. -# $1 : text to convert. -get-define = $(strip $(call upcase,$(call tr,$1,-,_))) - -# Remove quotes from string -remove-quotes = $(strip $(subst ",,$1)) -#" - -# Check that the current directory is the top directory -check-pwd-is-top-dir = \ - $(if $(patsubst $(TOP_DIR)%,%,$(shell pwd)), \ - $(error Not at the top directory)) - -############################################################################### -## Use some colors if requested. -############################################################################### -ifeq ("$(USE_COLORS)","1") - CLR_DEFAULT := $(shell echo -e "\033[00m") - CLR_RED := $(shell echo -e "\033[31m") - CLR_GREEN := $(shell echo -e "\033[32m") - CLR_YELLOW := $(shell echo -e "\033[33m") - CLR_BLUE := $(shell echo -e "\033[34m") - CLR_PURPLE := $(shell echo -e "\033[35m") - CLR_CYAN := $(shell echo -e "\033[36m") -else - CLR_DEFAULT := - CLR_RED := - CLR_GREEN := - CLR_YELLOW := - CLR_BLUE := - CLR_PURPLE := - CLR_CYAN := -endif - -############################################################################### -## Modules database. -## For each module 'mod', __modules.mod. is used to store -## module-specific information. -############################################################################### -__modules := $(empty) - -############################################################################### -## Clear a list of variables. -############################################################################### -clear-vars = $(foreach __varname,$1,$(eval $(__varname) := $(empty))) - -############################################################################### -## List of LOCAL_XXX variables that can be set by makefiles. -############################################################################### -modules-LOCALS := - -# Path of the root of module -modules-LOCALS += PATH - -# Name of what's supposed to be generated -modules-LOCALS += MODULE - -# Override the name of what will be generated -modules-LOCALS += MODULE_FILENAME - -# Source files to compile -# All files are relative to LOCAL_PATH -modules-LOCALS += SRC_FILES - -# Static libraries that you want to include in your module -# Names of modules in the build system, without path/prefix/suffix -modules-LOCALS += STATIC_LIBRARIES - -# Static libraries that you want to include as a whole in your module -# To generate a .so for ex -# Names of modules in the build system, without path/prefix/suffix -modules-LOCALS += WHOLE_STATIC_LIBRARIES - -# Libraries you directly link against -# Names of modules in the build system, without path/prefix/suffix -modules-LOCALS += SHARED_LIBRARIES - -# External libraries (not built directly by the build system rules) -# Used as dependencies to trigger indirect build. -modules-LOCALS += EXTERNAL_LIBRARIES - -# Additional include directories to pass into the C/C++ compilers -# Format : -I -modules-LOCALS += C_INCLUDES - -# Additional flags to pass into the C or C++ compiler -modules-LOCALS += CFLAGS - -# Additional flags to pass into only the C++ compiler -modules-LOCALS += CPPFLAGS - -# Additional flags to pass into the static library generator -modules-LOCALS += ARFLAGS - -# Additional flags to pass into the linker -modules-LOCALS += LDFLAGS - -# Additional libraries to pass into the linker -# Format : -l -modules-LOCALS += LDLIBS - -# Precompiled file -# Relative to LOCAL_PATH -modules-LOCALS += PRECOMPILED_FILE - -# Arm compilation mode (arm or thumb) -modules-LOCALS += ARM_MODE - -# Paths to config.in files to configure the module -# Relative to LOCAL_PATH -modules-LOCALS += CONFIG_FILES - -# List of prerequisites for all objects -modules-LOCALS += PREREQUISITES - -# Exported stuff (will be added in modules depending on this one) -modules-LOCALS += EXPORT_C_INCLUDES -modules-LOCALS += EXPORT_CFLAGS -modules-LOCALS += EXPORT_CPPFLAGS -modules-LOCALS += EXPORT_LDLIBS -modules-LOCALS += EXPORT_PREREQUISITES - -# Module class : STATIC_LIBRARY SHARED_LIBRARY EXECUTABLE -modules-LOCALS += MODULE_CLASS - -# Other variables used internally -modules-LOCALS += BUILD_MODULE -modules-LOCALS += STAGING_MODULE -modules-LOCALS += DESTDIR -modules-LOCALS += TARGETS - -# the list of managed fields per module -modules-fields := \ - depends \ - $(modules-LOCALS) - -############################################################################### -## Dump all module information. Only use this for debugging. -############################################################################### -modules-dump-database = \ - $(info Modules: $(__modules)) \ - $(foreach __mod,$(__modules), \ - $(info $(space4)$(__mod):) \ - $(foreach __field,$(modules-fields), \ - $(eval __fieldval := $(strip $(__modules.$(__mod).$(__field)))) \ - $(if $(__fieldval), \ - $(if $(filter 1,$(words $(__fieldval))), \ - $(info $(space4)$(space4)$(__field): $(__fieldval)), \ - $(info $(space4)$(space4)$(__field): ) \ - $(foreach __fielditem,$(__fieldval), \ - $(info $(space4)$(space4)$(space4)$(__fielditem)) \ - ) \ - ) \ - ) \ - ) \ - ) \ - $(info --- end of modules list) - -############################################################################### -## Add a module in the build system and save its LOCAL_xxx variables. -## $1 : name of module to add. All LOCAL_xxx variables will be saved in -## module database. -############################################################################### -module-add = \ - $(eval __modules += $1) \ - $(foreach __local,$(modules-LOCALS), \ - $(eval __modules.$1.$(__local) := $(LOCAL_$(__local))) \ - ) - -############################################################################### -## Restore the recorded LOCAL_XXX definitions for a given module. Called -## for each module once they have all been registered and their dependencies -## have been computed to actually define rules. -## $1 : name of module to restore. -############################################################################### -module-restore-locals = \ - $(foreach __local,$(modules-LOCALS), \ - $(eval LOCAL_$(__local) := $(__modules.$1.$(__local))) \ - ) - -############################################################################### -## Used to recompute all dependencies once all module information has been -## recorded. -############################################################################### - -# Compute dependencies of all modules -modules-compute-dependencies = \ - $(foreach __mod,$(__modules), \ - $(eval __modules.$(__mod).depends := ) \ - $(call __module-compute-depends,$(__mod)) \ - ) - -# Compute dependencies of a single module -# $1 : module name. -__module-compute-depends = \ - $(call __module-add-depends,$1,$(__modules.$1.STATIC_LIBRARIES)) \ - $(call __module-add-depends,$1,$(__modules.$1.WHOLE_STATIC_LIBRARIES)) \ - $(call __module-add-depends,$1,$(__modules.$1.SHARED_LIBRARIES)) \ - $(call __module-add-depends,$1,$(__modules.$1.EXTERNAL_LIBRARIES)) - -# Add dependencies to a module -# $1 : module name. -# $2 : list of modules to add in dependency list. -__module-add-depends = \ - $(eval __modules.$1.depends += $(filter-out $(__modules.$1.depends),$2)) - -############################################################################### -## Automatic extraction from dependencies of a module. -############################################################################### - -# Return the recorded value of LOCAL_EXPORT_$2, if any, for module $1. -# $1 : module name. -# $2 : export variable name without LOCAL_EXPORT_ prefix (e.g. 'CFLAGS'). -module-get-export = $(__modules.$1.EXPORT_$2) - -# Return the recorded value of LOCAL_EXPORT_$2, if any, for modules listed in $1. -# $1 : list of module names. -# $2 : export variable name without LOCAL_EXPORT_ prefix (e.g. 'CFLAGS'). -module-get-listed-export = \ - $(strip $(foreach __mod,$1, \ - $(call module-get-export,$(__mod),$2) \ - )) - -# Return the autoconf.h file, if any, for module $1. -# $1 : module name. -module-get-autoconf = \ - $(if $(__modules.$1.CONFIG_FILES),$(TARGET_OUT_BUILD)/$1/autoconf-$1.h) - -# Return the autoconf.h files, if any, for modules listed in $1. -# $1 : list of module names. -module-get-listed-autoconf = \ - $(strip $(foreach __mod,$1, \ - $(call module-get-autoconf,$(__mod)) \ - )) - -############################################################################### -## Dependecy management -############################################################################### - -# Return list all the modules $1 depends on transitively. -# $1 : list of module names. -# $2 : local module type (e.g. SHARED_LIBRARIES). -module-get-depends = $(strip $(call __modules-get-closure,$1,$2)) - -# Return list of all the modules $1 depends on transitively. -# $1: list of module names. -module-get-all-dependencies = \ - $(strip $(call __modules-get-closure,$1,depends)) - -# Recursively get dependency of a modules -__modules-get-closure = \ - $(eval __closure_deps := $(strip $1)) \ - $(if $(__closure_deps), \ - $(eval __closure_wq := $(__closure_deps)) \ - $(eval __closure_field := $(strip $2)) \ - $(call __modules-closure)) \ - $(__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)) \ - -############################################################################### -## Get path of module main target file (in build or staging directory). -## $1 : module name. -############################################################################### -module-get-build-dir = \ - $(TARGET_OUT_BUILD)/$1 - -module-get-build-filename = \ - $(TARGET_OUT_BUILD)/$1/$(__modules.$1.MODULE_FILENAME) - -module-get-staging-filename = \ - $(TARGET_OUT_STAGING)/$(__modules.$1.DESTDIR)/$(__modules.$1.MODULE_FILENAME) - -############################################################################### -## Generate autoconf.h file from config file. -## $1 : input config file. -## $2 : output autoconf.h file. -## -## Remove CONFIG_ prefix. -## Remove CONFIG_ in commented lines. -## Put lines begining with '#' between '/*' '*/'. -## Replace 'key=value' by '#define key value'. -## Replace leading ' y' by ' 1'. -## Remove leading and trailing quotes from string. -## Replace '\"' by '"'. -############################################################################### -define generate-autoconf-file - echo "Generating $(call path-from-top,$2) from $(call path-from-top,$1)"; \ - mkdir -p $(dir $2); \ - sed \ - -e 's/^CONFIG_//' \ - -e 's/^\# CONFIG_/\# /' \ - -e 's/^\#\(.*\)/\/*\1 *\//' \ - -e 's/\(.*\)=\(.*\)/\#define \1 \2/' \ - -e 's/ y$$/ 1/' \ - -e 's/\"\(.*\)\"/\1/' \ - -e 's/\\\"/\"/g' \ - $1 > $2; -endef - -############################################################################### -## Print some banners. -## $1 : operation. -## $2 : module. -## $3 : file. -############################################################################### - -CLR_TOOL := $(CLR_PURPLE) -CLR_MODULE := $(CLR_CYAN) -CLR_FILE := $(CLR_YELLOW) - -print-banner1 = \ - @echo "$(CLR_TOOL)$1:$(CLR_DEFAULT) $(CLR_MODULE)$2$(CLR_DEFAULT) <= $(CLR_FILE)$3$(CLR_DEFAULT)" - -print-banner2 = \ - @echo "$(CLR_TOOL)$1:$(CLR_DEFAULT) $(CLR_MODULE)$2$(CLR_DEFAULT) => $(CLR_FILE)$3$(CLR_DEFAULT)" - -############################################################################### -## Commands for running gcc to generate a precompiled file. -############################################################################### - -define transform-h-to-gch -@mkdir -p $(dir $@) -$(call print-banner1,"Precompile",$(PRIVATE_MODULE),$(call path-from-top,$<)) -$(call check-pwd-is-top-dir) -$(Q)$(CCACHE) $(GXX) \ - $(TARGET_GLOBAL_C_INCLUDES) $(PRIVATE_C_INCLUDES) \ - $(TARGET_GLOBAL_CFLAGS) $(TARGET_GLOBAL_CPPFLAGS) $(GXX_FLAGS_WARNINGS) \ - $(PRIVATE_CFLAGS) $(PRIVATE_CPPFLAGS) \ - $(TARGET_PCH_FLAGS) -MMD -MP -o $@ \ - $(call path-from-top,$<) -endef - -############################################################################### -## Commands for running gcc to compile a C++ file. -############################################################################### - -define transform-cpp-to-o -@mkdir -p $(dir $@) -$(call print-banner1,"$(PRIVATE_ARM_MODE) CPP",$(PRIVATE_MODULE),$(call path-from-top,$<)) -$(call check-pwd-is-top-dir) -$(Q)$(CCACHE) $(GXX) \ - $(TARGET_GLOBAL_C_INCLUDES) $(PRIVATE_C_INCLUDES) \ - $(TARGET_GLOBAL_CFLAGS_$(PRIVATE_ARM_MODE)) \ - $(TARGET_GLOBAL_CFLAGS) $(TARGET_GLOBAL_CPPFLAGS) $(GXX_FLAGS_WARNINGS) \ - $(PRIVATE_CFLAGS) $(PRIVATE_CPPFLAGS) \ - -c -MMD -MP -o $@ \ - $(call path-from-top,$<) -endef - -############################################################################### -## Commands for running gcc to compile a C file. -############################################################################### - -define transform-c-to-o -$(call print-banner1,"$(PRIVATE_ARM_MODE) C",$(PRIVATE_MODULE),$(call path-from-top,$<)) -$(call check-pwd-is-top-dir) -@mkdir -p $(dir $@) -$(Q)$(CCACHE) $(GCC) \ - $(TARGET_GLOBAL_C_INCLUDES) $(PRIVATE_C_INCLUDES) \ - $(TARGET_GLOBAL_CFLAGS_$(PRIVATE_ARM_MODE)) \ - $(TARGET_GLOBAL_CFLAGS) $(GCC_FLAGS_WARNINGS) \ - $(PRIVATE_CFLAGS) \ - -c -MMD -MP -o $@ \ - $(call path-from-top,$<) -endef - -############################################################################### -## Commands for running gcc to compile a S file. -############################################################################### - -define transform-s-to-o -$(call print-banner1,"ASM",$(PRIVATE_MODULE),$(call path-from-top,$<)) -$(call check-pwd-is-top-dir) -@mkdir -p $(dir $@) -$(Q)$(CCACHE) $(GCC) \ - $(TARGET_GLOBAL_C_INCLUDES) $(PRIVATE_C_INCLUDES) \ - $(TARGET_GLOBAL_CFLAGS_$(PRIVATE_ARM_MODE)) \ - $(TARGET_GLOBAL_CFLAGS) $(GCC_FLAGS_WARNINGS) \ - $(PRIVATE_CFLAGS) \ - -c -MMD -MP -o $@ \ - $(call path-from-top,$<) -endef - -############################################################################### -## Commands for running ar. -############################################################################### - -# Explicitly delete the archive first so that ar doesn't -# try to add to an existing archive. -define transform-o-to-static-lib -@mkdir -p $(dir $@) -$(call print-banner2,"StaticLib",$(PRIVATE_MODULE),$(call path-from-top,$@)) -$(call check-pwd-is-top-dir) -@rm -f $@ -$(Q)$(AR) $(TARGET_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@ $(PRIVATE_ALL_OBJECTS) -endef - -############################################################################### -## Commands for running gcc to link a shared library. -############################################################################### - -define transform-o-to-shared-lib -@mkdir -p $(dir $@) -$(call print-banner2,"SharedLib",$(PRIVATE_MODULE),$(call path-from-top,$@)) -$(call check-pwd-is-top-dir) -$(Q)$(GXX) \ - $(TARGET_GLOBAL_LDFLAGS_SHARED) \ - -Wl,-Map -Wl,$(basename $@).map \ - -shared \ - -Wl,-soname -Wl,$(notdir $@) \ - -Wl,--no-undefined \ - $(PRIVATE_LDFLAGS) \ - $(PRIVATE_ALL_OBJECTS) \ - -Wl,--whole-archive \ - $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \ - -Wl,--no-whole-archive \ - -Wl,--as-needed \ - $(PRIVATE_ALL_STATIC_LIBRARIES) \ - $(PRIVATE_ALL_SHARED_LIBRARIES) \ - -o $@ \ - $(PRIVATE_LDLIBS) \ - $(TARGET_GLOBAL_LDLIBS_SHARED) -endef - -############################################################################### -## Commands for running gcc to link an executable. -############################################################################### - -define transform-o-to-executable -@mkdir -p $(dir $@) -$(call print-banner2,"Executable",$(PRIVATE_MODULE),$(call path-from-top,$@)) -$(call check-pwd-is-top-dir) -$(Q)$(GXX) \ - $(TARGET_GLOBAL_LDFLAGS) \ - -Wl,-Map -Wl,$(basename $@).map \ - -Wl,-rpath-link=$(TARGET_OUT_STAGING)/lib \ - -Wl,-rpath-link=$(TARGET_OUT_STAGING)/usr/lib \ - $(PRIVATE_LDFLAGS) \ - $(PRIVATE_ALL_OBJECTS) \ - -Wl,--whole-archive \ - $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \ - -Wl,--no-whole-archive \ - -Wl,--as-needed \ - $(PRIVATE_ALL_STATIC_LIBRARIES) \ - $(PRIVATE_ALL_SHARED_LIBRARIES) \ - -o $@ \ - $(PRIVATE_LDLIBS) \ - $(TARGET_GLOBAL_LDLIBS) -endef - -############################################################################### -## Commands for copying files. -############################################################################### - -# Copy a single file from one place to another, preserving permissions and -# overwriting any existing file. -define copy-file-to-target -@mkdir -p $(dir $@) -$(Q)cp -fp $< $@ -endef - -# Define a rule to copy a file. For use via $(eval). -# $(1) : source file -# $(2) : destination file -define copy-one-file -$(2): $(1) - @echo "$(CLR_TOOL)Copy: $(CLR_FILE)$$(call path-from-top,$$@)$(CLR_DEFAULT)" - $$(copy-file-to-target) -endef - -############################################################################### -## Default rules for a module. -## $1 : module name. -############################################################################### - -define def-rules - -.PHONY: $1 -$1: $(call module-get-build-filename,$1) - -.PHONY: clean-$1 -clean-$1: - @rm -f $(call module-get-build-filename,$1) - @rm -rf $(call module-get-build-dir,$1) - -endef - -############################################################################### -## Commands callable from user makefiles. -############################################################################### - -# Get local path -local-get-path = $(call my-dir) - -# Get build directory -local-get-build-dir = $(call module-get-build-dir,$(LOCAL_MODULE)) - -# Register module -local-add-module = \ - $(call module-add,$(LOCAL_MODULE)) \ - $(eval $(call def-rules,$(LOCAL_MODULE))) \ No newline at end of file diff --git a/Build/coreLinux/executable.mk b/Build/coreLinux/executable.mk deleted file mode 100644 index 8e9825b4..00000000 --- a/Build/coreLinux/executable.mk +++ /dev/null @@ -1,16 +0,0 @@ -############################################################################### -## @file executable.mk -## @author Y.M. Morgan -## @date 2011/05/14 -## -## Build an executable. -############################################################################### - -LOCAL_MODULE_CLASS := EXECUTABLE -LOCAL_DESTDIR := usr/bin - -ifndef LOCAL_MODULE_FILENAME -LOCAL_MODULE_FILENAME := $(LOCAL_MODULE)$(TARGET_EXE_SUFFIX) -endif - -$(call module-add,$(LOCAL_MODULE)) diff --git a/Build/coreLinux/main.mk b/Build/coreLinux/main.mk deleted file mode 100644 index dad8cdc9..00000000 --- a/Build/coreLinux/main.mk +++ /dev/null @@ -1,220 +0,0 @@ -############################################################################### -## @file main.mk -## @author Y.M. Morgan -## @date 2011/05/14 -## -## Main Makefile. -############################################################################### - -############################################################################### -## General setup. -############################################################################### - -# Make sure SHELL is correctly set -SHELL := /bin/bash - -# Turns off suffix rules built into make -.SUFFIXES: - -# Tools for target -GCC ?= $(CROSS)gcc -GXX ?= $(CROSS)g++ -AR ?= $(CROSS)ar -LD ?= $(CROSS)ld -NM ?= $(CROSS)nm -STRIP ?= $(CROSS)strip - -# Tools for host -HOST_GCC ?= gcc -HOST_GXX ?= g++ -HOST_AR ?= ar -HOST_LD ?= ld -HOST_STRIP ?= strip - -# Overridable settings -V := 0 -W := 0 -DEBUG := 0 -USE_CLANG := 0 -USE_CCACHE := 0 - -# Quiet command if V is 0 -ifeq ("$(V)","0") - Q := @ -endif - -# This is the default target. It must be the first declared target. -all: - -# Target global variables -TARGET_GLOBAL_C_INCLUDES ?= -TARGET_GLOBAL_CFLAGS ?= -TARGET_GLOBAL_CPPFLAGS ?= -TARGET_GLOBAL_RCFLAGS ?= -TARGET_GLOBAL_ARFLAGS ?= rcs -TARGET_GLOBAL_LDFLAGS ?= -TARGET_GLOBAL_LDFLAGS_SHARED ?= -TARGET_GLOBAL_LDLIBS ?= -TARGET_GLOBAL_LDLIBS_SHARED ?= -TARGET_PCH_FLAGS ?= -TARGET_DEFAULT_ARM_MODE ?= THUMB -TARGET_GLOBAL_CFLAGS_ARM ?= -TARGET_GLOBAL_CFLAGS_THUMB ?= - -############################################################################### -## The folowing 2 macros can NOT be put in defs.mk as it will be included -## only after. -############################################################################### - -# Get full path. -# $1 : path to extend. -fullpath = $(shell readlink -m -n $1) - -# Figure out where we are -# It returns the full path without trailing '/' -my-dir = $(call fullpath,$(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST))))) - -############################################################################### -## Build system setup. -############################################################################### - -# Directories (full path) -TOP_DIR := $(shell pwd) -BUILD_SYSTEM := $(call my-dir) - -# Setup configuration -include $(BUILD_SYSTEM)/setup.mk - -# Setup macros definitions -include $(BUILD_SYSTEM)/defs.mk - -# Setup warnings flags -include $(BUILD_SYSTEM)/warnings.mk - -# Load configuration -include $(BUILD_SYSTEM)/config.mk - -# Names of makefiles that can be included by user Makefiles -CLEAR_VARS := $(BUILD_SYSTEM)/clearvars.mk -BUILD_STATIC_LIBRARY := $(BUILD_SYSTEM)/static.mk -BUILD_SHARED_LIBRARY := $(BUILD_SYSTEM)/shared.mk -BUILD_EXECUTABLE := $(BUILD_SYSTEM)/executable.mk -RULES := $(BUILD_SYSTEM)/rules.mk - -############################################################################### -## Makefile scan and includes. -############################################################################### -ifeq ("$(DEBUG)","1") - BUILD_DIRECTORY_MODE := debug -else - BUILD_DIRECTORY_MODE := release -endif - -TARGET_OUT_BUILD ?= $(shell pwd)/out_$(TARGET_OS)/$(BUILD_DIRECTORY_MODE)/obj -TARGET_OUT_STAGING ?= $(shell pwd)/out_$(TARGET_OS)/$(BUILD_DIRECTORY_MODE)/obj -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 -USER_MAKEFILES:=$(TARGET_OUT_BUILD)/makefiles.mk - -# Include makefile containing all available makefile -# If it does not exists, it will trigger its creation -ifeq ("$(findstring $(SCAN_TARGET),$(MAKECMDGOALS))","") -include $(USER_MAKEFILES) -endif -$(info mydir="$(my-dir)") -$(info pwd="$(shell pwd)") -$(info TOP_DIR="$(TOP_DIR)") -$(info USER_PACKAGES="$(USER_PACKAGES)") -# Create a file that will contain all user makefiles available -define create-user-makefiles-file - rm -f $(USER_MAKEFILES); \ - mkdir -p $(dir $(USER_MAKEFILES)); \ - touch $(USER_MAKEFILES); \ - echo "Scanning $(TOP_DIR) for makefiles..."; \ - for f in `find $(USER_PACKAGES) -name $(USER_MAKEFILE_NAME)`; do \ - echo "$$f"; \ - echo "include $$f" >> $(USER_MAKEFILES); \ - done; -endef - -# Rule that will trigger creation of list of makefiles when needed -$(USER_MAKEFILES): - @$(create-user-makefiles-file) - -# Rule to force creation of list of makefiles -.PHONY: $(SCAN_TARGET) -$(SCAN_TARGET): - @$(create-user-makefiles-file) - -############################################################################### -# Module dependencies generation. -############################################################################### - -# Recompute all dependencies between modules -$(call modules-compute-dependencies) - -# Now, really build the modules, the second pass allows to deal with exported values -$(foreach __mod,$(__modules), \ - $(eval LOCAL_MODULE := $(__mod)) \ - $(eval include $(BUILD_SYSTEM)/module.mk) \ -) - -############################################################################### -# Rule to merge autoconf.h files. -############################################################################### - -# List of all available autoconf.h files -__autoconf-list := $(foreach __mod,$(__modules),$(call module-get-autoconf,$(__mod))) - -# Concatenate all in one -AUTOCONF_MERGE_FILE := $(TARGET_OUT_BUILD)/autoconf-merge.h -$(AUTOCONF_MERGE_FILE): $(__autoconf-list) - @echo "Generating autoconf-merge.h" - @mkdir -p $(dir $@) - @rm -f $@ - @for f in $^; do cat $$f >> $@; done - -############################################################################### -# Main rules. -############################################################################### - -.PHONY: all -all: $(foreach __mod,$(__modules),$(__mod)) $(AUTOCONF_MERGE_FILE) - -.PHONY: clean -clean: $(foreach __mod,$(__modules),clean-$(__mod)) - @rm -f $(AUTOCONF_MERGE_FILE) - @rm -f $(USER_MAKEFILES) - -# Generate final tree -.PHONY: final -final: all - @echo "Generating final tree..." - @$(BUILD_SYSTEM)/make-final.py \ - --strip="$(STRIP)" \ - $(TARGET_OUT_STAGING) $(TARGET_OUT_FINAL) - @echo "Done generating final tree" - -# Dump the module database for debuging the build system -.PHONY: dump -dump: - $(call modules-dump-database) - -############################################################################### -# Display configuration. -############################################################################### -msg = $(info $(CLR_CYAN)$1$(CLR_DEFAULT)) -$(info ----------------------------------------------------------------------) -$(call msg, + HOST_OS = $(HOST_OS)) -$(call msg, + TARGET_OS = $(TARGET_OS)) -$(call msg, + TARGET_ARCH = $(TARGET_ARCH)) -$(call msg, + TARGET_OUT_BUILD = $(TARGET_OUT_BUILD)) -$(call msg, + TARGET_OUT_STAGING = $(TARGET_OUT_STAGING)) -$(call msg, + TARGET_OUT_FINAL = $(TARGET_OUT_FINAL)) -$(call msg, + GCC_PATH = $(GCC_PATH)) -$(call msg, + GCC_VERSION = $(GCC_VERSION)) -$(info ----------------------------------------------------------------------) diff --git a/Build/coreLinux/make-autoconf.sh b/Build/coreLinux/make-autoconf.sh deleted file mode 100755 index 462a555a..00000000 --- a/Build/coreLinux/make-autoconf.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -if [ "$#" != "2" ]; then - echo "Usage : $0 " - exit 1 -fi - -# Remove CONFIG_ prefix -# Put lines beginig with '#' between '/*' '*/' -# Replace 'key=value' by '#define key value' -# Replace leading ' y' by ' 1' -# Remove leading and trailing quotes from string -# Replace '\"' by '"' -sed \ - -e 's/^CONFIG_//' \ - -e 's/^# CONFIG_/# /' \ - -e "s/^#\(.*\)/\/*\1 *\//" \ - -e 's/\(.*\)=\(.*\)/#define \1 \2 /' \ - -e 's/ y$/ 1/' \ - -e 's/\"\(.*\)\"/\1/' \ - -e 's/\\\"/\"/g' \ - $1 > $2 - - diff --git a/Build/coreLinux/make-final.py b/Build/coreLinux/make-final.py deleted file mode 100755 index 965ad157..00000000 --- a/Build/coreLinux/make-final.py +++ /dev/null @@ -1,141 +0,0 @@ -#!/usr/bin/env python -# -# @file make-final.py -# @author Y.M. Morgan -# @date 2012/07/09 -# -# Generate the final directory by copying files from staging directories -# - -import sys, os, logging -import optparse -import shutil - -#=============================================================================== -# Global variables. -#=============================================================================== - -# Directories to exclude -EXCLUDE_DIRS = ["include", "man"] - -# Extension to exclude -EXCLUDE_FILTERS = [".a", ".la"] - -#=============================================================================== -# Determine if a file is an executable. -#=============================================================================== -def isExec(filePath): - result = False - try: - file = open(filePath, "r") - header = str(file.read(4)) - if header.find("ELF") >= 0: - result = True - file.close() - except IOError as ex: - logging.error("Unable to open %s ([err=%d] %s)", - filePath, ex.errno, ex.strerror) - return result - -#=============================================================================== -# Main function. -#=============================================================================== -def main(): - (options, args) = parseArgs() - setupLog(options) - - # get parameters - stagingDir = args[0] - finalDir = args[1] - logging.info("staging-dir : %s", stagingDir) - logging.info("final-dir : %s", finalDir) - - # check that staging directory exists - if not os.path.isdir(stagingDir): - logging.error("%s is not a directory", stagingDir) - - # browse staging directory - for (dirPath, dirNames, fileNames) in os.walk(stagingDir): - # exclude some directories - for dirName in EXCLUDE_DIRS: - if dirName in dirNames: - logging.debug("Exclude directory : %s", - os.path.relpath(os.path.join(dirPath, dirName), stagingDir)) - dirNames.remove(dirName) - for fileName in fileNames: - # skip dome extensions - srcFileName = os.path.join(dirPath, fileName) - relPath = os.path.relpath(srcFileName, stagingDir) - if os.path.splitext(srcFileName)[1] in EXCLUDE_FILTERS: - logging.debug("Exclude file : %s", relPath) - continue - logging.info("File : %s", relPath) - # destination - dstFileName = os.path.join(finalDir, relPath) - dstDirName = os.path.split(dstFileName)[0] - if not os.path.exists(dstDirName): - os.makedirs(dstDirName, 0755) - # copy and strip executables - if isExec(srcFileName): - os.system("%s -o %s %s" % (options.strip, dstFileName, srcFileName)) - else: - shutil.copy2(srcFileName, dstFileName) - -#=============================================================================== -# Setup option parser and parse command line. -#=============================================================================== -def parseArgs(): - usage = "usage: %prog [options] " - parser = optparse.OptionParser(usage = usage) - parser.add_option("--strip", - dest="strip", - default=None, - help="strip program to use to remove symbols") - parser.add_option("-q", - dest="quiet", - action="store_true", - default=False, - help="be quiet") - parser.add_option("-v", - dest="verbose", - action="count", - default=0, - help="verbose output (more verbose if specified twice)") - - (options, args) = parser.parse_args() - if len(args) > 2: - parser.error("Too many parameters") - elif len(args) < 2: - parser.error("Not enough parameters") - if options.strip == None: - parser.error("Missing strip option") - return (options, args) - -#=============================================================================== -# Setup logging system. -#=============================================================================== -def setupLog(options): - logging.basicConfig( - level=logging.WARNING, - format="[%(levelname)s] %(message)s", - stream=sys.stderr) - logging.addLevelName(logging.CRITICAL, "C") - logging.addLevelName(logging.ERROR, "E") - logging.addLevelName(logging.WARNING, "W") - logging.addLevelName(logging.INFO, "I") - logging.addLevelName(logging.DEBUG, "D") - - # setup log level - if options.quiet == True: - logging.getLogger().setLevel(logging.CRITICAL) - elif options.verbose >= 2: - logging.getLogger().setLevel(logging.DEBUG) - elif options.verbose >= 1: - logging.getLogger().setLevel(logging.INFO) - -#=============================================================================== -# Entry point. -#=============================================================================== -if __name__ == "__main__": - main() - diff --git a/Build/coreLinux/module.mk b/Build/coreLinux/module.mk deleted file mode 100644 index d0d2b35a..00000000 --- a/Build/coreLinux/module.mk +++ /dev/null @@ -1,66 +0,0 @@ -############################################################################### -## @file module.mk -## @author Y.M. Morgan -## @date 2012/04/17 -## -## Build a module. -############################################################################### - -# Bring back all LOCAL_XXX variables defined by LOCAL_MODULE -$(call module-restore-locals,$(LOCAL_MODULE)) - -copy_to_staging := 0 - -############################################################################### -## Static library. -############################################################################### - -ifeq ("$(LOCAL_MODULE_CLASS)","STATIC_LIBRARY") - -include $(RULES) - -$(LOCAL_BUILD_MODULE): $(all_objects) - $(transform-o-to-static-lib) - -copy_to_staging := 1 - -endif - -############################################################################### -## Shared library. -############################################################################### - -ifeq ("$(LOCAL_MODULE_CLASS)","SHARED_LIBRARY") - -include $(RULES) - -$(LOCAL_BUILD_MODULE): $(all_objects) $(all_libraries) - $(transform-o-to-shared-lib) - -copy_to_staging := 1 - -endif - -############################################################################### -## Executable. -############################################################################### - -ifeq ("$(LOCAL_MODULE_CLASS)","EXECUTABLE") - -include $(RULES) - -$(LOCAL_BUILD_MODULE): $(all_objects) $(all_libraries) - $(transform-o-to-executable) - -copy_to_staging := 1 - -endif - -############################################################################### -## Copy to staging dir -############################################################################### - -ifeq ("$(copy_to_staging)","1") -$(eval $(call copy-one-file,$(LOCAL_BUILD_MODULE),$(LOCAL_STAGING_MODULE))) -endif - diff --git a/Build/coreLinux/qconf b/Build/coreLinux/qconf deleted file mode 100755 index 9309ef40a739c51522ebac199864132ad824a73c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272043 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 t^hy9vh6miFl&^cs;*&U-LE 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

LZdP} zvFbZ!k=FD(rx>MiuxD+HopJ2dI8K8YM^JG2CRRzBBb{bhwqQrrdUVI=Ji>xBkaxa^ zd~7$0QAgrXK-K3FtRsD1J2&7AE75z+<?@j;(HLsSth&H8 z{dv~1K}8Fe5C|7EA%#;=cF}`yV>MYcZo3Ht^BhSxN%blu}%gU;ssidwsASsrc zxeNF}+EA;l6(2PqzD9P$7h_!}X>o%#2{7506U8z&M%yA%Tq4(=O@dkRxw~ z?u>wA7=GAgSsE9m*IO0zy_5Tsyd${t!Rgs4-qNM+F+F*9Pc7&zEhl{{-*d+tGCy_BRCQC8v#$=(Ga_vmZ^MQ-XVat)6j4pMI% zbdI7^#{(fOM;$k*I!;Pn;1ORXr$ncCj_O&?d5BKML&Tlplww6fyqMBwPcD1kzP7rPn;{NvSk@*8W|f7G@wZjPBtH`*{2jaW zLhns2^-2%Dl|I=I46YJt~wByQSv*kM4 zYSK{dV$Q(CCRkdg&En0PGObA?#segFuk%`3U2g!H!D1ELW#NS=;m9UU`U5^3bb?f3 z*erf=P9622U34ln1Up7uBNj#)Z)Csm&ZHD8(8cS}j_@ow*~JO%PDWYW>|=2jaL@>O zYCO)JsVU;S30b#wk~87mDE7_Y8oMi}Bp;cwFn(;}^l|oT;cFY6-=5l*CxWIh{$M(x zQ;}`-)M4L_b_WM-phq}J56j=MWu4d}Ut%%Zs2!(H3(B%H_d!m0#kEGJQVDJ2C{ARq zmfkodrel%TX`E<9wnvWLDtD?rK_@eC&GtcR;5g6pNWl)R~#yWh$7Orij|Z!+SXBL2-qSS8?8h2O3E4uY1vlUt0|t3 z#nFS}`6#lQ+%V9kkz}7nVX!TS0|g^qlKGRGc;lk<&dg3raMOUgGRl1DB%KtCXf0Q( z1xA_(Y+(%(EMMnDCpX7i|Dy|NZO%w?k42n<%vACc55HflWwtlmOHLaKuKmWyNl z;B+xmDKl}*Juqxa2@;hRljNR~vyQq{@#MRNX(#4&x_}*Nog1r=@;!u{TX@ zKacDpB6ielc!)_7AH;BTZ}P;zNIya7QuTx*N8kjpwZYrH`lK*1oO!!>6dcUp0x)!HR z@!9sg9Ns?0J#*#iu5z>unOa(Z)wxhP7}2N|V$l_sd2^gq|5PVhh8qY1X5^fMgqz1A zmQK9~#O$O?JI;{?$=puG)vM0v$E3x(c0AC7>}caW3a&pEy$%)=A48TH`K{yZoAzcv z-@?%W&XRLe(m};I6BO(Ia)$x%!NjhhkksLJI*U1*l1y~bk@><;-ErqC9;FUyYw)bsmD6Af2ipwHzFOc&*<0y#WG zy(6MrMby-bf)i~S?Nbr%kysOlQ>X4ZP~|}Vh+QwZNwOV*e3Xga1duw5`oXMLmkoH~ zSGjk5g<^EhCW)f`GG?=M1}toOtx6Ye;QNu#?hdIAjGMAYnzKzyvl#Xd7s}Py5%$C- zJcS23BE+RlY>kwzX&ZfSc4e5S~~T3Y%#W}7-rBxy2SLikONnCv+E0&1A<_m6h4 zN(-cC{tnxZEb4+f(0OOeurjtF60^YUA}2lakszY@DT(wJ9oQWmJ48IMcuJ%l1#V30j*iXegIid?-qK{V3={5s1}eOMOe0a=_XNCkp(pq$G(_CzZb%SvA34NE=C@ z;gSgNmuZ{O7{y(>9*`5FZ diff --git a/Build/coreLinux/rules.mk b/Build/coreLinux/rules.mk deleted file mode 100644 index 2a5d1b87..00000000 --- a/Build/coreLinux/rules.mk +++ /dev/null @@ -1,307 +0,0 @@ -############################################################################### -## @file rules.mk -## @author Y.M. Morgan -## @date 2011/05/14 -## -## Generate rules for building an executable or library. -############################################################################### - -# Make sure LOCAL_MODULE is defined and not empty -LOCAL_MODULE := $(strip $(LOCAL_MODULE)) -ifeq ("$(LOCAL_MODULE)","") - $(error $(LOCAL_PATH): LOCAL_MODULE is not defined) -endif - -# Intermediate/Build directory -build_dir := $(TARGET_OUT_BUILD)/$(LOCAL_MODULE) - -# Full path to build module -LOCAL_BUILD_MODULE := $(call module-get-build-filename,$(LOCAL_MODULE)) - -# Full path to staging module -LOCAL_STAGING_MODULE := $(call module-get-staging-filename,$(LOCAL_MODULE)) - -# Assemble the list of targets to create PRIVATE_ variables for. -LOCAL_TARGETS += $(LOCAL_BUILD_MODULE) - -# Prepend some directories in include list -LOCAL_C_INCLUDES := -I$(build_dir) -I$(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 - -## 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 - -############################################################################### -## List of sources, objects and libraries. -############################################################################### - -cpp_sources := $(filter %.cpp,$(LOCAL_SRC_FILES)) -cpp_objects := $(addprefix $(build_dir)/,$(cpp_sources:.cpp=.o)) - -cxx_sources := $(filter %.cxx,$(LOCAL_SRC_FILES)) -cxx_objects := $(addprefix $(build_dir)/,$(cxx_sources:.cxx=.o)) - -c_sources := $(filter %.c,$(LOCAL_SRC_FILES)) -c_objects := $(addprefix $(build_dir)/,$(c_sources:.c=.o)) - -s_sources := $(filter %.s,$(LOCAL_SRC_FILES)) -s_objects := $(addprefix $(build_dir)/,$(s_sources:.s=.o)) - -S_sources := $(filter %.S,$(LOCAL_SRC_FILES)) -S_objects := $(addprefix $(build_dir)/,$(S_sources:.S=.o)) - -all_objects := \ - $(cpp_objects) \ - $(cxx_objects) \ - $(c_objects) \ - $(s_objects) \ - $(S_objects) \ - -# Get all static libraries this module depends on -LOCAL_STATIC_LIBRARIES := \ - $(call module-get-depends,$(LOCAL_STATIC_LIBRARIES),STATIC_LIBRARIES) -LOCAL_WHOLE_STATIC_LIBRARIES := \ - $(call module-get-depends,$(LOCAL_WHOLE_STATIC_LIBRARIES),WHOLE_STATIC_LIBRARIES) - -# Also get shared libraries used by static libraries -LOCAL_SHARED_LIBRARIES += \ - $(call module-get-depends,$(LOCAL_STATIC_LIBRARIES),SHARED_LIBRARIES) -LOCAL_SHARED_LIBRARIES += \ - $(call module-get-depends,$(LOCAL_WHOLE_STATIC_LIBRARIES),SHARED_LIBRARIES) - -# Get path -all_shared_libraries := \ - $(foreach lib,$(LOCAL_SHARED_LIBRARIES), \ - $(call module-get-staging-filename,$(lib))) -all_static_libraries := \ - $(foreach lib,$(LOCAL_STATIC_LIBRARIES), \ - $(call module-get-staging-filename,$(lib))) -all_whole_static_libraries := \ - $(foreach lib,$(LOCAL_WHOLE_STATIC_LIBRARIES), \ - $(call module-get-staging-filename,$(lib))) - -all_external_libraries := \ - $(foreach lib,$(LOCAL_EXTERNAL_LIBRARIES), \ - $(TARGET_OUT_BUILD)/$(lib)/$(lib).done) - -# all_libraries is used for the dependencies. -all_libraries := \ - $(all_shared_libraries) \ - $(all_static_libraries) \ - $(all_whole_static_libraries) \ - $(all_external_libraries) \ - -############################################################################### -## Import of dependencies. -############################################################################### - -# Get all modules we depend on -all_depends := $(call module-get-all-dependencies,$(LOCAL_MODULE)) -all_depends := $(filter-out $(LOCAL_MODULE),$(all_depends)) - -# Get list of exported stuff by our dependencies -imported_CFLAGS := $(call module-get-listed-export,$(all_depends),CFLAGS) -imported_CPPFLAGS := $(call module-get-listed-export,$(all_depends),CPPFLAGS) -imported_C_INCLUDES := $(call module-get-listed-export,$(all_depends),C_INCLUDES) -imported_LDLIBS := $(call module-get-listed-export,$(all_depends),LDLIBS) -imported_PREREQUISITES := $(call module-get-listed-export,$(all_depends),PREREQUISITES) - -# The imported/exported compiler flags are prepended to their LOCAL_XXXX value -# (this allows the module to override them). -LOCAL_CFLAGS := $(strip $(imported_CFLAGS) $(LOCAL_EXPORT_CFLAGS) $(LOCAL_CFLAGS)) -LOCAL_CPPFLAGS := $(strip $(imported_CPPFLAGS) $(LOCAL_EXPORT_CPPFLAGS) $(LOCAL_CPPFLAGS)) - -# The imported/exported include directories are appended to their LOCAL_XXX value -# (this allows the module to override them) -LOCAL_C_INCLUDES := $(sort $(strip $(subst -I-I,-I,$(addprefix -I,$(LOCAL_C_INCLUDES) $(LOCAL_EXPORT_C_INCLUDES) $(imported_C_INCLUDES))))) -#$(info LOCAL_C_INCLUDES=$(LOCAL_C_INCLUDES)) -#$(info -----) - -# Similarly, you want the imported/exported flags to appear _after_ the LOCAL_LDLIBS -# due to the way Unix linkers work (depending libraries must appear before -# dependees on final link command). -LOCAL_LDLIBS := $(strip $(LOCAL_LDLIBS) $(LOCAL_EXPORT_LDLIBS) $(imported_LDLIBS)) - -# Get all autoconf files that we depend on, don't forget to add ourself -all_autoconf := \ - $(call module-get-listed-autoconf,$(all_depends)) \ - $(call module-get-autoconf,$(LOCAL_MODULE)) - -# Force their inclusion (space after -include and before comma is important) -LOCAL_CFLAGS += $(addprefix -include ,$(all_autoconf)) - -# List of all prerequisites (ours + dependencies) -all_prerequisites := \ - $(LOCAL_PREREQUISITES) \ - $(LOCAL_EXPORT_PREREQUISITES) \ - $(imported_PREREQUISITES) - -# All autoconf files are prerequisites -all_prerequisites += $(all_autoconf) - -# User makefile is also a prerequisite -all_prerequisites += $(LOCAL_PATH)/$(USER_MAKEFILE_NAME) - -# Notify that we build with dependencies -LOCAL_CFLAGS += $(foreach __mod,$(all_depends), \ - -DBUILD_$(call get-define,$(__mod))) - -############################################################################### -## Actual rules. -############################################################################### - -# cpp files -ifneq ("$(strip $(cpp_objects))","") -$(cpp_objects): $(build_dir)/%.o: $(LOCAL_PATH)/%.cpp - $(transform-cpp-to-o) --include $(cpp_objects:%.o=%.d) -endif - -# cxx files -ifneq ("$(strip $(cxx_objects))","") -$(cxx_objects): $(build_dir)/%.o: $(LOCAL_PATH)/%.cxx - $(transform-cpp-to-o) --include $(cxx_objects:%.o=%.d) -endif - -# c files -ifneq ("$(strip $(c_objects))","") -$(c_objects): $(build_dir)/%.o: $(LOCAL_PATH)/%.c - $(transform-c-to-o) --include $(c_objects:%.o=%.d) -endif - -# s files -# There is NO dependency files for raw asm code... -ifneq ("$(strip $(s_objects))","") -$(s_objects): $(build_dir)/%.o: $(LOCAL_PATH)/%.s - $(transform-s-to-o) -endif - -# S files -# There are dependency files for asm code... -ifneq ("$(strip $(S_objects))","") -$(S_objects): $(build_dir)/%.o: $(LOCAL_PATH)/%.S - $(transform-s-to-o) --include $(S_objects:%.o=%.d) -endif - -# clean- targets -cleantarget := clean-$(LOCAL_MODULE) -$(cleantarget) : PRIVATE_MODULE := $(LOCAL_MODULE) -$(cleantarget) : PRIVATE_CLEAN_FILES := \ - $(LOCAL_BUILD_MODULE) \ - $(LOCAL_STAGING_MODULE) \ - $(build_dir) -$(cleantarget):: - @echo "Clean: $(PRIVATE_MODULE)" - $(Q)rm -rf $(PRIVATE_CLEAN_FILES) - -## Provide a short-hand for building this module. -.PHONY: $(LOCAL_MODULE) -$(LOCAL_MODULE): $(LOCAL_BUILD_MODULE) $(LOCAL_STAGING_MODULE) - -# Make sure external libraries are built first -# Do NOT force rebuild at each check (order prerequisite) -# TODO : check why order prerequisite -#$(all_objects): | $(external_libraries) - -# Make sure all prerequisites files are generated first -ifneq ("$(all_prerequisites)","") -$(all_objects): $(all_prerequisites) -endif - -############################################################################### -## autoconf.h file generation. -############################################################################### - -autoconf_file := $(call module-get-autoconf,$(LOCAL_MODULE)) -ifneq ("$(autoconf_file)","") - -# autoconf.h file depends on module config -$(autoconf_file): $(call __get_module-config,$(LOCAL_MODULE)) - @$(call generate-autoconf-file,$<,$@) - -endif - -############################################################################### -## Precompiled headers. -############################################################################### - -LOCAL_PRECOMPILED_FILE := $(strip $(LOCAL_PRECOMPILED_FILE)) -ifneq ("$(LOCAL_PRECOMPILED_FILE)","") - -gch_file := $(build_dir)/$(LOCAL_PRECOMPILED_FILE).gch - -# All objects will depends on the precompiled file -$(all_objects): $(gch_file) - -# Make sure all prerequisites files are generated first -ifneq ("$(all_prerequisites)","") -$(gch_file): $(all_prerequisites) -endif - -# Generate the precompiled file -$(gch_file): $(LOCAL_PATH)/$(LOCAL_PRECOMPILED_FILE) - $(transform-h-to-gch) --include $(gch_file:%.gch=%.d) - -# Make sure external libraries are built first (order prerequisite) -# TODO : check why order prerequisite -#$(gch_file): | $(external_libraries) - -endif - -############################################################################### -# Rule-specific variable definitions. -############################################################################### - -$(LOCAL_TARGETS): PRIVATE_PATH := $(LOCAL_PATH) -$(LOCAL_TARGETS): PRIVATE_MODULE := $(LOCAL_MODULE) -$(LOCAL_TARGETS): PRIVATE_CFLAGS := $(LOCAL_CFLAGS) -$(LOCAL_TARGETS): PRIVATE_C_INCLUDES := $(LOCAL_C_INCLUDES) -$(LOCAL_TARGETS): PRIVATE_CPPFLAGS := $(LOCAL_CPPFLAGS) -$(LOCAL_TARGETS): PRIVATE_ARFLAGS := $(LOCAL_ARFLAGS) -$(LOCAL_TARGETS): PRIVATE_LDFLAGS := $(LOCAL_LDFLAGS) -$(LOCAL_TARGETS): PRIVATE_LDLIBS := $(LOCAL_LDLIBS) -$(LOCAL_TARGETS): PRIVATE_ARM_MODE := $(LOCAL_ARM_MODE) -$(LOCAL_TARGETS): PRIVATE_ALL_SHARED_LIBRARIES := $(all_shared_libraries) -$(LOCAL_TARGETS): PRIVATE_ALL_STATIC_LIBRARIES := $(all_static_libraries) -$(LOCAL_TARGETS): PRIVATE_ALL_WHOLE_STATIC_LIBRARIES := $(all_whole_static_libraries) -$(LOCAL_TARGETS): PRIVATE_ALL_EXTERNAL_LIBRARIES := $(all_external_libraries) -$(LOCAL_TARGETS): PRIVATE_ALL_OBJECTS := $(all_objects) - diff --git a/Build/coreLinux/setup.mk b/Build/coreLinux/setup.mk deleted file mode 100644 index 4abf7a0b..00000000 --- a/Build/coreLinux/setup.mk +++ /dev/null @@ -1,115 +0,0 @@ -############################################################################### -## @file config.mk -## @author Y.M. Morgan -## @date 2011/05/14 -############################################################################### - -############################################################################### -## Make sure that there are no spaces in the absolute path; the build system -## can't deal with them. -############################################################################### - -ifneq ("$(words $(shell pwd))","1") -$(error Top directory contains space characters) -endif - -############################################################################### -## Host/Target OS. -############################################################################### - -# Host OS -ifneq ("$(shell echo $$OSTYPE | grep msys)","") - HOST_OS := MINGW32 - HOST_EXE_SUFFIX := .exe - HOST_SHARED_LIB_SUFFIX := .dll -else - HOST_OS := LINUX - HOST_EXE_SUFFIX := - HOST_SHARED_LIB_SUFFIX := .so -endif - -# Target OS : default to HOST_OS unless set -ifndef TARGET_OS - TARGET_OS := $(HOST_OS) -endif - -# Exe/dll suffix under mingw -TARGET_STATIC_LIB_SUFFIX := .a -ifeq ("$(TARGET_OS)","MINGW32") - DIR_SUFFIX := _mingw32 - TARGET_EXE_SUFFIX := .exe - TARGET_SHARED_LIB_SUFFIX := .dll -else - DIR_SUFFIX := - TARGET_EXE_SUFFIX := - TARGET_SHARED_LIB_SUFFIX := .so -endif - -ifeq ("$(TARGET_OS)","MINGW32") - # may be overridden in make command line - STATIC := 1 - TARGET_GLOBAL_CFLAGS += -D__MINGW_FEATURES__=0 - TARGET_GLOBAL_LDFLAGS += -Wl,--enable-auto-import - ifeq ("$(STATIC)","1") - TARGET_GLOBAL_LDFLAGS += -Wl,-Bstatic - endif -endif - -# To be able to use ccache with pre-complied headers, some env variables are required -CCACHE := -ifeq ("$(USE_CCACHE)","1") - ifneq ("$(shell which ccache)","") - CCACHE := CCACHE_SLOPPINESS=time_macros ccache - TARGET_GLOBAL_CFLAGS += -fpch-preprocess - endif -endif - -# Pre-compiled header generation flag -ifneq ("$(USE_CLANG)","1") - TARGET_PCH_FLAGS := -c -else - TARGET_PCH_FLAGS := -x c++-header -endif - -# Architecture -#ifndef TARGET_ARCH -# ifneq ("$(shell $(GCC) -dumpmachine | grep 64)","") -# TARGET_ARCH := AMD64 -# else -# TARGET_ARCH := X86 -# endif -#endif - -# Update flags based on architecture -# 64-bit requires -fPIC to build shared libraries -#ifeq ("$(TARGET_ARCH)","AMD64") -# TARGET_GLOBAL_CFLAGS += -m64 -fPIC -#else -# TARGET_GLOBAL_CFLAGS += -m32 -#endif - -############################################################################### -## Variables based on DEBUG/STATIC. -############################################################################### - -#ifeq ("$(DEBUG)","0") -# TARGET_GLOBAL_CFLAGS += -O2 -g -DNDEBUG -# TARGET_OUT_INTERMEDIATES := $(TOP_DIR)/build_gcc$(DIR_SUFFIX)/release -# TARGET_OUT := $(TOP_DIR)/out_gcc$(DIR_SUFFIX)/release -#else -# TARGET_GLOBAL_CFLAGS += -O0 -g -DDEBUG -D_DEBUG -# TARGET_OUT_INTERMEDIATES := $(TOP_DIR)/build_gcc$(DIR_SUFFIX)/debug -# TARGET_OUT := $(TOP_DIR)/out_gcc$(DIR_SUFFIX)/debug -#endif - -############################################################################### -## Determine gcc path and version. -############################################################################### - -GCC_PATH := $(shell which $(GCC)) - -ifneq ("$(USE_CLANG)","1") -GCC_VERSION := $(shell $(GCC) --version | head -1 | sed "s/.*\([0-9]\.[0-9]\.[0-9]\).*/\1/") -else -GCC_VERSION := 0.0.0 -endif diff --git a/Build/coreLinux/shared.mk b/Build/coreLinux/shared.mk deleted file mode 100644 index 5a315e5e..00000000 --- a/Build/coreLinux/shared.mk +++ /dev/null @@ -1,16 +0,0 @@ -############################################################################### -## @file shared.mk -## @author Y.M. Morgan -## @date 2011/05/14 -## -## Build a shared library. -############################################################################### - -LOCAL_MODULE_CLASS := SHARED_LIBRARY -LOCAL_DESTDIR := usr/lib - -ifndef LOCAL_MODULE_FILENAME -LOCAL_MODULE_FILENAME := $(LOCAL_MODULE)$(TARGET_SHARED_LIB_SUFFIX) -endif - -$(call module-add,$(LOCAL_MODULE)) diff --git a/Build/coreLinux/static.mk b/Build/coreLinux/static.mk deleted file mode 100644 index 7f282069..00000000 --- a/Build/coreLinux/static.mk +++ /dev/null @@ -1,16 +0,0 @@ -############################################################################### -## @file static.mk -## @author Y.M. Morgan -## @date 2011/05/14 -## -## Build a static library. -############################################################################### - -LOCAL_MODULE_CLASS := STATIC_LIBRARY -LOCAL_DESTDIR := usr/lib - -ifndef LOCAL_MODULE_FILENAME -LOCAL_MODULE_FILENAME := $(LOCAL_MODULE)$(TARGET_STATIC_LIB_SUFFIX) -endif - -$(call module-add,$(LOCAL_MODULE)) diff --git a/Build/coreLinux/warnings.mk b/Build/coreLinux/warnings.mk deleted file mode 100644 index 69af9d05..00000000 --- a/Build/coreLinux/warnings.mk +++ /dev/null @@ -1,68 +0,0 @@ -############################################################################### -## @file warnings.mk -## @author Y.M. Morgan -## @date 2012/06/09 -## -## Setup warning flags. -############################################################################### - -COMMON_FLAGS_WARNINGS := -GCC_FLAGS_WARNINGS := -GXX_FLAGS_WARNINGS := - -# show option associated with warning (gcc >= 4.0.0) -ifneq (0,$(shell expr $(GCC_VERSION) \>= 4.0.0)) -COMMON_FLAGS_WARNINGS += -fdiagnostics-show-option -endif - -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 += -Wshadow -#COMMON_FLAGS_WARNINGS += -Wswitch-default -#COMMON_FLAGS_WARNINGS += -Wwrite-strings -#COMMON_FLAGS_WARNINGS += -Wundef -#COMMON_FLAGS_WARNINGS += -Wpointer-arith -#COMMON_FLAGS_WARNINGS += -Wformat-nonliteral -#COMMON_FLAGS_WARNINGS += -Wformat-security -#COMMON_FLAGS_WARNINGS += -Winit-self - -# C specific -#GCC_FLAGS_WARNINGS += -Wmissing-declarations -#GCC_FLAGS_WARNINGS += -Wmissing-prototypes -#GCC_FLAGS_WARNINGS += -Wjump-misses-init - -# c++ specific -#GXX_FLAGS_WARNINGS += -Wctor-dtor-privacy -#GXX_FLAGS_WARNINGS += -Wnon-virtual-dtor -#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 -endif - -# Extra warnings -ifeq ("$(W)","1") - -COMMON_FLAGS_WARNINGS += -Wconversion -COMMON_FLAGS_WARNINGS += -Wswitch-enum -COMMON_FLAGS_WARNINGS += -Wcast-qual - -# gcc >= 4.4.0 -ifneq (0,$(shell expr $(GCC_VERSION) \>= 4.4.0)) -COMMON_FLAGS_WARNINGS += -Wframe-larger-than=1024 -endif - -endif - -# Add common flags to specific flags -GCC_FLAGS_WARNINGS += $(COMMON_FLAGS_WARNINGS) -GXX_FLAGS_WARNINGS += $(COMMON_FLAGS_WARNINGS) -