summaryrefslogtreecommitdiffstats
path: root/libc/Jamfile
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-03 19:28:35 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-03 19:28:35 -0800
commit1dc9e472e19acfe6dc7f41e429236e7eef7ceda1 (patch)
tree3be0c520fae17689bbf5584e1136fb820caef26f /libc/Jamfile
parent1767f908af327fa388b1c66883760ad851267013 (diff)
downloadbionic-1dc9e472e19acfe6dc7f41e429236e7eef7ceda1.zip
bionic-1dc9e472e19acfe6dc7f41e429236e7eef7ceda1.tar.gz
bionic-1dc9e472e19acfe6dc7f41e429236e7eef7ceda1.tar.bz2
auto import from //depot/cupcake/@135843
Diffstat (limited to 'libc/Jamfile')
-rw-r--r--libc/Jamfile441
1 files changed, 441 insertions, 0 deletions
diff --git a/libc/Jamfile b/libc/Jamfile
new file mode 100644
index 0000000..a65be5d
--- /dev/null
+++ b/libc/Jamfile
@@ -0,0 +1,441 @@
+# This file is used to build the Bionic library with the Jam build
+# tool. For info, see www.perforce.com/jam/jam.html
+#
+
+BIONIC_TOP ?= $(DOT) ;
+
+DEBUG = 1 ;
+
+# pattern used for automatic heade inclusion detection
+HDRPATTERN = "^[ ]*#[ ]*include[ ]*[<\"]([^\">]*)[\">].*$" ;
+
+
+# debugging support, simply define the DEBUG variable to activate verbose output
+rule Debug
+{
+ if $(DEBUG) {
+ Echo $(1) ;
+ }
+}
+
+# return all elements from $(1) that are not in $(2)
+rule Filter list : filter
+{
+ local result = ;
+ local item ;
+ for item in $(list) {
+ if ! $(item) in $(filter) {
+ result += $(item) ;
+ }
+ }
+ return $(result) ;
+}
+
+
+# reverse a list of elements
+rule Reverse list
+{
+ local result = ;
+ local item ;
+
+ for item in $(list) {
+ result = $(item) $(result) ;
+ }
+ return $(result) ;
+}
+
+
+# decompose a path into a list of elements
+rule PathDecompose dir
+{
+ local result ;
+
+ while $(dir:D)
+ {
+ if ! $(dir:BS) { # for rooted paths like "/foo"
+ break ;
+ }
+ result = $(dir:BS) $(result) ;
+ dir = $(dir:D) ;
+ }
+ result = $(dir) $(result) ;
+ return $(result) ;
+}
+
+
+# simply a file path, i.e. get rid of . or .. when possible
+rule _PathSimplify dir
+{
+ local result = ;
+ local dir2 d ;
+
+ dir = [ PathDecompose $(dir) ] ;
+
+ # get rid of any single dot
+ dir2 = ;
+ for d in $(dir) {
+ if $(d) = "." {
+ continue ;
+ }
+ dir2 += $(d) ;
+ }
+
+ # get rid of .. when possible
+ for d in $(dir2) {
+ if $(d) = ".." && $(result) {
+ result = $(result[2-]) ;
+ }
+ else
+ result = $(d) $(result) ;
+ }
+
+ # now invert the result
+ result = [ Reverse $(result) ] ;
+ if ! $(result) {
+ result = "." ;
+ }
+ return $(result:J="/") ;
+}
+
+
+rule PathSimplify dirs
+{
+ local result ;
+ local d ;
+ for d in $(dirs) {
+ result += [ _PathSimplify $(d) ] ;
+ }
+ return $(result) ;
+}
+
+
+# retrieve list of subdirectories
+rule ListSubDirs paths
+{
+ local result = ;
+ local entry ;
+ for entry in [ Glob $(paths) : * ] {
+ if ! $(entry:S) {
+ result += $(entry) ;
+ }
+ }
+ return [ PathSimplify $(result) ] ;
+}
+
+
+# retrieve list of sources in a given directory
+rule ListSources path
+{
+ return [ Glob $(path) : *.S *.c ] ;
+}
+
+
+# find the prebuilt directory
+#
+if ! $(TOP) {
+ Echo "Please define TOP as the root of your device build tree" ;
+ Exit ;
+}
+
+Debug "OS is" $(OS) ;
+Debug "CPU is" $(CPU) ;
+
+if $(OS) = LINUX
+{
+ PREBUILT = $(TOP)/prebuilt/Linux ;
+}
+else if $(OS) = MACOSX
+{
+ switch $(CPU) {
+ case i386 : PREBUILT = $(TOP)/prebuilt/darwin-x86 ; break ;
+ case ppc : PREBUILT = $(TOP)/prebuilt/darwin-ppc ; break ;
+ case * : Echo "unsupported CPU" "$(CPU) !!" ;
+ Echo "Please contact digit@google.com for help" ;
+ Exit ;
+ }
+}
+else
+{
+ Echo "Unsupported operating system" $(OS) ;
+ Echo "Please contact digit@google.com for help" ;
+ Exit ;
+}
+
+Debug "TOP is" $(TOP) ;
+Debug "PREBUILT is" $(PREBUILT) ;
+
+
+# check architectures and setup toolchain variables
+#
+SUPPORTED_ARCHS = x86 arm ;
+
+ARCH ?= $(SUPPORTED_ARCHS) ;
+
+if ! $(ARCH) in $(SUPPORTED_ARCHS) {
+ Echo "The variable ARCH contains an unsupported value, use one or more of these instead" ;
+ Echo "separated by spaces:" $(SUPPORTED_ARCHS) ;
+ Exit ;
+}
+
+x86_TOOLSET_PREFIX ?= "" ;
+arm_TOOLSET_PREFIX ?= $(TOP)/prebuilt/Linux/toolchain-4.1.1/bin/arm-elf- ;
+
+for arch in $(ARCH) {
+ CC_$(arch) = $($(arch)_TOOLSET_PREFIX)gcc ;
+ C++_$(arch) = $($(arch)_TOOLSET_PREFIX)g++ ;
+ AR_$(arch) = $($(arch)_TOOLSET_PREFIX)ar ;
+}
+
+
+# the list of arch-independent source subdirectories
+BIONIC_SRC_SUBDIRS = string ;
+BIONIC_x86_SUBDIRS = ;
+BIONIC_arm_SUBDIRS = ;
+
+CFLAGS = -O0 -g -W ;
+
+
+
+# find sources in a given list of subdirectories
+rule FindSources dirs
+{
+ local dir ;
+
+ for dir in $(dirs)
+ {
+ local LOCAL_SRC NO_LOCAL_SRC ;
+
+ if [ Glob $(dir) : rules.jam ] {
+ include $(dir)/rules.jam ;
+ if $(LOCAL_SRC) {
+ _sources = $(LOCAL_SRC) ;
+ }
+ else {
+ _sources = [ Glob $(dir) : *.S *.c ] ;
+ _sources = $(_sources:BS) ;
+ }
+ if $(NO_LOCAL_SRC) {
+ _sources = [ Filter $(_sources) : $(NO_LOCAL_SRC) ] ;
+ }
+ sources += $(dir)/$(_sources) ;
+ }
+ else
+ sources += [ ListSources $(dir) ] ;
+ }
+}
+
+# Compile a given object file from a source
+rule Compile object : source
+{
+ Depends $(object) : $(source) ;
+ Depends bionic : $(object) ;
+ Clean clean : $(object) ;
+
+ MakeLocate $(object) : $(OUT) ;
+
+
+ CC on $(object) = $(CC_$(arch)) ;
+ CFLAGS on $(object) = $(CFLAGS) ;
+ INCLUDES on $(object) = $(INCLUDES) ;
+ DEFINES on $(object) = $(DEFINES) ;
+
+ HDRRULE on $(>) = HdrRule ;
+ HDRSCAN on $(>) = $(HDRPATTERN) ;
+ HDRSEARCH on $(>) = $(INCLUDES) ;
+ HDRGRIST on $(>) = $(HDRGRIST) ;
+}
+
+
+actions Compile
+{
+ $(CC) -c -o $(1) $(CFLAGS) -I$(INCLUDES) -D$(DEFINES) $(2)
+}
+
+
+rule RmTemps
+{
+ Temporary $(2) ;
+}
+
+actions quietly updated piecemeal together RmTemps
+{
+ rm -f $(2)
+}
+
+actions Archive
+{
+ $(AR) ru $(1) $(2)
+}
+
+rule Library library : objects
+{
+ local obj ;
+
+ if ! $(library:S) {
+ library = $(library:S=.a) ;
+ }
+ library = $(library:G=<$(arch)>) ;
+
+ Depends all : $(library) ;
+
+ if ! $(library:D) {
+ MakeLocate $(library) $(library)($(objects:BS)) : $(OUT) ;
+ }
+
+ Depends $(library) : $(library)($(objects:BS)) ;
+ for obj in $(objects) {
+ Depends $(library)($(obj:BS)) : $(obj) ;
+ }
+
+ Clean clean : $(library) ;
+
+ AR on $(library) = $(AR_$(arch)) ;
+ Archive $(library) : $(objects) ;
+
+ RmTemps $(library) : $(objects) ;
+}
+
+
+rule ProcessDir
+{
+ local CFLAGS = $(CFLAGS) ;
+ local DEFINES = $(DEFINES) ;
+ local INCLUDES = $(INCLUDES) ;
+ local local_rules = [ Glob $(1) : rules.jam ] ;
+ local source sources ;
+
+ if $(local_rules) {
+ local LOCAL_CFLAGS LOCAL_DEFINES LOCAL_INCLUDES LOCAL_SRC NO_LOCAL_SRC ;
+
+ include $(local_rules) ;
+ CFLAGS += $(LOCAL_CFLAGS) ;
+ DEFINES += $(LOCAL_DEFINES) ;
+ INCLUDES += $(LOCAL_INCLUDES) ;
+
+ if $(LOCAL_SRC) {
+ sources = $(LOCAL_SRC) ;
+ }
+ else {
+ sources = [ Glob $(1) : *.S *.c ] ;
+ sources = $(sources:BS) ;
+ }
+
+ if $(NO_LOCAL_SRC) {
+ sources = [ Filter $(sources) : $(NO_LOCAL_SRC) ] ;
+ }
+
+ sources = $(1)/$(sources) ;
+ }
+ else
+ sources = [ Glob $(1) : *.S *.c ] ;
+
+ for source in $(sources) {
+ local name = $(source:B) ;
+
+ if $(source:S) = ".S" {
+ # record the list of assembler sources
+ ASSEMBLER_SOURCES += $(name) ;
+ }
+ else if $(source:S) = ".c" && $(name) in $(ASSEMBLER_SOURCES) {
+ # skip C source file if corresponding assembler exists
+ continue ;
+ }
+
+ objname = <$(arch)>$(name).o ;
+
+ Compile $(objname) : $(source) ;
+ ALL_OBJECTS += $(objname) ;
+ }
+}
+
+rule ProcessDirs
+{
+ local dir ;
+ for dir in $(1) {
+ ProcessDir $(dir) ;
+ }
+}
+
+INCLUDES_x86 = /usr/src/linux/include ;
+
+INCLUDES_arm = ../kernel_headers
+ include/arch/arm
+ include/bits32
+ ;
+
+INCLUDES = include stdio string stdlib .
+ ../msun/include
+ ;
+
+DEFINES = ANDROID_CHANGES
+ USE_LOCKS
+ REALLOC_ZERO_BYTES_FREES
+ _LIBC=1
+ SOFTFLOAT
+ FLOATING_POINT
+ NEED_PSELECT=1
+ ANDROID
+ ;
+
+CFLAGS_x86 = ;
+
+
+for arch in $(ARCH)
+{
+ local ARCH_DIR = $(BIONIC_TOP)/arch-$(arch) ;
+ local INCLUDES = $(INCLUDES_$(arch)) $(ARCH_DIR)/include $(INCLUDES) ;
+ local DEFINES = $(DEFINES_$(arch)) $(DEFINES) ARCH=$(arch) ;
+ local CFLAGS = $(CFLAGS) $(CFLAGS_$(arch)) ;
+ local OUT = out/$(arch) ;
+ local ASSEMBLER_SOURCES ALL_OBJECTS ;
+
+ ProcessDirs [ ListSubDirs $(ARCH_DIR) ] ;
+ ProcessDirs stdlib stdio unistd string tzcode inet ;
+ ProcessDirs [ ListSubDirs netbsd ] ;
+ ProcessDirs bionic ;
+
+ Library bionic : $(ALL_OBJECTS) ;
+}
+
+BIONIC_SEARCH = $(BIONIC_TOP)/include ;
+
+
+
+# /HdrRule source : headers ;
+#
+# Arranges the proper dependencies when the file _source_ includes the files
+# _headers_ through the #include C preprocessor directive
+#
+# this rule is not intendend to be called explicitely. It is called
+# automatically during header scanning on sources handled by the @Object
+# rule (e.g. sources in @Main or @Library rules)
+#
+rule HdrRule
+{
+ # HdrRule source : headers ;
+
+ # N.B. This rule is called during binding, potentially after
+ # the fate of many targets has been determined, and must be
+ # used with caution: don't add dependencies to unrelated
+ # targets, and don't set variables on $(<).
+
+ # Tell Jam that anything depending on $(<) also depends on $(>),
+ # set SEARCH so Jam can find the headers, but then say we don't
+ # care if we can't actually find the headers (they may have been
+ # within ifdefs),
+
+ local s = $(>:G=$(HDRGRIST:E)) ;
+
+ Includes $(<) : $(s) ;
+ SEARCH on $(s) = $(HDRSEARCH) ;
+ NoCare $(s) ;
+
+ # Propagate on $(<) to $(>)
+
+ HDRSEARCH on $(s) = $(HDRSEARCH) ;
+ HDRSCAN on $(s) = $(HDRSCAN) ;
+ HDRRULE on $(s) = $(HDRRULE) ;
+ HDRGRIST on $(s) = $(HDRGRIST) ;
+}
+
+