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>
### Executable name. Do not change
EXE = stockfish
### Executable name. Do not change
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
@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-icc64-profile > OSX 64 bit. Compiler = icpc + automatic pgo-build"
@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-icc64-profile > OSX 64 bit. Compiler = icpc + automatic pgo-build"
+ @echo "make hpux > HP-UX. Compiler = aCC"
@echo "make strip > Strip executable"
@echo "make clean > Clean up"
@echo ""
all: $(EXE) .depend
@echo "make strip > Strip executable"
@echo "make clean > Clean up"
@echo ""
all: $(EXE) .depend
+test check: default
+ @$(PGOBENCH)
+
- $(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
$(MAKE) osx-icc64-profile-use
@rm -rf profdir bench.txt
$(MAKE) osx-icc64-profile-use
@rm -rf profdir bench.txt
+hpux:
+ $(MAKE) \
+ CXX='/opt/aCC/bin/aCC -AA +hpxstd98 -DBIGENDIAN -mt +O3 -DNDEBUG' \
+ CXXFLAGS="" \
+ LDFLAGS="" \
+ all
$(EXE): $(OBJS)
$(CXX) $(LDFLAGS) -o $@ $(OBJS)
$(EXE): $(OBJS)
$(CXX) $(LDFLAGS) -o $@ $(OBJS)
+### Installation
+install: default
+ -mkdir -p -m 755 $(BINDIR)
+ -cp $(EXE) $(BINDIR)
+ -strip $(BINDIR)/$(EXE)
### Dependencies. Do not change
.depend:
### Dependencies. Do not change
.depend:
- $(CXX) -msse -MM $(OBJS:.o=.cpp) > $@
+ -@$(CXX) -msse -MM $(OBJS:.o=.cpp) > $@ 2> /dev/null
/// Book::file_name() returns the file name of the currently active book,
/// or the empty string if no book is open.
/// Book::file_name() returns the file name of the currently active book,
/// 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 : "";
}
~Book();
void open(const std::string& fName);
void close();
~Book();
void open(const std::string& fName);
void close();
- const std::string file_name() const;
+ const std::string file_name();
Move get_move(const Position& pos);
private:
Move get_move(const Position& pos);
private:
# include <sys/time.h>
# include <sys/types.h>
# include <unistd.h>
# include <sys/time.h>
# include <sys/types.h>
# include <unistd.h>
+# if defined(__hpux)
+# include <sys/pstat.h>
+# endif
int cpu_count() {
return Min(sysconf(_SC_NPROCESSORS_ONLN), 8);
}
int cpu_count() {
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
int cpu_count() {
return 1;
# else
int cpu_count() {
return 1;
#include <cassert>
#include <cmath>
#include <cstring>
#include <cassert>
#include <cmath>
#include <cstring>
+#if !defined(__hpux)
+# include <xmmintrin.h>
+#endif
#include "movegen.h"
#include "tt.h"
#include "movegen.h"
#include "tt.h"
/// to be loaded from RAM, that can be very slow. When we will
/// subsequently call retrieve() the TT data will be already
/// quickly accessible in L1/L2 CPU cache.
/// to be loaded from RAM, that can be very slow. When we will
/// subsequently call retrieve() the TT data will be already
/// 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 {
#if defined(__INTEL_COMPILER) || defined(__ICL)
void TranspositionTable::prefetch(const Key posKey) const {
#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.
__asm__ ("");
#endif
// Intel compiler. Both MSVC and gcc seems not affected.
__asm__ ("");
#endif
_mm_prefetch(addr+64, _MM_HINT_T2); // 64 bytes ahead
}
_mm_prefetch(addr+64, _MM_HINT_T2); // 64 bytes ahead
}
/// TranspositionTable::new_search() is called at the beginning of every new
/// search. It increments the "generation" variable, which is used to
/// TranspositionTable::new_search() is called at the beginning of every new
/// search. It increments the "generation" variable, which is used to