# LuPI2 Makefile # Default compiler settings. PREFIX?=powerpc-linux-musl CC = $(PREFIX)-gcc CFLAGS?=-O2 -std=c99 -fdata-sections -ffunction-sections -pthread LDFLAGS+= -O2 -Wl,--gc-sections -static -Ldependencies/lib-$(PREFIX) -pthread # Project specific stuff BUILD = bin/ SOURCE = src/c CORELUA = src/lua/core RESOURCES = resources LIBS=-lm -llua -lssl -lcrypto -levent_core INCLUDES=-I$(SOURCE) -Iinclude -Idependencies/include -Idependencies/include-$(PREFIX) GENERATED=include/luares.h src/c/gen/luares.c include/res.h src/c/gen/res.c LUAPARAMS = $(CORELUA) include/luares.h src/c/gen/luares.c lua_ RESPARAMS = $(RESOURCES) include/res.h src/c/gen/res.c res_ SRCDIRECTORIES = $(shell find $(SOURCE) -type d) BUILDDIRECTORIES = $(patsubst $(SOURCE)/%, $(BUILD)%, $(SRCDIRECTORIES)) CFILES = $(shell find $(SOURCE) -type f -name '*.c') OBJECTS := $(patsubst $(SOURCE)/%.c, $(BUILD)%.c.o, $(CFILES)) OUTNAME = lupi # Targets # Pseudo Targets debug: CFLAGS+= -g -DLOGGING -DDEBUG debug: build #### winexe: $(BUILD)$(OUTNAME) cp $(BUILD)$(OUTNAME) $(BUILD)$(OUTNAME).exe win: LIBS+= -lws2_32 -lgdi32 win: all winexe win-build: LIBS+= -lws2_32 -lgdi32 win-build: build winexe win-debug: LIBS+= -lws2_32 -lgdi32 win-debug: debug winexe #### dependencies/v86: cd dependencies; git clone https://github.com/magik6k/v86.git dependencies/v86/build/libv86.js: dependencies/v86 cd dependencies/v86 && wget -P closure-compiler http://dl.google.com/closure-compiler/compiler-latest.zip cd dependencies/v86 && unzip -d closure-compiler closure-compiler/compiler-latest.zip compiler.jar cd dependencies/v86 && make build/libv86.js $(BUILD)web: dependencies/v86/build/libv86.js rm -rf bin/web; mkdir -p bin/web web: iso bin/web #### ISOKERNEL=linux-5.12.1 dependencies/$(ISOKERNEL).tar.xz: cd dependencies && wget https://cdn.kernel.org/pub/linux/kernel/v5.x/$(ISOKERNEL).tar.xz dependencies/$(ISOKERNEL)/arch/x86/boot/bzImage: $(BUILD)lupi.cpio dependencies/$(ISOKERNEL).tar.xz rm -rf dependencies/$(ISOKERNEL)/ cd dependencies && tar xf $(ISOKERNEL).tar.xz cp src/iso/linux.config dependencies/$(ISOKERNEL)/.config cd dependencies/$(ISOKERNEL)/ && make -j8 $(BUILD)lupi.cpio: $(BUILDDIRECTORIES) $(BUILD)$(OUTNAME) build rm -rf $(BUILD)iso.init; mkdir -p $(BUILD)iso.init mkdir -p bin/iso.init/sbin bin/iso.init/proc bin/iso.init/sys bin/iso.init/dev bin/iso.init/tmp cp bin/lupi bin/iso.init/sbin/init (cd bin/iso.init; find . | fakeroot cpio -o -H newc) > $@ $(BUILD)lupi.iso: dependencies/$(ISOKERNEL)/arch/x86/boot/bzImage rm -rf bin/iso.dir; mkdir -p bin/iso.dir bin/iso.dir/boot cp $(BUILD)lupi.cpio bin/iso.dir/boot/lupi.img cp dependencies/$(ISOKERNEL)/arch/x86/boot/bzImage bin/iso.dir/boot/vmlinuz cp src/iso/isolinux.cfg bin/iso.dir/isolinux.cfg mkdir -p bin/iso.dir/syslinux bin/iso.dir/sbin cp bin/lupi bin/iso.dir/sbin/init cp /usr/lib/syslinux/bios/{isolinux.bin,ldlinux.c32,isohdpfx.bin} bin/iso.dir/syslinux/ mkisofs -o bin/lupi.iso -b syslinux/isolinux.bin -c syslinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table bin/iso.dir iso: PREFIX?=i486-linux-musl iso: build $(BUILD)lupi.iso #### $(BUILDDIRECTORIES): mkdir -p $@ build: smallclean $(BUILDDIRECTORIES) resources $(BUILD)$(OUTNAME) all: clean build $(BUILD)$(OUTNAME): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ $(LIBS) $(BUILD)%.c.o: $(SOURCE)/%.c $(CC) -c $(CFLAGS) $(INCLUDES) $< -o $@ #Resources resources: cleanresources scripts/txt2c $(LUAPARAMS) scripts/txt2c $(RESPARAMS) # Clean rules cleanresources: -rm -f $(GENERATED) mkdir -p $(SOURCE)/gen/ touch $(SOURCE)/gen/luares.c touch include/luares.h clean: cleanresources -rm -rf $(BUILD) smallclean: find . -name '*~' -type f -exec rm {} \; # Other .PHONY: web iso debug clean cleanresourcues resources build smallclean all