Skip to content

Commit ccb0f7b

Browse files
committed
added a new Makefile for simde
1 parent 66db9da commit ccb0f7b

File tree

3 files changed

+110
-38
lines changed

3 files changed

+110
-38
lines changed

Diff for: Makefile

+5-34
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,26 @@
11
CFLAGS= -g -Wall -O2 -Wc++-compat #-Wextra
22
CPPFLAGS= -DHAVE_KALLOC
33
INCLUDES=
4-
OBJS= kthread.o kalloc.o misc.o bseq.o sketch.o sdust.o options.o index.o chain.o align.o hit.o map.o format.o pe.o esterr.o splitidx.o
4+
OBJS= kthread.o kalloc.o misc.o bseq.o sketch.o sdust.o options.o index.o chain.o align.o hit.o map.o format.o pe.o esterr.o splitidx.o ksw2_ll_sse.o
55
PROG= minimap2
66
PROG_EXTRA= sdust minimap2-lite
77
LIBS= -lm -lz -lpthread
88

9-
10-
ifeq ($(no_simd),) # if no_simd is not defined
119
ifeq ($(arm_neon),) # if arm_neon is not defined
12-
OBJS+=ksw2_ll_sse.o
1310
ifeq ($(sse2only),) # if sse2only is not defined
1411
OBJS+=ksw2_extz2_sse41.o ksw2_extd2_sse41.o ksw2_exts2_sse41.o ksw2_extz2_sse2.o ksw2_extd2_sse2.o ksw2_exts2_sse2.o ksw2_dispatch.o
1512
else # if sse2only is defined
1613
OBJS+=ksw2_extz2_sse.o ksw2_extd2_sse.o ksw2_exts2_sse.o
1714
endif
1815
else # if arm_neon is defined
19-
OBJS+=ksw2_ll_neon.o ksw2_extz2_neon.o ksw2_extd2_neon.o ksw2_exts2_neon.o
20-
ifeq ($(simde),) # arm_neon without SIMDe -> use sse2neon
21-
INCLUDES+=-Isse2neon
22-
endif
16+
OBJS+=ksw2_extz2_neon.o ksw2_extd2_neon.o ksw2_exts2_neon.o
17+
INCLUDES+=-Isse2neon
2318
ifeq ($(aarch64),) #if aarch64 is not defined
2419
CFLAGS+=-D_FILE_OFFSET_BITS=64 -mfpu=neon -fsigned-char
2520
else #if aarch64 is defined
2621
CFLAGS+=-D_FILE_OFFSET_BITS=64 -fsigned-char
2722
endif
2823
endif
29-
else
30-
OBJS+=ksw2_ll_nosimd.o ksw2_extz2_nosimd.o ksw2_extd2_nosimd.o ksw2_exts2_nosimd.o
31-
simde=1 # no_simd can be used only with SIMDe
32-
endif
33-
34-
ifneq ($(simde),) # if simde is defined
35-
CFLAGS+=-DSIMDE_ENABLE_NATIVE_ALIASES -DUSE_SIMDE
36-
INCLUDES+=-Ilib/simde
37-
endif
3824

3925
ifneq ($(asan),)
4026
CFLAGS+=-fsanitize=address
@@ -70,8 +56,10 @@ sdust:sdust.c kalloc.o kalloc.h kdq.h kvec.h kseq.h ketopt.h sdust.h
7056

7157
# SSE-specific targets on x86/x86_64
7258

59+
ifeq ($(arm_neon),) # if arm_neon is defined, compile this target with the default setting (i.e. no -msse2)
7360
ksw2_ll_sse.o:ksw2_ll_sse.c ksw2.h kalloc.h
7461
$(CC) -c $(CFLAGS) -msse2 $(CPPFLAGS) $(INCLUDES) $< -o $@
62+
endif
7563

7664
ksw2_extz2_sse41.o:ksw2_extz2_sse.c ksw2.h kalloc.h
7765
$(CC) -c $(CFLAGS) -msse4.1 $(CPPFLAGS) -DKSW_CPU_DISPATCH $(INCLUDES) $< -o $@
@@ -96,9 +84,6 @@ ksw2_dispatch.o:ksw2_dispatch.c ksw2.h
9684

9785
# NEON-specific targets on ARM
9886

99-
ksw2_ll_neon.o:ksw2_ll_sse.c ksw2.h kalloc.h
100-
$(CC) -c $(CFLAGS) $(CPPFLAGS) $(INCLUDES) $< -o $@
101-
10287
ksw2_extz2_neon.o:ksw2_extz2_sse.c ksw2.h kalloc.h
10388
$(CC) -c $(CFLAGS) $(CPPFLAGS) -DKSW_SSE2_ONLY -D__SSE2__ $(INCLUDES) $< -o $@
10489

