summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2016-04-24 16:29:50 -0400
committermidipix <writeonce@midipix.org>2016-11-10 23:35:42 -0500
commit781ac1bd0f2df4523b1a715befd1ae63d92afecc (patch)
tree21bdd6bb5942156aa2ef7e08197b51b538236874
parentcc1c9b2fc3a6ff29e89a2673b1a1a4d19558c6d4 (diff)
downloadperk-781ac1bd0f2df4523b1a715befd1ae63d92afecc.tar.bz2
perk-781ac1bd0f2df4523b1a715befd1ae63d92afecc.tar.xz
build system: PE targets: added import library version support.
-rw-r--r--Makefile.in22
-rw-r--r--project/custom.mk3
-rw-r--r--project/defs.mk14
-rw-r--r--sysinfo/os/any-os.mk3
-rw-r--r--sysinfo/os/bsd.mk3
-rw-r--r--sysinfo/os/darwin.mk3
-rw-r--r--sysinfo/os/linux.mk3
-rw-r--r--sysinfo/os/midipix.mk7
-rw-r--r--sysinfo/os/mingw.mk6
-rw-r--r--sysinfo/os/pe.mk48
-rw-r--r--sysinfo/toolchain/binutils.mk1
-rw-r--r--sysinfo/toolchain/llvm.mk1
12 files changed, 87 insertions, 27 deletions
diff --git a/Makefile.in b/Makefile.in
index 869b090..0957e32 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -71,6 +71,8 @@ include $(PROJECT_DIR)/sysinfo/toolchain/$(TOOLCHAIN).mk
include $(PROJECT_DIR)/project/defs.mk
include $(PROJECT_DIR)/project/version.mk
+include $(PROJECT_DIR)/project/custom.mk
+
include $(PROJECT_DIR)/project/tree.mk
include $(PROJECT_DIR)/project/depends.mk
include $(PROJECT_DIR)/project/headers.mk
@@ -112,7 +114,7 @@ install-headers:shared static
mkdir -p $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)
cp $(API_HEADERS) $(DESTDIR)$(INCLUDEDIR)/$(PACKAGE)
-install-shared: shared install-lib install-soname install-solink
+install-shared: shared install-lib install-soname install-solink install-implib
install-lib: shared
mkdir -p $(DESTDIR)$(LIBDIR)
@@ -128,7 +130,7 @@ install-app: app install-app-extras
-shared: shared-lib shared-soname shared-solink
+shared: shared-lib shared-soname shared-solink implib
static: static-lib
@@ -140,8 +142,6 @@ shared-solink: shared-lib $(SHARED_SOLINK)
static-lib: static-objs $(STATIC_LIB)
-shared-implib: shared-lib
-
default-app: version.tag static $(DEFAULT_APP) $(APP)
@@ -198,7 +198,7 @@ version.tag: $(GIT_REFERENCE_DIR)
distclean: clean
rm -f Makefile
-clean:
+clean: clean-implib
rm -f tree.tag
rm -f dirs.tag
rm -f host.tag
@@ -210,7 +210,6 @@ clean:
rm -f $(SHARED_SONAME)
rm -f $(SHARED_SOLINK)
rm -f $(STATIC_LIB)
- rm -f $(SHARED_IMPLIB)
rm -f $(APP)
rm -f $(DEFAULT_APP)
rm -f $(SHARED_APP)
@@ -320,11 +319,14 @@ clean:
.PHONY: all install shared static app .display \
- shared-objs shared-lib shared-implib \
+ shared-objs shared-lib \
static-objs static-lib \
default-app shared-app static-app \
- install-shared install-static install-implib \
+ install-shared install-static \
install-headers install-app \
- clean distclean version \
+ clean distclean clean-implib version \
.display-project .display-env .display-tools .display-flags \
- .display-pe .display-elf .display-dirs .display-build
+ .display-pe .display-elf .display-dirs .display-build \
+ implib implib-ver implib-soname implib-solink \
+ install-implib install-implib-ver \
+ install-implib-soname install-implib-solink
diff --git a/project/custom.mk b/project/custom.mk
new file mode 100644
index 0000000..3a30273
--- /dev/null
+++ b/project/custom.mk
@@ -0,0 +1,3 @@
+ifeq ($(OS_BINFMT),PE)
+include $(PROJECT_DIR)/sysinfo/os/pe.mk
+endif
diff --git a/project/defs.mk b/project/defs.mk
index 5a5d60b..e80bd59 100644
--- a/project/defs.mk
+++ b/project/defs.mk
@@ -14,6 +14,8 @@ APP_OBJS = $(APP_SRCS:.c=.o)
SHARED_OBJS = $(COMMON_LOBJS) $(ARCH_LOBJS)
STATIC_OBJS = $(COMMON_OBJS) $(ARCH_OBJS)
+STATIC_LIB = lib/$(OS_LIB_PREFIX)$(PACKAGE)$(OS_ARCHIVE_EXT)
+
DSO_VER = $(OS_LIB_PREFIX)$(PACKAGE)$(OS_LIB_SUFFIX)$(VER_XYZ)
DSO_SONAME = $(OS_LIB_PREFIX)$(PACKAGE)$(OS_LIB_SUFFIX)$(VER_SONAME)
DSO_SOLINK = $(OS_LIB_PREFIX)$(PACKAGE)$(OS_LIB_SUFFIX)
@@ -22,8 +24,15 @@ SHARED_LIB = lib/$(DSO_VER)
SHARED_SONAME = lib/$(DSO_SONAME)
SHARED_SOLINK = lib/$(DSO_SOLINK)
-SHARED_IMPLIB = lib/$(OS_LIB_PREFIX)$(PACKAGE)$(OS_IMPLIB_EXT)
-STATIC_LIB = lib/$(OS_LIB_PREFIX)$(PACKAGE)$(OS_ARCHIVE_EXT)
+IMP_DEF = $(OS_LIB_PREFIX)$(PACKAGE)$(VER_XYZ)$(OS_LIBDEF_EXT)
+IMP_VER = $(OS_LIB_PREFIX)$(PACKAGE)$(VER_XYZ)$(OS_IMPLIB_EXT)
+IMP_SONAME = $(OS_LIB_PREFIX)$(PACKAGE)$(VER_SONAME)$(OS_IMPLIB_EXT)
+IMP_SOLINK = $(OS_LIB_PREFIX)$(PACKAGE)$(OS_IMPLIB_EXT)
+
+IMPLIB_DEF = lib/$(IMP_DEF)
+IMPLIB_VER = lib/$(IMP_VER)
+IMPLIB_SONAME = lib/$(IMP_SONAME)
+IMPLIB_SOLINK = lib/$(IMP_SOLINK)
APP = bin/$(OS_APP_PREFIX)$(NICKNAME)$(OS_APP_SUFFIX)
DEFAULT_APP = bin/$(OS_APP_PREFIX)$(NICKNAME)-default$(OS_APP_SUFFIX)
@@ -45,6 +54,7 @@ LDFLAGS_SHARED = $(LDFLAGS_DEBUG) $(LDFLAGS_CONFIG) $(LDFLAGS_SYSROOT) \
LDFLAGS_SHARED += -Wl,-soname
LDFLAGS_SHARED += -Wl,$(DSO_SONAME)
+LDFLAGS_SHARED += $(LDFLAGS_IMPLIB)
LDFLAGS_APP = $(LDFLAGS_DEBUG) $(LDFLAGS_CONFIG) $(LDFLAGS_SYSROOT) \
$(LDFLAGS_COMMON) $(LDFLAGS_CMDLINE) $(LDFLAGS_HOST) \
diff --git a/sysinfo/os/any-os.mk b/sysinfo/os/any-os.mk
index c052f31..cf8ec00 100644
--- a/sysinfo/os/any-os.mk
+++ b/sysinfo/os/any-os.mk
@@ -7,5 +7,6 @@ OS_IMPLIB_EXT = .invalid
OS_LIBDEF_EXT = .invalid
OS_ARCHIVE_EXT = .a
OS_SONAME = symlink
+OS_BINFMT = ELF
-.PHONY: $(SHARED_IMPLIB)
+.PHONY: $(IMPLIB_DEF) $(IMPLIB_VER) $(IMPLIB_SONAME) $(IMPLIB_SOLINK)
diff --git a/sysinfo/os/bsd.mk b/sysinfo/os/bsd.mk
index 694c54f..6e8fac0 100644
--- a/sysinfo/os/bsd.mk
+++ b/sysinfo/os/bsd.mk
@@ -7,5 +7,6 @@ OS_IMPLIB_EXT = .invalid
OS_LIBDEF_EXT = .invalid
OS_ARCHIVE_EXT = .a
OS_SONAME = symlink
+OS_BINFMT = ELF
-.PHONY: $(SHARED_IMPLIB)
+.PHONY: $(IMPLIB_DEF) $(IMPLIB_VER) $(IMPLIB_SONAME) $(IMPLIB_SOLINK)
diff --git a/sysinfo/os/darwin.mk b/sysinfo/os/darwin.mk
index 7ccdfde..5a0b99e 100644
--- a/sysinfo/os/darwin.mk
+++ b/sysinfo/os/darwin.mk
@@ -7,7 +7,8 @@ OS_IMPLIB_EXT = .invalid
OS_LIBDEF_EXT = .invalid
OS_ARCHIVE_EXT = .a
OS_SONAME = symlink
+OS_BINFMT = MACHO
CFLAGS_OS += -D_DARWIN_C_SOURCE
-.PHONY: $(SHARED_IMPLIB)
+.PHONY: $(IMPLIB_DEF) $(IMPLIB_VER) $(IMPLIB_SONAME) $(IMPLIB_SOLINK)
diff --git a/sysinfo/os/linux.mk b/sysinfo/os/linux.mk
index e2dcd2e..082026b 100644
--- a/sysinfo/os/linux.mk
+++ b/sysinfo/os/linux.mk
@@ -7,5 +7,6 @@ OS_IMPLIB_EXT = .invalid
OS_LIBDEF_EXT = .invalid
OS_ARCHIVE_EXT = .a
OS_SONAME = symlink
+OS_BINFMT = ELF
-.PHONY: $(SHARED_IMPLIB)
+.PHONY: $(IMPLIB_DEF) $(IMPLIB_VER) $(IMPLIB_SONAME) $(IMPLIB_SOLINK)
diff --git a/sysinfo/os/midipix.mk b/sysinfo/os/midipix.mk
index 098ac68..d99b249 100644
--- a/sysinfo/os/midipix.mk
+++ b/sysinfo/os/midipix.mk
@@ -7,9 +7,4 @@ OS_IMPLIB_EXT = .lib.a
OS_LIBDEF_EXT = .so.def
OS_ARCHIVE_EXT = .a
OS_SONAME = copy
-
-LDFLAGS_CONFIG += -mout-implib
-
-install-implib: shared-implib
- mkdir -p $(DESTDIR)$(LIBDIR)
- cp $(SHARED_IMPLIB) $(DESTDIR)$(LIBDIR)
+OS_BINFMT = PE \ No newline at end of file
diff --git a/sysinfo/os/mingw.mk b/sysinfo/os/mingw.mk
index a40239f..6ade8d5 100644
--- a/sysinfo/os/mingw.mk
+++ b/sysinfo/os/mingw.mk
@@ -7,10 +7,6 @@ OS_IMPLIB_EXT = .dll.a
OS_LIBDEF_EXT = .def
OS_ARCHIVE_EXT = .a
OS_SONAME = copy
+OS_BINFMT = PE
CFLAGS_PIC =
-LDFLAGS_CONFIG += -Wl,--out-implib,$(SHARED_IMPLIB)
-
-install-implib: shared-implib
- mkdir -p $(DESTDIR)$(LIBDIR)
- cp $(SHARED_IMPLIB) $(DESTDIR)$(LIBDIR)
diff --git a/sysinfo/os/pe.mk b/sysinfo/os/pe.mk
new file mode 100644
index 0000000..0b50df2
--- /dev/null
+++ b/sysinfo/os/pe.mk
@@ -0,0 +1,48 @@
+LDFLAGS_IMPLIB += -Wl,--output-def
+LDFLAGS_IMPLIB += -Wl,$(IMPLIB_DEF)
+
+implib: implib-ver implib-soname implib-solink
+
+implib-ver: shared-lib $(IMPLIB_VER)
+
+implib-soname: shared-lib $(IMPLIB_SONAME)
+
+implib-solink: shared-lib $(IMPLIB_SOLINK)
+
+$(IMPLIB_DEF): shared-lib
+
+$(IMPLIB_VER): $(IMPLIB_DEF)
+ $(DLLTOOL) -l $(IMPLIB_VER) -d $(IMPLIB_DEF) -D $(DSO_VER)
+
+$(IMPLIB_SONAME): $(IMPLIB_DEF)
+ $(DLLTOOL) -l $(IMPLIB_SONAME) -d $(IMPLIB_DEF) -D $(DSO_SONAME)
+
+$(IMPLIB_SOLINK): $(IMPLIB_SONAME)
+ rm -f $(IMPLIB_SOLINK).tmp
+ ln -s $(IMP_SONAME) $(IMPLIB_SOLINK).tmp
+ mv $(IMPLIB_SOLINK).tmp $(IMPLIB_SOLINK)
+
+install-implib: install-implib-ver \
+ install-implib-soname \
+ install-implib-solink
+
+install-implib-ver: implib-ver
+ mkdir -p $(DESTDIR)$(LIBDIR)
+ cp $(IMPLIB_VER) $(DESTDIR)$(LIBDIR)
+
+install-implib-soname: implib-soname
+ mkdir -p $(DESTDIR)$(LIBDIR)
+ cp $(IMPLIB_SONAME) $(DESTDIR)$(LIBDIR)
+
+install-implib-solink: implib-soname
+ mkdir -p $(DESTDIR)$(LIBDIR)
+ rm -f $@.tmp
+ ln -s $(IMP_SONAME) $@.tmp
+ mv $@.tmp $(DESTDIR)$(LIBDIR)/$(IMP_SOLINK)
+
+clean-implib:
+ rm -f $(SHARED_LIB)
+ rm -f $(IMPLIB_DEF)
+ rm -f $(IMPLIB_VER)
+ rm -f $(IMPLIB_SONAME)
+ rm -f $(IMPLIB_SOLINK)
diff --git a/sysinfo/toolchain/binutils.mk b/sysinfo/toolchain/binutils.mk
index a29ac0c..3232915 100644
--- a/sysinfo/toolchain/binutils.mk
+++ b/sysinfo/toolchain/binutils.mk
@@ -15,3 +15,4 @@ CXXFILT = $(CROSS_COMPILE)c++filt
ELFEDIT = $(CROSS_COMPILE)elfedit
OBJCOPY = $(CROSS_COMPILE)objcopy
READELF = $(CROSS_COMPILE)readelf
+DLLTOOL = $(CROSS_COMPILE)dlltool
diff --git a/sysinfo/toolchain/llvm.mk b/sysinfo/toolchain/llvm.mk
index 3c805a8..65b5396 100644
--- a/sysinfo/toolchain/llvm.mk
+++ b/sysinfo/toolchain/llvm.mk
@@ -15,3 +15,4 @@ CXXFILT = $(CROSS_COMPILE)c++filt
ELFEDIT = $(CROSS_COMPILE)elfedit
OBJCOPY = $(CROSS_COMPILE)objcopy
READELF = $(CROSS_COMPILE)readelf
+DLLTOOL = $(CROSS_COMPILE)dlltool