From 19eaae54593215df0c1d4c02d7944695b46a8306 Mon Sep 17 00:00:00 2001 From: turbocat Date: Tue, 1 Jun 2021 17:01:33 +0000 Subject: [PATCH] Added an example of how to make PE DLL libraries git-svn-id: svn://kolibrios.org@8757 a494cfbc-eb01-0410-851d-a64ba20cac60 --- contrib/sdk/sources/hello_dll/Makefile | 38 +++++++++++++++++++ .../sdk/sources/hello_dll/hello_test/Makefile | 26 +++++++++++++ .../sdk/sources/hello_dll/hello_test/hello.c | 9 +++++ contrib/sdk/sources/hello_dll/libhello.c | 5 +++ contrib/sdk/sources/hello_dll/libhello.def | 2 + 5 files changed, 80 insertions(+) create mode 100644 contrib/sdk/sources/hello_dll/Makefile create mode 100644 contrib/sdk/sources/hello_dll/hello_test/Makefile create mode 100644 contrib/sdk/sources/hello_dll/hello_test/hello.c create mode 100644 contrib/sdk/sources/hello_dll/libhello.c create mode 100644 contrib/sdk/sources/hello_dll/libhello.def diff --git a/contrib/sdk/sources/hello_dll/Makefile b/contrib/sdk/sources/hello_dll/Makefile new file mode 100644 index 0000000000..5de5071dd6 --- /dev/null +++ b/contrib/sdk/sources/hello_dll/Makefile @@ -0,0 +1,38 @@ +LIBRARY= libhello + +CC = kos32-gcc +AR = kos32-ar +LD = kos32-ld +STRIP = kos32-strip + +INSTALLDIR ?= /home/autobuild/tools/win32/lib + +CFLAGS = -UWIN32 -UWindows -U_WINDOWS -U_WIN32 -U__WIN32__ -c -O2 -fno-ident -fomit-frame-pointer + +LDFLAGS=$(LDFLAGS_CMD) +LDFLAGS+= -shared -s -T dll.lds --entry _DllStartup --image-base=0 +LDFLAGS+= --out-implib $(LIBRARY).dll.a +ARFLAGS:= crs +INCLUDES= -I. -I../newlib/libc/include +LIBS:= -ldll -lc.dll + +SOURCES = libhello.c +OBJECTS = $(patsubst %.c, %.o, $(SOURCES)) + +all:$(LIBRARY).a $(LIBRARY).dll + +$(LIBRARY).a: $(OBJECTS) Makefile + $(AR) $(ARFLAGS) $(LIBRARY).a $(OBJECTS) + mv -f $(LIBRARY).a $(INSTALLDIR) + +$(LIBRARY).dll: libhello.def $(OBJECTS) Makefile + $(LD) $(LDFLAGS) -o $@ libhello.def $(OBJECTS) $(LIBS) + $(STRIP) $@ + #mv -f $(LIBRARY).dll.a $(INSTALLDIR) + + +%.o : %.c Makefile + $(CC) $(CFLAGS) $(DEFINES) $(INCLUDES) -o $@ $< + +clean: + -rm -f *.o diff --git a/contrib/sdk/sources/hello_dll/hello_test/Makefile b/contrib/sdk/sources/hello_dll/hello_test/Makefile new file mode 100644 index 0000000000..3c241a8439 --- /dev/null +++ b/contrib/sdk/sources/hello_dll/hello_test/Makefile @@ -0,0 +1,26 @@ +CC = kos32-gcc +LD = kos32-ld + +SDK_DIR:= $(abspath ../../../) + +LDFLAGS = -static -S -Tapp-dynamic.lds --image-base 0 + +CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 + +INCLUDES= -I $(SDK_DIR)/sources/newlib/libc/include +LIBPATH:= -L $(SDK_DIR)/lib + +SOURCES = hello.c \ + $(NULL) + + +OBJECTS = $(patsubst %.c, %.o, $(SOURCES)) + +default: hello + +hello: $(OBJECTS) Makefile + $(LD) $(LDFLAGS) $(LIBPATH) -o hello $(OBJECTS) -lgcc -lc.dll -lhello.dll + objcopy hello -O binary + +%.o : %.c Makefile $(SOURCES) + $(CC) $(CFLAGS) $(INCLUDES) -o $@ $< diff --git a/contrib/sdk/sources/hello_dll/hello_test/hello.c b/contrib/sdk/sources/hello_dll/hello_test/hello.c new file mode 100644 index 0000000000..30388490c3 --- /dev/null +++ b/contrib/sdk/sources/hello_dll/hello_test/hello.c @@ -0,0 +1,9 @@ +#include + +extern void hello(); + +int main(int argc, char *argv[]) +{ + hello(); + return 0; +}; diff --git a/contrib/sdk/sources/hello_dll/libhello.c b/contrib/sdk/sources/hello_dll/libhello.c new file mode 100644 index 0000000000..cb054f9844 --- /dev/null +++ b/contrib/sdk/sources/hello_dll/libhello.c @@ -0,0 +1,5 @@ +#include + +void hello(){ + printf("Hello world!\n"); +} diff --git a/contrib/sdk/sources/hello_dll/libhello.def b/contrib/sdk/sources/hello_dll/libhello.def new file mode 100644 index 0000000000..b63053f7a1 --- /dev/null +++ b/contrib/sdk/sources/hello_dll/libhello.def @@ -0,0 +1,2 @@ +EXPORTS +hello