Page 1 of 1

Dynamic link library for Gaviota Tablebase (to Miguel)

PostPosted: 16 Nov 2010, 01:00
by Michel
Hi. I added a target to the makefile that comes with GTB to create a dynamic link library.
I also added an install target. I have been using it in GnuChess and it seems to work fine.
It makes the deployment of GTB easier in Linux.

Code: Select all
INCLUDE = -Isysport/ \
     -Icompression/ \
     -Icompression/liblzf/ \
     -Icompression/zlib/ \
     -Icompression/lzma/ \
     -Icompression/huffman/

DEFAULT_CC = /usr/bin/gcc
DEFAULT_DEFINE = -DZ_PREFIX
DEFAULT_ARCHFLAGS = -m64
DEFAULT_CFLAGS = -Wall -Wextra -fPIC $(INCLUDE) $(DEFAULT_DEFINE) \
       $(DEFAULT_ARCHFLAGS)
PREFIX = /usr/local
OPTFLAGS = -fast -msse -DNDEBUG
DEBUGFLAGS = -O0 -g -DDEBUG
PGO1FLAGS = $(OPTFLAGS) -fprofile-generate
PGO2FLAGS = $(OPTFLAGS) -fprofile-use

SRCFILES := gtb-probe.c gtb-dec.c gtb-att.c sysport/sysport.c \
      compression/wrap.c compression/huffman/hzip.c \
      compression/lzma/LzmaEnc.c compression/lzma/LzmaDec.c \
      compression/lzma/Alloc.c compression/lzma/LzFind.c \
      compression/lzma/Lzma86Enc.c compression/lzma/Lzma86Dec.c \
      compression/lzma/Bra86.c compression/zlib/zcompress.c \
      compression/zlib/uncompr.c compression/zlib/inflate.c \
      compression/zlib/deflate.c compression/zlib/adler32.c \
      compression/zlib/crc32.c compression/zlib/infback.c \
      compression/zlib/inffast.c compression/zlib/inftrees.c \
      compression/zlib/trees.c compression/zlib/zutil.c \
      compression/liblzf/lzf_c.c compression/liblzf/lzf_d.c
OBJFILES := $(patsubst %.c,%.o,$(SRCFILES))
PROFFILES := $(SRCFILES:.c=.gcno) $(SRCFILES:.c=.gcda)
LIBNAME := libgtb.a
SONAME :=libgtb.so
SOVERSION := 1.0.1
SOMAJORVERSION := 1


.PHONY: all clean
.DEFAULT_GOAL := all

all:
   $(MAKE) $(LIBNAME) \
       CC='$(DEFAULT_CC)' \
       ARCHFLAGS='$(DEFAULT_ARCHFLAGS)' \
       DEFINE='$(DEFAULT_DEFINE)' \
       CFLAGS='$(OPPTFLAGS) $(DEFAULT_CFLAGS)'
   $(MAKE) $(SONAME) \
       CC='$(DEFAULT_CC)' \
       ARCHFLAGS='$(DEFAULT_ARCHFLAGS)' \
       DEFINE='$(DEFAULT_DEFINE)' \
       CFLAGS='$(OPPTFLAGS) $(DEFAULT_CFLAGS)'

$(LIBNAME): $(OBJFILES)
   $(AR) rcs $@ $(OBJFILES)

$(SONAME): $(OBJFILES)   
   $(CC) -shared $(OBJFILES) -Wl,-soname=$(SONAME).$(SOMAJORVERSION) -o $(SONAME).$(SOVERSION)

opt:
   $(MAKE) $(LIBNAME) \
       CC='$(DEFAULT_CC)' \
       ARCHFLAGS='$(DEFAULT_ARCHFLAGS)' \
       DEFINE='$(DEFAULT_DEFINE)' \
       CFLAGS='$(OPTFLAGS) $(DEFAULT_CFLAGS)' \
       LDFLAGS='$(LDFLAGS)'

debug:
   $(MAKE) $(LIBNAME) \
       CC='$(DEFAULT_CC)' \
       ARCHFLAGS='$(DEFAULT_ARCHFLAGS)' \
       DEFINE='$(DEFAULT_DEFINE)' \
       CFLAGS='$(DEBUGFLAGS) $(DEFAULT_CFLAGS)' \
       LDFLAGS='$(LDFLAGS)'

pgo-start:
   $(MAKE) $(LIBNAME) \
       CC='$(DEFAULT_CC)' \
       ARCHFLAGS='$(DEFAULT_ARCHFLAGS)' \
       DEFINE='$(DEFAULT_DEFINE)' \
       CFLAGS='$(PGO1FLAGS) $(DEFAULT_CFLAGS)' \
       LDFLAGS='$(LDFLAGS) -fprofile-generate'

