From afbc4dd35bfd1535cda4e316a39a9b588b88d320 Mon Sep 17 00:00:00 2001 From: Oleksii Shevchuk Date: Sun, 5 Jan 2020 19:27:33 +0200 Subject: [PATCH] client/linux: rework Makefile to support non-intel things --- client/sources-linux/Makefile | 70 ++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/client/sources-linux/Makefile b/client/sources-linux/Makefile index a1c2ed47..f41c8fc9 100644 --- a/client/sources-linux/Makefile +++ b/client/sources-linux/Makefile @@ -1,6 +1,7 @@ CC ?= gcc OS ?= $(shell uname -s) +MACH ?= $(shell uname -m) SUFFIX ?= $(shell echo $(OS) | cut -c -3 | tr '[:upper:]' '[:lower:]') STATIC_LIBZ := -Wl,-Bstatic -lz -Wl,-Bdynamic @@ -33,6 +34,10 @@ endif XZARGS ?= "gcc" "aligned(0x1000)" 'section(".xzrodata")' +# Compatibility for old well-known platforms +ifneq ($(filter $(MACH), x86_64 i386 i486 i586 i686),) +MACHNAME := + ifeq ($(ARCH),) ARCH ?= $(shell file $(LIBPYTHON) | grep 32-bit >/dev/null && echo 32 || echo 64) endif @@ -48,7 +53,14 @@ NAME := 86 CFLAGS += -D_FILE_OFFSET_BITS=64 endif -CFLAGS += -Iresources/$(ARCH) -Iresources +NAME := x$(NAME) + +else +NAME ?= $(MACH) +FEATURE_INJECTOR := +endif + +CFLAGS += -Iresources/$(MACH) -Iresources LINUX_INJECT_CFLAGS := -include fixes.h -Iinjector/src/linux @@ -56,8 +68,9 @@ ifneq ($(DEBUG),) DEBUG_ADD := -debug CFLAGS += -DDEBUG -O0 -g LDFLAGS += -g -NAME := "$(NAME)d" +NAME := $(NAME)d DEBUG_OBJS := debug.o +$(info BUILD debug with name $(NAME)) else DEBUG_OBJS := CFLAGS += -Os @@ -67,6 +80,11 @@ LDFLAGS += -Wl,-z,now -Wl,-z,combreloc -Wl,--enable-new-dtags else LDFLAGS += -s endif +$(info BUILD non-debug with name $(NAME)) +endif + +ifneq ($(DEBUG_USE_OS_PYTHON),) +CFLAGS += -DDEBUG_USE_OS_PYTHON endif PYTHON ?= python @@ -77,9 +95,9 @@ SHARED_CFLAGS := -D_PUPY_SO APP_OBJS := main_exe.o pupy.o tmplibrary.o pupy_load.o COMMON_OBJS := daemonize.o decompress.o LOAD_DEPS := \ - resources/$(ARCH)/libssl.c resources/$(ARCH)/libcrypto.c \ - resources/$(ARCH)/python27.c \ - resources/$(ARCH)/library.c \ + resources/$(MACH)/libssl.c resources/$(MACH)/libcrypto.c \ + resources/$(MACH)/python27.c \ + resources/$(MACH)/library.c \ ../common/Python-dynload.c ../common/Python-dynload.h \ ../common/Python-dynload.c ../common/Python-dynload.h \ ../common/LzmaDec.c ../common/LzmaDec.h ../common/lzmaunpack.c \ @@ -111,7 +129,7 @@ SUFFIX := unc.$(SUFFIX) COMPRESSED = 0 endif -ifeq ($(OS),Linux) +ifneq ($(FEATURE_INJECTOR),) COMMON_OBJS += injector/src/linux/elf.o COMMON_OBJS += injector/src/linux/injector.o COMMON_OBJS += injector/src/linux/ptrace.o @@ -119,11 +137,11 @@ COMMON_OBJS += injector/src/linux/remote_call.o COMMON_OBJS += injector/src/linux/util.o COMMON_OBJS += fixes.o -CFLAGS += -Iinjector/include +CFLAGS += -D_FEATURE_INJECTOR -Iinjector/include LDFLAGS += -Wl,-wrap,realpath endif -all: $(TEMPLATE_OUTPUT_PATH)/pupyx$(NAME).$(SUFFIX) $(TEMPLATE_OUTPUT_PATH)/pupyx$(NAME).$(SUFFIX).so +all: $(TEMPLATE_OUTPUT_PATH)/pupy$(NAME).$(SUFFIX) $(TEMPLATE_OUTPUT_PATH)/pupy$(NAME).$(SUFFIX).so revision.h: if [ x"$$COMMIT" = x"" ]; then rev=`cat ../../.git/\`cat ../../.git/HEAD | cut -f 2 -d \ \` | cut -c 1-8`; \ @@ -156,11 +174,11 @@ LzmaDec.o: ../common/LzmaDec.c $(CC) $(CFLAGS) -O3 -fPIC -c -o $@ $< endif -resources/$(ARCH)/library.txt: ../gen_library_compressed_string.py resources/$(ARCH)/library.zip - $(PYTHON) $(PFLAGS) ../gen_library_compressed_string.py $@ resources/$(ARCH)/library.zip +resources/$(MACH)/library.txt: ../gen_library_compressed_string.py resources/$(MACH)/library.zip + $(PYTHON) $(PFLAGS) ../gen_library_compressed_string.py $@ resources/$(MACH)/library.zip -resources/$(ARCH)/library.c: ../gen_resource_header.py resources/$(ARCH)/library.txt resources/$(ARCH)/library.zip - $(PYTHON) $(PFLAGS) ../gen_resource_header.py resources/$(ARCH)/library.txt $@ $(COMPRESSED) $(XZARGS) +resources/$(MACH)/library.c: ../gen_resource_header.py resources/$(MACH)/library.txt resources/$(MACH)/library.zip + $(PYTHON) $(PFLAGS) ../gen_resource_header.py resources/$(MACH)/library.txt $@ $(COMPRESSED) $(XZARGS) ld_hooks_$(NAME).so: ld_hooks.c $(DEBUG_OBJS) $(CC) $(CFLAGS) -shared $+ -o $@ $(LDFLAGS) \ @@ -174,49 +192,49 @@ ld_hooks_$(NAME).c: ../gen_resource_header.py ld_hooks_$(NAME).so injector/%.o: injector/%.c $(CC) -c $(LINUX_INJECT_CFLAGS) $(CFLAGS) -o $@ $< -resources/$(ARCH)/python27.so: $(LIBPYTHON) - @mkdir -p resources/$(ARCH) +resources/$(MACH)/python27.so: $(LIBPYTHON) + @mkdir -p resources/$(MACH) cp -f $< $@.tmp -chmod 600 $@.tmp -strip $@.tmp sed $@.tmp -e 's@/tmp@\x00tmp@g;s@/usr@\x00usr@g' >$@ || ( rm -f $@; cp $@.tmp $@ ) rm -f $@.tmp -resources/$(ARCH)/libcrypto.so: $(LIBCRYPTO) - @mkdir -p resources/$(ARCH) +resources/$(MACH)/libcrypto.so: $(LIBCRYPTO) + @mkdir -p resources/$(MACH) cp -f $< $@.tmp -chmod 600 $@.tmp -strip $@.tmp mv $@.tmp $@ rm -f $@.tmp -resources/$(ARCH)/libssl.so: $(LIBSSL) - @mkdir -p resources/$(ARCH) +resources/$(MACH)/libssl.so: $(LIBSSL) + @mkdir -p resources/$(MACH) cp -f $< $@.tmp -chmod 600 $@.tmp -strip $@.tmp mv $@.tmp $@ rm -f $@.tmp -resources/$(ARCH)/library.zip: ../build_library_zip.py ../additional_imports.py +resources/$(MACH)/library.zip: ../build_library_zip.py ../additional_imports.py $(PYTHON) -OO $(PFLAGS) $< $@ -resources/$(ARCH)/python27.c: ../gen_resource_header.py resources/$(ARCH)/python27.so +resources/$(MACH)/python27.c: ../gen_resource_header.py resources/$(MACH)/python27.so $(PYTHON) $(PFLAGS) $+ $@ $(COMPRESSED) $(XZARGS) -resources/$(ARCH)/libssl.c: ../gen_resource_header.py resources/$(ARCH)/libssl.so +resources/$(MACH)/libssl.c: ../gen_resource_header.py resources/$(MACH)/libssl.so $(PYTHON) $(PFLAGS) $+ $@ $(COMPRESSED) $(XZARGS) -resources/$(ARCH)/libcrypto.c: ../gen_resource_header.py resources/$(ARCH)/libcrypto.so +resources/$(MACH)/libcrypto.c: ../gen_resource_header.py resources/$(MACH)/libcrypto.so $(PYTHON) $(PFLAGS) $+ $@ $(COMPRESSED) $(XZARGS) -$(TEMPLATE_OUTPUT_PATH)/pupyx$(NAME).$(SUFFIX): $(APP_OBJS) $(COMMON_OBJS) +$(TEMPLATE_OUTPUT_PATH)/pupy$(NAME).$(SUFFIX): $(APP_OBJS) $(COMMON_OBJS) $(CC) $(PIE) $+ -o $@ $(LDFLAGS) \ -Wl,--version-script=pupy.ldscript \ -Wl,--export-dynamic -$(TEMPLATE_OUTPUT_PATH)/pupyx$(NAME).$(SUFFIX).so: $(SHARED_OBJS) $(COMMON_OBJS) - $(CC) -shared $+ -o $@ $(LDFLAGS) -Wl,-soname,pupyx$(NAME).$(SUFFIX).so \ +$(TEMPLATE_OUTPUT_PATH)/pupy$(NAME).$(SUFFIX).so: $(SHARED_OBJS) $(COMMON_OBJS) + $(CC) -shared $+ -o $@ $(LDFLAGS) -Wl,-soname,pupy$(NAME).$(SUFFIX).so \ -Wl,--version-script=pupy.so.ldscript .PHONY: clean all @@ -228,7 +246,7 @@ clean: distclean: clean rm -f resources/*.c - rm -f resources/$(ARCH)/*.c + rm -f resources/$(MACH)/*.c rm -f ld_hooks_$(NAME).c rm -f ld_hooks_$(NAME).so rm -f import-tab.c