Skip to content

Commit 0895657

Browse files
committed
Makefiles: Docker USB passthrough in Linux only
Detect if we run on Linux. If so, dockerize Makefile targets that need access to USB devices. If we run on anything else, attempt to execute natively. This will enable non-Linux Unixes like macOS to run the chainboot target, given they install the needed Ruby dependencies.
1 parent 3a79444 commit 0895657

20 files changed

Lines changed: 524 additions & 458 deletions

File tree

01_wait_forever/Makefile

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,30 +35,31 @@ COMPILER_ARGS = --target=$(TARGET) \
3535
--features bsp_$(BSP) \
3636
--release
3737

38-
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
38+
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
3939
DOC_CMD = cargo doc $(COMPILER_ARGS)
40-
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
41-
42-
CARGO_OUTPUT = target/$(TARGET)/release/kernel
43-
40+
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
4441
OBJCOPY_CMD = cargo objcopy \
4542
-- \
4643
--strip-all \
4744
-O binary
4845

46+
KERNEL_ELF = target/$(TARGET)/release/kernel
47+
4948
DOCKER_IMAGE = rustembedded/osdev-utils
50-
DOCKER_CMD = docker run -it --rm
51-
DOCKER_ARG_DIR_TUT = -v $(shell pwd):/work -w /work
52-
DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
49+
DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial
50+
51+
DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE)
52+
53+
EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
5354

5455
.PHONY: all doc qemu clippy clean readelf objdump nm
5556

5657
all: clean $(OUTPUT)
5758

58-
$(CARGO_OUTPUT): $(SOURCES)
59+
$(KERNEL_ELF): $(SOURCES)
5960
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
6061

61-
$(OUTPUT): $(CARGO_OUTPUT)
62+
$(OUTPUT): $(KERNEL_ELF)
6263
cp $< .
6364
$(OBJCOPY_CMD) $< $(OUTPUT)
6465

@@ -70,9 +71,7 @@ qemu:
7071
@echo "This board is not yet supported for QEMU."
7172
else
7273
qemu: all
73-
@$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_IMAGE) \
74-
$(DOCKER_EXEC_QEMU) $(QEMU_RELEASE_ARGS) \
75-
-kernel $(OUTPUT)
74+
@$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(OUTPUT)
7675
endif
7776

7877
clippy:

02_runtime_init/Makefile

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,30 +35,31 @@ COMPILER_ARGS = --target=$(TARGET) \
3535
--features bsp_$(BSP) \
3636
--release
3737

38-
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
38+
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
3939
DOC_CMD = cargo doc $(COMPILER_ARGS)
40-
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
41-
42-
CARGO_OUTPUT = target/$(TARGET)/release/kernel
43-
40+
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
4441
OBJCOPY_CMD = cargo objcopy \
4542
-- \
4643
--strip-all \
4744
-O binary
4845

46+
KERNEL_ELF = target/$(TARGET)/release/kernel
47+
4948
DOCKER_IMAGE = rustembedded/osdev-utils
50-
DOCKER_CMD = docker run -it --rm
51-
DOCKER_ARG_DIR_TUT = -v $(shell pwd):/work -w /work
52-
DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
49+
DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial
50+
51+
DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE)
52+
53+
EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
5354

5455
.PHONY: all doc qemu clippy clean readelf objdump nm
5556

5657
all: clean $(OUTPUT)
5758

58-
$(CARGO_OUTPUT): $(SOURCES)
59+
$(KERNEL_ELF): $(SOURCES)
5960
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
6061

61-
$(OUTPUT): $(CARGO_OUTPUT)
62+
$(OUTPUT): $(KERNEL_ELF)
6263
cp $< .
6364
$(OBJCOPY_CMD) $< $(OUTPUT)
6465