@@ -108,20 +93,6 @@ ksw2_extd2_neon.o:ksw2_extd2_sse.c ksw2.h kalloc.h
10893
ksw2_exts2_neon.o:ksw2_exts2_sse.c ksw2.h kalloc.h
10994
$(CC) -c $(CFLAGS) $(CPPFLAGS) -DKSW_SSE2_ONLY -D__SSE2__ $(INCLUDES) $< -o $@
11095

111-
# no-SIMD version
112-
113-
ksw2_ll_nosimd.o:ksw2_ll_sse.c ksw2.h kalloc.h
114-
$(CC) -c $(CFLAGS) $(CPPFLAGS) -DSIMDE_NO_NATIVE $(INCLUDES) $< -o $@
115-
116-
ksw2_extz2_nosimd.o:ksw2_extz2_sse.c ksw2.h kalloc.h
117-
$(CC) -c $(CFLAGS) $(CPPFLAGS) -DKSW_SSE2_ONLY -D__SSE2__ -DSIMDE_NO_NATIVE $(INCLUDES) $< -o $@
118-
119-
ksw2_extd2_nosimd.o:ksw2_extd2_sse.c ksw2.h kalloc.h
120-
$(CC) -c $(CFLAGS) $(CPPFLAGS) -DKSW_SSE2_ONLY -D__SSE2__ -DSIMDE_NO_NATIVE $(INCLUDES) $< -o $@
121-
122-
ksw2_exts2_nosimd.o:ksw2_exts2_sse.c ksw2.h kalloc.h
123-
$(CC) -c $(CFLAGS) $(CPPFLAGS) -DKSW_SSE2_ONLY -D__SSE2__ -DSIMDE_NO_NATIVE $(INCLUDES) $< -o $@
124-
12596
# other non-file targets
12697

12798
clean:

Diff for: Makefile.simde

+97
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
CFLAGS= -g -Wall -O2 -Wc++-compat #-Wextra
2+
CPPFLAGS= -DHAVE_KALLOC -DUSE_SIMDE -DSIMDE_ENABLE_NATIVE_ALIASES
3+
INCLUDES= -Ilib/simde
4+
OBJS= kthread.o kalloc.o misc.o bseq.o sketch.o sdust.o options.o index.o chain.o align.o hit.o map.o format.o pe.o esterr.o splitidx.o \
5+
ksw2_extz2_simde.o ksw2_extd2_simde.o ksw2_exts2_simde.o ksw2_ll_simde.o
6+
PROG= minimap2
7+
PROG_EXTRA= sdust minimap2-lite
8+
LIBS= -lm -lz -lpthread
9+
10+
11+
ifneq ($(arm_neon),) # if arm_neon is defined
12+
ifeq ($(aarch64),) #if aarch64 is not defined
13+
CFLAGS+=-D_FILE_OFFSET_BITS=64 -mfpu=neon -fsigned-char
14+
else #if aarch64 is defined
15+
CFLAGS+=-D_FILE_OFFSET_BITS=64 -fsigned-char
16+
endif
17+
endif
18+
19+
ifneq ($(asan),)
20+
CFLAGS+=-fsanitize=address
21+
LIBS+=-fsanitize=address
22+
endif
23+
24+
ifneq ($(tsan),)
25+
CFLAGS+=-fsanitize=thread
26+
LIBS+=-fsanitize=thread
27+
endif
28+
29+
.PHONY:all extra clean depend
30+
.SUFFIXES:.c .o
31+
32+
.c.o:
33+
$(CC) -c $(CFLAGS) $(CPPFLAGS) $(INCLUDES) $< -o $@
34+
35+
all:$(PROG)
36+
37+
extra:all $(PROG_EXTRA)
38+
39+
minimap2:main.o libminimap2.a
40+
$(CC) $(CFLAGS) main.o -o $@ -L. -lminimap2 $(LIBS)
41+
42+
minimap2-lite:example.o libminimap2.a
43+
$(CC) $(CFLAGS) $< -o $@ -L. -lminimap2 $(LIBS)
44+
45+
libminimap2.a:$(OBJS)
46+
$(AR) -csru $@ $(OBJS)
47+
48+
sdust:sdust.c kalloc.o kalloc.h kdq.h kvec.h kseq.h ketopt.h sdust.h
49+
$(CC) -D_SDUST_MAIN $(CFLAGS) $< kalloc.o -o $@ -lz
50+
51+
ksw2_ll_simde.o:ksw2_ll_sse.c ksw2.h kalloc.h
52+
$(CC) -c $(CFLAGS) -msse2 $(CPPFLAGS) $(INCLUDES) $< -o $@
53+
54+
ksw2_extz2_simde.o:ksw2_extz2_sse.c ksw2.h kalloc.h
55+
$(CC) -c $(CFLAGS) -msse4.1 $(CPPFLAGS) $(INCLUDES) $< -o $@
56+
57+
ksw2_extd2_simde.o:ksw2_extd2_sse.c ksw2.h kalloc.h
58+
$(CC) -c $(CFLAGS) -msse4.1 $(CPPFLAGS) $(INCLUDES) $< -o $@
59+
60+
ksw2_exts2_simde.o:ksw2_exts2_sse.c ksw2.h kalloc.h
61+
$(CC) -c $(CFLAGS) -msse4.1 $(CPPFLAGS) $(INCLUDES) $< -o $@
62+
63+
# other non-file targets
64+
65+
clean:
66+
rm -fr gmon.out *.o a.out $(PROG) $(PROG_EXTRA) *~ *.a *.dSYM build dist mappy*.so mappy.c python/mappy.c mappy.egg*
67+
68+
depend:
69+
(LC_ALL=C; export LC_ALL; makedepend -Y -- $(CFLAGS) $(CPPFLAGS) -- *.c)
70+
71+
# DO NOT DELETE
72+
73+
align.o: minimap.h mmpriv.h bseq.h kseq.h ksw2.h kalloc.h
74+
bseq.o: bseq.h kvec.h kalloc.h kseq.h
75+
chain.o: minimap.h mmpriv.h bseq.h kseq.h kalloc.h
76+
esterr.o: mmpriv.h minimap.h bseq.h kseq.h
77+
example.o: minimap.h kseq.h
78+
format.o: kalloc.h mmpriv.h minimap.h bseq.h kseq.h
79+
hit.o: mmpriv.h minimap.h bseq.h kseq.h kalloc.h khash.h
80+
index.o: kthread.h bseq.h minimap.h mmpriv.h kseq.h kvec.h kalloc.h khash.h
81+
index.o: ksort.h
82+
kalloc.o: kalloc.h
83+
ksw2_extd2_sse.o: ksw2.h kalloc.h
84+
ksw2_exts2_sse.o: ksw2.h kalloc.h
85+
ksw2_extz2_sse.o: ksw2.h kalloc.h
86+
ksw2_ll_sse.o: ksw2.h kalloc.h
87+
kthread.o: kthread.h
88+
main.o: bseq.h minimap.h mmpriv.h kseq.h ketopt.h
89+
map.o: kthread.h kvec.h kalloc.h sdust.h mmpriv.h minimap.h bseq.h kseq.h
90+
map.o: khash.h ksort.h
91+
misc.o: mmpriv.h minimap.h bseq.h kseq.h ksort.h
92+
options.o: mmpriv.h minimap.h bseq.h kseq.h
93+
pe.o: mmpriv.h minimap.h bseq.h kseq.h kvec.h kalloc.h ksort.h
94+
sdust.o: kalloc.h kdq.h kvec.h sdust.h
95+
self-chain.o: minimap.h kseq.h
96+
sketch.o: kvec.h kalloc.h mmpriv.h minimap.h bseq.h kseq.h
97+
splitidx.o: mmpriv.h minimap.h bseq.h kseq.h

