115 lines
2.3 KiB
Makefile
115 lines
2.3 KiB
Makefile
NAME=dlopen
|
|
|
|
CC=kos32-gcc
|
|
LD=kos32-ld
|
|
STRIP=kos32-strip
|
|
OBJCOPY=kos32-objcopy
|
|
|
|
|
|
MYCFLAGS =
|
|
MYLDFLAGS =
|
|
DEBUG_INFO=0
|
|
|
|
CFLAGS= -O2 -Wall -Iinclude -std=c11 -DDEBUG_INFO=$(DEBUG_INFO) $(MYCFLAGS) $(SYSCFLAGS)
|
|
AR= kos32-ar rcu
|
|
RANLIB= ranlib
|
|
RM= rm -f
|
|
LIBS= $(MYLIBS) $(SYSLIBS)
|
|
|
|
ALL_A = dlopen.a
|
|
|
|
ALL_TESTS= \
|
|
test.kex \
|
|
testDll.kex
|
|
|
|
TEST_DLL = \
|
|
dll.dll \
|
|
dllDep.dll
|
|
|
|
DLOPEN_OBJECTS = src/dlopen.o src/loader.o src/sha256.o
|
|
TESTS_OBJECTS = tests/dll.o tests/dllDep.o tests/testDll.o
|
|
|
|
#defaut objects
|
|
OBJECTS=$(DLOPEN_OBJECTS)
|
|
|
|
ALL_OBJECTS = $(DLOPEN_OBJECTS) $(TESTS_OBJECTS)
|
|
|
|
ALL_BIN=$(ALL_A) $(ALL_DLL) $(ALL_OBJECTS) $(ALL_TESTS) $(TEST_DLL)
|
|
|
|
|
|
#########
|
|
|
|
ifeq ($(OS),Windows_NT)
|
|
TOOLCHAIN_PATH=C:/MinGW/msys/1.0/home/autobuild/tools/win32
|
|
else
|
|
TOOLCHAIN_PATH=/home/autobuild/tools/win32
|
|
endif
|
|
|
|
SYSCFLAGS= -nostdinc -fno-builtin -fno-ident -fomit-frame-pointer \
|
|
-U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 -fpic \
|
|
-I$(TOOLCHAIN_PATH)/lib/gcc/mingw32/5.4.0/include -I$(TOOLCHAIN_PATH)/lib/gcc/mingw32/5.4.0/include-fixed -I$(TOOLCHAIN_PATH)/include
|
|
SYSLDFLAGS=--image-base 0 -Tapp-dynamic.lds
|
|
SYSLIBS=-nostdlib -L$(TOOLCHAIN_PATH)/mingw32/lib -lgcc -lc.dll -ldll
|
|
|
|
#########
|
|
|
|
|
|
|
|
default: $(ALL_BIN)
|
|
|
|
|
|
|
|
DLL_IMPL = $(DLL_NAME).a
|
|
|
|
dlopen.a: $(OBJECTS)
|
|
$(AR) $@ $?
|
|
|
|
$(DLL_NAME).dll: $(OBJECTS)
|
|
$(LD) -shared -T dll.lds --entry _DllStartup -o $(DLL_NAME) $^ $(LIBS) --out-implib $(DLL_IMPL)
|
|
|
|
$(DLL_IMPL): $(DLL_NAME)
|
|
|
|
$(KEX_BIN_NAME).kex: $(KEX_DEPS)
|
|
$(LD) -o $(KEX_BIN_NAME) $(SYSLDFLAGS) $(MYLDFLAGS) $^ $(LIBS)
|
|
$(STRIP) -S $(KEX_BIN_NAME)
|
|
$(OBJCOPY) $(KEX_BIN_NAME) -O binary
|
|
|
|
clean:
|
|
rm -f $(OBJECTS) $(ALL_BIN)
|
|
|
|
# deps
|
|
|
|
|
|
|
|
|
|
src/dlopen.o: src/dlopen.c include/dlfcn.h src/loader.h
|
|
src/loader.o: src/loader.c src/loader.h src/sha256.h
|
|
src/loader.h: src/pe.h
|
|
src/sha256.o: src/sha256.c src/sha256.h
|
|
|
|
# Tests
|
|
|
|
DEFAULT_TEST = make "KEX_DEPS=$^" "KEX_BIN_NAME=$@" $@.kex
|
|
|
|
DEFAULT_SHARED_LIB = make "DLL_NAME=$@" "OBJECTS=$^" $@.dll
|
|
|
|
testDll.kex: tests/testDll.o dlopen.a
|
|
$(DEFAULT_TEST)
|
|
|
|
test.kex: tests/test.o dlopen.a
|
|
$(DEFAULT_TEST)
|
|
|
|
dll.dll: tests/dll.o
|
|
$(DEFAULT_SHARED_LIB)
|
|
|
|
dllDep.dll: tests/dllDep.o dll.dll.a
|
|
$(DEFAULT_SHARED_LIB)
|
|
|
|
|
|
tests/test.o: tests/test.c include/dlfcn.h src/loader.h
|
|
|
|
tests/dll.o: tests/dll.c tests/dll.h
|
|
|
|
tests/dllDep.o: tests/dllDep.c tests/dllDep.h tests/dll.h
|
|
tests/testDll.o: tests/testDll.c
|