logo.png

CVS

MAKEFILE

TFTP

NFS

DHCP

CORBA

RPM


Pince à sertir

Serveur de boot

Poste client

Switchs labo

Home Up


Contents



1 Introduction

Cette section décrit les Makefiles utilisés pour compiler :

  • le module CVS SBig
  • les contrôleurs CORBA


2 Contrôleurs CORBA

Makefile utilisé pour compiler les contrôleurs CORBA.


3 Module CVS SBig

Makefile utilisé pour compiler le module CVS SBig.

  • Comme le montre la variable CROSS_COMPILE, on utilise le même compilateur que celui que l'on a utilisé pour compiler le noyau de la cible.

    $ grep ^CC /opt/sugarhat/devkit/eldk/ppc_74xx/usr/src/linux/Makefile 
    CC              = $(CROSS_COMPILE)gcc
    
    $ find ~/SBig/ -name 'Make.*' -exec grep CROSS_COMPILE {} /dev/null \; 
    ./Make.rules:   CROSS_COMPILE   := $(shell cat $(HH_HOME)/SBig/.shl_cross_compile)
    ./Make.rules:   CROSS_COMPILE   := $(shell cat $(HH_HOME)/SBig/.hhl_cross_compile)
    ./Make.rules:CC              = $(CROSS_COMPILE)gcc
    ./Make.rules:STRIP              = $(CROSS_COMPILE)strip
    
    $ cat ~/SBig/.shl_cross_compile
    /opt/sugarhat/devkit/eldk-4.0/usr/bin/ppc_74xx-
    
    $ ls -di /opt/sugarhat/devkit/eldk-4.0/usr/bin
    53412066 /opt/sugarhat/devkit/eldk-4.0/usr/bin
    
    $ grep CROSS_COMPILE /opt/sugarhat/devkit/sugarhat-env-current.sh
    export CROSS_COMPILE="/opt/CES/devkit/eldk/usr/bin/powerpc-linux-"
    
    $ ls -di /opt/CES/devkit/eldk/usr/bin/
    53412066 /opt/CES/devkit/eldk/usr/bin/
    

  • A priori le Makefile est chargé de reliquats du passé. Par exemple : la variable MYHAT ne semble plus être utilisée qu'avec la valeur sugarhat

    $ find . -name 'Make.*' -exec grep MYHAT -A4 {} /dev/null \; 
    ./Make.rules:MYHAT              = sugarhat
    ...
    --
    ./Make.rules:ifeq ($(MYHAT),sugarhat)
    ./Make.rules-INCLUDES   += -I/opt/sugarhat/linux-kernel/include
    ./Make.rules-else
    ./Make.rules-INCLUDES   += -I/opt/sugarhat/devkit/lsp/ces-rio/linux-2.2.12-2-rio/include
    ./Make.rules-endif
    --
    ./Make.rules:ifeq ($(MYHAT),sugarhat)
    ./Make.rules-   CROSS_COMPILE   := $(shell cat $(HH_HOME)/SBig/.shl_cross_compile)
    ./Make.rules-else
    ./Make.rules-   CROSS_COMPILE   := $(shell cat $(HH_HOME)/SBig/.hhl_cross_compile)
    ./Make.rules-endif
    
    $ ls /opt/sugarhat/linux-kernel/include | wc -l
    45
    
    $ ls /opt/sugarhat/devkit/eldk-4.0/usr/bin/ppc_74xx-* | wc -l
    21
    
    $ ls /opt/sugarhat/devkit/lsp/ces-rio/linux-2.2.12-2-rio/include
    Aucun fichier ou dossier de ce type
    
    $ ls /opt/hardhat/devkit/ppc/7xx/bin/ppc_7xx-*
    Aucun fichier ou dossier de ce type
    

  • Mode non-verbeux sur les sous-répetrtoires
    $ $ find . -name "Make*" -exec grep -n '$(MAKE) -s' {} /dev/null \;
    ./Makefile:34:          $(MAKE) -s -C $$dir && res=1; \
    ./Server/Bigd/Makefile:60:              $(MAKE) -s -C $$dir && res=1; \
    ./Server/Makefile:21:           $(MAKE) -s -C $$dir && res=1; \
    ./Server/Emilie/Makefile:32:            $(MAKE) -s -C $$dir && res=1; \
    
    $ man make
    ...
     -s   Opération silencieuse ; ne pas afficher les commandes quand elles
                sont exécutées.
    


3.1 Compilation des drivers

On compile directement sur la cible.

# Take care, this make file will be re-call by kernel's Makefile with M defined

ifndef M
# only first call of this Makefile enter here

.PHONY: all clean

all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

else

# only kernel call of this Makefile enter here.
# warning, $(PWD) env variable is usabble but not $(shell env) which value
# is the directory where make -C was launch
include $(PWD)/../../ppc.rules

EXTRA_CFLAGS += $(CFLAGS) -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
          -fno-strict-aliasing -fno-common \
          -ffreestanding \
          -I. \
          -I$(PWD)/../include \
          -I/usr/src/linux/include \
          -I/usr/include/ces

KBUILD_NOPEDANTIC := 1
DRIVER  := papat26_slc papat26_dat
obj-m   += papat26_slc.o papat26_dat.o

endif


3.2 Cross-compilation des démons

  • L'astuce est là :
    CROSS_COMPILE   := $(shell cat $(HH_HOME)/SBig/.shl_cross_compile)
    

  • MAKEDEPEND complète le make file
    # apt-get install xutils-dev
    $ makedepend toto.c
    $ cat Makefile
    
    toto:   toto.c tata.h
            gcc toto.c -o toto
    
    # DO NOT DELETE
    toto.o: tata.h titi.h
    


3.3 Cross-compilation des démons avec bibliothèque

Ajout de la bibliothèque libnetsnmp.so.

  • Ajout des fichiers include :
    $ ssh roche@192.168.1.9
    $ cd ~/SBig/Server/Bigd/Util
    $ make Wiener.o
    /home/roche/SBig/Server/include/Wiener.h:16:38: error: net-snmp/net-snmp-config.h: 
    No such file or directory
    
    $ cp -fr /opt/sugarhat/devkit/target12/usr/local/include/net-snmp ~/SBig/Server/include/
    $ make Wiener.o
    

  • Modification du Makefile ( /SBig/Server/Bigd/Makefile):
    LIBS   += -L../lib -lm -lpthread -lnetsnmp
    

  • Ajout du fichiers LIBNETSNMP.SO :
    $ cd ~/SBig/Server/Bigd
    $ make big
    cannot find -lnetsnmp
    
    $ cp /opt/sugarhat/devkit/target12/usr/local/lib/libnetsnmp.so ~/SBig/Server/lib/
    $ make big
    


4 Compilation des librairies embarquées

Les librairies embarquées sont compilées sur cible en utilisant les scripts mis à disposition dans le code sources. Cf cette page.

Home Up

This document is also available in PDF and PostScript format.



2016-02-15