Detect if the architecture support a native popcount asm instruction
authorkim <kim@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Fri, 9 Sep 2011 15:18:44 +0000 (15:18 +0000)
committerkim <kim@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Fri, 9 Sep 2011 15:18:44 +0000 (15:18 +0000)
and use it.

git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/XMLTree@1110 3cdefd35-fc62-479d-8e8d-bae585ffb9ca

Makefile

index 035d0d9..2eb3662 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,18 @@
-OPT_FLAGS=-O4 -DPOPCOUNT_TABLE -DHAS_NATIVE_POPCOUNT -fno-PIC -static
+POPCOUNT=$(shell grep -q popcnt /proc/cpuinfo && echo 1)
+
+ifeq ($(POPCOUNT), 1)
+       POPCOUNT_FLAG=-DHAS_NATIVE_POPCOUNT
+else
+       POPCOUNT_FLAG=-DPOPCOUNT_TABLE
+endif
+
+ifeq ($(VERBOSE), true)
+       HIDE=
+else
+       HIDE=@
+endif
+
+OPT_FLAGS=-O4 $(POPCOUNT_FLAG) -fno-PIC -static
 INC_FLAGS=-I./libcds/includes/ -I.
 CFLAGS= $(INC_FLAGS) $(OPT_FLAGS)
 CXXFLAGS= -std=c++0x $(INC_FLAGS) $(OPT_FLAGS)
@@ -22,41 +36,44 @@ LIBRLCSA_TCA=TextCollection/incbwt/rlcsa.a
 LIBLZTRIE_TCA=TextCollection/lzindex/lztrie.a
 LIBSWCSA_TCA=TextCollection/swcsa/swcsa.a
 
+
+
+
 all: depend libcds text_collection XMLTree
 
 XMLTree: $(OBJECTS_XMLTREE) $(LIBCDS_A) $(OBJECTS_TCO) \
          $(LIBRLCSA_TCA) $(LIBLZTRIE_TCA) $(LIBSWCSA_TCA)
        @echo [XMLTree]
-       @cp libcds/lib/libcds.a libXMLTree.a
-       @rm -rf .objs
-       @mkdir .objs
-       @cd .objs; ar x ../$(LIBRLCSA_TCA); ar x ../$(LIBLZTRIE_TCA); ar x ../$(LIBSWCSA_TCA)
-       @ar rcs libXMLTree.a $(OBJECTS_XMLTREE) $(OBJECTS_TCO) .objs/*.o
-       @rm -rf .objs
+       $(HIDE) cp libcds/lib/libcds.a libXMLTree.a
+       $(HIDE) rm -rf .objs
+       $(HIDE) mkdir .objs
+       $(HIDE) (cd .objs; ar x ../$(LIBRLCSA_TCA); ar x ../$(LIBLZTRIE_TCA); ar x ../$(LIBSWCSA_TCA))
+       $(HIDE) ar rcs libXMLTree.a $(OBJECTS_XMLTREE) $(OBJECTS_TCO) .objs/*.o
+       $(HIDE) rm -rf .objs
 
 %o: %c
        @echo [C] $@
-       @$(CC) -c $(CFLAGS) $< -o $@
+       $(HIDE) $(CC) -c $(CFLAGS) $< -o $@
 
 %o: %cpp
        @echo [C++] $@
-       @$(CC) -c $(CXXFLAGS)  $< -o $@
+       $(HIDE) $(CC) -c $(CXXFLAGS)  $< -o $@
 
 text_collection:
        @echo [DEPENDENCY] $@
-       @make -s -C TextCollection/
+       $(HIDE) make -s -C TextCollection/
 
 libcds:
        @echo [DEPENDENCY] $@
-       @make -s -C libcds/
+       $(HIDE) make -s -C libcds/
 
 depend:
        @echo [DEPEND]
-       @(gcc -MM *.c; g++ -MM -std=c++0x *.cpp) > $@
+       $(HIDE) (gcc -MM *.c; g++ -MM -std=c++0x *.cpp) > $@
 
 clean:
        @echo [CLEAN]
-       @rm -f *.[oa] depend
+       $(HIDE) rm -f *.[oa] depend
 
 -include depend