kilabit.info
Simple | Small | Stable | Secure

Rebuild the system

Since i am too lazy to build Gentoo Linux from scratch, I decided to re-compile just half of the applications in my base system, which is OpenSuSE 10.3, to utilizing my X2 processor.

List of source to be compiled:

  • kernel

  • git

  • wine

  • qt

  • kde 3

  • xorg

Started by defining custom CFLAGS to environment i add these variable to my .profile,

export CFLAGS="-Wall -g -march=k8-sse3 -msse3 -O2 -pipe"
export CPPFLAGS=${CFLAGS}
export CXXFLAGS=${CFLAGS}

Part I: Linux kernel custom CFLAGS compilation

Below is a patch to customize Linux Makefile so it compile with custom CFLAGS. Since we do not want "-g" (debug flag) we defined the CFLAGS variable directly.

diff --git a/Makefile b/Makefile
index b57e1f5..9abc0c4 100644
--- a/Makefile
+++ b/Makefile
@@ -229,10 +229,11 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
      else if [ -x /bin/bash ]; then echo /bin/bash; \
      else echo sh; fi ; fi)

+CUSTOM_CFLAGS= -march=k8-sse3 -msse3 -O2
HOSTCC       = gcc
HOSTCXX      = g++
-HOSTCFLAGS   = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
-HOSTCXXFLAGS = -O2
+HOSTCFLAGS   = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer $(CUSTOM_CFLAGS)
+HOSTCXXFLAGS = -O2 $(CUSTOM_CFLAGS)

# Decide whether to build built-in, modular, or both.
# Normally, just do built-in.
@@ -333,10 +334,10 @@ CHECK        = sparse
CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
          -Wbitwise -Wno-return-void $(CF)
MODFLAGS    = -DMODULE
-CFLAGS_MODULE   = $(MODFLAGS)
+CFLAGS_MODULE   = $(MODFLAGS) $(CUSTOM_CFLAGS)
AFLAGS_MODULE   = $(MODFLAGS)
LDFLAGS_MODULE  =
-CFLAGS_KERNEL    =
+CFLAGS_KERNEL    = $(CUSTOM_CFLAGS)
AFLAGS_KERNEL    =

@@ -351,7 +352,8 @@ KBUILD_CPPFLAGS := -D__KERNEL__

KBUILD_CFLAGS   := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
           -fno-strict-aliasing -fno-common \
-           -Werror-implicit-function-declaration
+           -Werror-implicit-function-declaration \
+            $(CUSTOM_CFLAGS)
KBUILD_AFLAGS   := -D__ASSEMBLY__

# Read KERNELRELEASE from include/config/kernel.release (if it exists)

Part II: Git

One advantage of Git was it's does need installation, you just do "make" and by setting some Git's environment variable it will work in any place in your system.

First, add Git environment variable to .profile:

export GIT_EXEC_PATH=/home/src/kernel.org/git.git
export GITPERLLIB=${GIT_EXEC_PATH}/perl/blib/lib
export PATH=${GIT_EXEC_PATH}:${PATH}
export MANPATH=${GIT_EXEC_PATH}:${MANPATH}

A patch to make Git's "Makefile" use CFLAGS from system and create link for man path and gitk for use with GIT_EXEC_PATH.

diff --git a/.gitignore b/.gitignore
index 41c0b20..6a4dd80 100644
--- a/.gitignore
+++ b/.gitignore
@@ -145,6 +145,7 @@ git-web--browse
 git-whatchanged
 git-write-tree
 git-core-*/?*
+gitk
 gitk-wish
 gitweb/gitweb.cgi
 test-chmtime
diff --git a/Makefile b/Makefile
index 26d180c..29f839b 100644
--- a/Makefile
+++ b/Makefile
@@ -189,7 +189,7 @@ uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')

 # CFLAGS and LDFLAGS are for the users to override from the command line.

