Commit 10ed5a0a authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Pavel Emelyanov

make: arch -- Switch to a new build scheme

Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 16c75274
......@@ -18,3 +18,5 @@ include/syscall-codes.h
protobuf/*.c
protobuf/*.h
include/version.h
arch/x86/sys-exec-tbl.c
arch/x86/syscalls.S
......@@ -81,13 +81,18 @@ else
endif
CFLAGS += $(WARNINGS) $(DEFINES)
SYSCALL-LIB = $(SRC_DIR)/arch/$(ARCH)/syscalls.o
PROTOBUF-LIB = $(SRC_DIR)/protobuf/protobuf-lib.o
SYSCALL-LIB := arch/$(ARCH)/syscalls.built-in.o
ARCH-LIB := arch/$(ARCH)/crtools.built-in.o
export E Q CC ECHO MAKE CFLAGS LIBS ARCH DEFINES MAKEFLAGS
export SRC_DIR SYSCALL-LIB SH ARCH_DIR OBJCOPY LDARCH
export SRC_DIR SYSCALL-LIB SH RM ARCH_DIR OBJCOPY LDARCH LD
include scripts/Makefile.version
include scripts/Makefile.rules
#
# shorthand
build := -s -r -R --no-print-directory -f scripts/Makefile.build makefile=Makefile obj
PROGRAM := crtools
......@@ -135,12 +140,11 @@ OBJS += tty.o
OBJS += cr-exec.o
OBJS += cpu.o
OBJS += file-lock.o
OBJS += $(ARCH_DIR)/crtools.o
DEPS := $(patsubst %.o,%.d,$(OBJS))
.PHONY: all zdtm test rebuild clean distclean tags cscope \
docs help pie protobuf $(ARCH)
docs help pie protobuf arch/$(ARCH)
ifeq ($(GCOV),1)
%.o $(PROGRAM): override CFLAGS += --coverage
......@@ -149,15 +153,17 @@ endif
all: pie $(VERSION_HEADER)
$(Q) $(MAKE) $(PROGRAM)
pie: protobuf $(ARCH)
arch/$(ARCH)/%:: protobuf
$(Q) $(MAKE) $(build)=arch/$(ARCH) $@
arch/$(ARCH): protobuf
$(Q) $(MAKE) $(build)=arch/$(ARCH) all
pie: arch/$(ARCH) protobuf
$(Q) $(MAKE) -C pie/
protobuf:
$(Q) $(MAKE) -C protobuf/
$(ARCH):
$(Q) $(MAKE) -C arch/$(ARCH)/
%.o: %.c
$(E) " CC " $@
$(Q) $(CC) -c $(CFLAGS) $< -o $@
......@@ -174,7 +180,7 @@ $(ARCH):
$(E) " DEP " $@
$(Q) $(CC) -M -MT $@ -MT $(patsubst %.d,%.o,$@) $(CFLAGS) $< -o $@
$(PROGRAM): $(OBJS) $(SYSCALL-LIB) $(PROTOBUF-LIB)
$(PROGRAM): $(OBJS) $(SYSCALL-LIB) $(ARCH-LIB) $(PROTOBUF-LIB)
$(E) " LINK " $@
$(Q) $(CC) $(CFLAGS) $^ $(LIBS) -o $@
......@@ -195,6 +201,7 @@ rebuild:
clean:
$(E) " CLEAN"
$(Q) $(RM) $(VERSION_HEADER)
$(Q) $(MAKE) $(build)=arch/$(ARCH) clean
$(Q) $(RM) ./*.o
$(Q) $(RM) ./*.d
$(Q) $(RM) ./*.i
......@@ -208,7 +215,6 @@ clean:
$(Q) $(RM) -r ./test/lib/
$(Q) $(RM) -r ./test/lib64/
$(Q) $(MAKE) -C protobuf/ clean
$(Q) $(MAKE) -C arch/$(ARCH)/ clean
$(Q) $(MAKE) -C pie/ clean
$(Q) $(MAKE) -C test/zdtm cleandep
$(Q) $(MAKE) -C test/zdtm clean
......
SYS-DEF := $(ARCH_DIR)/syscall.def
SYS-ASM-COMMON := syscall-common.S
SYS-TYPES := $(SRC_DIR)/include/syscall-types.h
SYS-CODES := $(SRC_DIR)/include/syscall-codes.h
SYS-PROTO := $(SRC_DIR)/include/syscall.h
targets += syscalls
targets += crtools
SYS-ASM := syscalls.S
SYS-GEN := $(ARCH_DIR)/gen-syscalls.pl
SYS-GEN-TBL := $(ARCH_DIR)/gen-sys-exec-tbl.pl
SYS-OBJ := syscalls.o
syscalls-asm-y += $(SYS-ASM:.S=).o
crtools-obj-y += crtools.o
SYS-DEF := syscall.def
SYS-ASM-COMMON := syscall-common.S
SYS-TYPES := include/syscall-types.h
SYS-CODES := include/syscall-codes.h
SYS-PROTO := include/syscall.h
SYS-GEN := gen-syscalls.pl
SYS-GEN-TBL := gen-sys-exec-tbl.pl
SYS-EXEC-TBL := sys-exec-tbl.c
CFLAGS += -c -fpie -Wstrict-prototypes -Wa,--noexecstack -D__ASSEMBLY__ -nostdlib -fomit-frame-pointer -I$(shell pwd)
CFLAGS += -fpie -Wstrict-prototypes -Wa,--noexecstack
CFLAGS += -nostdlib -fomit-frame-pointer -I$(obj)
ASMFLAGS += -D__ASSEMBLY__
ARCH_BITS := 32
.DEFAULT_GOAL := arm
$(SYS-ASM): $(SYS-GEN) $(SYS-DEF) $(SYS-ASM-COMMON) $(SYS-TYPES)
$(obj)/$(SYS-ASM): $(obj)/$(SYS-GEN) $(obj)/$(SYS-DEF) $(obj)/$(SYS-ASM-COMMON) $(SYS-TYPES)
$(E) " GEN " $@
$(Q) perl \
$(SYS-GEN) \
$(SYS-DEF) \
$(obj)/$(SYS-GEN) \
$(obj)/$(SYS-DEF) \
$(SYS-CODES) \
$(SYS-PROTO) \
$(SYS-ASM) \
$(obj)/$(SYS-ASM) \
$(SYS-ASM-COMMON) \
$(SYS-TYPES) \
$(ARCH_BITS)
$(obj)/syscalls.o: $(obj)/$(SYS-ASM)
$(SYS-EXEC-TBL): $(SYS-GEN-TBL) $(SYS-DEF)
$(E) " GEN " $@
$(Q) perl \
$(SYS-GEN-TBL) \
$(SYS-DEF) \
$(SYS-EXEC-TBL) \
$(obj)/$(SYS-GEN-TBL) \
$(obj)/$(SYS-DEF) \
$(obj)/$(SYS-EXEC-TBL) \
$(ARCH_BITS)
%.o: %.S
$(E) " CC " $@
$(Q) $(CC) $(CFLAGS) $^ -o $@
arm: $(SYS-OBJ) $(SYS-EXEC-TBL)
_all += $(obj)/$(SYS-EXEC-TBL)
clean:
$(E) " CLEAN SYSCALLS"
$(Q) $(RM) -f $(SYS-ASM)
$(Q) $(RM) -f $(SYS-CODES)
$(Q) $(RM) -f $(SYS-PROTO)
$(Q) $(RM) -f $(SYS-OBJ)
$(Q) $(RM) -f $(SYS-EXEC-TBL)
$(Q) $(RM) -f *.o *.d
cleanup-y += $(obj)/$(SYS-EXEC-TBL) $(obj)/$(SYS-ASM)
cleanup-y += $(SYS-CODES)
cleanup-y += $(SYS-PROTO)
.PHONY: clean arm
ifneq ($(MAKECMDGOALS),clean)
incdeps := y
endif
SYS-DEF := $(ARCH_DIR)/syscall-x86-64.def
targets += syscalls
targets += crtools
SYS-ASM := syscalls.S
syscalls-asm-y += $(SYS-ASM:.S=).o
crtools-obj-y += crtools.o
SYS-DEF := syscall-x86-64.def
SYS-ASM-COMMON := syscall-common-x86-64.S
SYS-TYPES := $(SRC_DIR)/include/syscall-types.h
SYS-CODES := $(SRC_DIR)/include/syscall-codes.h
SYS-PROTO := $(SRC_DIR)/include/syscall.h
SYS-TYPES := include/syscall-types.h
SYS-CODES := include/syscall-codes.h
SYS-PROTO := include/syscall.h
SYS-ASM := syscalls.S
SYS-GEN := syscalls-x86-64.sh
SYS-OBJ := syscalls.o
SYS-EXEC-TBL := sys-exec-tbl.c
CFLAGS += -c -fpie -Wstrict-prototypes -Wa,--noexecstack -D__ASSEMBLY__ -nostdlib -fomit-frame-pointer -I$(shell pwd)
CFLAGS += -fpie -Wstrict-prototypes -Wa,--noexecstack
CFLAGS += -nostdlib -fomit-frame-pointer -I$(obj)
ASMFLAGS += -D__ASSEMBLY__
.DEFAULT_GOAL := x86
$(SYS-ASM): $(SYS-GEN) $(SYS-DEF) $(SYS-ASM-COMMON) $(SYS-TYPES)
$(obj)/$(SYS-ASM): $(obj)/$(SYS-GEN) $(obj)/$(SYS-DEF) $(obj)/$(SYS-ASM-COMMON) $(SYS-TYPES)
$(E) " GEN " $@
$(Q) $(SH) \
$(SYS-GEN) --asm \
$(SYS-DEF) \
$(SYS-CODES) \
$(SYS-PROTO) \
$(SYS-ASM) \
$(SYS-ASM-COMMON) \
$(Q) $(SH) \
$(obj)/$(SYS-GEN) --asm \
$(obj)/$(SYS-DEF) \
$(SYS-CODES) \
$(SYS-PROTO) \
$(obj)/$(SYS-ASM) \
$(SYS-ASM-COMMON) \
$(SYS-TYPES)
$(SYS-EXEC-TBL): $(SYS-GEN) $(SYS-DEF)
$(obj)/syscalls.o: $(obj)/$(SYS-ASM)
$(obj)/$(SYS-EXEC-TBL): $(obj)/$(SYS-GEN) $(obj)/$(SYS-DEF)
$(E) " GEN " $@
$(Q) $(SH) \
$(SYS-GEN) --exec \
$(SYS-DEF) \
$(SYS-EXEC-TBL)
%.o: %.S
$(E) " CC " $@
$(Q) $(CC) $(CFLAGS) $^ -o $@
x86: $(SYS-OBJ) $(SYS-EXEC-TBL)
clean:
$(E) " CLEAN SYSCALLS"
$(Q) $(RM) -f $(SYS-ASM)
$(Q) $(RM) -f $(SYS-CODES)
$(Q) $(RM) -f $(SYS-PROTO)
$(Q) $(RM) -f $(SYS-OBJ)
$(Q) $(RM) -f $(SYS-EXEC-TBL)
$(Q) $(RM) -f *.o *.d
.PHONY: clean x86
$(Q) $(SH) \
$(obj)/$(SYS-GEN) --exec \
$(obj)/$(SYS-DEF) \
$(obj)/$(SYS-EXEC-TBL)
_all += $(obj)/$(SYS-EXEC-TBL)
cleanup-y += $(obj)/$(SYS-EXEC-TBL) $(obj)/$(SYS-ASM)
cleanup-y += $(SYS-CODES)
cleanup-y += $(SYS-PROTO)
ifneq ($(MAKECMDGOALS),clean)
incdeps := y
endif
......@@ -3,13 +3,14 @@
gen_asm() {
in=$1
codesout=$2
codesinc=`echo $2 | sed -e 's/.*include\///g'`
protosout=$3
asmout=$4
asmcommon=$5
asmcommon=`echo $5 | sed -e 's/.*include\///g'`
prototypes=`echo $6 | sed -e 's/.*include\///g'`
codesdef=`echo $codesout | sed -e 's/.*\/include\///g' | tr "[[:space:]].-" _`
protosdef=`echo $protosout | sed -e 's/.*\/include\///g' | tr "[[:space:]].-" _`
codesdef=`echo $codesout | sed -e 's/.*include\///g' | tr "[[:space:]].-" _`
protosdef=`echo $protosout | sed -e 's/.*include\///g' | tr "[[:space:]].-" _`
echo "/* Autogenerated, don't edit */" > $codesout
echo "#ifndef $codesdef" >> $codesout
......@@ -19,10 +20,10 @@ gen_asm() {
echo "#ifndef $protosdef" >> $protosout
echo "#define $protosdef" >> $protosout
echo "#include \"$prototypes\"" >> $protosout
echo "#include \"$codesout\"" >> $protosout
echo "#include \"$codesinc\"" >> $protosout
echo "/* Autogenerated, don't edit */" > $asmout
echo "#include \"$codesout\"" >> $asmout
echo "#include \"$codesinc\"" >> $asmout
echo "#include \"$asmcommon\"" >> $asmout
cat $in | egrep -v '^#' | sed -e 's/\t\{1,\}/|/g' | awk -F '|' '{print "#define", $1, $2}' >> $codesout
......
......@@ -16,7 +16,6 @@ ASMFLAGS := -D__ASSEMBLY__
LIB-OBJS := log-simple.o blob-util-net.o
DEPS := $(RESTORER-ARCH-OBJS:.o=.d) $(LIB-OBJS:.o=.d)
LIB-OBJS += $(SYSCALL-LIB)
$(PARASITE): $(LIB-OBJS) $(PASM-OBJS) $(PIELDS)
$(RESTORER): $(LIB-OBJS) $(RESTORER-ARCH-OBJS) $(PIELDS)
......@@ -45,7 +44,7 @@ blob-util-net.o: $(SRC_DIR)/util-net.c
%.bin.o: %.o
$(E) " GEN " $@
$(Q) $(LD) -T $(PIELDS) -o $@ $(^:$(PIELDS)=)
$(Q) $(LD) -T $(PIELDS) -o $@ $(^:$(PIELDS)=) ../$(SYSCALL-LIB)
%.bin: %.bin.o
$(E) " GEN " $@
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment