8000 Abstract away board and toolchain details by wom-bat · Pull Request #216 · au-ts/sddf · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Abstract away board and toolchain details #216

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 2 additions & 36 deletions examples/echo_server/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,45 +13,11 @@ endif
export override MICROKIT_SDK:=$(abspath ${MICROKIT_SDK})


ifeq ($(strip $(TOOLCHAIN)),)
TOOLCHAIN := aarch64-none-elf
export TOOLCHAIN := aarch64-none-elf
export LIBC := $(dir $(realpath $(shell aarch64-none-elf-gcc --print-file-name libc.a)))
endif

ifeq ($(strip $(MICROKIT_BOARD)), odroidc4)
export DRIV_DIR := meson
export UART_DRIV_DIR := meson
export TIMER_DRV_DIR := meson
export CPU := cortex-a55
else ifeq ($(strip $(MICROKIT_BOARD)), imx8mm_evk)
export DRIV_DIR := imx
export UART_DRIV_DIR := imx
export TIMER_DRV_DIR := imx
export CPU := cortex-a53
else ifeq ($(strip $(MICROKIT_BOARD)), maaxboard)
export DRIV_DIR := imx
export UART_DRIV_DIR := imx
export TIMER_DRV_DIR := imx
export CPU := cortex-a53
else ifeq ($(strip $(MICROKIT_BOARD)), qemu_virt_aarch64)
export DRIV_DIR := virtio
export UART_DRIV_DIR := arm
export TIMER_DRV_DIR := arm
export CPU := cortex-a53
QEMU := qemu-system-aarch64
else
$(error Unsupported MICROKIT_BOARD given)
endif
export LIBC := $(dir $(realpath $(shell aarch64-none-elf-gcc --print-file-name libc.a)))

export BUILD_DIR:=$(abspath ${BUILD_DIR})
export MICROKIT_SDK:=$(abspath ${MICROKIT_SDK})

export CC := $(TOOLCHAIN)-gcc
export LD := $(TOOLCHAIN)-ld
export AS := $(TOOLCHAIN)-as
export AR := $(TOOLCHAIN)-ar
export RANLIB := $(TOOLCHAIN)-ranlib
export MICROKIT_TOOL ?= $(MICROKIT_SDK)/bin/microkit
export SDDF=$(abspath ../..)
export ECHO_INCLUDE:=$(abspath .)/include
Expand All @@ -68,4 +34,4 @@ ${BUILD_DIR}/Makefile: echo.mk
mkdir -p ${BUILD_DIR}
cp echo.mk $@

FORCE:
FORCE:
24 changes: 14 additions & 10 deletions examples/echo_server/echo.mk
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,30 @@
# SPDX-License-Identifier: BSD-2-Clause
#

QEMU := qemu-system-aarch64

MICROKIT_TOOL ?= $(MICROKIT_SDK)/bin/microkit
ECHO_SERVER:=${SDDF}/examples/echo_server

SUPPORTED_BOARDS := odroidc4 maaxboard imx8mm_evk qemu_virt_aarch64
ifeq ($(filter ${MICROKIT_BOARD},${SUPPORTED_BOARDS}),)
$(error Unsupported MICROKIT_BOARD ${MICROKIT_BOARD})
endif


TOOLCHAIN ?= gcc
include ${SDDF}/tools/Make/board/${MICROKIT_BOARD}.mk
include ${SDDF}/tools/Make/toolchain/${TOOLCHAIN}.mk

