#NICE=10
+###############################################################################
+# Parallelism #
###############################################################################
-# Jobs #
-###############################################################################
-# If you have got more than one processor you can advice the gcc to run more #
+# If you have got more than one processor you can advice make to run more #
# than one job a time. You also may want to adjust this when using distcc. #
-# Default is count of cpus twice + 1. #
+# Default is count of cpus twice + 1. (-jN) #
+# Possible options: #
+# -j [N] : N is the number of the parallel jobs. #
+# -l N : Specify the max. load avg. for the system. #
+# Read more: http://www.gnu.org/software/automake/manual/make/Parallel.html #
###############################################################################
-#PARALLELISM=3
+#PARALLELISMFLAGS=-j3
- ###############################################################################
+ ###############################################################################
# Distcc Hosts #
###############################################################################
# Distcc lets you run some instances of gcc on other dedicated machines. #
ln -sfv $(TOOLS_DIR)/bin/ld $(TOOLS_DIR)/$$(gcc -dumpmachine)/bin/ld
gcc -dumpspecs | sed \
+ -e "/^\*link:$$/{n;s,$$, -L/usr/lib,}" \
-e 's@$(TOOLS_DIR)$(LINKER)@$(LINKER)@g' \
- -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \
- -e '/\*cpp:/{n;s@$$@ -isystem /usr/include@}' > \
- `dirname $$(gcc --print-libgcc-file-name)`/specs
+ -e '/^\*cpp:$$/{n;s,$$, -isystem /usr/include,}' \
+ > $$(dirname $$(gcc --print-libgcc-file-name))/myspecs
-
endif
-
+
@$(POSTBUILD)
# Top-level Rules
###############################################################################
- objects = $(DL_FILE) $(THISAPP)-fixes-8.patch $(PKG_NAME)-doc-$(VER).tar.gz
-objects = $(DL_FILE) $(THISAPP)-fixes-7.patch $(PKG_NAME)-doc-$(VER).tar.gz \
++objects = $(DL_FILE) $(THISAPP)-fixes-8.patch $(PKG_NAME)-doc-$(VER).tar.gz \
+ $(THISAPP)-arc4random-1.patch
install : $(TARGET)
cd $(DIR_APP) && tar -xvf $(DIR_DL)/$(PKG_NAME)-doc-$(VER).tar.gz
cd $(DIR_APP) && sed -i "s|htmldir = @htmldir@|htmldir = /usr/share/doc/$(THISAPP)|" \
Makefile.in
- cd $(DIR_APP) && patch -Np1 < $(DIR_PATCHES)/$(THISAPP)-fixes-7.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_PATCHES)/$(THISAPP)-arc4random-1.patch
cd $(DIR_APP) && ./configure --prefix=/usr --bindir=/bin \
--without-bash-malloc --with-installed-readline
- cd $(DIR_APP) && make -j $(PARALLELISM)
+ cd $(DIR_APP) && make $(PARALLELISMFLAGS)
cd $(DIR_APP) && make install
endif
###############################################################################
objects = $(DL_FILE) $(THISAPP)-configure-1.patch \
- $(THISAPP)-ld_makefile.patch
+ $(THISAPP)-uClibc-1.patch \
++ $(THISAPP)-ld_makefile.patch \
+ $(THISAPP)-pt_pax-1.patch \
+ $(THISAPP)-lazy-1.patch
install : $(TARGET)
cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-configure-1.patch
ifeq "$(STAGE)" "toolchain"
- ifeq "$(firstword $(MAKEFILE_LIST))" "$(PKG_NAME)"
- #
- # Normal build
- #
-
ifeq "$(PASS)" "1"
- ifeq "$(MACHINE)" "$(MACHINE_REAL)"
- cd $(DIR_SRC)/binutils-build && CC="gcc -B/usr/bin/" ../$(THISAPP)/configure \
- --prefix=$(TOOLS_DIR) \
- --disable-nls \
- --disable-werror
- cd $(DIR_SRC)/binutils-build && make $(PARALLELISMFLAGS)
- cd $(DIR_SRC)/binutils-build && make install
- cd $(DIR_SRC)/binutils-build && make -C ld clean
- cd $(DIR_SRC)/binutils-build && make -C ld LIB_PATH=$(TOOLS_DIR)/lib
- cd $(DIR_SRC)/binutils-build && cp -v ld/ld-new $(TOOLS_DIR)/bin
- else
- #
- # Cross build
- #
- cd $(DIR_SRC)/binutils-build && ../$(THISAPP)/configure \
- --prefix=$(TOOLS_DIR) \
- --build=${IFS_HOST} \
- --host=${IFS_TARGET} \
- --target=${IFS_TARGET} \
- --disable-nls \
- --enable-shared \
- --disable-multilib
- cd $(DIR_SRC)/binutils-build && make configure-host
+ cd $(DIR_SRC)/binutils-build && \
+ ../$(THISAPP)/configure \
+ --target=$(IFS_TARGET) \
+ --prefix=$(TOOLS_DIR) \
+ --disable-nls \
+ --disable-werror
- cd $(DIR_SRC)/binutils-build && make -j $(PARALLELISM)
+ cd $(DIR_SRC)/binutils-build && make $(PARALLELISMFLAGS)
cd $(DIR_SRC)/binutils-build && make install
- endif
+
+ cd $(TOOLS_DIR)/$(IFS_TARGET)/bin; \
+ if [ "$(IFS_TARGET)" == "$$($(DIR_APP)/config.guess)" ]; then \
+ for t in $$(ls -1); do \
+ ln -sfv $${t} $(TOOLS_DIR)/bin/$(IFS_TARGET)-$${t}; \
+ done; \
+ fi
endif
ifeq "$(PASS)" "2"
- cd $(DIR_SRC)/binutils-build && ../$(THISAPP)/configure \
- --prefix=$(TOOLS_DIR) \
- --disable-nls \
- --with-lib-path=$(TOOLS_DIR)/lib
+ cd $(DIR_SRC)/binutils-build && \
+ CC="$(IFS_TARGET)-gcc -B$(TOOLS_DIR)/lib/" \
+ AR=$(IFS_TARGET)-ar \
+ RANLIB=$(IFS_TARGET)-ranlib \
+ ../$(THISAPP)/configure \
+ --prefix=$(TOOLS_DIR) \
+ --disable-nls \
+ --with-lib-path=$(TOOLS_DIR)/lib
- cd $(DIR_SRC)/binutils-build && make -j $(PARALLELISM)
+ cd $(DIR_SRC)/binutils-build && make $(PARALLELISMFLAGS)
cd $(DIR_SRC)/binutils-build && make install
-
+
cd $(DIR_SRC)/binutils-build && make -C ld clean
cd $(DIR_SRC)/binutils-build && make -C ld LIB_PATH=/usr/lib:/lib
cd $(DIR_SRC)/binutils-build && cp -v ld/ld-new $(TOOLS_DIR)/bin
endif
+ endif
- else
- #
- # Cross build
- #
-
- cd $(DIR_SRC)/binutils-build && AR=ar AS=as ../$(THISAPP)/configure \
- --prefix=$(CTOOLS_DIR) \
- --host=${IFS_HOST} \
- --target=${IFS_TARGET} \
- --with-lib-path=$(TOOLS_DIR)/lib \
- --disable-nls \
- --enable-shared \
- --disable-multilib
- cd $(DIR_SRC)/binutils-build && make configure-host
- cd $(DIR_SRC)/binutils-build && make $(PARALLELISMFLAGS)
- cd $(DIR_SRC)/binutils-build && make install
-
- -mkdir -p $(TOOLS_DIR)/include
- cp -fv $(DIR_APP)/include/libiberty.h $(TOOLS_DIR)/include
+ ifeq "$(STAGE)" "base"
+ ifeq "$(PAX)" "1"
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-pt_pax-1.patch
+ endif
+ cd $(DIR_SRC)/binutils-build && \
+ CC="gcc -specs=$$(dirname $$(gcc --print-libgcc-file-name))/myspecs -B/usr/lib/ -B/usr/bin/" \
+ ../$(THISAPP)/configure \
+ --prefix=/usr \
+ --enable-shared \
+ --disable-werror
- cd $(DIR_SRC)/binutils-build && make tooldir=/usr -j $(PARALLELISM)
++ cd $(DIR_SRC)/binutils-build && make tooldir=/usr $(PARALLELISMFLAGS)
+ cd $(DIR_SRC)/binutils-build && make tooldir=/usr install
+
+ cp -fv ../$(THISAPP)/include/libiberty.h /usr/include
endif
+endif
+
+ifeq "$(STAGE)" "base"
+ cd $(DIR_SRC)/binutils-build && ../$(THISAPP)/configure --prefix=/usr \
+ --enable-shared
+ cd $(DIR_SRC)/binutils-build && make tooldir=/usr $(PARALLELISMFLAGS)
+ cd $(DIR_SRC)/binutils-build && make tooldir=/usr install
+
+ cp -fv ../$(THISAPP)/include/libiberty.h /usr/include
+endif
+
+ifeq "$(STAGE)" "installer"
+ cd $(DIR_SRC)/binutils-build && ../$(THISAPP)/configure \
+ --target=$(UCLIBC_TARGET) \
+ --prefix=$(UCLIBC_DIR) \
+ --with-sysroot=$(UCLIBC_SYSROOT_DIR) \
+ --disable-multilib \
+ --disable-werror \
+ --disable-nls
+ cd $(DIR_SRC)/binutils-build && make $(PARALLELISMFLAGS)
+ cd $(DIR_SRC)/binutils-build && make install
+
+ for t in ar as ld strip; do \
+ ln -sfv $(UCLIBC_DIR)/bin/$(UCLIBC_TARGET)-$${t} \
+ $(UCLIBC_CC_CORE_STATIC_DIR)/$(UCLIBC_TARGET)/bin/$${t}; \
+ ln -sfv $(UCLIBC_DIR)/bin/$(UCLIBC_TARGET)-$${t} \
+ $(UCLIBC_CC_CORE_STATIC_DIR)/bin/$(UCLIBC_TARGET)-$${t}; \
+ done
+endif
@rm -rf $(DIR_APP) $(DIR_SRC)/binutils-build
@$(POSTBUILD)
# Installation Details
###############################################################################
-$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+$(TARGET) :
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
+
+ ifeq "$(STAGE)" "toolchain"
+ cd $(DIR_APP) && ./configure --prefix=$(TOOLS_DIR)
+ cd $(DIR_APP) && make -j $(PARALLELISM)
+ cd $(DIR_APP) && make install
+ endif
+
+ ifeq "$(STAGE)" "base"
cd $(DIR_APP) && ./configure --prefix=/usr
cd $(DIR_APP) && echo '#define YYENABLE_NLS 1' >> config.h
- cd $(DIR_APP) && make -j $(PARALLELISM)
+ cd $(DIR_APP) && make $(PARALLELISMFLAGS)
cd $(DIR_APP) && make install
+ cd $(DIR_APP)/lib/ && \
+ gcc -shared -Wl,-soname,liby.so.2.3 -o liby.so.2.3 -fPIC main.o yyerror.o
+ rm -fv /usr/lib/liby.a
+ cd $(DIR_APP)/lib/ && install -v liby.so.2.3 /usr/lib/liby.so.2.3
+ ln -vsf liby.so.2.3 /usr/lib/liby.so
+ endif
@rm -rf $(DIR_APP)
@$(POSTBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
cd $(DIR_APP) && patch -p0 < $(DIR_PATCHES)/$(THISAPP).patch
cd $(DIR_APP) && CFLAGS="-O2 -static" ./configure --prefix=$(PREFIX)
- cd $(DIR_APP) && make -j $(PARALLELISM)
+ cd $(DIR_APP) && make $(PARALLELISMFLAGS)
cd $(DIR_APP) && make install
- ln -sf ccache $(PREFIX)/bin/gcc
- ln -sf ccache $(PREFIX)/bin/g++
- ln -sf ccache $(PREFIX)/bin/cc
+ for i in gcc g++ cc; do \
+ ln -sf ccache $(PREFIX)/bin/$${i}; \
+ ln -sf ccache $(PREFIX)/bin/$(IFS_TARGET)-$${i}; \
+ done
$(PREFIX)/bin/ccache -z
@rm -rf $(DIR_APP)
+endif
+
+ifeq "$(STAGE)" "installer"
+ ln -sf ccache $(PREFIX)/bin/$(UCLIBC_TARGET)-gcc
+ ln -sf ccache $(PREFIX)/bin/$(UCLIBC_TARGET)-g++
+ ln -sf ccache $(PREFIX)/bin/$(UCLIBC_TARGET)-cc
+endif
+
@$(POSTBUILD)
ifeq "$(STAGE)" "base"
cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-i18n-1.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-hardened_tmp-1.patch
cd $(DIR_APP) && touch man/diff.1
cd $(DIR_APP) && ./configure --prefix=/usr
- cd $(DIR_APP) && make -j $(PARALLELISM)
+ cd $(DIR_APP) && make $(PARALLELISMFLAGS)
cd $(DIR_APP) && make install
endif
# Installation Details
###############################################################################
-$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+$(TARGET) :
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
- cd $(DIR_APP) && ./configure --prefix=/usr
+ cd $(DIR_APP) && ./configure --prefix=/usr --disable-static
- cd $(DIR_APP) && make -j $(PARALLELISM)
+ cd $(DIR_APP) && make $(PARALLELISMFLAGS)
cd $(DIR_APP) && make install
@rm -rf $(DIR_APP)
@$(POSTBUILD)
# Installation Details
###############################################################################
-$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+$(TARGET) :
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
+
+ ifeq "$(STAGE)" "toolchain"
+ cd $(DIR_APP) && ./configure --prefix=$(TOOLS_DIR)
+ cd $(DIR_APP) && make -j $(PARALLELISM)
+ cd $(DIR_APP) && make install
+ endif
+
+ ifeq "$(STAGE)" "base"
cd $(DIR_APP) && ./configure --prefix=/usr
- cd $(DIR_APP) && make -j $(PARALLELISM)
+ cd $(DIR_APP) && make $(PARALLELISMFLAGS)
cd $(DIR_APP) && make install
ln -sfv libfl.a /usr/lib/libl.a
- echo "#!/bin/sh" > /usr/bin/lex
+ echo "#!/bin/sh" > /usr/bin/lex
echo "exec /usr/bin/flex -l \"$$@\"" >> /usr/bin/lex
chmod 755 /usr/bin/lex
+ endif
+
@rm -rf $(DIR_APP)
@$(POSTBUILD)
###############################################################################
objects = $(DL_FILE) \
- $(THISAPP)-uClibc-1.patch
+ $(THISAPP)-cross_search_paths-1.patch \
+ $(THISAPP)-specs-1.patch \
++ $(THISAPP)-uClibc-1.patch \
+ $(THISAPP)-fstack_protector-1.patch \
+ $(THISAPP)-strncat_chk-1.patch \
+ $(THISAPP)-fortify_source-2.patch \
+ $(THISAPP)-fpie-2.patch
install : $(TARGET)
@$(PREBUILD)
@rm -rf $(DIR_APP) $(DIR_SRC)/gcc-build && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
-mkdir -v $(DIR_SRC)/gcc-build
-
+
ifeq "$(STAGE)" "toolchain"
- ifeq "$(firstword $(MAKEFILE_LIST))" "$(PKG_NAME)"
- #
- # Normal build
- #
-
ifeq "$(PASS)" "1"
- ifeq "$(MACHINE)" "$(MACHINE_REAL)"
- cd $(DIR_SRC)/gcc-build && CC="gcc -B/usr/bin/" ../$(THISAPP)/configure \
- --prefix=$(TOOLS_DIR) \
- --with-local-prefix=$(TOOLS_DIR) \
- --disable-nls \
- --enable-shared \
- --enable-languages=c
+ ifeq "$(PIE)" "1"
+ ## Enable -fPIC by default
+ cd $(DIR_APP) && sed 's/^\(#define CC1_SPEC.*\)\("\)$$/\1 %{fno-pic|fpic|fPIC:;:-fPIC}\2/' \
+ -i gcc/config/i386/linux.h
+ endif
+ cd $(DIR_SRC)/gcc-build && \
+ ../$(THISAPP)/configure \
+ --target=$(IFS_TARGET) \
+ --prefix=$(TOOLS_DIR) \
+ --enable-languages=c \
+ --disable-shared \
+ --disable-threads \
+ --disable-multilib \
+ --disable-libmudflap \
+ --disable-libssp \
+ --disable-libgomp \
+ --disable-nls \
+ --disable-werror
- cd $(DIR_SRC)/gcc-build && make -j $(PARALLELISM)
+ cd $(DIR_SRC)/gcc-build && make $(PARALLELISMFLAGS)
cd $(DIR_SRC)/gcc-build && make install
- ln -vs gcc $(TOOLS_DIR)/bin/cc
- else
- #
- # Cross build
- #
- cd $(DIR_APP) && sed -e "s,/tools,$(TOOLS_DIR),g" \
- < $(DIR_PATCHES)/$(THISAPP)-specs-1.patch | patch -Np1
-
- cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-cross_search_paths-1.patch
-
- cd $(DIR_APP) && cp -v gcc/cppdefault.c{,.orig}
- cd $(DIR_APP) && sed -e '/#define STANDARD_INCLUDE_DIR/s@"/usr/include"@0@g' \
- gcc/cppdefault.c.orig > gcc/cppdefault.c
-
- cd $(DIR_APP) && cp -v gcc/Makefile.in{,.orig}
- cd $(DIR_APP) && sed -e 's@\(^NATIVE_SYSTEM_HEADER_DIR =\).*@\1 $(TOOLS_DIR)/include@g' \
- gcc/Makefile.in.orig > gcc/Makefile.in
-
- cd $(DIR_SRC)/gcc-build && ../$(THISAPP)/configure \
- --prefix=$(TOOLS_DIR) \
- --build=${IFS_HOST} \
- --host=${IFS_TARGET} \
- --target=${IFS_TARGET} \
- --with-local-prefix=$(TOOLS_DIR) \
- --enable-long-long \
- --enable-c99 \
- --enable-shared \
- --enable-threads=posix \
- --enable-__cxa_atexit \
- --disable-nls \
- --enable-languages=c,c++ \
- --disable-libstdcxx-pch
- cd $(DIR_SRC)/gcc-build && make $(PARALLELISMFLAGS) AS_FOR_TARGET=$(AS) \
- LD_FOR_TARGET=$(LD)
- cd $(DIR_SRC)/gcc-build && make install
- endif
+
+ ln -fvs gcc $(TOOLS_DIR)/bin/cc
+ ln -sfv libgcc.a $$($(IFS_TARGET)-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/')
endif
ifeq "$(PASS)" "2"
--enable-__cxa_atexit \
--enable-clocale=gnu \
--enable-languages=c,c++ \
- --disable-bootstrap
+ --disable-bootstrap \
+ --disable-werror \
+ --disable-libgomp
+ ## Libgomp was disabled here because it doesn't want to compile ##
- cd $(DIR_SRC)/gcc-build && make -j $(PARALLELISM)
+ cd $(DIR_SRC)/gcc-build && make $(PARALLELISMFLAGS)
cd $(DIR_SRC)/gcc-build && make install
-
+
ln -sfv ../usr/bin/cpp /lib
- ln -sfv gcc /usr/bin/cc
+ ln -sfv gcc /usr/bin/cc
endif
+ifeq "$(STAGE)" "installer"
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-uClibc-1.patch
+ifeq "$(PASS)" "1"
+ ### Copying headers to install area of bootstrap gcc,
+ # so it can build libgcc2
+ mkdir -pv $(UCLIBC_CC_CORE_STATIC_DIR)/$(UCLIBC_TARGET)/include
+ cp -rfv $(UCLIBC_HEADERS_DIR)/* $(UCLIBC_CC_CORE_STATIC_DIR)/$(UCLIBC_TARGET)/include
+
+ cd $(DIR_SRC)/gcc-build && CC_FOR_BUILD="$(HOST_GCC)" ../$(THISAPP)/configure \
+ --target=$(UCLIBC_TARGET) \
+ --prefix=$(UCLIBC_CC_CORE_STATIC_DIR) \
+ --with-local-prefix=$(UCLIBC_SYSROOT_DIR) \
+ --disable-multilib \
+ --with-newlib \
+ --with-sysroot=$(UCLIBC_SYSROOT_DIR) \
+ --enable-__cxa_atexit \
+ --disable-nls \
+ --enable-threads=no \
+ --enable-symvers=gnu \
+ --enable-languages=c \
+ --disable-shared \
+ --enable-target-optspace
+ cd $(DIR_SRC)/gcc-build && make $(PARALLELISMFLAGS) all-gcc
+ cd $(DIR_SRC)/gcc-build && make install-gcc
+endif
+
+ifeq "$(PASS)" "2"
+ cd $(DIR_SRC)/gcc-build && CC_FOR_BUILD="$(HOST_GCC)" ../$(THISAPP)/configure \
+ --target=$(UCLIBC_TARGET) \
+ --prefix=$(UCLIBC_DIR) \
+ --with-local-prefix=$(UCLIBC_SYSROOT_DIR) \
+ --disable-multilib \
+ --with-sysroot=$(UCLIBC_SYSROOT_DIR) \
+ --enable-__cxa_atexit \
+ --disable-nls \
+ --enable-threads=posix \
+ --enable-symvers=gnu \
+ --enable-c99 \
+ --enable-long-long \
+ --enable-languages=c,c++ \
+ --enable-target-optspace \
+ --enable-shared
+ cd $(DIR_SRC)/gcc-build && make $(PARALLELISMFLAGS)
+ cd $(DIR_SRC)/gcc-build && make install
+
+ ln -svf $(UCLIBC_DIR)/bin/$(UCLIBC_TARGET)-gcc \
+ $(UCLIBC_DIR)/bin/$(UCLIBC_TARGET)-cc
+ cp -vaf $(UCLIBC_DIR)/$(UCLIBC_TARGET)/lib/* $(UCLIBC_SYSROOT_DIR)/usr/lib
+endif
+endif
+
@rm -rf $(DIR_APP) $(DIR_SRC)/gcc-build
@$(POSTBUILD)
endif
ifeq "$(STAGE)" "base"
- cd $(DIR_APP) && ./configure --prefix=/usr
+ cd $(DIR_APP) && ./configure --prefix=/usr --disable-static
- cd $(DIR_APP) && make -j $(PARALLELISM)
+ cd $(DIR_APP) && make $(PARALLELISMFLAGS)
cd $(DIR_APP) && make install
endif
@rm -rf $(DIR_APP) $(DIR_SRC)/glibc-build && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
@mkdir $(DIR_SRC)/glibc-build
- ifeq "$(firstword $(MAKEFILE_LIST))" "$(PKG_NAME)"
- #
- # Normal build
- #
-
ifeq "$(STAGE)" "toolchain"
- cd $(DIR_SRC)/glibc-build && echo "CFLAGS += -march=$(MACHINE)" > configparms
- cd $(DIR_SRC)/glibc-build && CFLAGS="$(CFLAGS)" ../$(THISAPP)/configure \
- --prefix=$(TOOLS_DIR) --disable-profile --enable-add-ons \
- --enable-kernel=2.6.0 --with-binutils=$(TOOLS_DIR)/bin \
- --without-gd --with-headers=$(TOOLS_DIR)/include \
- --without-selinux
-
+ ifeq "$(MACHINE)" "i586"
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-i586_chk-2.patch
+ endif
+ ifeq "$(PAX)" "1"
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-pt_pax-1.patch
+ endif
+ cd $(DIR_SRC)/glibc-build && CFLAGS="-O2 -march=$(MACHINE) -pipe" \
+ ../$(THISAPP)/configure \
+ --prefix=$(TOOLS_DIR) \
+ --host=$(IFS_TARGET) \
+ --build=$(shell $(DIR_APP)/scripts/config.guess) \
+ --disable-profile \
+ --enable-add-ons \
+ --enable-kernel=2.6.0 \
+ --with-headers=$(TOOLS_DIR)/include \
+ --without-selinux \
+ --without-gd \
+ --enable-bind-now \
+ libc_cv_initfini_array=yes \
+ libc_cv_forced_unwind=yes \
+ libc_cv_c_cleanup=yes
+ #--with-binutils=$(TOOLS_DIR)/bin
- cd $(DIR_SRC)/glibc-build && make PARALLELMFLAGS=-j$(PARALLELISM)
+ cd $(DIR_SRC)/glibc-build && make PARALLELMFLAGS=$(PARALLELISMFLAGS)
-mkdir -v $(TOOLS_DIR)/etc
touch $(TOOLS_DIR)/etc/ld.so.conf
cd $(DIR_SRC)/glibc-build && make install
cd $(DIR_APP) && sed -i 's|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=$(LINKER) -o|' \
scripts/test-installation.pl
cd $(DIR_APP) && sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in
- cd $(DIR_SRC)/glibc-build && echo "CFLAGS += -march=$(MACHINE)" > configparms
- cd $(DIR_SRC)/glibc-build && ../$(THISAPP)/configure --prefix=/usr \
- --disable-profile --enable-add-ons --enable-kernel=2.6.0 \
- --libexecdir=/usr/lib/glibc
-
+ ifeq "$(PAX)" "1"
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-pt_pax-1.patch
+ endif
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-arc4_prng-1.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-strlcpy_strlcat-1.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-asprintf_reset2null-1.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-issetugid-1.patch
+ cd $(DIR_APP) && sed 's/#define UNSECURE_ENVVARS.*/&\
+ "MUDFLAP_OPTIONS\\0" \\/' -i.orig sysdeps/generic/unsecvars.h
+ ifeq "$(SSP)" "1"
+ cd $(DIR_APP) && sed 's/-nostdlib/& -fno-stack-protector/g' -i.orig configure
+ cd $(DIR_APP) && sed 's/fstack-protector/&-all/' -i.orig nscd/Makefile
+ endif
+ ifeq "$(PIE)" "1"
+ cd $(DIR_APP) && sed 's/CFLAGS-ldconfig.c =/& -fno-PIC -fno-PIE/' \
+ -i.orig elf/Makefile
+ endif
+ cd $(DIR_SRC)/glibc-build && \
+ CFLAGS="-O2 -march=$(MACHINE) -pipe" \
+ ../$(THISAPP)/configure $(CONFIGURE_ARGS)
+ ifeq "$(SSP)" "1"
+ ## First compile the libraries
+ echo "build-programs=no" >> $(DIR_SRC)/glibc-build/configparms
+ echo "CC = gcc -fPIC -fno-stack-protector -U_FORTIFY_SOURCE -nonow -nopie" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ echo "CXX = g++ -fPIC -fno-stack-protector -U_FORTIFY_SOURCE -nonow -nopie" \
+ >> $(DIR_SRC)/glibc-build/configparms
- cd $(DIR_SRC)/glibc-build && make PARALLELMFLAGS=-j$(PARALLELISM)
++ cd $(DIR_SRC)/glibc-build && make PARALLELMFLAGS=$(PARALLELISMFLAGS)
+
+ ## Second compile the rest
+ @rm -f $(DIR_SRC)/glibc-build/configparms
+ echo "CC = gcc -fPIE -fstack-protector-all -D_FORTIFY_SOURCE=2" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ echo "CXX = g++ -fPIE -fstack-protector-all -D_FORTIFY_SOURCE=2" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ echo "CFLAGS-sln.c += -fno-PIC -fno-PIE" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ echo "+link = \$$(CC) -nostdlib -nostartfiles -fPIE -pie -o \$$@ \\" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ echo " \$$(sysdep-LDFLAGS) \$$(config-LDFLAGS) \$$(LDFLAGS) \$$(LDFLAGS-\$$(@F)) \\" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ echo " -Wl,-z,combreloc -Wl,-z,relro -Wl,-z,now \$$(hashstyle-LDFLAGS) \\" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ echo " \$$(addprefix \$$(csu-objpfx),S\$$(start-installed-name)) \\" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ echo " \$$(+preinit) `\$$(CC) --print-file-name=crtbeginS.o` \\" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ echo " \$$(filter-out \$$(addprefix \$$(csu-objpfx),start.o \\" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ echo " \$$(start-installed-name))\\" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ echo " \$$(+preinit) \$$(link-extra-libs) \\" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ echo " \$$(common-objpfx)libc% \$$(+postinit),\$$^) \\" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ echo " \$$(link-extra-libs) \$$(link-libc) `\$$(CC) --print-file-name=crtendS.o` \$$(+postinit)" \
+ >> $(DIR_SRC)/glibc-build/configparms
+ endif
+
- cd $(DIR_SRC)/glibc-build && make PARALLELMFLAGS=-j$(PARALLELISM)
+ cd $(DIR_SRC)/glibc-build && make PARALLELMFLAGS=$(PARALLELISMFLAGS)
touch /etc/ld.so.conf
cd $(DIR_SRC)/glibc-build && make install
-
+
+ install -vd /usr/lib/static/
+ mv -v /usr/lib/{libbsd-compat,libg,libieee,libmcheck}.a /usr/lib/static/
+ mv -v /usr/lib/{libBrokenLocale,libanl,libcrypt}.a /usr/lib/static/
+ mv -v /usr/lib/{libm,libnsl,libpthread,libresolv}.a /usr/lib/static/
+ mv -v /usr/lib/{librpcsvc,librt,libutil}.a /usr/lib/static/
+
# Locales
- -mkdir -pv /usr/lib/locale
- localedef -i de_DE -f UTF-8 de_DE.UTF-8
- localedef -i de_DE -f ISO-8859-1 de_DE
- localedef -i en_US -f UTF-8 en_US.UTF-8
- localedef -i en_US -f ISO-8859-1 en_US
- localedef -i en_GB -f UTF-8 en_GB.UTF-8
- localedef -i en_GB -f ISO-8859-1 en_GB
-
+ cd $(DIR_SRC)/glibc-build && make localedata/install-locales
+
# Timezone
cp -v --remove-destination /usr/share/zoneinfo/GMT /etc/localtime
- endif
- else
- #
- # Cross build
- #
-
- cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-libgcc_eh-1.patch
- cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-localedef_segfault-1.patch
- cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-i586_chk-1.patch
-
- echo "libc_cv_forced_unwind=yes" > $(DIR_SRC)/glibc-build/config.cache
- echo "libc_cv_c_cleanup=yes" >> $(DIR_SRC)/glibc-build/config.cache
-
- cd $(DIR_SRC)/glibc-build && BUILD_CC="gcc" \
- CC="$(IFS_TARGET)-gcc" \
- AR="$(IFS_TARGET)-ar" \
- RANLIB="$(IFS_TARGET)-ranlib" \
- CFLAGS="-march=$$(cut -d- -f1 <<< $(IFS_TARGET)) -mtune=generic -g -O2" \
- ../$(THISAPP)/configure \
- --prefix=$(TOOLS_DIR) \
- --host=${IFS_TARGET} \
- --build=$(IFS_HOST) \
- --disable-profile \
- --enable-add-ons \
- --with-tls \
- --enable-kernel=2.6.0 \
- --with-__thread \
- --with-binutils=$(CTOOLS_DIR)/bin \
- --with-headers=$(TOOLS_DIR)/include \
- --cache-file=config.cache
- cd $(DIR_SRC)/glibc-build && make PARALLELMFLAGS=$(PARALLELISMFLAGS)
- cd $(DIR_SRC)/glibc-build && make install
-
+ # Set up ld.so.conf
+ echo -e "# Begin /etc/ld.so.conf\n" >> /etc/ld.so.conf
+ echo -e "/usr/local/lib\n" >> /etc/ld.so.conf
+ echo "# End /etc/ld.so.conf" >> /etc/ld.so.conf
endif
@rm -rf $(DIR_APP) $(DIR_SRC)/glibc-build
sed 's/futimens/gl_&/' $$file.orig > $$file; \
done
+ ifeq "$(PIE)" "1"
+ ## Don't use assembler code because this is not position independent.
+ cd $(DIR_APP) && DEFS=NO_ASM ./configure --prefix=$(TOOLS_DIR)
+ else
cd $(DIR_APP) && ./configure --prefix=$(TOOLS_DIR)
- cd $(DIR_APP) && make -j $(PARALLELISM)
+ cd $(DIR_APP) && make $(PARALLELISMFLAGS)
+ endif
cd $(DIR_APP) && make install
endif
# Installation Details
###############################################################################
-$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+$(TARGET) :
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
- cd $(DIR_APP) && ./configure --prefix=/usr
+ cd $(DIR_APP) && ./configure --prefix=/usr --disable-static
- cd $(DIR_APP) && make -j $(PARALLELISM)
+ cd $(DIR_APP) && make $(PARALLELISMFLAGS)
cd $(DIR_APP) && make install
@rm -rf $(DIR_APP)
@$(POSTBUILD)
cd $(DIR_APP) && sed -i '/MV.*old/d' Makefile.in
cd $(DIR_APP) && sed -i '/{OLDSUFF}/c:' support/shlib-install
cd $(DIR_APP) && patch -Np1 -i $(DIR_PATCHES)/$(THISAPP)-fixes-5.patch
-
- cd $(DIR_APP) && ./configure --prefix=/usr --libdir=/lib --disable-static
-
- cd $(DIR_APP) && make -j $(PARALLELISM) SHLIB_LIBS=-lncurses
+
+ifeq "$(STAGE)" "base"
- cd $(DIR_APP) && ./configure --prefix=/usr --libdir=/lib
-
++ cd $(DIR_APP) && ./configure --prefix=/usr --libdir=/lib --disable-static
+ cd $(DIR_APP) && make $(PARALLELISMFLAGS) SHLIB_LIBS=-lncurses
cd $(DIR_APP) && make install
mv -v /lib/lib{readline,history}.a /usr/lib
rm -v /lib/libz.so
ln -sfv ../../lib/libz.so.$(VER) /usr/lib/libz.so
-
- cd $(DIR_APP) && make clean
- cd $(DIR_APP) && ./configure --prefix=/usr
- cd $(DIR_APP) && make $(PARALLELISMFLAGS)
- cd $(DIR_APP) && make install
--
- chmod -v 644 /usr/lib/libz.a
+endif
+
+ifeq "$(STAGE)" "installer"
+ cd $(DIR_APP) && $(U_TOOLS) ./configure --prefix=/usr \
+ --shared \
+ --libdir=/lib
+ cd $(DIR_APP) && make $(PARALLELISMFLAGS)
+ cd $(DIR_APP) && install -v -m 644 zlib.h zconf.h \
+ $(INSTALLER_DIR)/usr/include
+ cd $(DIR_APP) && install -v -m 755 libz.so.$(VER) \
+ $(INSTALLER_DIR)/usr/lib
+ ln -svf libz.so.$(VER) $(INSTALLER_DIR)/usr/lib/libz.so.1
+ ln -svf libz.so.$(VER) $(INSTALLER_DIR)/usr/lib/libz.so
+endif
+
@rm -rf $(DIR_APP)
@$(POSTBUILD)
############################################################################
#
-NAME="IPFire" # Software name
-SNAME="ipfire" # Short name
-VERSION="3.0-prealpha" # Version number
+NAME="IPFire" # Software name
+SNAME="ipfire" # Short name
+VERSION="3.0-prealpha" # Version number
- TOOLCHAINVERSION="${VERSION}-3" # Toolchain
+ TOOLCHAINVERSION="${VERSION}-4" # Toolchain
-SLOGAN="www.ipfire.org" # Software slogan
+SLOGAN="www.ipfire.org" # Software slogan
# Include funtions
. tools/make-include
MACHINE_REAL=`uname -m`
GIT_TAG=$(git tag | tail -1)
+ # Security options
+ SSP=1
+ PIE=1
+ PAX=1
+
# Parallelism flag
-PARALLELISM=$(( $(grep processor < /proc/cpuinfo | wc -l) * 2 + 1 ))
+PARALLELISMFLAGS=-j$(( $(grep processor < /proc/cpuinfo | wc -l) * 2 + 1 ))
DISTCC_HOSTS=localhost
PWD=`pwd`
unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
# Make some extra directories
- mkdir -p $BASEDIR/build_${MACHINE}/{$TOOLS_DIR,$CTOOLS_DIR,cdrom} 2>/dev/null
- mkdir -p $BASEDIR/build_${MACHINE}/{$TOOLS_DIR,$INSTALLER_DIR,cdrom,images} 2>/dev/null
++ mkdir -p $BASEDIR/build_${MACHINE}/{$TOOLS_DIR,cdrom} 2>/dev/null
mkdir -p $BASEDIR/{cache,ccache,distcc} 2>/dev/null
- mkdir -p $LFS/{$TOOLS_DIR/usr,$CTOOLS_DIR,usr/src} 2>/dev/null
+ mkdir -p $BASEDIR/cache/toolchains 2>/dev/null
+ mkdir -p $LFS/{$TOOLS_DIR/usr,usr/src} 2>/dev/null
mkdir -p $LFS/dev/pts
mkdir -p $LFS/proc
mkdir -p $LFS/usr/src/{cache,config,doc,lfs,log_${MACHINE},src,ccache,distcc}
mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
# Make all sources and proc available under lfs build
- mount --bind /dev $LFS/dev
- mount --bind /proc $LFS/proc
- mount --bind $BASEDIR/cache $LFS/usr/src/cache
- mount --bind $BASEDIR/ccache $LFS/usr/src/ccache
- mount --bind $BASEDIR/distcc $LFS/usr/src/distcc
- mount --bind $BASEDIR/config $LFS/usr/src/config
- mount --bind $BASEDIR/doc $LFS/usr/src/doc
- mount --bind $BASEDIR/lfs $LFS/usr/src/lfs
- mount --bind $BASEDIR/log_${MACHINE} $LFS/usr/src/log_${MACHINE}
- mount --bind $BASEDIR/src $LFS/usr/src/src
- mount --bind $BASEDIR/build_${MACHINE}/$TOOLS_DIR $LFS/$TOOLS_DIR
- mount --bind $BASEDIR/build_${MACHINE}/$INSTALLER_DIR $LFS/$INSTALLER_DIR
- mount --bind $BASEDIR/build_${MACHINE}/$CDROM_DIR $LFS/$CDROM_DIR
- mount --bind $BASEDIR/build_${MACHINE}/$IMAGES_DIR $LFS/$IMAGES_DIR
+ mount --bind /dev $LFS/dev
+ mount --bind /proc $LFS/proc
+ mount --bind $BASEDIR/cache $LFS/usr/src/cache
+ mount --bind $BASEDIR/ccache $LFS/usr/src/ccache
+ mount --bind $BASEDIR/distcc $LFS/usr/src/distcc
+ mount --bind $BASEDIR/config $LFS/usr/src/config
+ mount --bind $BASEDIR/doc $LFS/usr/src/doc
+ mount --bind $BASEDIR/lfs $LFS/usr/src/lfs
+ mount --bind $BASEDIR/log_${MACHINE} $LFS/usr/src/log_${MACHINE}
+ mount --bind $BASEDIR/src $LFS/usr/src/src
+ mount --bind $BASEDIR/build_${MACHINE}/$TOOLS_DIR $LFS/$TOOLS_DIR
- mount --bind $BASEDIR/build_${MACHINE}/$CTOOLS_DIR $LFS/$CTOOLS_DIR
+ mount --bind $BASEDIR/build_${MACHINE}/$CDROM_DIR $LFS/$CDROM_DIR
# Run LFS static binary creation scripts one by one
export CCACHE_DIR=$BASEDIR/ccache