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 ...@@ -18,3 +18,5 @@ include/syscall-codes.h
protobuf/*.c protobuf/*.c
protobuf/*.h protobuf/*.h
include/version.h include/version.h
arch/x86/sys-exec-tbl.c
arch/x86/syscalls.S
...@@ -81,13 +81,18 @@ else ...@@ -81,13 +81,18 @@ else
endif endif
CFLAGS += $(WARNINGS) $(DEFINES) CFLAGS += $(WARNINGS) $(DEFINES)
SYSCALL-LIB = $(SRC_DIR)/arch/$(ARCH)/syscalls.o
PROTOBUF-LIB = $(SRC_DIR)/protobuf/protobuf-lib.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 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.version
include scripts/Makefile.rules
#
# shorthand
build := -s -r -R --no-print-directory -f scripts/Makefile.build makefile=Makefile obj
PROGRAM := crtools PROGRAM := crtools
...@@ -135,12 +140,11 @@ OBJS += tty.o ...@@ -135,12 +140,11 @@ OBJS += tty.o
OBJS += cr-exec.o OBJS += cr-exec.o
OBJS += cpu.o OBJS += cpu.o
OBJS += file-lock.o OBJS += file-lock.o
OBJS += $(ARCH_DIR)/crtools.o
DEPS := $(patsubst %.o,%.d,$(OBJS)) DEPS := $(patsubst %.o,%.d,$(OBJS))
.PHONY: all zdtm test rebuild clean distclean tags cscope \ .PHONY: all zdtm test rebuild clean distclean tags cscope \
docs help pie protobuf $(ARCH) docs help pie protobuf arch/$(ARCH)
ifeq ($(GCOV),1) ifeq ($(GCOV),1)
%.o $(PROGRAM): override CFLAGS += --coverage %.o $(PROGRAM): override CFLAGS += --coverage
...@@ -149,15 +153,17 @@ endif ...@@ -149,15 +153,17 @@ endif
all: pie $(VERSION_HEADER) all: pie $(VERSION_HEADER)
$(Q) $(MAKE) $(PROGRAM) $(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/ $(Q) $(MAKE) -C pie/
protobuf: protobuf:
$(Q) $(MAKE) -C protobuf/ $(Q) $(MAKE) -C protobuf/
$(ARCH):
$(Q) $(MAKE) -C arch/$(ARCH)/
%.o: %.c %.o: %.c
$(E) " CC " $@ $(E) " CC " $@
$(Q) $(CC) -c $(CFLAGS) $< -o $@ $(Q) $(CC) -c $(CFLAGS) $< -o $@
...@@ -174,7 +180,7 @@ $(ARCH): ...@@ -174,7 +180,7 @@ $(ARCH):
$(E) " DEP " $@ $(E) " DEP " $@
$(Q) $(CC) -M -MT $@ -MT $(patsubst %.d,%.o,$@) $(CFLAGS) $< -o $@ $(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 " $@ $(E) " LINK " $@
$(Q) $(CC) $(CFLAGS) $^ $(LIBS) -o $@ $(Q) $(CC) $(CFLAGS) $^ $(LIBS) -o $@
...@@ -195,6 +201,7 @@ rebuild: ...@@ -195,6 +201,7 @@ rebuild:
clean: clean:
$(E) " CLEAN" $(E) " CLEAN"
$(Q) $(RM) $(VERSION_HEADER) $(Q) $(RM) $(VERSION_HEADER)
$(Q) $(MAKE) $(build)=arch/$(ARCH) clean
$(Q) $(RM) ./*.o $(Q) $(RM) ./*.o
$(Q) $(RM) ./*.d $(Q) $(RM) ./*.d
$(Q) $(RM) ./*.i $(Q) $(RM) ./*.i
...@@ -208,7 +215,6 @@ clean: ...@@ -208,7 +215,6 @@ clean:
$(Q) $(RM) -r ./test/lib/ $(Q) $(RM) -r ./test/lib/
$(Q) $(RM) -r ./test/lib64/ $(Q) $(RM) -r ./test/lib64/
$(Q) $(MAKE) -C protobuf/ clean $(Q) $(MAKE) -C protobuf/ clean
$(Q) $(MAKE) -C arch/$(ARCH)/ clean
$(Q) $(MAKE) -C pie/ clean $(Q) $(MAKE) -C pie/ clean
$(Q) $(MAKE) -C test/zdtm cleandep $(Q) $(MAKE) -C test/zdtm cleandep
$(Q) $(MAKE) -C test/zdtm clean $(Q) $(MAKE) -C test/zdtm clean
......
SYS-DEF := $(ARCH_DIR)/syscall.def targets += syscalls
SYS-ASM-COMMON := syscall-common.S targets += crtools
SYS-TYPES := $(SRC_DIR)/include/syscall-types.h
SYS-CODES := $(SRC_DIR)/include/syscall-codes.h
SYS-PROTO := $(SRC_DIR)/include/syscall.h
SYS-ASM := syscalls.S 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 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 ARCH_BITS := 32
.DEFAULT_GOAL := arm $(obj)/$(SYS-ASM): $(obj)/$(SYS-GEN) $(obj)/$(SYS-DEF) $(obj)/$(SYS-ASM-COMMON) $(SYS-TYPES)
$(SYS-ASM): $(SYS-GEN) $(SYS-DEF) $(SYS-ASM-COMMON) $(SYS-TYPES)
$(E) " GEN " $@ $(E) " GEN " $@
$(Q) perl \ $(Q) perl \
$(SYS-GEN) \ $(obj)/$(SYS-GEN) \
$(SYS-DEF) \ $(obj)/$(SYS-DEF) \
$(SYS-CODES) \ $(SYS-CODES) \
$(SYS-PROTO) \ $(SYS-PROTO) \
$(SYS-ASM) \ $(obj)/$(SYS-ASM) \
$(SYS-ASM-COMMON) \ $(SYS-ASM-COMMON) \
$(SYS-TYPES) \ $(SYS-TYPES) \
$(ARCH_BITS) $(ARCH_BITS)
$(obj)/syscalls.o: $(obj)/$(SYS-ASM)
$(SYS-EXEC-TBL): $(SYS-GEN-TBL) $(SYS-DEF) $(SYS-EXEC-TBL): $(SYS-GEN-TBL) $(SYS-DEF)
$(E) " GEN " $@ $(E) " GEN " $@
$(Q) perl \ $(Q) perl \
$(SYS-GEN-TBL) \ $(obj)/$(SYS-GEN-TBL) \
$(SYS-DEF) \ $(obj)/$(SYS-DEF) \
$(SYS-EXEC-TBL) \ $(obj)/$(SYS-EXEC-TBL) \
$(ARCH_BITS) $(ARCH_BITS)
%.o: %.S _all += $(obj)/$(SYS-EXEC-TBL)
$(E) " CC " $@
$(Q) $(CC) $(CFLAGS) $^ -o $@
arm: $(SYS-OBJ) $(SYS-EXEC-TBL)
clean: cleanup-y += $(obj)/$(SYS-EXEC-TBL) $(obj)/$(SYS-ASM)
$(E) " CLEAN SYSCALLS" cleanup-y += $(SYS-CODES)
$(Q) $(RM) -f $(SYS-ASM) cleanup-y += $(SYS-PROTO)
$(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 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-ASM-COMMON := syscall-common-x86-64.S
SYS-TYPES := $(SRC_DIR)/include/syscall-types.h
SYS-CODES := $(SRC_DIR)/include/syscall-codes.h SYS-TYPES := include/syscall-types.h
SYS-PROTO := $(SRC_DIR)/include/syscall.h SYS-CODES := include/syscall-codes.h
SYS-PROTO := include/syscall.h
SYS-ASM := syscalls.S
SYS-GEN := syscalls-x86-64.sh SYS-GEN := syscalls-x86-64.sh
SYS-OBJ := syscalls.o
SYS-EXEC-TBL := sys-exec-tbl.c 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 $(obj)/$(SYS-ASM): $(obj)/$(SYS-GEN) $(obj)/$(SYS-DEF) $(obj)/$(SYS-ASM-COMMON) $(SYS-TYPES)
$(SYS-ASM): $(SYS-GEN) $(SYS-DEF) $(SYS-ASM-COMMON) $(SYS-TYPES)
$(E) " GEN " $@ $(E) " GEN " $@
$(Q) $(SH) \ $(Q) $(SH) \
$(SYS-GEN) --asm \ $(obj)/$(SYS-GEN) --asm \
$(SYS-DEF) \ $(obj)/$(SYS-DEF) \
$(SYS-CODES) \ $(SYS-CODES) \
$(SYS-PROTO) \ $(SYS-PROTO) \
$(SYS-ASM) \ $(obj)/$(SYS-ASM) \
$(SYS-ASM-COMMON) \ $(SYS-ASM-COMMON) \
$(SYS-TYPES) $(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 " $@ $(E) " GEN " $@
$(Q) $(SH) \ $(Q) $(SH) \
$(SYS-GEN) --exec \ $(obj)/$(SYS-GEN) --exec \
$(SYS-DEF) \ $(obj)/$(SYS-DEF) \
$(SYS-EXEC-TBL) $(obj)/$(SYS-EXEC-TBL)
%.o: %.S _all += $(obj)/$(SYS-EXEC-TBL)
$(E) " CC " $@
$(Q) $(CC) $(CFLAGS) $^ -o $@ cleanup-y += $(obj)/$(SYS-EXEC-TBL) $(obj)/$(SYS-ASM)
cleanup-y += $(SYS-CODES)
x86: $(SYS-OBJ) $(SYS-EXEC-TBL) cleanup-y += $(SYS-PROTO)
clean: ifneq ($(MAKECMDGOALS),clean)
$(E) " CLEAN SYSCALLS" incdeps := y
$(Q) $(RM) -f $(SYS-ASM) endif
$(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
...@@ -3,13 +3,14 @@ ...@@ -3,13 +3,14 @@
gen_asm() { gen_asm() {
in=$1 in=$1
codesout=$2 codesout=$2
codesinc=`echo $2 | sed -e 's/.*include\///g'`
protosout=$3 protosout=$3
asmout=$4 asmout=$4
asmcommon=$5 asmcommon=`echo $5 | sed -e 's/.*include\///g'`
prototypes=`echo $6 | sed -e 's/.*include\///g'` prototypes=`echo $6 | sed -e 's/.*include\///g'`
codesdef=`echo $codesout | 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:]].-" _` protosdef=`echo $protosout | sed -e 's/.*include\///g' | tr "[[:space:]].-" _`
echo "/* Autogenerated, don't edit */" > $codesout echo "/* Autogenerated, don't edit */" > $codesout
echo "#ifndef $codesdef" >> $codesout echo "#ifndef $codesdef" >> $codesout
...@@ -19,10 +20,10 @@ gen_asm() { ...@@ -19,10 +20,10 @@ gen_asm() {
echo "#ifndef $protosdef" >> $protosout echo "#ifndef $protosdef" >> $protosout
echo "#define $protosdef" >> $protosout echo "#define $protosdef" >> $protosout
echo "#include \"$prototypes\"" >> $protosout echo "#include \"$prototypes\"" >> $protosout
echo "#include \"$codesout\"" >> $protosout echo "#include \"$codesinc\"" >> $protosout
echo "/* Autogenerated, don't edit */" > $asmout echo "/* Autogenerated, don't edit */" > $asmout
echo "#include \"$codesout\"" >> $asmout echo "#include \"$codesinc\"" >> $asmout
echo "#include \"$asmcommon\"" >> $asmout echo "#include \"$asmcommon\"" >> $asmout
cat $in | egrep -v '^#' | sed -e 's/\t\{1,\}/|/g' | awk -F '|' '{print "#define", $1, $2}' >> $codesout cat $in | egrep -v '^#' | sed -e 's/\t\{1,\}/|/g' | awk -F '|' '{print "#define", $1, $2}' >> $codesout
......
...@@ -16,7 +16,6 @@ ASMFLAGS := -D__ASSEMBLY__ ...@@ -16,7 +16,6 @@ ASMFLAGS := -D__ASSEMBLY__
LIB-OBJS := log-simple.o blob-util-net.o LIB-OBJS := log-simple.o blob-util-net.o
DEPS := $(RESTORER-ARCH-OBJS:.o=.d) $(LIB-OBJS:.o=.d) DEPS := $(RESTORER-ARCH-OBJS:.o=.d) $(LIB-OBJS:.o=.d)
LIB-OBJS += $(SYSCALL-LIB)
$(PARASITE): $(LIB-OBJS) $(PASM-OBJS) $(PIELDS) $(PARASITE): $(LIB-OBJS) $(PASM-OBJS) $(PIELDS)
$(RESTORER): $(LIB-OBJS) $(RESTORER-ARCH-OBJS) $(PIELDS) $(RESTORER): $(LIB-OBJS) $(RESTORER-ARCH-OBJS) $(PIELDS)
...@@ -45,7 +44,7 @@ blob-util-net.o: $(SRC_DIR)/util-net.c ...@@ -45,7 +44,7 @@ blob-util-net.o: $(SRC_DIR)/util-net.c
%.bin.o: %.o %.bin.o: %.o
$(E) " GEN " $@ $(E) " GEN " $@
$(Q) $(LD) -T $(PIELDS) -o $@ $(^:$(PIELDS)=) $(Q) $(LD) -T $(PIELDS) -o $@ $(^:$(PIELDS)=) ../$(SYSCALL-LIB)
%.bin: %.bin.o %.bin: %.bin.o
$(E) " GEN " $@ $(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