From: Michael R. Crusoe <michael.crusoe@gmail.com>
Subject: handle non-x86 builds again
Forwarded: https://github.com/bbuchfink/diamond/pull/323
--- diamond-aligner.orig/CMakeLists.txt
+++ diamond-aligner/CMakeLists.txt
@@ -5,6 +5,7 @@
 option(EXTRA "EXTRA" OFF)
 option(STATIC_LIBGCC "STATIC_LIBGCC" OFF)
 option(STATIC_LIBSTDC++ "STATIC_LIBSTDC++" OFF)
+option(X86 "X86" ON)
 
 IF(STATIC_LIBSTDC++)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++")
@@ -63,9 +64,12 @@
 
 add_library(arch_generic OBJECT ${DISPATCH_OBJECTS})
 target_compile_options(arch_generic PUBLIC -DDISPATCH_ARCH=ARCH_GENERIC)
+if(X86)
 add_library(arch_sse4_1 OBJECT ${DISPATCH_OBJECTS})
 target_compile_options(arch_sse4_1 PUBLIC -DDISPATCH_ARCH=ARCH_SSE4_1 -mssse3 -mpopcnt -msse4.1)
+endif()
 
+if(X86)
 add_executable(diamond $<TARGET_OBJECTS:arch_generic>
   $<TARGET_OBJECTS:arch_sse4_1>
   src/run/main.cpp
@@ -163,6 +167,104 @@
   src/align/output.cpp
   src/tools/roc.cpp
 )
+else()
+add_executable(diamond $<TARGET_OBJECTS:arch_generic>
+  src/run/main.cpp
+  src/basic/config.cpp
+  src/basic/score_matrix.cpp
+  src/blast/blast_filter.cpp
+  src/blast/blast_seg.cpp
+  src/blast/sm_blosum45.c
+  src/blast/sm_blosum50.c
+  src/blast/sm_blosum62.c
+  src/blast/sm_blosum80.c
+  src/blast/sm_blosum90.c
+  src/blast/sm_pam30.c
+  src/blast/sm_pam70.c
+  src/blast/sm_pam250.c
+  src/data/queries.cpp
+  src/data/reference.cpp
+  src/data/seed_histogram.cpp
+  src/output/daa_record.cpp
+  src/util/command_line_parser.cpp
+  src/util/seq_file_format.cpp
+  src/util/util.cpp 
+  src/basic/basic.cpp
+  src/basic/hssp.cpp
+  src/dp/ungapped_align.cpp
+  src/run/tools.cpp
+  src/dp/greedy_align.cpp
+  src/output/output_format.cpp
+  src/output/join_blocks.cpp
+  src/data/frequent_seeds.cpp
+  src/align/legacy/query_mapper.cpp
+  src/output/blast_tab_format.cpp
+  src/dp/padded_banded_sw.cpp
+  src/dp/needleman_wunsch.cpp
+  src/output/blast_pairwise_format.cpp
+  src/dp/comp_based_stats.cpp
+  src/run/double_indexed.cpp
+  src/output/sam_format.cpp
+  src/align/align.cpp
+  src/search/setup.cpp
+  src/dp/diag_scores.cpp
+  src/data/taxonomy.cpp
+  src/basic/masking.cpp
+  src/dp/banded_sw.cpp
+  src/data/seed_set.cpp
+  src/util/simd.cpp
+  src/output/taxon_format.cpp
+  src/output/view.cpp
+  src/output/output_sink.cpp
+  src/output/target_culling.cpp
+  src/align/legacy/greedy_pipeline.cpp
+  src/align/legacy/swipe_pipeline.cpp
+  src/align/legacy/banded_swipe_pipeline.cpp
+  src/data/ref_dictionary.cpp
+  src/util/io/compressed_stream.cpp
+  src/util/io/deserializer.cpp
+  src/util/io/file_sink.cpp
+  src/util/io/file_source.cpp
+  src/util/io/input_file.cpp
+  src/util/io/input_stream_buffer.cpp
+  src/util/io/output_file.cpp
+  src/util/io/output_stream_buffer.cpp
+  src/util/io/serializer.cpp
+  src/util/io/temp_file.cpp
+  src/util/io/text_input_file.cpp
+  src/data/taxon_list.cpp
+  src/data/taxonomy_nodes.cpp
+  src/util/algo/MurmurHash3.cpp
+  src/search/stage0.cpp
+  src/data/seed_array.cpp
+  src/output/paf_format.cpp
+  src/util/system/system.cpp
+  src/run/cluster.cpp
+  src/util/algo/greedy_vortex_cover.cpp
+  src/util/sequence/sequence.cpp
+  src/tools/tsv_record.cpp
+  src/tools/tools.cpp
+  src/util/system/getRSS.cpp
+  src/util/math/sparse_matrix.cpp
+  src/lib/tantan/LambdaCalculator.cc
+  src/data/taxonomy_filter.cpp
+  src/util/algo/upgma.cpp
+  src/util/algo/upgma_mc.cpp
+  src/util/algo/edge_vec.cpp
+  src/util/string/string.cpp
+  src/align/extend.cpp
+  src/align/target.cpp
+  src/test/simulate.cpp
+  src/test/test.cpp
+  src/align/ranking.cpp
+  src/align/ungapped.cpp
+  src/align/gapped.cpp
+  src/align/culling.cpp
+  src/cluster/medoid.cpp
+  src/align/output.cpp
+  src/tools/roc.cpp
+)
+endif()
 
 if(EXTRA)
   target_sources(diamond
--- diamond-aligner.orig/src/tools/benchmark.cpp
+++ diamond-aligner/src/tools/benchmark.cpp
@@ -141,6 +141,7 @@
 }
 #endif
 
