Right now we are copying code for building kernel 2.6 modules to each
spec which provides them. It is a little hard to maintain and to add
some functionality. I have created macro for building modules based on
that code, a little expanded (with cross-compilation support). Now in
spec file thete will only have to be some thing like:

%if %{with kernel}
cd module/place
%build_kernel_modules module_name1 module_name2
cd ../..
%endif


If some additional options for make modules are required they may be
passed like: -1 option1 -2 option2 -3 option3; up to 9 options are
supported.

Exemple when some additional option in make modules is required:

%build_kernel_modules -1 T=$TMPDIR mol


There may be 2 options passed to make prepare scripts: -p o1 -P o2.
Module patching is supported via shell script called pld-module.patch.

Exemple with additional patching:

%if %{with kernel}
cp -f pwc-if.c pwc-if.c.orig

cat > pld-module.patch <<'EOF'
set -e -x
if grep -q "CONFIG_PREEMPT_RT" o/.config; then
        sed 's/SPIN_LOCK_UNLOCKED/SPIN_LOCK_UNLOCKED(pdev->ptrlock)/' \
                pwc-if.c.orig > pwc-if.c
else
        cat pwc-if.c.orig > pwc-if.c
fi
EOF

%build_kernel_modules pwc
%endif


Now, take a look at the code and propose your additions! Number and use
of backshashes is scary, but it has to be this way as %define is expanded
before anything.


-- 
 ____  Sparky{PI] -- Przemyslaw _  ___  _  _  ........... LANG...Pl..Ca..Es..En
/____) ___  ___  _ _ || Iskra  |  | _ \| |  | : WWW........ppcrcd.pld-linux.org
\____\| -_)'___| ||^'||//\\// <   |  _/| |  | : JID......sparky<at>jabberes.org
(____/||   (_-_|_||  ||\\ ||   |_ |_|  |_| _| : Mail....sparky<at>pld-linux.org
%build_kernel_modules(1:2:3:4:5:6:7:8:9:p:P:)                                   
\
%{!?1:%{error:build_kernel_modules: Required module name missing}}              
\
                                                                                
\
%define Opts                                                                    
\\\\\\\
%if "%{_target_base_arch}" != "%{_arch}"                                        
\\\
        %if "%{_arch}" == "x86_64" && "%{_target_base_arch}" == "i386"          
\\\
        CC="%{__cc}" CPP="%{__cpp}" ARCH=%{_target_base_arch}                   
\\\
        %else                                                                   
\\\
        ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux-       
\\\
        %endif                                                                  
\\\
%else                                                                           
\\\
        CC="%{__cc}" CPP="%{__cpp}"                                             
\\\
%endif                                                                          
\
%define MakeOpts HOSTCC="%{__cc}" %{?with_verbose:V=1} %{Opts}                  
\
                                                                                
\
for cfg in %{?with_dist_kernel:%{?with_smp:smp} 
up}%{!?with_dist_kernel:nondist}; do \
        if [ ! -r "%{_kernelsrcdir}/config-$cfg" ]; then                        
\
                exit 1                                                          
\
        fi                                                                      
\
        install -d o/include/linux                                              
\
        ln -sf %{_kernelsrcdir}/config-$cfg o/.config                           
\
        ln -sf %{_kernelsrcdir}/Module.symvers-$cfg o/Module.symvers            
\
        ln -sf %{_kernelsrcdir}/include/linux/autoconf-$cfg.h 
o/include/linux/autoconf.h \
                                                                                
\
        [ ! -e pld-module.patch ] || %__spec_build_shell pld-module.patch       
\
                                                                                
\
        %if %{with dist_kernel}                                                 
\
                %{__make} -j1 -C %{_kernelsrcdir} prepare scripts               
\\\
                        O=$PWD/o %{-p*} %{-P*}                                  
\\\
                        %{MakeOpts}                                             
\
        %else                                                                   
\
                install -d o/include/config                                     
\
                touch o/include/config/MARKER                                   
\
                ln -sf %{_kernelsrcdir}/scripts o/scripts                       
\
        %endif                                                                  
\
                                                                                
\
        %{__make} -C %{_kernelsrcdir} modules                                   
\\\
                M=$PWD O=$PWD/o                                                 
\\\
                %{-1*} %{-2*} %{-3*} %{-4*} %{-5*} %{-6*} %{-7*} %{-8*} %{-9*}  
\\\
                %{MakeOpts}                                                     
\
                                                                                
\
        for MODULE in %{*}; do                                                  
\
                mv ${MODULE}{,-$cfg}.ko                                         
\
        done                                                                    
\
done                                                                            
\
%{nil}
_______________________________________________
pld-devel-en mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-devel-en

Reply via email to