Home | History | Annotate | Download | only in core
      1 # The following definitions are the defaults used by all toolchains.
      2 # This is included in setup-toolchain.mk just before the inclusion
      3 # of the toolchain's specific setup.mk file which can then override
      4 # these definitions.
      5 #
      6 
      7 # These flags are used to ensure that a binary doesn't reference undefined
      8 # flags.
      9 TARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
     10 
     11 # These flags are used to enfore the NX (no execute) security feature in the
     12 # generated machine code. This adds a special section to the generated shared
     13 # libraries that instruct the Linux kernel to disable code execution from
     14 # the stack and the heap.
     15 TARGET_NO_EXECUTE_CFLAGS  := -Wa,--noexecstack
     16 TARGET_NO_EXECUTE_LDFLAGS := -Wl,-z,noexecstack
     17 
     18 # NOTE: Ensure that TARGET_LIBGCC is placed after all private objects
     19 #       and static libraries, but before any other library in the link
     20 #       command line when generating shared libraries and executables.
     21 #
     22 #       This ensures that all libgcc.a functions required by the target
     23 #       will be included into it, instead of relying on what's available
     24 #       on other libraries like libc.so, which may change between system
     25 #       releases due to toolchain or library changes.
     26 #
     27 define cmd-build-shared-library
     28 $(PRIVATE_CXX) \
     29     -nostdlib -Wl,-soname,$(notdir $@) \
     30     -Wl,-shared,-Bsymbolic \
     31     $(call host-path,\
     32         $(TARGET_CRTBEGIN_SO_O) \
     33         $(PRIVATE_OBJECTS)) \
     34     $(call link-whole-archives,$(PRIVATE_WHOLE_STATIC_LIBRARIES))\
     35     $(call host-path,\
     36         $(PRIVATE_STATIC_LIBRARIES) \
     37         $(PRIVATE_LIBGCC) \
     38         $(PRIVATE_SHARED_LIBRARIES)) \
     39     $(PRIVATE_LDFLAGS) \
     40     $(PRIVATE_LDLIBS) \
     41     $(call host-path,\
     42         $(TARGET_CRTEND_SO_O)) \
     43     -o $(call host-path,$@)
     44 endef
     45 
     46 define cmd-build-executable
     47 $(PRIVATE_CXX) \
     48     -nostdlib -Bdynamic \
     49     -Wl,-dynamic-linker,/system/bin/linker \
     50     -Wl,--gc-sections \
     51     -Wl,-z,nocopyreloc \
     52     $(call host-path,\
     53         $(TARGET_CRTBEGIN_DYNAMIC_O) \
     54         $(PRIVATE_OBJECTS)) \
     55     $(call link-whole-archives,$(PRIVATE_WHOLE_STATIC_LIBRARIES))\
     56     $(call host-path,\
     57         $(PRIVATE_STATIC_LIBRARIES) \
     58         $(PRIVATE_LIBGCC) \
     59         $(PRIVATE_SHARED_LIBRARIES)) \
     60     $(PRIVATE_LDFLAGS) \
     61     $(PRIVATE_LDLIBS) \
     62     $(call host-path,\
     63         $(TARGET_CRTEND_O)) \
     64     -o $(call host-path,$@)
     65 endef
     66 
     67 define cmd-build-static-library
     68 $(PRIVATE_AR) $(call host-path,$@) $(call host-path,$(PRIVATE_OBJECTS))
     69 endef
     70 
     71 # The strip command is only used for shared libraries and executables.
     72 # It is thus safe to use --strip-unneeded, which is only dangerous
     73 # when applied to static libraries or object files.
     74 cmd-strip = $(PRIVATE_STRIP) --strip-unneeded $(call host-path,$1)
     75 
     76 TARGET_LIBGCC = $(shell $(TARGET_CC) -print-libgcc-file-name)
     77 TARGET_LDLIBS := -lc -lm
     78 
     79 #
     80 # IMPORTANT: The following definitions must use lazy assignment because
     81 # the value of TOOLCHAIN_PREFIX or TARGET_CFLAGS can be changed later by
     82 # the toolchain's setup.mk script.
     83 #
     84 
     85 TARGET_CC       = $(TOOLCHAIN_PREFIX)gcc
     86 TARGET_CFLAGS   =
     87 
     88 TARGET_CXX      = $(TOOLCHAIN_PREFIX)g++
     89 TARGET_CXXFLAGS = $(TARGET_CFLAGS) -fno-exceptions -fno-rtti
     90 
     91 TARGET_LD       = $(TOOLCHAIN_PREFIX)ld
     92 TARGET_LDFLAGS :=
     93 
     94 TARGET_AR       = $(TOOLCHAIN_PREFIX)ar
     95 TARGET_ARFLAGS := crs
     96 
     97 TARGET_STRIP    = $(TOOLCHAIN_PREFIX)strip
     98