-CFLAGS = -g -O2 -Wall
+CFLAGS ?= -g -O2 -Wall
 LDFLAGS =
 ALL_CFLAGS = $(CFLAGS)
 ALL_LDFLAGS = $(LDFLAGS)
@@ -256,6 +256,7 @@ RPMBUILD = rpmbuild
 TCL_PATH = tclsh
 TCLTK_PATH = wish
 PTHREAD_LIBS = -lpthread
+LN = ln -sf

 export TCL_PATH TCLTK_PATH

@@ -1205,6 +1206,7 @@ all::
 ifndef NO_TCLTK
  $(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
  $(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
+ @$(LN) gitk-git/gitk-wish gitk
 endif
 ifndef NO_PERL
  $(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' all
@@ -1402,6 +1404,7 @@ doc:

 man:
  $(MAKE) -C Documentation man
+ @$(LN) Documentation man1

 html:
  $(MAKE) -C Documentation html
@@ -1646,7 +1649,7 @@ clean:
  $(RM) config.log config.mak.autogen config.mak.append config.status config.cache
  $(RM) -r $(GIT_TARNAME) .doc-tmp-dir
  $(RM) $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz
- $(RM) $(htmldocs).tar.gz $(manpages).tar.gz
+ $(RM) $(htmldocs).tar.gz $(manpages).tar.gz man1
  $(MAKE) -C Documentation/ clean
 ifndef NO_PERL
  $(RM) gitweb/gitweb.cgi
@@ -1657,6 +1660,7 @@ endif
 ifndef NO_TCLTK
  $(MAKE) -C gitk-git clean
  $(MAKE) -C git-gui clean
+ $(RM) gitk
 endif
  $(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-GUI-VARS GIT-BUILD-OPTIONS

Part III: Wine

Wine will be installed in it's own directory, in this example i use "/home/sys/wine".

First set .profile,

WINE_DIR=/home/sys/wine
export PATH=${WINE_DIR}/bin:${PATH}
export LD_LIBRARY_PATH=${WINE_DIR}/lib:${LD_LIBRARY_PATH}
export MANPATH=${WINE_DIR}/share/man:${MANPATH}

and then compile Wine by configuring prefix point to "/home/sys/wine".

Part IV: Qt

Set .profile,

export QTDIR=/home/sys/qt
export PATH=${QTDIR}/bin:${PATH}
export LD_LIBRARY_PATH=${QTDIR}/lib:${LD_LIBRARY_PATH}
export MANPATH=${QTDIR}/doc/man:${MANPATH}

Add CFLAGS value directly to qmake.conf. You cannot just add $(CFLAGS) there!

diff --git a/mkspecs/linux-g++/qmake.conf b/mkspecs/linux-g++/qmake.conf
index b233d21..2a0d48a 100644
--- a/mkspecs/linux-g++/qmake.conf
+++ b/mkspecs/linux-g++/qmake.conf
@@ -16,7 +16,7 @@ QMAKE_YACCFLAGS               = -d
 QMAKE_YACCFLAGS_MANGLE  = -p $base -b $base
 QMAKE_YACC_HEADER       = $base.tab.h
 QMAKE_YACC_SOURCE       = $base.tab.c
-QMAKE_CFLAGS           = -pipe
+QMAKE_CFLAGS           = -pipe -march=k8-sse3 -msse3 -O2
 QMAKE_CFLAGS_DEPS      = -M
 QMAKE_CFLAGS_WARN_ON   = -Wall -W
 QMAKE_CFLAGS_WARN_OFF  = -w

Part V : KDE

It's easy, just follow BLFS's guide. After compiling kde-base -at least- and if you want to use kdm as a login manager then you should create PAM configuration. Go to /etc/pam.d, create "kde" and "kdm" file by cloning "xdm" file.

# cd /etc/pam.d
# cp xdm kdm
# cp xdm kde

Part VI: X.org

It not easy, I would say impossible, because I use an abnormal prefix, which is "/home/sys/xorg". But if you wanna try it, looks here.

--