Files
dlopen/Makefile
2025-12-21 18:51:34 +05:00

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