pgo-finish:
   $(MAKE) $(LIBNAME) \
       CC='$(DEFAULT_CC)' \
       ARCHFLAGS='$(DEFAULT_ARCHFLAGS)' \
       DEFINE='$(DEFAULT_DEFINE)' \
       CFLAGS='$(PGO2FLAGS) $(DEFAULT_CFLAGS)' \
       LDFLAGS='$(LDFLAGS) -fprofile-generate'

clean:
   $(RM) -f $(OBJFILES) $(LIBNAME) $(SONAME)

pgo-clean:
   $(RM) -f $(PROFFILES)

install:
   install -m 755 -o root -g root $(LIBNAME) $(SONAME).$(SOVERSION) $(PREFIX)/lib
   ln -sf $(SONAME).$(SOMAJORVERSION) $(PREFIX)/lib/$(SONAME)
   install -m 644 -o root -g root gtb-probe.h $(PREFIX)/include
   ldconfig

.depend:
   $(CC) -MM $(DEFAULT_CFLAGS) $(SRCFILES) > $@

include .depend

Re: Dynamic link library for Gaviota Tablebase (to Miguel)

PostPosted: 18 Nov 2010, 09:42
by Miguel A. Ballicora
Michel wrote:Hi. I added a target to the makefile that comes with GTB to create a dynamic link library.
I also added an install target. I have been using it in GnuChess and it seems to work fine.
It makes the deployment of GTB easier in Linux.

Code: Select all
INCLUDE = -Isysport/ \
     -Icompression/ \
     -Icompression/liblzf/ \
     -Icompression/zlib/ \
     -Icompression/lzma/ \
     -Icompression/huffman/

DEFAULT_CC = /usr/bin/gcc
DEFAULT_DEFINE = -DZ_PREFIX
DEFAULT_ARCHFLAGS = -m64
DEFAULT_CFLAGS = -Wall -Wextra -fPIC $(INCLUDE) $(DEFAULT_DEFINE) \
       $(DEFAULT_ARCHFLAGS)
PREFIX = /usr/local
OPTFLAGS = -fast -msse -DNDEBUG
DEBUGFLAGS = -O0 -g -DDEBUG
PGO1FLAGS = $(OPTFLAGS) -fprofile-generate
PGO2FLAGS = $(OPTFLAGS) -fprofile-use

SRCFILES := gtb-probe.c gtb-dec.c gtb-att.c sysport/sysport.c \
      compression/wrap.c compression/huffman/hzip.c \
      compression/lzma/LzmaEnc.c compression/lzma/LzmaDec.c \
      compression/lzma/Alloc.c compression/lzma/LzFind.c \
      compression/lzma/Lzma86Enc.c compression/lzma/Lzma86Dec.c \
      compression/lzma/Bra86.c compression/zlib/zcompress.c \
      compression/zlib/uncompr.c compression/zlib/inflate.c \
      compression/zlib/deflate.c compression/zlib/adler32.c \
      compression/zlib/crc32.c compression/zlib/infback.c \
      compression/zlib/inffast.c compression/zlib/inftrees.c \
      compression/zlib/trees.c compression/zlib/zutil.c \
      compression/liblzf/lzf_c.c compression/liblzf/lzf_d.c
OBJFILES := $(patsubst %.c,%.o,$(SRCFILES))
PROFFILES := $(SRCFILES:.c=.gcno) $(SRCFILES:.c=.gcda)
LIBNAME := libgtb.a
SONAME :=libgtb.so
SOVERSION := 1.0.1
SOMAJORVERSION := 1


.PHONY: all clean
.DEFAULT_GOAL := all

all:
   $(MAKE) $(LIBNAME) \
       CC='$(DEFAULT_CC)' \
       ARCHFLAGS='$(DEFAULT_ARCHFLAGS)' \
       DEFINE='$(DEFAULT_DEFINE)' \
       CFLAGS='$(OPPTFLAGS) $(DEFAULT_CFLAGS)'
   $(MAKE) $(SONAME) \
       CC='$(DEFAULT_CC)' \
       ARCHFLAGS='$(DEFAULT_ARCHFLAGS)' \
       DEFINE='$(DEFAULT_DEFINE)' \
       CFLAGS='$(OPPTFLAGS) $(DEFAULT_CFLAGS)'

$(LIBNAME): $(OBJFILES)
   $(AR) rcs $@ $(OBJFILES)

$(SONAME): $(OBJFILES)   
   $(CC) -shared $(OBJFILES) -Wl,-soname=$(SONAME).$(SOMAJORVERSION) -o $(SONAME).$(SOVERSION)