LWIPDIR:=network/ipstacks/lwip/src
BENCHMARK:=$(SDDF)/benchmark
UTIL:=$(SDDF)/util
ETHERNET_DRIVER:=$(SDDF)/drivers/network/$(DRIV_DIR)
ETHERNET_DRIVER:=$(SDDF)/drivers/network/$(NET_DRIV_DIR)
ETHERNET_CONFIG_INCLUDE:=${ECHO_SERVER}/include/ethernet_config
SERIAL_COMPONENTS := $(SDDF)/serial/components
UART_DRIVER := $(SDDF)/drivers/serial/$(UART_DRIV_DIR)
SERIAL_CONFIG_INCLUDE:=${ECHO_SERVER}/include/serial_config
TIMER_DRIVER:=$(SDDF)/drivers/clock/$(TIMER_DRV_DIR)
TIMER_DRIVER:=$(SDDF)/drivers/clock/$(TIMER_DRIV_DIR)
NETWORK_COMPONENTS:=$(SDDF)/network/components

BOARD_DIR := $(MICROKIT_SDK)/board/$(MICROKIT_BOARD)/$(MICROKIT_CONFIG)
SYSTEM_FILE := ${ECHO_SERVER}/board/$(MICROKIT_BOARD)/echo_server.system
IMAGE_FILE := loader.img
REPORT_FILE := report.txt
Expand All @@ -29,20 +37,16 @@ vpath %.c ${SDDF} ${ECHO_SERVER}
IMAGES := eth_driver.elf lwip.elf benchmark.elf idle.elf network_virt_rx.elf\
network_virt_tx.elf copy.elf timer_driver.elf uart_driver.elf serial_virt_tx.elf

CFLAGS := -mcpu=$(CPU) \
-mstrict-align \
-ffreestanding \
CFLAGS += \
-g3 -O3 -Wall \
-Wno-unused-function \
-DMICROKIT_CONFIG_$(MICROKIT_CONFIG) \
-I$(BOARD_DIR)/include \
-I$(SDDF)/include \
-I${ECHO_INCLUDE}/lwip \
-I${ETHERNET_CONFIG_INCLUDE} \
-I$(SERIAL_CONFIG_INCLUDE) \
-I${SDDF}/$(LWIPDIR)/include \
-I${SDDF}/$(LWIPDIR)/include/ipv4 \
-MD \
-MP

LDFLAGS := -L$(BOARD_DIR)/lib -L${LIBC}
Expand Down
5 changes: 1 addition & 4 deletions examples/i2c/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ $(error MICROKIT_SDK must be specified)
endif
override MICROKIT_SDK:=$(abspath ${MICROKIT_SDK})

ifeq ($(strip $(TOOLCHAIN)),)
export TOOLCHAIN := aarch64-none-elf
export LIBC := $(dir $(realpath $(shell aarch64-none-elf-gcc --print-file-name libc.a)))
endif
export LIBC := $(dir $(realpath $(shell aarch64-none-elf-gcc --print-file-name libc.a)))

export BUILD_DIR ?= build
export MICROKIT_CONFIG ?= debug
Expand Down
20 changes: 7 additions & 13 deletions examples/i2c/i2c.mk
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,17 @@ $(error MICROKIT_SDK must be specified)
endif

ifeq ($(strip $(TOOLCHAIN)),)
TOOLCHAIN := aarch64-none-elf
TOOLCHAIN := gcc
endif

ifeq (${MICROKIT_BOARD},odroidc4)
PLATFORM := meson
CPU := cortex-a55
else
$(error Unsupported MICROKIT_BOARD)
SUPPORTED_BOARDS := odroidc4
ifeq ($(filter ${MICROKIT_BOARD},${SUPPORTED_BOARDS}),)
$(error Unsupported MICROKIT_BOARD ${MICROKIT_BOARD})
endif

BOARD_DIR := $(MICROKIT_SDK)/board/$(MICROKIT_BOARD)/$(MICROKIT_CONFIG)
include ${SDDF}/tools/Make/board/${MICROKIT_BOARD}.mk
include ${SDDF}/tools/Make/toolchain/${TOOLCHAIN}.mk

CC := $(TOOLCHAIN)-gcc
LD := $(TOOLCHAIN)-ld
AS := $(TOOLCHAIN)-as
AR := $(TOOLCHAIN)-ar
RANLIB := $(TOOLCHAIN)-ranlib

