OVERHAUL: migrate to recursive make, because such way I can establish proper project structure for future make install AND have unclogged makefiles

This commit is contained in:
mykola2312 2024-08-24 11:19:59 +03:00
parent 9bc3007a7f
commit a39999e134
31 changed files with 151 additions and 64 deletions

4
.gitignore vendored
View file

@ -1,3 +1,3 @@
.vscode/
bin/
obj/
**/obj/
bin/

View file

@ -1,76 +1,46 @@
INC_DIR = include
SRC_DIR = src
ROOT_DIR = $(PWD)
export ROOT_DIR
INC_DIR = $(ROOT_DIR)/src
SRC_DIR = $(ROOT_DIR)/src
BIN_DIR = $(ROOT_DIR)/bin
LIB_DIR = $(ROOT_DIR)/bin
OBJ_DIR = obj
BIN_DIR = bin
LIB_DIR = bin
export INC_DIR
export SRC_DIR
export BIN_DIR
export LIB_DIR
export OBJ_DIR
CC = gcc
AS = as
AR = ar
LD = ld
MAKE = gmake
PYTHON = python
CFLAGS = -Wall -I$(INC_DIR)
ASFLAGS =
LDFLAGS = -z noexecstack -lcap
SHARED_OBJ =
SHARED_DEPS = $(INC_DIR)/debug.h
export CC
export AS
export AR
export LD
export MAKE
export PYTHON
RTDISASM_SRC = rtdisasm.c
RTDISASM_OBJ := $(addprefix $(OBJ_DIR)/,$(patsubst %.s,%.o,$(patsubst %.c,%.o,$(RTDISASM_SRC)))) $(SHARED_OBJ)
RTDISASM_SRC := $(addprefix $(SRC_DIR)/,$(RTDISASM_SRC))
RTDISASM_DEPS = rtdisasm.h rtdisasm_table.h
RTDISASM_DEPS := $(addprefix $(INC_DIR)/,$(RTDISASM_DEPS)) $(SHARED_DEPS)
# order matters here, build libraries first!
TARGETS = rtdisasm rtdisasm_test dummy_target blackjack
RTDISASM_TEST_SRC = rtdisasm_test.c rtdisasm_test_data.s
RTDISASM_TEST_OBJ := $(addprefix $(OBJ_DIR)/,$(patsubst %.s,%.o,$(patsubst %.c,%.o,$(RTDISASM_TEST_SRC))))
RTDISASM_TEST_SRC := $(addprefix $(SRC_DIR)/,$(RTDISASM_TEST_SRC))
RTDISASM_TEST_DEPS =
RTDISASM_TEST_DEPS := $(addprefix $(INC_DIR)/,$(RTDISASM_TEST_DEPS)) $(SHARED_DEPS) rtdisasm
.PHONY: $(TARGETS) debug clean
BLACKJACK_SRC = main.c process.c
BLACKJACK_OBJ := $(addprefix $(OBJ_DIR)/,$(patsubst %.s,%.o,$(patsubst %.c,%.o,$(BLACKJACK_SRC)))) $(SHARED_OBJ)
BLACKJACK_SRC := $(addprefix $(SRC_DIR)/,$(BLACKJACK_SRC))
BLACKJACK_DEPS = process.h process_debug.h
BLACKJACK_DEPS := $(addprefix $(INC_DIR)/,$(BLACKJACK_DEPS)) rtdisasm $(SHARED_DEPS)
DUMMY_TARGET_SRC = dummy_target.c dummy_destination.s
DUMMY_TARGET_OBJ := $(addprefix $(OBJ_DIR)/,$(patsubst %.s,%.o,$(patsubst %.c,%.o,$(DUMMY_TARGET_SRC))))
DUMMY_TARGET_SRC := $(addprefix $(SRC_DIR)/,$(DUMMY_TARGET_SRC))
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c -o $@ $<
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.s
$(AS) $(ASFLAGS) -o $@ $<
rtdisasm: $(RTDISASM_OBJ) $(RTDISASM_DEPS)
$(PYTHON) genc.py xml/raw/x86/Intel/AZ.xml | $(CC) -x c $(CFLAGS) -c -o $(OBJ_DIR)/rtdisasm_table.o -
$(AR) -crs $(BIN_DIR)/librtdisasm.a $(RTDISASM_OBJ) $(OBJ_DIR)/rtdisasm_table.o
$(OBJ_DIR)/rtdisasm_test.o: $(SRC_DIR)/rtdisasm_test.c
$(CC) $(CFLAGS) -mavx -c -o $@ $<
rtdisasm_test: $(RTDISASM_TEST_OBJ) $(RTDISASM_TEST_DEPS)
$(CC) $(LDFLAGS) -o $(BIN_DIR)/$@ $(RTDISASM_TEST_OBJ) $(LIB_DIR)/librtdisasm.a
blackjack: $(BLACKJACK_OBJ) $(BLACKJACK_DEPS)
$(CC) $(LDFLAGS) -o $(BIN_DIR)/$@ $(BLACKJACK_OBJ) $(LIB_DIR)/librtdisasm.a
dummy_target: $(DUMMY_TARGET_OBJ)
$(CC) $(LDFLAGS) -o $(BIN_DIR)/$@ $(DUMMY_TARGET_OBJ)
.PHONY: all clean debug
TARGETS = blackjack dummy_target rtdisasm_test
all: $(TARGETS)
all:
for target in $(TARGETS); do $(MAKE) -C src/$$target; done
debug: CFLAGS += -DDEBUG -g
debug: LDFLAGS += -g
debug: ASFLAGS += -g
debug: $(TARGETS)
debug:
for target in $(TARGETS); do $(MAKE) -C src/$$target debug; done
clean:
rm -f $(OBJ_DIR)/*.o
for target in $(TARGETS); do $(MAKE) -C src/$$target clean; done
rm -f $(BIN_DIR)/*

30
src/blackjack/Makefile Normal file
View file

@ -0,0 +1,30 @@
NAME = blackjack
CFLAGS = -Wall -I$(INC_DIR)
ASFLAGS =
LDFLAGS = -z noexecstack -lcap
SRC = main.c process.c
OBJ := $(addprefix $(OBJ_DIR)/,$(patsubst %.s,%.o,$(patsubst %.c,%.o,$(SRC))))
DEPS = process.h process_debug.h
$(OBJ_DIR)/%.o: %.c
@mkdir -p $(OBJ_DIR)
$(CC) $(CFLAGS) -c -o $@ $<
$(OBJ_DIR)/%.o: %.s
@mkdir -p $(OBJ_DIR)
$(AS) $(ASFLAGS) -o $@ $<
.PHONY: all clean debug
all: $(OBJ) $(DEPS)
$(CC) $(LDFLAGS) -o $(BIN_DIR)/$(NAME) $(OBJ)
debug: CFLAGS += -DDEBUG -g
debug: LDFLAGS += -g
debug: ASFLAGS += -g
debug: all
clean:
rm -f $(OBJ_DIR)/*

30
src/dummy_target/Makefile Normal file
View file

@ -0,0 +1,30 @@
NAME = dummy_target
CFLAGS = -Wall -I$(INC_DIR)
ASFLAGS =
LDFLAGS = -z noexecstack -lcap
SRC = dummy_target.c dummy_destination.s
OBJ := $(addprefix $(OBJ_DIR)/,$(patsubst %.s,%.o,$(patsubst %.c,%.o,$(SRC))))
DEPS =
$(OBJ_DIR)/%.o: %.c
@mkdir -p $(OBJ_DIR)
$(CC) $(CFLAGS) -c -o $@ $<
$(OBJ_DIR)/%.o: %.s
@mkdir -p $(OBJ_DIR)
$(AS) $(ASFLAGS) -o $@ $<
.PHONY: all clean debug
all: $(OBJ) $(DEPS)
$(CC) $(LDFLAGS) -o $(BIN_DIR)/$(NAME) $(OBJ)
debug: CFLAGS += -DDEBUG -g
debug: LDFLAGS += -g
debug: ASFLAGS += -g
debug: all
clean:
rm -f $(OBJ_DIR)/*

27
src/rtdisasm/Makefile Normal file
View file

@ -0,0 +1,27 @@
NAME = rtdisasm
CFLAGS = -Wall -I$(INC_DIR)
ASFLAGS =
LDFLAGS = -z noexecstack -lcap
SRC = rtdisasm.c
OBJ := $(addprefix $(OBJ_DIR)/,$(patsubst %.s,%.o,$(patsubst %.c,%.o,$(SRC))))
DEPS = rtdisasm.h rtdisasm_table.h
$(OBJ_DIR)/%.o: %.c
@mkdir -p $(OBJ_DIR)
$(CC) $(CFLAGS) -c -o $@ $<
.PHONY: all clean debug
all: $(OBJ) $(DEPS)
$(PYTHON) genc.py xml/raw/x86/Intel/AZ.xml | $(CC) -x c $(CFLAGS) -c -o $(OBJ_DIR)/rtdisasm_table.o -
$(AR) -crs $(BIN_DIR)/librtdisasm.a $(OBJ) $(OBJ_DIR)/rtdisasm_table.o
debug: CFLAGS += -DDEBUG -g
debug: LDFLAGS += -g
debug: ASFLAGS += -g
debug: all
clean:
rm -f $(OBJ_DIR)/*

View file

@ -1,6 +1,6 @@
#include "rtdisasm.h"
#include "rtdisasm_table.h"
#include "debug.h"
#include "rtdisasm/rtdisasm.h"
#include "rtdisasm/rtdisasm_table.h"
#include "blackjack/debug.h"
#include <stdio.h>
#include <string.h>

View file

@ -0,0 +1,30 @@
NAME = rtdisasm_test
CFLAGS = -Wall -mavx -I$(INC_DIR)
ASFLAGS =
LDFLAGS = -z noexecstack -lcap
SRC = rtdisasm_test.c rtdisasm_test_data.s
OBJ := $(addprefix $(OBJ_DIR)/,$(patsubst %.s,%.o,$(patsubst %.c,%.o,$(SRC))))
DEPS =
$(OBJ_DIR)/%.o: %.c
@mkdir -p $(OBJ_DIR)
$(CC) $(CFLAGS) -c -o $@ $<
$(OBJ_DIR)/%.o: %.s
@mkdir -p $(OBJ_DIR)
$(AS) $(ASFLAGS) -o $@ $<
.PHONY: all clean debug
all: $(OBJ) $(DEPS)
$(CC) $(LDFLAGS) -o $(BIN_DIR)/$(NAME) $(OBJ) $(LIB_DIR)/librtdisasm.a
debug: CFLAGS += -DDEBUG -g
debug: LDFLAGS += -g
debug: ASFLAGS += -g
debug: all
clean:
rm -f $(OBJ_DIR)/*

View file

@ -1,4 +1,4 @@
#include "rtdisasm.h"
#include "rtdisasm/rtdisasm.h"
#include <immintrin.h>
#include <stdio.h>