Skip to content

Commit 050ca43

Browse files
authored
Merge pull request #103 from SGSSGene/fix/ci_emscripten
ci, fix: turn emscripten compilation back on
2 parents 8c3f281 + c6a1c9f commit 050ca43

8 files changed

Lines changed: 94 additions & 28 deletions

File tree

.github/workflows/ci_on_pr.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444
- {os: windows-2022, compiler: msvc-cpp20-release, cmake_flags: "-DFMC_USE_SDSL=NO"}
4545
# not running any tests, since it takes to long
4646
- {os: windows-2022, compiler: msvc-cpp20-debug, cmake_flags: "-DFMC_USE_SDSL=NO"}
47-
# - {os: ubuntu-22.04, compiler: emscripten-cpp20-release, cmake_flags: "-DCMAKE_EXE_LINKER_FLAGS='-sALLOW_MEMORY_GROWTH=1 -sSTACK_SIZE=1000000'", cmake_cxx_flags: "-Wno-c++11-narrowing"}
47+
- {os: ubuntu-22.04, compiler: emscripten-cpp20-release, cmake_flags: "-DCMAKE_EXE_LINKER_FLAGS='-sALLOW_MEMORY_GROWTH=1 -sSTACK_SIZE=16000000 -sMEMORY64'", cmake_cxx_flags: "-Wno-c++11-narrowing -sMEMORY64", cmake_c_flags: "-sMEMORY64"}
4848
steps:
4949
- name: Standard IV-project testing
5050
uses: iv-project/IVaction@v10.15

CMakeLists.txt

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,29 @@ cmake_minimum_required (VERSION 3.25)
66
project(fmindex-collection LANGUAGES CXX C
77
DESCRIPTION "fmindex-collection -- Datastructures and Algorithms for (Bi-)FMIndices and Approximate Pattern Matching")
88

9-
option(FMC_USE_SDSL "Activate occ tables that use SDSL as a backend" ${PROJECT_IS_TOP_LEVEL})
9+
option(FMC_USE_SDSL "Include SDSL based strings with rank support" ${PROJECT_IS_TOP_LEVEL})
1010
option(FMC_USE_PASTA "Include PASTA (required for bitvector benchmarks)" ${PROJECT_IS_TOP_LEVEL})
1111
option(FMC_USE_SUX "Include SUX (required for bitvector benchmarks)" ${PROJECT_IS_TOP_LEVEL})
12-
option(FMC_USE_AWFMINDEX "Include AWFMIndex (only used in string benchmark)" OFF)
13-
set(FMC_AWFMINDEX_PATH "" CACHE STRING "A path where <PATH>/include and <PATH>/lib have the installed stuff of AWFMIndex")
12+
option(FMC_USE_AWFMINDEX "Include AWFMIndex (only used in string benchmark)" ${PROJECT_IS_TOP_LEVEL})
1413

1514
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
1615
set(FMC_USE_SDSL OFF)
1716
set(FMC_USE_PASTA OFF)
1817
set(FMC_USE_SUX OFF)
18+
set(FMC_USE_AWFMINDEX OFF)
1919
if (PROJECT_IS_TOP_LEVEL)
2020
add_compile_options("/EHsc")
2121
endif()
22-
23-
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
22+
elseif (APPLE)
23+
set(FMC_USE_SDSL OFF)
24+
set(FMC_USE_PASTA OFF)
25+
set(FMC_USE_SUX OFF)
26+
set(FMC_USE_AWFMINDEX OFF)
27+
elseif (EMSCRIPTEN)
2428
set(FMC_USE_SDSL OFF)
29+
set(FMC_USE_PASTA OFF)
30+
set(FMC_USE_SUX OFF)
31+
set(FMC_USE_AWFMINDEX OFF)
2532
endif()
2633

2734
find_package(OpenMP QUIET)
@@ -91,4 +98,7 @@ if (PROJECT_IS_TOP_LEVEL)
9198
else()
9299
target_compile_options(fmindex-collection INTERFACE -Wall -Werror -Wpedantic -Wextra -fPIC)
93100
endif()
101+
if (LINUX)
102+
target_compile_options(fmindex-collection INTERFACE -mavx2)
103+
endif()
94104
endif()