@@ -70,9 +71,7 @@ qemu:
7071
@echo "This board is not yet supported for QEMU."
7172
else
7273
qemu: all
73-
@$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_IMAGE) \
74-
$(DOCKER_EXEC_QEMU) $(QEMU_RELEASE_ARGS) \
75-
-kernel $(OUTPUT)
74+
@$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(OUTPUT)
7675
endif
7776

7877
clippy:

03_hacky_hello_world/Makefile

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,30 +35,31 @@ COMPILER_ARGS = --target=$(TARGET) \
3535
--features bsp_$(BSP) \
3636
--release
3737

38-
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
38+
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
3939
DOC_CMD = cargo doc $(COMPILER_ARGS)
40-
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
41-
42-
CARGO_OUTPUT = target/$(TARGET)/release/kernel
43-
40+
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
4441
OBJCOPY_CMD = cargo objcopy \
4542
-- \
4643
--strip-all \
4744
-O binary
4845

46+
KERNEL_ELF = target/$(TARGET)/release/kernel
47+
4948
DOCKER_IMAGE = rustembedded/osdev-utils
50-
DOCKER_CMD = docker run -it --rm
51-
DOCKER_ARG_DIR_TUT = -v $(shell pwd):/work -w /work
52-
DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
49+
DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial
50+
51+
DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE)
52+
53+
EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
5354

5455
.PHONY: all doc qemu clippy clean readelf objdump nm
5556

5657
all: clean $(OUTPUT)
5758

58-
$(CARGO_OUTPUT): $(SOURCES)
59+
$(KERNEL_ELF): $(SOURCES)
5960
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
6061

61-
$(OUTPUT): $(CARGO_OUTPUT)
62+
$(OUTPUT): $(KERNEL_ELF)
6263
cp $< .
6364
$(OBJCOPY_CMD) $< $(OUTPUT)
6465

@@ -70,9 +71,7 @@ qemu:
7071
@echo "This board is not yet supported for QEMU."
7172
else
7273
qemu: all
73-
@$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_IMAGE) \
74-
$(DOCKER_EXEC_QEMU) $(QEMU_RELEASE_ARGS) \
75-
-kernel $(OUTPUT)
74+
@$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(OUTPUT)
7675
endif
7776

7877
clippy:

04_zero_overhead_abstraction/Makefile

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,30 +35,31 @@ COMPILER_ARGS = --target=$(TARGET) \
3535
--features bsp_$(BSP) \
3636
--release
3737

38-
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
38+
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
3939
DOC_CMD = cargo doc $(COMPILER_ARGS)
40-
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
41-
42-
CARGO_OUTPUT = target/$(TARGET)/release/kernel
43-
40+
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
4441
OBJCOPY_CMD = cargo objcopy \
4542
-- \
4643
--strip-all \
4744
-O binary
4845

46+
KERNEL_ELF = target/$(TARGET)/release/kernel
47+
4948
DOCKER_IMAGE = rustembedded/osdev-utils
50-
DOCKER_CMD = docker run -it --rm
51-
DOCKER_ARG_DIR_TUT = -v $(shell pwd):/work -w /work
52-
DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
49+
DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial
50+
51+
DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE)
52+
53+
EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
5354

5455
.PHONY: all doc qemu clippy clean readelf objdump nm
5556

5657
all: clean $(OUTPUT)
5758

58-
$(CARGO_OUTPUT): $(SOURCES)
59+
$(KERNEL_ELF): $(SOURCES)
5960
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
6061

61-
$(OUTPUT): $(CARGO_OUTPUT)
62+
$(OUTPUT): $(KERNEL_ELF)
6263
cp $< .
6364
$(OBJCOPY_CMD) $< $(OUTPUT)
6465

@@ -70,9 +71,7 @@ qemu:
7071
@echo "This board is not yet supported for QEMU."
7172
else
7273
qemu: all
73-
@$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_IMAGE) \
74-
$(DOCKER_EXEC_QEMU) $(QEMU_RELEASE_ARGS) \
75-
-kernel $(OUTPUT)
74+
@$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(OUTPUT)
7675
endif
7776