+#ifdef __SSE__
 void benchmark_transpose() {
 	static const size_t n = 100000000llu;
 	static char in[256], out[256];
@@ -152,6 +153,7 @@
 	}
 	cout << "Matrix transpose 16x16 bytes:\t" << (double)duration_cast<std::chrono::nanoseconds>(high_resolution_clock::now() - t1).count() / (n * 256) * 1000 << " ps/Letter" << endl;
 }
+#endif
 
 #ifdef __SSE2__
 void swipe_cell_update() {
@@ -236,7 +238,9 @@
 #ifdef __SSSE3__
 	benchmark_ungapped_sse(s1, s2);
 #endif
+#ifdef __SSE__
 	benchmark_transpose();
+#endif
 #ifdef __SSE2__
 	banded_swipe(s1, s2);
 	swipe_cell_update();
@@ -247,4 +251,4 @@
 #endif
 }
 
-}}
\ No newline at end of file
+}}
--- diamond-aligner.orig/src/util/simd.h
+++ diamond-aligner/src/util/simd.h
@@ -53,6 +53,7 @@
 enum Flags { SSSE3 = 1, POPCNT = 2, SSE4_1 = 4 };
 Arch arch();
 
+#ifdef __SSE__
 #define DECL_DISPATCH(ret, name, param) namespace ARCH_GENERIC { ret name param; }\
 namespace ARCH_SSE4_1 { ret name param; }\
 inline std::function<decltype(ARCH_GENERIC::name)> dispatch_target_##name() {\
@@ -61,9 +62,17 @@
 default: return ARCH_GENERIC::name;\
 }}\
 const std::function<decltype(ARCH_GENERIC::name)> name = dispatch_target_##name();
+#else
+#define DECL_DISPATCH(ret, name, param) namespace ARCH_GENERIC { ret name param; }\
+namespace ARCH_SSE4_1 { ret name param; }\
+inline std::function<decltype(ARCH_GENERIC::name)> dispatch_target_##name() {\
+return ARCH_GENERIC::name;\
+}\
+const std::function<decltype(ARCH_GENERIC::name)> name = dispatch_target_##name();
+#endif
 
 std::string features();
 
 };
 
-#endif
\ No newline at end of file
+#endif
--- diamond-aligner.orig/src/util/simd/transpose.h
+++ diamond-aligner/src/util/simd/transpose.h
@@ -21,6 +21,8 @@
 
 #include "../simd.h"
 
+#ifdef __SSE__
+
 inline void merge(__m128i &first, __m128i &second, __m128i &temp)
 {
 	temp = first;
@@ -118,4 +120,5 @@
 	merge_fast_write(xmm0, xmm1, 0, 1, xmm9, (__m128i*)out);
 }
 
+#endif /* __SSE__ */
 #endif /* TRANSPOSE_H_ */
--- diamond-aligner.orig/src/dp/swipe/swipe_wrapper.cpp
+++ diamond-aligner/src/dp/swipe/swipe_wrapper.cpp
@@ -138,8 +138,8 @@
 		out.splice(out.end(), swipe_threads<int32_t>(query, overflow16.begin(), overflow16.end(), frame, composition_bias ? composition_bias->int8.data() : nullptr, flags, score_cutoff, overflow32));
 	return out;
 #else
-	return swipe_threads<int32_t>(query, target_begin, target_end, frame, composition_bias ? composition_bias->int8.data() : nullptr, flags, overflow32);
+	return swipe_threads<int32_t>(query, target_begin, target_end, frame, composition_bias ? composition_bias->int8.data() : nullptr, flags, score_cutoff, overflow32);
 #endif
 }
 		
-}}}
\ No newline at end of file
+}}}