cpm.dependencies

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,33 @@
8989
"target_include_directories(sux SYSTEM PUBLIC ${CPM_CURRENT_SOURCE_DIR})",
9090
"add_library(sux::sux ALIAS sux)"
9191
]
92-
}
92+
},
93+
{
94+
"if": "FMC_USE_AWFMINDEX",
95+
"name": "awfmindex",
96+
"version": "0.0.0",
97+
"github_repository": "TravisWheelerLab/AvxWindowFmIndex",
98+
"git_tag": "92b849fddaea62a3b6bf47c7ff6db3ac3d896a10",
99+
"download_only": true,
100+
"cmake_commands": [
101+
"add_library(AwFmIndex ${CPM_CURRENT_SOURCE_DIR}/src/AwFmFile.c
102+
${CPM_CURRENT_SOURCE_DIR}/src/AwFmIndexStruct.c
103+
${CPM_CURRENT_SOURCE_DIR}/src/AwFmKmerTable.c
104+
${CPM_CURRENT_SOURCE_DIR}/src/AwFmLetter.c
105+
${CPM_CURRENT_SOURCE_DIR}/src/AwFmOccurrence.c
106+
${CPM_CURRENT_SOURCE_DIR}/src/AwFmSimdConfig.c
107+
${CPM_CURRENT_SOURCE_DIR}/lib/FastaVector/src/FastaVector.c
108+
${CPM_CURRENT_SOURCE_DIR}/lib/FastaVector/src/FastaVectorMetadataVector.c
109+
${CPM_CURRENT_SOURCE_DIR}/lib/FastaVector/src/FastaVectorString.c
110+
)",
111+
"target_include_directories(AwFmIndex SYSTEM PUBLIC
112+
${CPM_CURRENT_SOURCE_DIR}/src
113+
${CPM_CURRENT_SOURCE_DIR}/lib/FastaVector/src/
114+
${CPM_CURRENT_SOURCE_DIR}/lib/libdivsufsort/include/
115+
)",
116+
"set_target_properties(AwFmIndex PROPERTIES COMPILE_FLAGS -mavx2)",
117+
"add_library(AwFmIndex::AwFmIndex ALIAS AwFmIndex)"
118+
]
119+
},
93120
]
94121
}

src/test_fmindex-collection/CMakeLists.txt

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -73,24 +73,20 @@ target_link_libraries(${PROJECT_NAME}
7373
)
7474
target_compile_definitions(${PROJECT_NAME} PRIVATE CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS)
7575

76-
if (FMC_USE_AWFMINDEX)
77-
target_compile_definitions(${PROJECT_NAME} PRIVATE -DFMC_USE_AWFMINDEX)
78-
target_include_directories(${PROJECT_NAME} PRIVATE "${FMC_AWFMINDEX_PATH}/include")
79-
target_link_directories(${PROJECT_NAME} PRIVATE "${FMC_AWFMINDEX_PATH}/lib")
80-
target_link_libraries(${PROJECT_NAME} awfmindex_static divsufsort64 fastavector_static)
81-
endif()
82-
8376
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
8477
target_link_options(${PROJECT_NAME} PUBLIC /STACK:16777216)
8578
endif()
86-
if (FMC_USE_SUX AND FMC_USE_PASTA AND FMC_USE_SDSL)
87-
# bitvector/benchmark requires sux and paste to compile successful
79+
if (FMC_USE_SUX)
8880
target_compile_definitions(${PROJECT_NAME} PRIVATE -DFMC_USE_SUX)
81+
target_link_libraries(${PROJECT_NAME} sux::sux)
82+
endif ()
83+
if (FMC_USE_PASTA)
8984
target_compile_definitions(${PROJECT_NAME} PRIVATE -DFMC_USE_PASTA)
90-
target_link_libraries(${PROJECT_NAME}
91-
pasta_bit_vector
92-
sux::sux
93-
)
94-
endif()
85+
target_link_libraries(${PROJECT_NAME} pasta_bit_vector)
86+
endif ()
87+
if (FMC_USE_AWFMINDEX)
88+
target_compile_definitions(${PROJECT_NAME} PRIVATE -DFMC_USE_AWFMINDEX)
89+
target_link_libraries(${PROJECT_NAME} AwFmIndex::AwFmIndex)
90+
endif ()
9591

9692
add_test(NAME ${PROJECT_NAME} COMMAND ${PROJECT_NAME})

src/test_fmindex-collection/bitvector/allBitVectors.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <fmindex-collection/bitvector/all.h>
77
#include <fmindex-collection/bitvector/RBBitvector.h>
88

9+
#ifndef __EMSCRIPTEN__
910
#define ALLBITVECTORS \
1011
fmc::bitvector::L0_64Bitvector, \
1112
fmc::bitvector::L0_128Bitvector, \
@@ -31,6 +32,17 @@
3132
fmc::bitvector::PairedL0L1_512_64kBitvector, \
3233
fmc::bitvector::PairedL0L1_1024_64kBitvector, \
3334
fmc::bitvector::PairedL0L1_2048_64kBitvector
35+
#else
36+
#define ALLBITVECTORS \
37+
fmc::bitvector::L0_64Bitvector, \
38+
fmc::bitvector::L0_512Bitvector, \
39+
fmc::bitvector::PairedL0_64Bitvector, \
40+
fmc::bitvector::PairedL0_512Bitvector, \
41+
fmc::bitvector::L0L1_64_64kBitvector, \
42+
fmc::bitvector::L0L1_512_64kBitvector, \
43+
fmc::bitvector::PairedL0L1_64_64kBitvector, \
44+
fmc::bitvector::PairedL0L1_512_64kBitvector
45+
#endif
3446