Diff for: README.md

+8-4
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,14 @@ directory to compile. If you see compilation errors, try `make sse2only=1`
8080
to disable SSE4 code, which will make minimap2 slightly slower.
8181

8282
Minimap2 also works with ARM CPUs supporting the NEON instruction sets. To
83-
compile for 32 bit ARM architectures (such as ARMv7), use `make arm_neon=1`. To compile for for 64 bit ARM architectures (such as ARMv8), use `make arm_neon=1 aarch64=1`.
83+
compile for 32 bit ARM architectures (such as ARMv7), use `make arm_neon=1`. To
84+
compile for for 64 bit ARM architectures (such as ARMv8), use `make arm_neon=1
85+
aarch64=1`.
8486

85-
Minimap2 can use [SIMD Everywhere (SIMDe)](https://github.com/nemequ/simde) library for porting implementation
86-
to the different SIMD instruction sets. To compile using SIMDe, use `make simde=1`. To compile for ARM CPUs, add `simde=1` to the commands given above.
87-
SIMDe also enables non-SIMD implementation using `make no_simd=1`.
87+
Minimap2 can use [SIMD Everywhere (SIMDe)][simde] library for porting
88+
implementation to the different SIMD instruction sets. To compile using SIMDe,
89+
use `make -f Makefile.simde`. To compile for ARM CPUs, use `Makefile.simde`
90+
with the ARM related command lines given above.
8891

8992
### <a name="general"></a>General usage
9093

@@ -380,3 +383,4 @@ mappy` or [from BioConda][mappyconda] via `conda install -c bioconda mappy`.
380383
[manpage]: https://lh3.github.io/minimap2/minimap2.html
381384
[manpage-cs]: https://lh3.github.io/minimap2/minimap2.html#10
382385
[doi]: https://doi.org/10.1093/bioinformatics/bty191
386+
[smide]: https://github.com/nemequ/simde

0 commit comments

Comments
 (0)