Added an example of how to make PE DLL libraries

git-svn-id: svn://kolibrios.org@8757 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
turbocat 2021-06-01 17:01:33 +00:00
parent 94803c76d8
commit 19eaae5459
5 changed files with 80 additions and 0 deletions

View File

@ -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

View File

@ -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 $@ $<

View File

@ -0,0 +1,9 @@
#include <stdio.h>
extern void hello();
int main(int argc, char *argv[])
{
hello();
return 0;
};

View File

@ -0,0 +1,5 @@
#include <stdio.h>
void hello(){
printf("Hello world!\n");
}

View File

@ -0,0 +1,2 @@
EXPORTS
hello