7877
clippy:

05_safe_globals/Makefile

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,30 +35,31 @@ COMPILER_ARGS = --target=$(TARGET) \
3535
--features bsp_$(BSP) \
3636
--release
3737

38-
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
38+
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
3939
DOC_CMD = cargo doc $(COMPILER_ARGS)
40-
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
41-
42-
CARGO_OUTPUT = target/$(TARGET)/release/kernel
43-
40+
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
4441
OBJCOPY_CMD = cargo objcopy \
4542
-- \
4643
--strip-all \
4744
-O binary
4845

46+
KERNEL_ELF = target/$(TARGET)/release/kernel
47+
4948
DOCKER_IMAGE = rustembedded/osdev-utils
50-
DOCKER_CMD = docker run -it --rm
51-
DOCKER_ARG_DIR_TUT = -v $(shell pwd):/work -w /work
52-
DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
49+
DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial
50+
51+
DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE)
52+
53+
EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
5354

5455
.PHONY: all doc qemu clippy clean readelf objdump nm
5556

5657
all: clean $(OUTPUT)
5758

58-
$(CARGO_OUTPUT): $(SOURCES)
59+
$(KERNEL_ELF): $(SOURCES)
5960
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
6061

61-
$(OUTPUT): $(CARGO_OUTPUT)
62+
$(OUTPUT): $(KERNEL_ELF)
6263
cp $< .
6364
$(OBJCOPY_CMD) $< $(OUTPUT)
6465

@@ -70,9 +71,7 @@ qemu:
7071
@echo "This board is not yet supported for QEMU."
7172
else
7273
qemu: all
73-
@$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_IMAGE) \
74-
$(DOCKER_EXEC_QEMU) $(QEMU_RELEASE_ARGS) \
75-
-kernel $(OUTPUT)
74+
@$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(OUTPUT)
7675
endif
7776

7877
clippy:

06_drivers_gpio_uart/Makefile

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,30 +35,31 @@ COMPILER_ARGS = --target=$(TARGET) \
3535
--features bsp_$(BSP) \
3636
--release
3737

38-
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
38+
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
3939
DOC_CMD = cargo doc $(COMPILER_ARGS)
40-
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
41-
42-
CARGO_OUTPUT = target/$(TARGET)/release/kernel
43-
40+
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
4441
OBJCOPY_CMD = cargo objcopy \
4542
-- \
4643
--strip-all \
4744
-O binary
4845

46+
KERNEL_ELF = target/$(TARGET)/release/kernel
47+
4948
DOCKER_IMAGE = rustembedded/osdev-utils
50-
DOCKER_CMD = docker run -it --rm
51-
DOCKER_ARG_DIR_TUT = -v $(shell pwd):/work -w /work
52-
DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
49+
DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial
50+
51+
DOCKER_QEMU = $(DOCKER_CMD) $(DOCKER_IMAGE)
52+
53+
EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
5354

5455
.PHONY: all doc qemu clippy clean readelf objdump nm
5556

5657
all: clean $(OUTPUT)
5758

58-
$(CARGO_OUTPUT): $(SOURCES)
59+
$(KERNEL_ELF): $(SOURCES)
5960
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
6061

61-
$(OUTPUT): $(CARGO_OUTPUT)
62+
$(OUTPUT): $(KERNEL_ELF)
6263
cp $< .
6364
$(OBJCOPY_CMD) $< $(OUTPUT)
6465

@@ -70,9 +71,7 @@ qemu:
7071
@echo "This board is not yet supported for QEMU."
7172
else
7273
qemu: all
73-
@$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_IMAGE) \
74-
$(DOCKER_EXEC_QEMU) $(QEMU_RELEASE_ARGS) \
75-
-kernel $(OUTPUT)
74+
@$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(OUTPUT)
7675
endif
7776

7877
clippy:

0 commit comments

Comments
 (0)