opt:
   $(MAKE) $(LIBNAME) \
       CC='$(DEFAULT_CC)' \
       ARCHFLAGS='$(DEFAULT_ARCHFLAGS)' \
       DEFINE='$(DEFAULT_DEFINE)' \
       CFLAGS='$(OPTFLAGS) $(DEFAULT_CFLAGS)' \
       LDFLAGS='$(LDFLAGS)'

debug:
   $(MAKE) $(LIBNAME) \
       CC='$(DEFAULT_CC)' \
       ARCHFLAGS='$(DEFAULT_ARCHFLAGS)' \
       DEFINE='$(DEFAULT_DEFINE)' \
       CFLAGS='$(DEBUGFLAGS) $(DEFAULT_CFLAGS)' \
       LDFLAGS='$(LDFLAGS)'

pgo-start:
   $(MAKE) $(LIBNAME) \
       CC='$(DEFAULT_CC)' \
       ARCHFLAGS='$(DEFAULT_ARCHFLAGS)' \
       DEFINE='$(DEFAULT_DEFINE)' \
       CFLAGS='$(PGO1FLAGS) $(DEFAULT_CFLAGS)' \
       LDFLAGS='$(LDFLAGS) -fprofile-generate'

pgo-finish:
   $(MAKE) $(LIBNAME) \
       CC='$(DEFAULT_CC)' \
       ARCHFLAGS='$(DEFAULT_ARCHFLAGS)' \
       DEFINE='$(DEFAULT_DEFINE)' \
       CFLAGS='$(PGO2FLAGS) $(DEFAULT_CFLAGS)' \
       LDFLAGS='$(LDFLAGS) -fprofile-generate'

clean:
   $(RM) -f $(OBJFILES) $(LIBNAME) $(SONAME)

pgo-clean:
   $(RM) -f $(PROFFILES)

install:
   install -m 755 -o root -g root $(LIBNAME) $(SONAME).$(SOVERSION) $(PREFIX)/lib
   ln -sf $(SONAME).$(SOMAJORVERSION) $(PREFIX)/lib/$(SONAME)
   install -m 644 -o root -g root gtb-probe.h $(PREFIX)/include
   ldconfig

.depend:
   $(CC) -MM $(DEFAULT_CFLAGS) $(SRCFILES) > $@

include .depend


Thanks!
Seems to compile fine (after I figure that the code here removed the tabs :-)). I will test it later and 'push' it to the repository.
I also needed to remove DEFAULT_ARCHFLAGS = -m64 for 32 bits.
Do we really need that if we are in 64 bits? Is not that for cross compilation?

Miguel

Re: Dynamic link library for Gaviota Tablebase (to Miguel)

PostPosted: 19 Nov 2010, 05:39
by Michel
Seems to compile fine (after I figure that the code here removed the tabs :-)). I will test it later and 'push' it to the repository.
I also needed to remove DEFAULT_ARCHFLAGS = -m64 for 32 bits.
Do we really need that if we are in 64 bits? Is not that for cross compilation?


I did not look at the rest of the makefile figuring you had a good reason for doing things the
way you did. Privately I also made an autoconf/automake version but it requires
rather intrusive changes (files like NEWS, TODO, README, CHANGELOG, COPYING,...).

I have also not tried to adapt the Mingw makefile. A dll on windows would
be interesting if it was also usable byh MSVC. MSVC needs an import library
to use a .dll, I am not entirely sure that an import library produced by Mingw would
be useable with MSVC (I don't use MSVC, there seems to be no way to install only
the command line tools). Perhaps the compiler experts on this forum know.

Re: Dynamic link library for Gaviota Tablebase (to Miguel)

PostPosted: 19 Nov 2010, 08:06
by Miguel A. Ballicora
Michel wrote:
Seems to compile fine (after I figure that the code here removed the tabs :-)). I will test it later and 'push' it to the repository.
I also needed to remove DEFAULT_ARCHFLAGS = -m64 for 32 bits.
Do we really need that if we are in 64 bits? Is not that for cross compilation?


I did not look at the rest of the makefile figuring you had a good reason for doing things the
way you did. Privately I also made an autoconf/automake version but it requires
rather intrusive changes (files like NEWS, TODO, README, CHANGELOG, COPYING,...).


Actually, the Makefile to obtain the static library was written by Aaron Becker. He forked the project in github to make customized modifications. I just copied the makefile because I thought it could be interesting for somebody. I acknowledged this in the readme file but now I see that i should have done it in the same Makefile source.

Miguel

I have also not tried to adapt the Mingw makefile. A dll on windows would
be interesting if it was also usable byh MSVC. MSVC needs an import library
to use a .dll, I am not entirely sure that an import library produced by Mingw would
be useable with MSVC (I don't use MSVC, there seems to be no way to install only
the command line tools). Perhaps the compiler experts on this forum know.