From cb08413dc4e51ac246887613184b51b46bf11226 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Fri, 12 Feb 2010 06:49:16 +0100 Subject: [PATCH 1/1] 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 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: - 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 --- src/Makefile | 23 +++++++++++++++++++++-- src/book.cpp | 2 +- src/book.h | 2 +- src/misc.cpp | 11 +++++++++++ src/tt.cpp | 10 ++++++++-- 5 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/Makefile b/src/Makefile index 3963e558..62a874d5 100644 --- a/src/Makefile +++ b/src/Makefile @@ -21,6 +21,10 @@ ### 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 @@ -92,14 +96,18 @@ help: @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 +test check: default + @$(PGOBENCH) + clean: - $(RM) *.o .depend *~ $(EXE) + $(RM) *.o .depend *~ $(EXE) core bench.txt ### Possible targets. You may add your own ones here @@ -296,6 +304,12 @@ osx-icc64-profile: $(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 strip: @@ -306,9 +320,14 @@ strip: $(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: - $(CXX) -msse -MM $(OBJS:.o=.cpp) > $@ + -@$(CXX) -msse -MM $(OBJS:.o=.cpp) > $@ 2> /dev/null include .depend diff --git a/src/book.cpp b/src/book.cpp index d825477f..1e4c9cc0 100644 --- a/src/book.cpp +++ b/src/book.cpp @@ -390,7 +390,7 @@ void Book::close() { /// 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 : ""; } diff --git a/src/book.h b/src/book.h index b68f7bfc..1b7b72c4 100644 --- a/src/book.h +++ b/src/book.h @@ -60,7 +60,7 @@ public: ~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: diff --git a/src/misc.cpp b/src/misc.cpp index c692e996..bf8143a3 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -27,6 +27,9 @@ # include # include # include +# if defined(__hpux) +# include +# endif #else @@ -187,6 +190,14 @@ int get_system_time() { 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; diff --git a/src/tt.cpp b/src/tt.cpp index 010bdc95..8da3ca75 100644 --- a/src/tt.cpp +++ b/src/tt.cpp @@ -25,7 +25,9 @@ #include #include #include -#include +#if !defined(__hpux) +# include +#endif #include "movegen.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 /// 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) - // 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 @@ -181,6 +186,7 @@ void TranspositionTable::prefetch(const Key posKey) const { _mm_prefetch(addr+64, _MM_HINT_T2); // 64 bytes ahead } +#endif /// TranspositionTable::new_search() is called at the beginning of every new /// search. It increments the "generation" variable, which is used to -- 2.39.2