Luciano
Luciano

Reputation: 543

Manually link two targets

I am trying to convert a (sloppy) Makefile into a CMakeLists.txt to better work with my IDE (CLion). My Makefile is as follows:

all:
        gcc -MD -fno-builtin -nostdinc -fno-stack-protector -Os -g -m32 -I. -c -o bin/boot0.o boot/boot0/boot0.S
        ld -nostdlib -m elf_i386 -N -e start -Ttext 0x7c00 -o bin/boot0.elf bin/boot0.o
        objcopy -S -O binary bin/boot0.elf bin/boot0
        gcc -MD -fno-builtin -nostdinc -fno-stack-protector -Os -g -m32 -I. -c -o bin/boot1.o boot/boot1/boot1.S
        gcc -MD -fno-builtin -nostdinc -fno-stack-protector -Os -g -m32 -I. -c -o bin/boot1main.o boot/boot1/boot1main.c
        gcc -MD -fno-builtin -nostdinc -fno-stack-protector -Os -g -m32 -I. -c -o bin/boot1lib.o boot/boot1/boot1lib.c
        gcc -MD -fno-builtin -nostdinc -fno-stack-protector -Os -g -m32 -I. -c -o bin/exec_kernel.o boot/boot1/exec_kernel.S
        ld -nostdlib -m elf_i386 -N -e start -Ttext 0xd7000 -o bin/boot1.elf bin/boot1.o bin/boot1main.o bin/boot1lib.o bin/exec_kernel.o
        objcopy -S -O binary bin/boot1.elf bin/boot1
        gcc -MD -fno-builtin -nostdinc -fno-stack-protector -D_KERN_ -Ikern -Ikern/kern -I. -m32 -O0 -c -o bin/entry.o kern/init/entry.S
        ld -o kernel -nostdlib -e start -m elf_i386 -Ttext=0x00100000 bin/entry.o -b binary
        dd if=/dev/zero of=project0.img bs=512 count=256
        parted -s project0.img "mktable msdos mkpart primary 63s -1s set 1 boot on"
        dd if=bin/boot0 of=project0.img bs=446 count=1 conv=notrunc
        dd if=bin/boo1 of=project0.img bs=512 count=62 seek=1 conv=notrunc
        dd if=kern/init/kernel of=project0.img bs=512 seek=63 conv=notrunc

Mostly I am using make just to run the commands.

I am running into trouble with the fact that I have three different sets of linker flags (one each for boot0, boot1, and kern.)

Should I create separate CMakeLists.txt in each subdirectory (boot0, boot1, and kern) and then have a main one that runs each in turn and then handles the dd and parted usage, is there a better way to do this, or is CMake not an appropriate tool here?

Upvotes: 0

Views: 35

Answers (1)

Rudhisundar Beura
Rudhisundar Beura

Reputation: 51

Please have short-cuts for the compiler commands first. Then write the rule to create the first target on which the second target is dependent. Then since the first target is created; now use it to create the second target.

Upvotes: 1

Related Questions