MICROKIT_TOOL ?= $(MICROKIT_SDK)/bin/microkit

Expand All @@ -40,7 +34,7 @@ I2C_DRIVER := $(SDDF)/drivers/i2c/${PLATFORM}
TIMER_DRIVER := $(SDDF)/drivers/clock/${PLATFORM}

IMAGES := i2c_virt.elf i2c_driver.elf client.elf timer_driver.elf
CFLAGS := -mcpu=$(CPU) -mstrict-align -ffreestanding -g3 -O3 -Wall -Wno-unused-function -I${TOP}
CFLAGS += -g3 -O3 -Wall -Wno-unused-function -I${TOP}
LDFLAGS := -L$(BOARD_DIR)/lib -L$(SDDF)/lib -L${LIBC}
LIBS := --start-group -lmicrokit -Tmicrokit.ld -lc libsddf_util_debug.a --end-group

Expand Down
31 changes: 10 additions & 21 deletions examples/mmc/mmc.mk
Original file line number Diff line number Diff line change
Expand Up @@ -13,44 +13,33 @@ $(error SDDF must be specified)
endif

ifeq ($(strip $(TOOLCHAIN)),)
TOOLCHAIN := aarch64-none-elf
TOOLCHAIN := clang
endif

ifeq ($(strip $(TOOLCHAIN)), clang)
CC := clang -target aarch64-none-elf
LD := ld.lld
AR := llvm-ar
RANLIB := llvm-ranlib
else
CC := $(TOOLCHAIN)-gcc
LD := $(TOOLCHAIN)-ld
AS := $(TOOLCHAIN)-as
AR := $(TOOLCHAIN)-ar
RANLIB := $(TOOLCHAIN)-ranlib
SUPPORTED_BOARDS:= imx8mm_evk maaxboard
ifeq ($(filter ${MICROKIT_BOARD},${SUPPORTED_BOARDS}),)
$(error Unsupported MICROKIT_BOARD ${MICROKIT_BOARD})
endif

include ${SDDF}/tools/Make/board/${MICROKIT_BOARD}.mk
include ${SDDF}/tools/Make/toolchain/${TOOLCHAIN}.mk

BUILD_DIR ?= build
MICROKIT_CONFIG ?= debug

DRIVER_DIR := imx
CPU := cortex-a53

TOP := ${SDDF}/examples/mmc
CONFIGS_INCLUDE := ${TOP}/include/configs

MICROKIT_TOOL ?= $(MICROKIT_SDK)/bin/microkit

BOARD_DIR := $(MICROKIT_SDK)/board/$(MICROKIT_BOARD)/$(MICROKIT_CONFIG)

IMAGES := mmc_driver.elf timer_driver.elf client.elf blk_virt.elf
CFLAGS := -mcpu=$(CPU) \
-mstrict-align \
CFLAGS += -mstrict-align \
-nostdlib \
-ffreestanding \
-g3 \
-O3 \
-Wall -Wno-unused-function -Werror -Wno-unused-command-line-argument \
-I$(BOARD_DIR)/include \
-I$(SDDF)/include \
-I$(CONFIGS_INCLUDE)
LDFLAGS := -L$(BOARD_DIR)/lib
Expand All @@ -60,8 +49,8 @@ IMAGE_FILE := loader.img
REPORT_FILE := report.txt
SYSTEM_FILE := ${TOP}/board/$(MICROKIT_BOARD)/mmc.system

MMC_DRIVER := $(SDDF)/drivers/blk/mmc/${DRIVER_DIR}
TIMER_DRIVER := $(SDDF)/drivers/clock/${DRIVER_DIR}
MMC_DRIVER := $(SDDF)/drivers/blk/mmc/${PLATFORM}
TIMER_DRIVER := $(SDDF)/drivers/clock/${PLATFORM}

