Updated compiler database generator to handle multiple target executables
This commit is contained in:
2
Makefile
2
Makefile
@@ -37,7 +37,7 @@ LIBC_OBJ := $(addprefix $(BUILD_DIR)/,$(LIBC_C_FILES:.c=.o))
|
|||||||
BUILD_ID := $(shell tools/generate_build_id.py --arch $(ARCH))
|
BUILD_ID := $(shell tools/generate_build_id.py --arch $(ARCH))
|
||||||
|
|
||||||
CFLAGS := $(CFLAGS) -DBUILD_ID=\"$(BUILD_ID)\" -g -Wall -Werror -pedantic \
|
CFLAGS := $(CFLAGS) -DBUILD_ID=\"$(BUILD_ID)\" -g -Wall -Werror -pedantic \
|
||||||
"-I$(ROOT_DIR)/include" "-I$(ROOT_DIR)/arch/$(ARCH)/include" "-I$(ROOT_DIR)/libc/include"
|
-Iinclude -Iarch/$(ARCH)/include -Ilibc/include
|
||||||
|
|
||||||
ASMFLAGS := $(ASMFLAGS) -DBUILD_ID=\"$(BUILD_ID)\"
|
ASMFLAGS := $(ASMFLAGS) -DBUILD_ID=\"$(BUILD_ID)\"
|
||||||
LDFLAGS := $(LDFLAGS) -g
|
LDFLAGS := $(LDFLAGS) -g
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ BUILD_DIR := $(SANDBOX_BASE_DIR)/../build/sandbox
|
|||||||
include $(SANDBOX_BASE_DIR)/../tools/make/gcc-host.mk
|
include $(SANDBOX_BASE_DIR)/../tools/make/gcc-host.mk
|
||||||
EXEC_NAME := sandbox
|
EXEC_NAME := sandbox
|
||||||
DIR_LIST := memblock vm base
|
DIR_LIST := memblock vm base
|
||||||
INCLUDE_DIRS := $(foreach dir,$(DIR_LIST),"-I$(dir)/include")
|
INCLUDE_DIRS := $(foreach dir,$(DIR_LIST),-I$(dir)/include)
|
||||||
SRC := $(foreach dir,$(DIR_LIST),$(wildcard $(dir)/*.c))
|
SRC := $(foreach dir,$(DIR_LIST),$(wildcard $(dir)/*.c))
|
||||||
OBJ := $(addprefix $(BUILD_DIR)/,$(SRC:.c=.o))
|
OBJ := $(addprefix $(BUILD_DIR)/,$(SRC:.c=.o))
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ $(BUILD_DIR)/$(EXEC_NAME): $(OBJ)
|
|||||||
@$(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS)
|
@$(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS)
|
||||||
|
|
||||||
$(BUILD_DIR)/%.o: %.c
|
$(BUILD_DIR)/%.o: %.c
|
||||||
@printf " \033[1;32mHOSTCC\033[0m sandbox/$<\n"
|
@printf " \033[1;32mHOSTCC\033[0m \033[35msandbox\033[0m/$<\n"
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
|
|
||||||
@$(CC) $< -o $@ -c $(CFLAGS)
|
@$(CC) $< -o $@ -c $(CFLAGS)
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
THIS_FILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
|
|
||||||
SANDBOX_PROG_MAKEFILE_PATH := $(abspath $(firstword $(MAKEFILE_LIST)))
|
|
||||||
SANDBOX_BASE_DIR := $(patsubst %/,%,$(dir $(THIS_FILE_PATH)))
|
|
||||||
SANDBOX_PROG_DIR := $(patsubst %/,%,$(dir $(SANDBOX_PROG_MAKEFILE_PATH)))
|
|
||||||
|
|
||||||
include $(SANDBOX_BASE_DIR)/../tools/make/gcc-host.mk
|
|
||||||
|
|
||||||
SANDBOX_PROG_NAME := $(notdir $(SANDBOX_PROG_DIR))
|
|
||||||
|
|
||||||
SANDBOX_BUILD_DIR := $(SANDBOX_BASE_DIR)/../build/sandbox
|
|
||||||
BUILD_DIR := $(SANDBOX_BUILD_DIR)/$(SANDBOX_PROG_NAME)
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
BUILD_DIR := $(SANDBOX_BUILD_DIR)/$(SANDBOX_PROG_NAME)
|
|
||||||
|
|
||||||
SRC := $(wildcard *.c)
|
|
||||||
OBJ := $(addprefix $(BUILD_DIR)/,$(SRC:.c=.o))
|
|
||||||
|
|
||||||
CFLAGS := -g "-I$(SANDBOX_BASE_DIR)/include"
|
|
||||||
|
|
||||||
$(BUILD_DIR)/$(SANDBOX_PROG_NAME): $(OBJ)
|
|
||||||
@mkdir -p $(@D)
|
|
||||||
|
|
||||||
@printf " \033[1;36mHOSTLD\033[0m \033[1msandbox/\033[35m$(SANDBOX_PROG_NAME)\n"
|
|
||||||
@$(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS)
|
|
||||||
|
|
||||||
$(BUILD_DIR)/%.o: %.c
|
|
||||||
@printf " \033[1;32mHOSTCC\033[0m sandbox/\033[35m$(SANDBOX_PROG_NAME)\033[0m/$<\n"
|
|
||||||
@mkdir -p $(@D)
|
|
||||||
|
|
||||||
@$(CC) $< -o $@ -c $(CFLAGS)
|
|
||||||
|
|
||||||
all: $(SANDBOX_PROG_NAME)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@printf " \033[1;93mRM\033[0m Deleting sandbox/$(SANDBOX_PROG_NAME)\n"
|
|
||||||
@rm -rf $(BUILD_DIR)
|
|
||||||
@@ -7,11 +7,12 @@ import os
|
|||||||
def is_source_file(filepath):
|
def is_source_file(filepath):
|
||||||
return filepath.endswith('.c') or filepath.endswith('.h') or filepath.endswith('.S')
|
return filepath.endswith('.c') or filepath.endswith('.h') or filepath.endswith('.S')
|
||||||
|
|
||||||
|
dir_stack = []
|
||||||
rootdir = os.getcwd()
|
rootdir = os.getcwd()
|
||||||
|
|
||||||
compile_db = []
|
compile_db = []
|
||||||
|
|
||||||
make_output = subprocess.check_output(['make', '-n']).decode('utf-8')
|
make_output = subprocess.check_output(['make', '-nw']).decode('utf-8')
|
||||||
|
|
||||||
make_output_lines = make_output.split('\n')
|
make_output_lines = make_output.split('\n')
|
||||||
|
|
||||||
@@ -19,6 +20,15 @@ for line in make_output_lines:
|
|||||||
line_parts = line.split(' ')
|
line_parts = line.split(' ')
|
||||||
new_line_parts = []
|
new_line_parts = []
|
||||||
|
|
||||||
|
if len(line_parts) >= 2 and 'Entering directory' in line:
|
||||||
|
new_dir = line[line.find('`') + 1:-1]
|
||||||
|
dir_stack.append(new_dir)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if len(line_parts) >= 2 and 'Leaving directory' in line:
|
||||||
|
dir_stack.pop()
|
||||||
|
continue;
|
||||||
|
|
||||||
if 'gcc' not in line_parts[0]:
|
if 'gcc' not in line_parts[0]:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -27,7 +37,7 @@ for line in make_output_lines:
|
|||||||
part = part.strip()
|
part = part.strip()
|
||||||
if is_source_file(part):
|
if is_source_file(part):
|
||||||
src_file = part
|
src_file = part
|
||||||
part = '../{}'.format(part)
|
part = os.path.join(dir_stack[-1], part)
|
||||||
|
|
||||||
new_line_parts.append(part)
|
new_line_parts.append(part)
|
||||||
|
|
||||||
@@ -35,9 +45,9 @@ for line in make_output_lines:
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
db_entry = {
|
db_entry = {
|
||||||
'directory': '{}/build'.format(rootdir),
|
'directory': dir_stack[-1],
|
||||||
'command': ' '.join(new_line_parts).strip(),
|
'command': ' '.join(new_line_parts).strip(),
|
||||||
'file': '{}/{}'.format(rootdir, src_file)
|
'file': os.path.join(dir_stack[-1], src_file)
|
||||||
}
|
}
|
||||||
|
|
||||||
compile_db.append(db_entry)
|
compile_db.append(db_entry)
|
||||||
|
|||||||
Reference in New Issue
Block a user