2024-01-03 06:40:54 +00:00
|
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
|
|
|
|
2025-07-04 08:37:47 +00:00
|
|
|
ARCH ?= x86_64
|
|
|
|
|
SMP ?= 1
|
2025-07-17 12:52:24 +00:00
|
|
|
VERBOSE ?= 1
|
2025-07-04 08:37:47 +00:00
|
|
|
SYSCALL_TEST_SUITE ?= ltp
|
|
|
|
|
SYSCALL_TEST_WORKDIR ?= /tmp
|
2025-07-17 09:37:02 +00:00
|
|
|
ENABLE_BASIC_TEST ?= false
|
2025-07-17 09:40:41 +00:00
|
|
|
# Set Nix's cached tarballs to be live for a longer period of time (30 days) to avoid network traffics.
|
|
|
|
|
# Nix's default value is rather small (1 hour or 3600 seconds).
|
|
|
|
|
NIXPKGS_CACHE_TTL := 2592000 # In seconds
|
2023-05-29 05:29:53 +00:00
|
|
|
MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
|
|
|
|
|
CUR_DIR := $(patsubst %/,%,$(dir $(MKFILE_PATH)))
|
|
|
|
|
BUILD_DIR := $(CUR_DIR)/build
|
|
|
|
|
INITRAMFS := $(BUILD_DIR)/initramfs
|
2024-12-15 14:28:02 +00:00
|
|
|
INITRAMFS_SKIP_GZIP ?= 0
|
|
|
|
|
ifeq ($(INITRAMFS_SKIP_GZIP),1)
|
|
|
|
|
INITRAMFS_IMAGE := $(BUILD_DIR)/initramfs.cpio
|
2025-07-04 08:37:47 +00:00
|
|
|
INITRAMFS_COMPRESSED := false
|
2024-12-15 14:28:02 +00:00
|
|
|
else
|
2023-08-01 02:52:41 +00:00
|
|
|
INITRAMFS_IMAGE := $(BUILD_DIR)/initramfs.cpio.gz
|
2025-07-04 08:37:47 +00:00
|
|
|
INITRAMFS_COMPRESSED := true
|
2024-12-15 14:28:02 +00:00
|
|
|
endif
|
2023-09-18 03:47:17 +00:00
|
|
|
EXT2_IMAGE := $(BUILD_DIR)/ext2.img
|
2024-03-18 07:58:37 +00:00
|
|
|
EXFAT_IMAGE := $(BUILD_DIR)/exfat.img
|
2025-04-20 02:44:28 +00:00
|
|
|
|
2025-07-04 08:37:47 +00:00
|
|
|
# Include benchmark, if BENCHMARK is set.
|
2025-04-20 02:44:28 +00:00
|
|
|
ifeq ($(BENCHMARK), none)
|
2025-07-04 08:37:47 +00:00
|
|
|
ENABLE_BENCHMARK = false
|
|
|
|
|
else
|
|
|
|
|
ENABLE_BENCHMARK = true
|
2025-04-20 02:44:28 +00:00
|
|
|
endif
|
|
|
|
|
|
2025-07-04 08:37:47 +00:00
|
|
|
# Include syscall_test, if BUILD_SYSCALL_TEST is set.
|
|
|
|
|
ifeq ($(BUILD_SYSCALL_TEST), 1)
|
|
|
|
|
ENABLE_SYSCALL_TEST = true
|
|
|
|
|
else
|
|
|
|
|
ENABLE_SYSCALL_TEST = false
|
|
|
|
|
endif
|
2023-08-02 11:08:02 +00:00
|
|
|
|
2025-07-17 12:52:24 +00:00
|
|
|
# Decreases the level of verbosity of diagnostic messages from Nix.
|
|
|
|
|
ifeq ($(VERBOSE), 0)
|
|
|
|
|
NIX_QUIET = --quiet -Q
|
|
|
|
|
endif
|
|
|
|
|
|
2024-02-23 03:50:27 +00:00
|
|
|
.PHONY: all
|
2023-08-02 11:08:02 +00:00
|
|
|
all: build
|
2023-08-01 07:36:45 +00:00
|
|
|
|
2025-07-04 08:37:47 +00:00
|
|
|
.PHONY: build
|
2025-07-17 18:20:38 +00:00
|
|
|
ifeq ($(ARCH), loongarch64)
|
|
|
|
|
build: $(EXT2_IMAGE) $(EXFAT_IMAGE)
|
|
|
|
|
@echo "For loongarch, we generate a fake initramfs to successfully test or build."
|
|
|
|
|
@touch $(INITRAMFS_IMAGE)
|
|
|
|
|
else
|
2025-07-04 08:37:47 +00:00
|
|
|
build: $(INITRAMFS_IMAGE) $(EXT2_IMAGE) $(EXFAT_IMAGE)
|
2025-07-17 18:20:38 +00:00
|
|
|
endif
|
2023-08-01 07:36:45 +00:00
|
|
|
|
2024-02-29 15:44:41 +00:00
|
|
|
.PHONY: $(INITRAMFS_IMAGE)
|
2025-07-04 08:37:47 +00:00
|
|
|
$(INITRAMFS_IMAGE): $(INITRAMFS)
|
|
|
|
|
@nix-build \
|
2025-07-17 09:40:41 +00:00
|
|
|
--tarball-ttl $(NIXPKGS_CACHE_TTL) \
|
2025-07-04 08:37:47 +00:00
|
|
|
--argstr target $(ARCH) \
|
2025-07-17 09:37:02 +00:00
|
|
|
--arg enableBasicTest $(ENABLE_BASIC_TEST) \
|
2025-07-04 08:37:47 +00:00
|
|
|
--arg enableBenchmark $(ENABLE_BENCHMARK) \
|
|
|
|
|
--arg enableSyscallTest $(ENABLE_SYSCALL_TEST) \
|
|
|
|
|
--argstr syscallTestSuite $(SYSCALL_TEST_SUITE) \
|
|
|
|
|
--argstr syscallTestWorkDir $(SYSCALL_TEST_WORKDIR) \
|
|
|
|
|
--arg initramfsCompressed $(INITRAMFS_COMPRESSED) \
|
|
|
|
|
--arg smp $(SMP) \
|
|
|
|
|
--out-link $@ \
|
|
|
|
|
nix -A initramfs-image
|
|
|
|
|
|
|
|
|
|
.PHONY: $(INITRAMFS)
|
|
|
|
|
$(INITRAMFS):
|
|
|
|
|
@nix-build \
|
2025-07-17 09:40:41 +00:00
|
|
|
--tarball-ttl $(NIXPKGS_CACHE_TTL) \
|
2025-07-04 08:37:47 +00:00
|
|
|
--argstr target $(ARCH) \
|
2025-07-17 09:37:02 +00:00
|
|
|
--arg enableBasicTest $(ENABLE_BASIC_TEST) \
|
2025-07-04 08:37:47 +00:00
|
|
|
--arg enableBenchmark $(ENABLE_BENCHMARK) \
|
|
|
|
|
--arg enableSyscallTest $(ENABLE_SYSCALL_TEST) \
|
|
|
|
|
--argstr syscallTestSuite $(SYSCALL_TEST_SUITE) \
|
|
|
|
|
--argstr syscallTestWorkDir $(SYSCALL_TEST_WORKDIR) \
|
|
|
|
|
--arg smp $(SMP) \
|
|
|
|
|
--out-link $@ \
|
|
|
|
|
nix -A initramfs
|
2023-05-29 05:29:53 +00:00
|
|
|
|
2025-07-17 12:52:24 +00:00
|
|
|
# Prebuild x86_64 packages
|
|
|
|
|
x86_64_pkgs:
|
|
|
|
|
@nix-build \
|
|
|
|
|
nix/default.nix \
|
|
|
|
|
--tarball-ttl $(NIXPKGS_CACHE_TTL) \
|
|
|
|
|
$(NIX_QUIET) \
|
|
|
|
|
--argstr target x86_64 \
|
|
|
|
|
--arg enableBenchmark true \
|
|
|
|
|
--arg enableSyscallTest true \
|
|
|
|
|
--out-link /nix/var/nix/gcroots/auto/x86_64-pkgs \
|
|
|
|
|
-A busybox \
|
|
|
|
|
-A apps.package \
|
|
|
|
|
-A benchmark.fio \
|
|
|
|
|
-A benchmark.hackbench \
|
|
|
|
|
-A benchmark.iperf3 \
|
|
|
|
|
-A benchmark.lmbench \
|
|
|
|
|
-A benchmark.memcached \
|
|
|
|
|
-A benchmark.nginx \
|
|
|
|
|
-A benchmark.redis \
|
|
|
|
|
-A benchmark.schbench \
|
|
|
|
|
-A benchmark.sqlite-speedtest1 \
|
|
|
|
|
-A benchmark.sysbench \
|
|
|
|
|
-A syscall.ltp
|
|
|
|
|
|
|
|
|
|
# Prebuild riscv64 packages
|
|
|
|
|
# Note: This may cause GitHub Runner ResourceExhausted errors when publish nix docker image.
|
|
|
|
|
# If such errors occur, try building each package individually and clear the build cache.
|
|
|
|
|
riscv64_pkgs:
|
|
|
|
|
@nix-build \
|
|
|
|
|
nix/default.nix \
|
|
|
|
|
--tarball-ttl $(NIXPKGS_CACHE_TTL) \
|
|
|
|
|
$(NIX_QUIET) \
|
|
|
|
|
--argstr target riscv64 \
|
|
|
|
|
--arg enableBenchmark true \
|
|
|
|
|
--arg enableSyscallTest true \
|
|
|
|
|
--out-link /nix/var/nix/gcroots/auto/riscv64-pkgs \
|
|
|
|
|
-A busybox \
|
|
|
|
|
-A apps.package \
|
|
|
|
|
-A benchmark.fio \
|
|
|
|
|
-A benchmark.hackbench \
|
|
|
|
|
-A benchmark.iperf3 \
|
|
|
|
|
-A benchmark.lmbench \
|
|
|
|
|
-A benchmark.memcached \
|
|
|
|
|
-A benchmark.nginx \
|
|
|
|
|
-A benchmark.redis \
|
|
|
|
|
-A benchmark.schbench \
|
|
|
|
|
-A benchmark.sqlite-speedtest1 \
|
|
|
|
|
-A syscall.ltp
|
|
|
|
|
|
|
|
|
|
general_pkgs:
|
|
|
|
|
@nix-build \
|
|
|
|
|
nix/default.nix \
|
|
|
|
|
--tarball-ttl $(NIXPKGS_CACHE_TTL) \
|
|
|
|
|
$(NIX_QUIET) \
|
|
|
|
|
--out-link /nix/var/nix/gcroots/auto/general \
|
|
|
|
|
-A linux_vdso \
|
|
|
|
|
-A apps.mongoose_src
|
|
|
|
|
|
|
|
|
|
install_host_pkgs:
|
|
|
|
|
@nix-env \
|
|
|
|
|
--file nix/default.nix \
|
|
|
|
|
--tarball-ttl $(NIXPKGS_CACHE_TTL) \
|
|
|
|
|
--install \
|
|
|
|
|
-A apacheHttpd \
|
|
|
|
|
-A iperf3 \
|
|
|
|
|
-A libmemcached \
|
|
|
|
|
-A lmbench \
|
|
|
|
|
-A redis
|
|
|
|
|
|
|
|
|
|
nix_gc:
|
|
|
|
|
@nix-collect-garbage -d
|
|
|
|
|
@nix-store --optimise
|
|
|
|
|
|
2023-09-18 03:47:17 +00:00
|
|
|
$(EXT2_IMAGE):
|
2025-07-17 18:20:38 +00:00
|
|
|
@mkdir -p $(BUILD_DIR)
|
2023-09-18 03:47:17 +00:00
|
|
|
@dd if=/dev/zero of=$(EXT2_IMAGE) bs=2G count=1
|
|
|
|
|
@mke2fs $(EXT2_IMAGE)
|
|
|
|
|
|
2024-03-18 07:58:37 +00:00
|
|
|
$(EXFAT_IMAGE):
|
2025-07-17 18:20:38 +00:00
|
|
|
@mkdir -p $(BUILD_DIR)
|
2024-03-18 07:58:37 +00:00
|
|
|
@fallocate -l 64M $(EXFAT_IMAGE)
|
|
|
|
|
@mkfs.exfat $(EXFAT_IMAGE)
|
|
|
|
|
|
2024-03-15 16:15:19 +00:00
|
|
|
.PHONY: format
|
|
|
|
|
format:
|
2025-07-02 11:10:37 +00:00
|
|
|
@$(MAKE) --no-print-directory -C src/apps format
|
2025-07-04 08:37:47 +00:00
|
|
|
@nixfmt nix
|
2024-03-15 16:15:19 +00:00
|
|
|
|
|
|
|
|
.PHONY: check
|
|
|
|
|
check:
|
2025-07-02 11:10:37 +00:00
|
|
|
@$(MAKE) --no-print-directory -C src/apps check
|
2024-03-15 16:15:19 +00:00
|
|
|
|
2024-02-23 03:50:27 +00:00
|
|
|
.PHONY: clean
|
2023-03-03 02:47:14 +00:00
|
|
|
clean:
|
2025-04-20 02:44:28 +00:00
|
|
|
@rm -rf $(BUILD_DIR)
|