Mon projet consiste à générer un fichier binaire pour le faire lire par un motorola 680x0. L'idée est de faire une ROM s'insipirant du modèle de l'Amiga, c'est à dire que le kernel est composé de multiples bibliothèques. Pour cela, un peu d'éléments de contexte :

- GNU m68k-elf-*

- CMake 3.x

- le projet s'articule comme suit :

src/
├── bootstrap
│ └── bootstrap.s
├── devices
│ ├── input.device
│ └── serial.device
└── libraries
├── dos.library
├── exec.library
└── graphics.library


src/bootstrap/bootstrap.s contient le code assembleur pour gérer le démarrage du 680x0 et les répertoires devices/ et libraries/ contiennent les sources des différents "modules". Pour plus de détails, le dépôt git : https://gitlab.mimicprod.net/os/miga.

J'utilise CMake pour faire des bibliothèques statiques, ce qui me donne un libXXXXXX.a pour chaque module et le bootstrap, le tout au format ELF.

Maintenant, je souhaiterai mettre tous ces .a dans un seul et même fichier (ELF ou binaire). Pour cela, j'ai ce fichier pour le linker :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
MEMORY {
    ram (rwx): ORIGIN = 0x0, LENGTH = 15M
    rom (rx): ORIGIN = 0xF00000, LENGTH = 1M
};
 
PROVIDE (_stack = ORIGIN(ram) + LENGTH(ram));
 
ENTRY (_reset_handler);
 
SECTIONS
{
    .text : {
        *(.text*)
        *(.data*)
        *(.bss*)
        . = ALIGN(4);
    } >rom
};
Le problème est que le fichier produit ne contient que le source code de bootstrap.s et aucune trace des autres dépendances.

Un petit idée de comment fusionner tout le code dans un seul et même fichier (ELF ou binaire) tout en gérant les relocalisations ?

Est-ce que générer des bibliothèques statiques est le bon procédé, des bibliothèques partagées serait-il plus approprié ?