BLK_COMPONENTS := $(SDDF)/blk/components

Expand Down
41 changes: 9 additions & 32 deletions examples/serial/serial.mk
Original file line number Diff line number Diff line change
Expand Up @@ -16,55 +16,33 @@ $(error SDDF must be specified)
endif

ifeq ($(strip $(TOOLCHAIN)),)
TOOLCHAIN := aarch64-none-elf
TOOLCHAIN := gcc
endif

BUILD_DIR ?= build
MICROKIT_CONFIG ?= debug

TOOLCHAIN ?= aarch64-none-elf

QEMU := qemu-system-aarch64

CC := $(TOOLCHAIN)-gcc
LD := $(TOOLCHAIN)-ld
AS := $(TOOLCHAIN)-as
AR := $(TOOLCHAIN)-ar
RANLIB := ${TOOLCHAIN}-ranlib

MICROKIT_TOOL := $(MICROKIT_SDK)/bin/microkit

ifeq ($(strip $(MICROKIT_BOARD)), odroidc4)
DRIVER_DIR := meson
CPU := cortex-a55
else ifeq ($(strip $(MICROKIT_BOARD)), qemu_virt_aarch64)
DRIVER_DIR := arm
CPU := cortex-a53
else ifeq ($(strip $(MICROKIT_BOARD)), maaxboard)
DRIVER_DIR := imx
CPU := cortex-a53
else ifeq ($(strip $(MICROKIT_BOARD)), imx8mm_evk)
DRIVER_DIR := imx
CPU := cortex-a53
else
$(error Unsupported MICROKIT_BOARD given)
SUPPORTED_BOARDS:= imx8mm_evk maaxboard odroidc4 qemu_virt_aarch64
ifeq ($(filter ${MICROKIT_BOARD},${SUPPORTED_BOARDS}),)
$(error Unsupported MICROKIT_BOARD ${MICROKIT_BOARD})
endif

include ${SDDF}/tools/Make/board/${MICROKIT_BOARD}.mk
include ${SDDF}/tools/Make/toolchain/${TOOLCHAIN}.mk

TOP := ${SDDF}/examples/serial
UTIL := $(SDDF)/util
SERIAL_COMPONENTS := $(SDDF)/serial/components
UART_DRIVER := $(SDDF)/drivers/serial/$(DRIVER_DIR)
UART_DRIVER := $(SDDF)/drivers/serial/$(UART_DRIV_DIR)
SERIAL_CONFIG_INCLUDE:=${TOP}/include/serial_config
BOARD_DIR := $(MICROKIT_SDK)/board/$(MICROKIT_BOARD)/$(MICROKIT_CONFIG)
SYSTEM_FILE := ${TOP}/board/$(MICROKIT_BOARD)/serial.system

IMAGES := uart_driver.elf \
serial_server.elf \
serial_virt_tx.elf serial_virt_rx.elf
CFLAGS := -mcpu=$(CPU)\
-mstrict-align \
-ffreestanding \
-g3 -O3 -Wall \
CFLAGS += -g3 -O3 -Wall \
-Wno-unused-function -Werror \
-MD
LDFLAGS := -L$(BOARD_DIR)/lib -L$(SDDF)/lib
Expand Down Expand Up @@ -104,7 +82,6 @@ $(IMAGE_FILE) $(REPORT_FILE): $(IMAGES) $(SYSTEM_FILE)
qemu: ${IMAGE_FILE}
$(QEMU) -machine virt,virtualization=on -cpu cortex-a53 -serial mon:stdio -device loader,file=$(IMAGE_FILE),addr=0x70000000,cpu-num=0 -m size=2G -nographic


