mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 08:43:09 +00:00
Allow build on HP-UX 11.X
Patch from Richard Lloyd (slightly edited from me), following the list of changes as described by the author: src/Makefile: - Added PREFIX and BINDIR for the install: rule. - Added a "make hpux" line to the help: rule. - Added "make test"/"make check" rule that runs the $(PGOBENCH) command. - "make clean" now additionally removes core and bench.txt. - Added an hpux: rule. - Added an install: rule to mkdir $(BINDIR), copy $(EXE) to $(BINDIR) and then strip it. - "make strip" now ensures that $(EXE) is built first before trying to strip it. - Hide errors and output from the g++ command used by the .depend: rule and then touch .depend in case g++ isn't available. - Hide errors from the "include .depend" in case .depend doesn't exist (e.g. directly after a "make clean"). src/book.cpp and src/book.h: - HP-UX's aCC really didn't like the const keywords used for the Book::file_name() definitions, so they were removed. I checked that this didn't affect a Linux build and it was still fine. src/misc.cpp: - HP-UX uses <sys/pstat.h> and pstat_getdynamic() to determine the number of CPU cores, so added conditional code for that (if pstat_getdynamic() fails, set the number of cores to 1). src/tt.cpp: - <xmmintrin.h> and _mm_prefetch() seem highly specific to the Intel x86(_64) and gcc platforms - neither exist in HP-UX, so conditionally avoid that code in HP-UX's case. Perhaps some sort of define is needed here such as -DHAS_MM_PREFETCH that could be #ifdef'ed for instead? Even after these changes, it's more convenient for HP-UX users to edit the default: rule in the Makefile to run "$(MAKE) hpux" before they build stockfish, but that's not a big deal if they're warned about that first (the same applies to all other builds other than the standard "$(MAKE) gcc" one). Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
711ef615c7
commit
cb08413dc4
5 changed files with 42 additions and 6 deletions
23
src/Makefile
23
src/Makefile
|
@ -21,6 +21,10 @@
|
||||||
### Executable name. Do not change
|
### Executable name. Do not change
|
||||||
EXE = stockfish
|
EXE = stockfish
|
||||||
|
|
||||||
|
### Installation dir definitions
|
||||||
|
PREFIX = /usr/local
|
||||||
|
BINDIR = $(PREFIX)/bin
|
||||||
|
|
||||||
|
|
||||||
### ==========================================================================
|
### ==========================================================================
|
||||||
### Compiler speed switches for both GCC and ICC. These settings are generally
|
### Compiler speed switches for both GCC and ICC. These settings are generally
|
||||||
|
@ -92,14 +96,18 @@ help:
|
||||||
@echo "make osx-icc64 > x86-Mac OS X 64 bit. Compiler = icpc"
|
@echo "make osx-icc64 > x86-Mac OS X 64 bit. Compiler = icpc"
|
||||||
@echo "make osx-icc32-profile > OSX 32 bit. Compiler = icpc + automatic pgo-build"
|
@echo "make osx-icc32-profile > OSX 32 bit. Compiler = icpc + automatic pgo-build"
|
||||||
@echo "make osx-icc64-profile > OSX 64 bit. Compiler = icpc + automatic pgo-build"
|
@echo "make osx-icc64-profile > OSX 64 bit. Compiler = icpc + automatic pgo-build"
|
||||||
|
@echo "make hpux > HP-UX. Compiler = aCC"
|
||||||
@echo "make strip > Strip executable"
|
@echo "make strip > Strip executable"
|
||||||
@echo "make clean > Clean up"
|
@echo "make clean > Clean up"
|
||||||
@echo ""
|
@echo ""
|
||||||
|
|
||||||
all: $(EXE) .depend
|
all: $(EXE) .depend
|
||||||
|
|
||||||
|
test check: default
|
||||||
|
@$(PGOBENCH)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) *.o .depend *~ $(EXE)
|
$(RM) *.o .depend *~ $(EXE) core bench.txt
|
||||||
|
|
||||||
|
|
||||||
### Possible targets. You may add your own ones here
|
### Possible targets. You may add your own ones here
|
||||||
|
@ -296,6 +304,12 @@ osx-icc64-profile:
|
||||||
$(MAKE) osx-icc64-profile-use
|
$(MAKE) osx-icc64-profile-use
|
||||||
@rm -rf profdir bench.txt
|
@rm -rf profdir bench.txt
|
||||||
|
|
||||||
|
hpux:
|
||||||
|
$(MAKE) \
|
||||||
|
CXX='/opt/aCC/bin/aCC -AA +hpxstd98 -DBIGENDIAN -mt +O3 -DNDEBUG' \
|
||||||
|
CXXFLAGS="" \
|
||||||
|
LDFLAGS="" \
|
||||||
|
all
|
||||||
|
|
||||||
|
|
||||||
strip:
|
strip:
|
||||||
|
@ -306,9 +320,14 @@ strip:
|
||||||
$(EXE): $(OBJS)
|
$(EXE): $(OBJS)
|
||||||
$(CXX) $(LDFLAGS) -o $@ $(OBJS)
|
$(CXX) $(LDFLAGS) -o $@ $(OBJS)
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
install: default
|
||||||
|
-mkdir -p -m 755 $(BINDIR)
|
||||||
|
-cp $(EXE) $(BINDIR)
|
||||||
|
-strip $(BINDIR)/$(EXE)
|
||||||
|
|
||||||
### Dependencies. Do not change
|
### Dependencies. Do not change
|
||||||
.depend:
|
.depend:
|
||||||
$(CXX) -msse -MM $(OBJS:.o=.cpp) > $@
|
-@$(CXX) -msse -MM $(OBJS:.o=.cpp) > $@ 2> /dev/null
|
||||||
|
|
||||||
include .depend
|
include .depend
|
||||||
|
|
|
@ -390,7 +390,7 @@ void Book::close() {
|
||||||
/// Book::file_name() returns the file name of the currently active book,
|
/// Book::file_name() returns the file name of the currently active book,
|
||||||
/// or the empty string if no book is open.
|
/// or the empty string if no book is open.
|
||||||
|
|
||||||
const string Book::file_name() const {
|
const string Book::file_name() { // Not const to compile on HP-UX 11.X
|
||||||
|
|
||||||
return is_open() ? fileName : "";
|
return is_open() ? fileName : "";
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@ public:
|
||||||
~Book();
|
~Book();
|
||||||
void open(const std::string& fName);
|
void open(const std::string& fName);
|
||||||
void close();
|
void close();
|
||||||
const std::string file_name() const;
|
const std::string file_name();
|
||||||
Move get_move(const Position& pos);
|
Move get_move(const Position& pos);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
11
src/misc.cpp
11
src/misc.cpp
|
@ -27,6 +27,9 @@
|
||||||
# include <sys/time.h>
|
# include <sys/time.h>
|
||||||
# include <sys/types.h>
|
# include <sys/types.h>
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
|
# if defined(__hpux)
|
||||||
|
# include <sys/pstat.h>
|
||||||
|
# endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@ -187,6 +190,14 @@ int get_system_time() {
|
||||||
int cpu_count() {
|
int cpu_count() {
|
||||||
return Min(sysconf(_SC_NPROCESSORS_ONLN), 8);
|
return Min(sysconf(_SC_NPROCESSORS_ONLN), 8);
|
||||||
}
|
}
|
||||||
|
# elif defined(__hpux)
|
||||||
|
int cpu_count() {
|
||||||
|
struct pst_dynamic psd;
|
||||||
|
if (pstat_getdynamic(&psd, sizeof(psd), (size_t)1, 0) == -1)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return Min(psd.psd_proc_cnt, 8);
|
||||||
|
}
|
||||||
# else
|
# else
|
||||||
int cpu_count() {
|
int cpu_count() {
|
||||||
return 1;
|
return 1;
|
||||||
|
|
10
src/tt.cpp
10
src/tt.cpp
|
@ -25,7 +25,9 @@
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <xmmintrin.h>
|
#if !defined(__hpux)
|
||||||
|
# include <xmmintrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "movegen.h"
|
#include "movegen.h"
|
||||||
#include "tt.h"
|
#include "tt.h"
|
||||||
|
@ -167,11 +169,14 @@ TTEntry* TranspositionTable::retrieve(const Key posKey) const {
|
||||||
/// to be loaded from RAM, that can be very slow. When we will
|
/// to be loaded from RAM, that can be very slow. When we will
|
||||||
/// subsequently call retrieve() the TT data will be already
|
/// subsequently call retrieve() the TT data will be already
|
||||||
/// quickly accessible in L1/L2 CPU cache.
|
/// quickly accessible in L1/L2 CPU cache.
|
||||||
|
#if defined(__hpux)
|
||||||
|
void TranspositionTable::prefetch(const Key) const {} // Not supported on HP UX
|
||||||
|
#else
|
||||||
|
|
||||||
void TranspositionTable::prefetch(const Key posKey) const {
|
void TranspositionTable::prefetch(const Key posKey) const {
|
||||||
|
|
||||||
#if defined(__INTEL_COMPILER) || defined(__ICL)
|
#if defined(__INTEL_COMPILER) || defined(__ICL)
|
||||||
// This hack prevents prefetches to be optimized away by the
|
// This hack prevents prefetches to be optimized away by
|
||||||
// Intel compiler. Both MSVC and gcc seems not affected.
|
// Intel compiler. Both MSVC and gcc seems not affected.
|
||||||
__asm__ ("");
|
__asm__ ("");
|
||||||
#endif
|
#endif
|
||||||
|
@ -181,6 +186,7 @@ void TranspositionTable::prefetch(const Key posKey) const {
|
||||||
_mm_prefetch(addr+64, _MM_HINT_T2); // 64 bytes ahead
|
_mm_prefetch(addr+64, _MM_HINT_T2); // 64 bytes ahead
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/// TranspositionTable::new_search() is called at the beginning of every new
|
/// TranspositionTable::new_search() is called at the beginning of every new
|
||||||
/// search. It increments the "generation" variable, which is used to
|
/// search. It increments the "generation" variable, which is used to
|
||||||
|
|
Loading…
Add table
Reference in a new issue