-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
88 lines (69 loc) · 2.99 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# PRX metadata
PROJECTNAME := libLog
# Libraries linked into the ELF
LIBS := -lSceLibcInternal -lkernel
# Directorys to include
INCLUDES := -Iinclude
# Additional compile flags
ERRORFLAGS := -Wall -Wextra -Wpedantic -Werror
OTHERFLAGS := -O3 -std=c99 -D_DEFAULT_SOURCE
# -----------------------------------------------------------------------------
# Do not edit below this line unless you know what you are doing
# -----------------------------------------------------------------------------
TOOLCHAIN := $(OO_PS4_TOOLCHAIN)
ODIR := build
SDIR := src
EXTRAFLAGS := $(INCLUDES) $(ERRORFLAGS) $(OTHERFLAGS)
CFLAGS := --target=x86_64-pc-freebsd12-elf -fPIC -funwind-tables -c -isysroot $(TOOLCHAIN) -isystem $(TOOLCHAIN)/include $(EXTRAFLAGS)
LFLAGS := -m elf_x86_64 -pie --script $(TOOLCHAIN)/link.x --eh-frame-hdr -L$(TOOLCHAIN)/lib $(LIBS) $(TOOLCHAIN)/lib/crtlib.o
CFILES := $(wildcard $(SDIR)/*.c)
ASMFILES := $(wildcard $(SDIR)/*.s)
OBJS := $(patsubst $(SDIR)/%.s, $(ODIR)/%.o, $(ASMFILES)) $(patsubst $(SDIR)/%.c, $(ODIR)/%.o, $(CFILES))
STUBOBJS := $(patsubst $(SDIR)/%.c, $(ODIR)/%.o.stub, $(CFILES))
TARGET = $(PROJECTNAME).prx
TARGETSTUB = $(PROJECTNAME)_stub.so
TARGETSTATIC = $(PROJECTNAME).a
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
AR := llvm-ar
AS := llvm-mc
CC := clang
LD := ld.lld
CDIR := linux
endif
ifeq ($(UNAME_S),Darwin)
AR := /usr/local/opt/llvm/bin/llvm-ar
AS := /usr/local/opt/llvm/bin/llvm-mc
CC := /usr/local/opt/llvm/bin/clang
LD := /usr/local/opt/llvm/bin/ld.lld
CDIR := macos
endif
# Make rules
$(TARGET): $(ODIR) $(OBJS)
$(LD) $(ODIR)/*.o -o $(ODIR)/$(PROJECTNAME).elf $(LFLAGS)
$(TOOLCHAIN)/bin/$(CDIR)/create-fself -in=$(ODIR)/$(PROJECTNAME).elf -out=$(ODIR)/$(PROJECTNAME).oelf --lib=$(TARGET) --paid 0x3800000000000011
@echo Built PRX successfully!
$(TARGETSTATIC): $(ODIR) $(OBJS)
$(AR) rcs $(TARGETSTATIC) $(ODIR)/*.o
@echo Built static library successfully!
$(TARGETSTUB): $(ODIR) $(STUBOBJS)
$(CC) $(ODIR)/*.o.stub -o $(TARGETSTUB) -target x86_64-pc-linux-gnu -shared -fuse-ld=lld -ffreestanding -nostdlib -fno-builtin -L$(TOOLCHAIN)/lib $(LIBS)
@echo Built stub successfully!
$(ODIR)/%.o: $(SDIR)/%.c
$(CC) $(CFLAGS) -o $@ $<
$(ODIR)/%.o: $(SDIR)/%.s
$(AS) -triple=x86_64-pc-freebsd-elf --filetype=obj -o $@ $<
$(ODIR)/%.o.stub: $(SDIR)/%.c
$(CC) -target x86_64-pc-linux-gnu -ffreestanding -nostdlib -fno-builtin -fPIC -c -isysroot $(TOOLCHAIN) -isystem $(TOOLCHAIN)/include $(EXTRAFLAGS) -o $@ $<
$(ODIR):
@echo Creating build directory...
@mkdir $@
.PHONY: all clean install
.DEFAULT_GOAL := all
all: $(TARGET) $(TARGETSTATIC) $(TARGETSTUB)
clean:
@echo Cleaning up...
@rm -rf $(TARGET) $(TARGETSTATIC) $(TARGETSTUB) $(ODIR)
install:
@echo Installing...
@yes | cp -f $(TARGETSTATIC) $(OO_PS4_TOOLCHAIN)/lib/$(TARGETSTATIC) 2>/dev/null && echo Installed!|| echo Failed to install, is it built?