3547
#define ALLSPARSEBITVECTORS \
3648
fmc::bitvector::L0_64Bitvector, \

src/test_fmindex-collection/bitvector/bitset_popcount.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,10 @@ TEST_CASE("benchmark skip_first_or_last_n_bits", "[misc][!benchmark]") {
113113
test.template operator()<128>();
114114
test.template operator()<256>();
115115
test.template operator()<512>();
116+
#ifndef __EMSCRIPTEN__
116117
test.template operator()<1024>();
117118
test.template operator()<2048>();
119+
#endif
118120
}
119121

120122
/* SECTION("and and and") {

src/test_fmindex-collection/string/AWFMIndex.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// SPDX-License-Identifier: BSD-3-Clause
33
#pragma once
44

5-
#include <fmindex-collection/string/L0L1_NEPRV9.h>
5+
#include <fmindex-collection/string/FlattenedBitvectors_L0L1.h>
66

77
extern "C" {
88
#include "AwFmIndex.h"
@@ -97,10 +97,10 @@ inline void awFmIndexCreateStringWithRankSupport(struct AwFmIndex* _RESTRICT_ co
9797
}
9898
}
9999

100-
// If AWFMIndex doesn't implement the correct version, fall back to L0L1NEPRV9 version, which has similar memory usage
100+
// If AWFMIndex doesn't implement the correct version, fall back to FlattenedBitvectors_L0L1 version, which has similar memory usage
101101
template <size_t TSigma>
102-
struct AWFMIndex : fmc::string::L0L1_NEPRV9<TSigma, 64, 65536> {
103-
using fmc::string::L0L1_NEPRV9<TSigma, 64, 65536>::L0L1_NEPRV9;
102+
struct AWFMIndex : fmc::string::FlattenedBitvectors_L0L1<TSigma, 64, 65536> {
103+
using fmc::string::FlattenedBitvectors_L0L1<TSigma, 64, 65536>::FlattenedBitvectors_L0L1;
104104
};
105105
/**
106106
* This is a quick and dirty implementation
@@ -115,7 +115,9 @@ struct AWFMIndex<5> {
115115

116116
AWFMIndex() = default;
117117
~AWFMIndex() {
118-
if (index == nullptr) {
118+
if (index != nullptr) {
119+
//!WORKAROUND !HACK awFmDeallocIndex closes a file handle, even if it didn't open one
120+
index->fileHandle = fopen("/dev/zero", "r");
119121
awFmDeallocIndex(index);
120122
}
121123
}
@@ -225,7 +227,9 @@ struct AWFMIndex<21> {
225227

226228
AWFMIndex() = default;
227229
~AWFMIndex() {
228-
if (index == nullptr) {
230+
if (index != nullptr) {
231+
//!WORKAROUND !HACK awFmDeallocIndex closes a file handle, even if it didn't open one
232+
index->fileHandle = fopen("/dev/zero", "r");
229233
awFmDeallocIndex(index);
230234
}
231235
}

src/test_fmindex-collection/string/allStrings.h

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <fmindex-collection/bitvector/all.h>
77
#include <fmindex-collection/string/all.h>
88

9+
#ifndef __EMSCRIPTEN__
910
#define ALLSTRINGSWITHRANK_IMPL \
1011
fmc::string::InterleavedBitvector16, \
1112
fmc::string::FlattenedBitvectors_64_64k, \
@@ -27,7 +28,21 @@
2728
fmc::string::MultiaryWavelet_512_64k, \
2829
fmc::string::MultiaryWavelet_s16, \
2930
fmc::string::MultiaryWavelet_s256
30-
31+
#else
32+
#define ALLSTRINGSWITHRANK_IMPL \
33+
fmc::string::InterleavedBitvector16, \
34+
fmc::string::FlattenedBitvectors_64_64k, \
35+
fmc::string::FlattenedBitvectors_512_64k, \
36+
fmc::string::PairedFlattenedBitvectors_64_64k, \
37+
fmc::string::PairedFlattenedBitvectors_512_64k, \
38+
fmc::string::MultiBitvector_Bitvector, \
39+
fmc::string::InterleavedEPR16, \
40+
fmc::string::InterleavedEPRV2_16, \
41+
fmc::string::MultiaryWavelet_64_64k, \
42+
fmc::string::MultiaryWavelet_512_64k, \
43+
fmc::string::MultiaryWavelet_s16, \
44+
fmc::string::MultiaryWavelet_s256
45+
#endif
3146

3247
#if FMC_USE_SDSL
3348
#define ALLSTRINGSWITHRANK \

0 commit comments

Comments
 (0)