clean::
${RM} -f *.elf
find . -name '*.[od]' | xargs ${RM} -f
Expand Down
15 changes: 15 additions & 0 deletions tools/Make/board/imx8mm_evk.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#
# Copyright 2023, UNSW
#
# SPDX-License-Identifier: BSD-2-Clause
#
# Set up variables for IMX8MM_evk
# Should be included _before_ toolchain makefile.
PLATFORM := imx
NET_DRIV_DIR := ${PLATFORM}
UART_DRIV_DIR := ${PLATFORM}
TIMER_DRIV_DIR := ${PLATFORM}
I2C_DRIV_DIR := ${PLATFORM}
CPU := cortex-a53
TRIPLE := aarch64-none-elf
BOARD_DIR := $(MICROKIT_SDK)/board/$(MICROKIT_BOARD)/$(MICROKIT_CONFIG)
15 changes: 15 additions & 0 deletions tools/Make/board/maaxboard.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#
# Copyright 2023, UNSW
#
# SPDX-License-Identifier: BSD-2-Clause
#
# Set up variables for the MAAXboard
# Should be included _before_ toolchain makefile.
PLATFORM := imx
NET_DRIV_DIR := ${PLATFORM}
UART_DRIV_DIR := ${PLATFORM}
TIMER_DRIV_DIR := ${PLATFORM}
I2C_DRIV_DIR := ${PLATFORM}
CPU := cortex-a53
TRIPLE := aarch64-none-elf
BOARD_DIR := $(MICROKIT_SDK)/board/$(MICROKIT_BOARD)/$(MICROKIT_CONFIG)
15 changes: 15 additions & 0 deletions tools/Make/board/odroidc4.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#
# Copyright 2023, UNSW
#
# SPDX-License-Identifier: BSD-2-Clause
#
# Set up variables for Odroid C4
# Should be included _before_ toolchain makefile.
PLATFORM := meson
NET_DRIV_DIR := ${PLATFORM}
UART_DRIV_DIR := ${PLATFORM}
TIMER_DRIV_DIR := ${PLATFORM}
I2C_DRIV_DIR := ${PLATFORM}
CPU := cortex-a55
TRIPLE := aarch64-none-elf
BOARD_DIR := $(MICROKIT_SDK)/board/$(MICROKIT_BOARD)/$(MICROKIT_CONFIG)
13 changes: 13 additions & 0 deletions tools/Make/board/qemu_aarch64_virt.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#
# Copyright 2023, UNSW
#
# SPDX-License-Identifier: BSD-2-Clause
#
PLATFORM := arm
NET_DRIV_DIR := virtio
UART_DRIV_DIR ?= ${PLATFORM}
TIMER_DRIV_DIR := ${PLATFORM}
TRIPLE := aarch64-none-elf
CPU ?= cortex-a53
QEMU := qemu-system-aarch64
BOARD_DIR := $(MICROKIT_SDK)/board/$(MICROKIT_BOARD)/$(MICROKIT_CONFIG)
13 changes: 13 additions & 0 deletions tools/Make/board/qemu_virt_aarch64.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#
# Copyright 2023, UNSW
#
# SPDX-License-Identifier: BSD-2-Clause
#
BOARD_DIR := $(MICROKIT_SDK)/board/$(MICROKIT_BOARD)/$(MICROKIT_CONFIG)
PLATFORM := arm
NET_DRIV_DIR := virtio
UART_DRIV_DIR := ${PLATFORM}
TIMER_DRIV_DIR := ${PLATFORM}
TRIPLE := aarch64-none-elf
CPU := cortex-a53
QEMU := qemu-system-aarch64
17 changes: 17 additions & 0 deletions tools/Make/toolchain/clang.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#
# Copyright 2023, UNSW
#
# SPDX-License-Identifier: BSD-2-Clause
#
CC := clang
LD := ld.lld
RANLIB := llvm-ranlib
AR := llvm-ar
TARGET = ${TRIPLE}
CFLAGS += \
-MD \
-mstrict-align \
-ffreestanding \
-target ${TARGET} \
-mtune=${CPU} \
-I ${BOARD_DIR}/include
Loading
0