From 50f176a1bea99bab76dc0705ab8a47b17fa59afc Mon Sep 17 00:00:00 2001 From: Stuart McNicholas Date: Tue, 19 Mar 2024 10:56:14 +0000 Subject: [PATCH 01/19] First almost successful 64-bit build. --- get_sources | 2 +- initial_build.sh | 39 +++++++++++------------------------- wasm_src/CMakeLists.txt | 4 ++-- wasm_src/moorhen-wrappers.cc | 12 +++++------ 4 files changed, 21 insertions(+), 36 deletions(-) diff --git a/get_sources b/get_sources index bcf245df1..0d2e72d52 100755 --- a/get_sources +++ b/get_sources @@ -105,7 +105,7 @@ echo echo "Attempting to get emsdk zlib/png ports" echo echo "" > silly.c -emcc silly.c -s USE_ZLIB=1 -s USE_LIBPNG=1 -s USE_FREETYPE=1 +emcc silly.c -s USE_ZLIB=1 -s USE_LIBPNG=1 -s USE_FREETYPE=1 -s USE_PTHREADS=1 -pthread -sMEMORY64=1 rm -f silly.c rm -f a.out.js rm -f a.out.wasm diff --git a/initial_build.sh b/initial_build.sh index 5ea7734c9..5d7e00e8b 100755 --- a/initial_build.sh +++ b/initial_build.sh @@ -30,39 +30,23 @@ mkdir -p ${INSTALL_DIR} mkdir -p ${BUILD_DIR}/gsl_build cd ${BUILD_DIR}/gsl_build emconfigure ${SOURCE_DIR}/gsl-2.7.1/configure --prefix=${INSTALL_DIR} -emmake make LDFLAGS=-all-static -j ${NUMPROCS} +emmake make LDFLAGS=-all-static -j ${NUMPROCS} CXXFLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=1" CFLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=1" emmake make install cd ${BUILD_DIR} -#Boost (has to be built in source tree as far as I am aware) -cd ${SOURCE_DIR}/boost -./bootstrap.sh --with-libraries=serialization,regex,chrono,date_time,filesystem,iostreams,program_options,thread,math,random,system -./b2 toolset=emscripten link=static variant=release cxxflags="-pthread" linkflags="-pthread" threading=multi runtime-link=static thread system filesystem regex serialization chrono date_time program_options random -j ${NUMPROCS} -./b2 toolset=emscripten link=static variant=release cxxflags="-pthread" linkflags="-pthread" threading=multi runtime-link=static install --prefix=${INSTALL_DIR} +#boost with cmake +mkdir -p ${BUILD_DIR}/boost +cd ${BUILD_DIR}/boost +emcmake cmake -DCMAKE_C_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/boost -DBOOST_EXCLUDE_LIBRARIES="context;fiber;fiber_numa;asio;log;coroutine;cobalt;nowide" +emmake make -j ${NUMPROCS} +emmake make install cd ${BUILD_DIR} -emar q ${INSTALL_DIR}/lib/libboost_chrono.a ${INSTALL_DIR}/lib/libboost_chrono.bc -emar q ${INSTALL_DIR}/lib/libboost_date_time.a ${INSTALL_DIR}/lib/libboost_date_time.bc -emar q ${INSTALL_DIR}/lib/libboost_filesystem.a ${INSTALL_DIR}/lib/libboost_filesystem.bc -emar q ${INSTALL_DIR}/lib/libboost_iostreams.a ${INSTALL_DIR}/lib/libboost_iostreams.bc -emar q ${INSTALL_DIR}/lib/libboost_math_c99.a ${INSTALL_DIR}/lib/libboost_math_c99.bc -emar q ${INSTALL_DIR}/lib/libboost_math_c99f.a ${INSTALL_DIR}/lib/libboost_math_c99f.bc -emar q ${INSTALL_DIR}/lib/libboost_math_c99l.a ${INSTALL_DIR}/lib/libboost_math_c99l.bc -emar q ${INSTALL_DIR}/lib/libboost_math_tr1.a ${INSTALL_DIR}/lib/libboost_math_tr1.bc -emar q ${INSTALL_DIR}/lib/libboost_math_tr1f.a ${INSTALL_DIR}/lib/libboost_math_tr1f.bc -emar q ${INSTALL_DIR}/lib/libboost_math_tr1l.a ${INSTALL_DIR}/lib/libboost_math_tr1l.bc -emar q ${INSTALL_DIR}/lib/libboost_program_options.a ${INSTALL_DIR}/lib/libboost_program_options.bc -emar q ${INSTALL_DIR}/lib/libboost_random.a ${INSTALL_DIR}/lib/libboost_random.bc -emar q ${INSTALL_DIR}/lib/libboost_regex.a ${INSTALL_DIR}/lib/libboost_regex.bc -emar q ${INSTALL_DIR}/lib/libboost_serialization.a ${INSTALL_DIR}/lib/libboost_serialization.bc -emar q ${INSTALL_DIR}/lib/libboost_system.a ${INSTALL_DIR}/lib/libboost_system.bc -emar q ${INSTALL_DIR}/lib/libboost_wserialization.a ${INSTALL_DIR}/lib/libboost_wserialization.bc -emar q ${INSTALL_DIR}/lib/libboost_thread.a ${INSTALL_DIR}/lib/libboost_thread.bc - #RDKit +BOOST_CMAKE_STUFF=`for i in ${INSTALL_DIR}/lib/cmake/boost*; do j=${i%-1.83.0}; k=${j#/Users/stuart/Moorhen-64/install/lib/cmake/boost_}; echo -Dboost_${k}_DIR=$i; done` mkdir -p ${BUILD_DIR}/rdkit_build cd ${BUILD_DIR}/rdkit_build -emcmake cmake -Dboost_iostreams_DIR=${INSTALL_DIR}/lib/cmake/boost_iostreams-1.83.0/ -Dboost_system_DIR=${INSTALL_DIR}/lib/cmake/boost_system-1.83.0/ -Dboost_headers_DIR=${INSTALL_DIR}/lib/cmake/boost_headers-1.83.0/ -DBoost_DIR=${INSTALL_DIR}/lib/cmake/Boost-1.83.0 -DRDK_BUILD_PYTHON_WRAPPERS=OFF -DRDK_INSTALL_STATIC_LIBS=ON -DRDK_INSTALL_INTREE=OFF -DRDK_BUILD_SLN_SUPPORT=OFF -DRDK_TEST_MMFF_COMPLIANCE=OFF -DRDK_BUILD_CPP_TESTS=OFF -DRDK_USE_BOOST_SERIALIZATION=ON -DRDK_BUILD_THREADSAFE_SSS=OFF -DBoost_INCLUDE_DIR=${INSTALL_DIR}/include -DBoost_USE_STATIC_LIBS=ON -DBoost_USE_STATIC_RUNTIME=ON -DBoost_DEBUG=TRUE -DCMAKE_CXX_FLAGS="-s USE_PTHREADS=1 -pthread -Wno-enum-constexpr-conversion -D_HAS_AUTO_PTR_ETC=0" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/rdkit -DRDK_OPTIMIZE_POPCNT=OFF -DRDK_INSTALL_COMIC_FONTS=OFF +emcmake cmake -DBoost_DIR=${INSTALL_DIR}/lib/cmake/Boost-1.83.0 ${BOOST_CMAKE_STUFF} -DRDK_BUILD_PYTHON_WRAPPERS=OFF -DRDK_INSTALL_STATIC_LIBS=ON -DRDK_INSTALL_INTREE=OFF -DRDK_BUILD_SLN_SUPPORT=OFF -DRDK_TEST_MMFF_COMPLIANCE=OFF -DRDK_BUILD_CPP_TESTS=OFF -DRDK_USE_BOOST_SERIALIZATION=ON -DRDK_BUILD_THREADSAFE_SSS=OFF -DBoost_INCLUDE_DIR=${INSTALL_DIR}/include -DBoost_USE_STATIC_LIBS=ON -DBoost_USE_STATIC_RUNTIME=ON -DBoost_DEBUG=TRUE -DCMAKE_CXX_FLAGS="-s USE_PTHREADS=1 -sMEMORY64=1 -pthread -Wno-enum-constexpr-conversion -D_HAS_AUTO_PTR_ETC=0" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/rdkit -DRDK_OPTIMIZE_POPCNT=OFF -DRDK_INSTALL_COMIC_FONTS=OFF -D CMAKE_C_FLAGS="-sMEMORY64=1 -pthread" -D CMAKE_CXX_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_MODULE_PATH=${INSTALL_DIR}/lib/cmake emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} @@ -70,7 +54,8 @@ cd ${BUILD_DIR} #gemmi mkdir -p ${BUILD_DIR}/gemmi_build cd ${BUILD_DIR}/gemmi_build -emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/gemmi +# -DMEMORY64=1 assumnes small patch to gemmi - need to know correct define created by 64 bit emscripten. //FIXME !!!!!!!!!!! +emcmake cmake -DCMAKE_EXE_LINKER_FLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=1" -DCMAKE_C_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=1 -pthread -DMEMORY64=1" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/gemmi emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} @@ -78,7 +63,7 @@ cd ${BUILD_DIR} #Moorhen mkdir -p ${BUILD_DIR}/moorhen_build cd ${BUILD_DIR}/moorhen_build -emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR} +emcmake cmake -DCMAKE_EXE_LINKER_FLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=1" -DCMAKE_C_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR} emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} diff --git a/wasm_src/CMakeLists.txt b/wasm_src/CMakeLists.txt index 722e9903d..05121c046 100644 --- a/wasm_src/CMakeLists.txt +++ b/wasm_src/CMakeLists.txt @@ -437,7 +437,7 @@ ${coot_src}/ideal/write-png.cc target_include_directories(coot PRIVATE ${coot_src} ${coot_src}/coords ${coot_src}/ccp4mg-utils ${coot_src}/utils ${coot_src}/src ../include ../checkout/ssm ../checkout/mmdb2 ../checkout/clipper ../checkout/fftw-2.1.5/fftw ../checkout/fftw-2.1.5/rfftw ../checkout/libccp4/ccp4 ../boost ../checkout/gemmi/include ) -set_target_properties(coot PROPERTIES COMPILE_FLAGS "-DHAVE_BOOST_BASED_THREAD_POOL_LIBRARY -Wno-deprecated-declarations -Wno-deprecated-builtins -pthread -DHAVE_CXX11=1 -DHAVE_SSMLIB -DHAVE_BOOST -DNODERAWFS -DFFTW_ENABLE_FLOAT -s USE_LIBPNG=1 -s USE_ZLIB=1 -s USE_PTHREADS=1" LINK_FLAGS "-fexceptions -pthread -s USE_LIBPNG=1 -s USE_ZLIB=1 -s USE_PTHREADS=1 -sDEMANGLE_SUPPORT=1 -sASSERTIONS=2") +set_target_properties(coot PROPERTIES COMPILE_FLAGS "-DHAVE_BOOST_BASED_THREAD_POOL_LIBRARY -Wno-deprecated-declarations -Wno-deprecated-builtins -pthread -DHAVE_CXX11=1 -DHAVE_SSMLIB -DHAVE_BOOST -DNODERAWFS -DFFTW_ENABLE_FLOAT -s USE_LIBPNG=1 -s USE_ZLIB=1 -s USE_PTHREADS=1" LINK_FLAGS "-fexceptions -pthread -s USE_LIBPNG=1 -s USE_ZLIB=1 -s USE_PTHREADS=1 -sASSERTIONS=2") set_source_files_properties(${coot_exception_srcs} PROPERTIES COMPILE_FLAGS "-DHAVE_BOOST_BASED_THREAD_POOL_LIBRARY -fexceptions -pthread -DHAVE_SSMLIB -DHAVE_BOOST -DNODERAWFS -DFFTW_ENABLE_FLOAT -s USE_LIBPNG=1 -s USE_ZLIB=1 -s USE_PTHREADS=1" ) @@ -518,7 +518,7 @@ FILE(COPY ${CMAKE_INSTALL_PREFIX}/share/RDKit/Data/BaseFeatures.fdef DESTINATION #-sALLOW_MEMORY_GROWTH=1 -sINITIAL_MEMORY=512MB -sMAXIMUM_MEMORY=4092MB -sTOTAL_MEMORY=4092MB add_executable(moorhen moorhen-wrappers.cc gemmi-wrappers.cc smilestopdb.cc) -target_link_options(moorhen PRIVATE -sDEMANGLE_SUPPORT=1 -sASSERTIONS=2 -fexceptions -pthread -sPTHREAD_POOL_SIZE=32 -sPTHREAD_POOL_SIZE_STRICT=32 -sUSE_PTHREADS=1 -sALLOW_MEMORY_GROWTH=1 --bind -sFORCE_FILESYSTEM=1 -sMODULARIZE=1 -sEXPORT_NAME=createRSRModule -sEXPORTED_RUNTIME_METHODS=['FS','readFile'] --preload-file data --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/coot_env_web.js) +target_link_options(moorhen PRIVATE -sASSERTIONS=2 -fexceptions -pthread -sPTHREAD_POOL_SIZE=32 -sPTHREAD_POOL_SIZE_STRICT=32 -sUSE_PTHREADS=1 -sALLOW_MEMORY_GROWTH=1 --bind -sFORCE_FILESYSTEM=1 -sMODULARIZE=1 -sEXPORT_NAME=createRSRModule -sEXPORTED_RUNTIME_METHODS=['FS','readFile'] --preload-file data --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/coot_env_web.js) target_link_directories(moorhen PUBLIC ../ssm ../mmdb2 ../clipper/cif ../clipper/mmdb ../clipper/core ../clipper/contrib ../clipper/ccp4 ../clipper/gemmi ../fftw ../rfftw ../ccp4 ../lib ../install/lib ../privateer) target_link_libraries(moorhen ssm mmdb2 clipper-minimol clipper-phs clipper-mmdb clipper-cif clipper-core clipper-contrib clipper-ccp4 clipper-gemmi fftw rfftw ccp4 coot gsl gslcblas RDKitMolDraw2D RDKitForceFieldHelpers RDKitDescriptors RDKitForceField RDKitSubstructMatch RDKitOptimizer RDKitDistGeomHelpers RDKitDistGeometry RDKitChemReactions RDKitAlignment RDKitEigenSolvers RDKitDepictor RDKitcoordgen RDKitMolChemicalFeatures RDKitPartialCharges RDKitFileParsers RDKitRDGeometryLib RDKitGraphMol RDKitShapeHelpers RDKitFingerprints RDKitMolAlign RDKitMolTransforms RDKitChemTransforms RDKitSmilesParse RDKitFilterCatalog RDKitCatalogs RDKitSubgraphs RDKitRDGeneral RDKitDataStructs RDKitGenericGroups boost_thread boost_serialization gemmi_cpp privateer freetype slicendice_cpp m z idbfs.js) target_include_directories(moorhen PRIVATE ${coot_src} ${coot_src}/ccp4mg-utils ${coot_src}/src ../checkout/boost_1_80_0 ../checkout/clipper/ ../checkout/mmdb2 ../checkout/mmdb2/mmdb2 ../checkout/ssm ../checkout/libccp4/ccp4 ../fftw ../rfftw ../include ../checkout/gemmi/include ../checkout/privateer-wasm/src/privateer/cpp ../checkout/privateer-wasm/src/privateer/cpp/pybind11 ../checkout/privateer-wasm/src/privateer/cpp/third-party/simdjson ../checkout/slicendice_cpp/prog/ ../checkout/rdkit-Release_2023_09_1/External/Eigen/eigen/ ) diff --git a/wasm_src/moorhen-wrappers.cc b/wasm_src/moorhen-wrappers.cc index 638589f5c..4a29f33ae 100644 --- a/wasm_src/moorhen-wrappers.cc +++ b/wasm_src/moorhen-wrappers.cc @@ -1273,9 +1273,8 @@ EMSCRIPTEN_BINDINGS(my_module) { .function("fit_to_map_by_random_jiggle_using_cid",&molecules_container_t::fit_to_map_by_random_jiggle_using_cid) .function("get_svg_for_residue_type",&molecules_container_t::get_svg_for_residue_type) .function("is_valid_model_molecule",&molecules_container_t::is_valid_model_molecule) - .function("is_valid_map_molecule",&molecules_container_t::is_valid_map_molecule) + .function("is_valid_map_molecule",&molecules_container_t::is_valid_map_molecule) .function("read_pdb",&molecules_container_t::read_pdb) - .function("read_ccp4_map",&molecules_container_t::read_ccp4_map) .function("read_mtz",&molecules_container_t::read_mtz) .function("residue_cid_to_residue_spec",&molecules_container_t::residue_cid_to_residue_spec) // int import_cif_dictionary(const std::string &cif_file_name, int imol_enc); @@ -1283,8 +1282,8 @@ EMSCRIPTEN_BINDINGS(my_module) { .function("density_fit_analysis",&molecules_container_t::density_fit_analysis) .function("get_number_of_atoms",&molecules_container_t::get_number_of_atoms) //Using allow_raw_pointers(). Perhaps suggests we need to do something different from exposing mmdb pointers to JS. - .function("get_residue",&molecules_container_t::get_residue, allow_raw_pointers()) - .function("get_atom",&molecules_container_t::get_atom, allow_raw_pointers()) + //.function("get_residue",&molecules_container_t::get_residue, allow_raw_pointers()) + //.function("get_atom",&molecules_container_t::get_atom, allow_raw_pointers()) .function("flipPeptide_cid", select_overload(&molecules_container_t::flip_peptide_using_cid)) .function("flipPeptide", select_overload(&molecules_container_t::flip_peptide)) .function("side_chain_180", select_overload (&molecules_container_t::side_chain_180)) @@ -1340,8 +1339,8 @@ EMSCRIPTEN_BINDINGS(my_module) { .function("associate_data_mtz_file_with_map",&molecules_container_t::associate_data_mtz_file_with_map) .function("connect_updating_maps",&molecules_container_t::connect_updating_maps) .function("get_diff_diff_map_peaks", &molecules_container_t::get_diff_diff_map_peaks) - .function("export_model_molecule_as_gltf", &molecules_container_t::export_model_molecule_as_gltf) - .function("export_map_molecule_as_gltf", &molecules_container_t::export_map_molecule_as_gltf) + //.function("export_model_molecule_as_gltf", &molecules_container_t::export_model_molecule_as_gltf) + //.function("export_map_molecule_as_gltf", &molecules_container_t::export_map_molecule_as_gltf) .function("residues_with_missing_atoms",&molecules_container_t::residues_with_missing_atoms) .function("ramachandran_validation",&molecules_container_t::ramachandran_validation) .function("merge_molecules", select_overload >(int,const std::string &)>(&molecules_container_t::merge_molecules)) @@ -1379,6 +1378,7 @@ EMSCRIPTEN_BINDINGS(my_module) { .function("find_water_baddies",&molecules_container_t::find_water_baddies) .function("get_gphl_chem_comp_info",&molecules_container_t::get_gphl_chem_comp_info) .property("use_gemmi", &molecules_container_t::use_gemmi) + //.function("read_ccp4_map",&molecules_container_t::read_ccp4_map) //BAD!!! OH LORDY, WHY THIS ONE????!!!!!!! FIXME !!!!!!!!!!!!!!!!!! ; class_>("molecules_container_js") .constructor() From 3bae3253f2aeadb733860a6b7c36d7ea14a27b14 Mon Sep 17 00:00:00 2001 From: Stuart McNicholas Date: Tue, 19 Mar 2024 14:55:00 +0000 Subject: [PATCH 02/19] 64-bits version compile out of box hopefully - gemmi and Coot patches to enable this. No gz map read support - this causes mysterious link error. --- get_sources | 8 ++++++++ patches/coot-emscripten-64.patch | 29 +++++++++++++++++++++++++++++ patches/gemmi-emscripten-64.patch | 13 +++++++++++++ wasm_src/moorhen-wrappers.cc | 12 ++++++------ 4 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 patches/coot-emscripten-64.patch create mode 100644 patches/gemmi-emscripten-64.patch diff --git a/get_sources b/get_sources index 0d2e72d52..692c913e0 100755 --- a/get_sources +++ b/get_sources @@ -127,3 +127,11 @@ mkdir -p include cd include ln -s ../checkout/glm-$glm_release/glm glm cd .. + +cd checkout/coot-1.0 +patch -p1 < ../../patches/coot-emscripten-64.patch +cd ../.. + +cd checkout/gemmi +patch -p1 < ../../patches/gemmi-emscripten-64.patch +cd ../.. diff --git a/patches/coot-emscripten-64.patch b/patches/coot-emscripten-64.patch new file mode 100644 index 000000000..57b626dcc --- /dev/null +++ b/patches/coot-emscripten-64.patch @@ -0,0 +1,29 @@ +diff --git a/coot-utils/slurp-map.cc b/coot-utils/slurp-map.cc +index a432676fc..f1b60b823 100644 +--- a/coot-utils/slurp-map.cc ++++ b/coot-utils/slurp-map.cc +@@ -110,12 +110,14 @@ coot::util::slurp_fill_xmap_from_map_file(const std::string &file_name, + + bool is_gzip = false; + std::string ext = file_name_extension(file_name); ++#if !((__POINTER_WIDTH__==64) && __EMSCRIPTEN__) + if (ext == ".gz") is_gzip = true; + + if (is_gzip) { + // this can fail (at the moment) if the axes are not in X,Y,Z order + status = slurp_fill_xmap_from_gz_map_file(file_name, xmap_p, check_only); + } else { ++#endif + // 20231006-PE as it used to be. + struct stat s; + int fstat = stat(file_name.c_str(), &s); +@@ -139,7 +141,9 @@ coot::util::slurp_fill_xmap_from_map_file(const std::string &file_name, + } + delete [] space; + } ++#if !((__POINTER_WIDTH__==64) && __EMSCRIPTEN__) + } ++#endif + } else { + std::cout << "WARNING:: file does not exist " << file_name << std::endl; + } diff --git a/patches/gemmi-emscripten-64.patch b/patches/gemmi-emscripten-64.patch new file mode 100644 index 000000000..9d6da4bec --- /dev/null +++ b/patches/gemmi-emscripten-64.patch @@ -0,0 +1,13 @@ +diff --git a/third_party/stb_sprintf.h b/third_party/stb_sprintf.h +index 28e9d64b..27429a8c 100644 +--- a/third_party/stb_sprintf.h ++++ b/third_party/stb_sprintf.h +@@ -230,7 +230,7 @@ STBSP__PUBLICDEC void STB_SPRINTF_DECORATE(set_separators)(char comma, char peri + #define stbsp__uint16 unsigned short + + #ifndef stbsp__uintptr +-#if defined(__ppc64__) || defined(__powerpc64__) || defined(__aarch64__) || defined(_M_X64) || defined(__x86_64__) || defined(__x86_64) || defined(__s390x__) ++#if defined(__ppc64__) || defined(__powerpc64__) || defined(__aarch64__) || defined(_M_X64) || defined(__x86_64__) || defined(__x86_64) || defined(__s390x__) || ((__POINTER_WIDTH__==64) && defined(__EMSCRIPTEN__)) + #define stbsp__uintptr stbsp__uint64 + #else + #define stbsp__uintptr stbsp__uint32 diff --git a/wasm_src/moorhen-wrappers.cc b/wasm_src/moorhen-wrappers.cc index 4a29f33ae..638589f5c 100644 --- a/wasm_src/moorhen-wrappers.cc +++ b/wasm_src/moorhen-wrappers.cc @@ -1273,8 +1273,9 @@ EMSCRIPTEN_BINDINGS(my_module) { .function("fit_to_map_by_random_jiggle_using_cid",&molecules_container_t::fit_to_map_by_random_jiggle_using_cid) .function("get_svg_for_residue_type",&molecules_container_t::get_svg_for_residue_type) .function("is_valid_model_molecule",&molecules_container_t::is_valid_model_molecule) - .function("is_valid_map_molecule",&molecules_container_t::is_valid_map_molecule) + .function("is_valid_map_molecule",&molecules_container_t::is_valid_map_molecule) .function("read_pdb",&molecules_container_t::read_pdb) + .function("read_ccp4_map",&molecules_container_t::read_ccp4_map) .function("read_mtz",&molecules_container_t::read_mtz) .function("residue_cid_to_residue_spec",&molecules_container_t::residue_cid_to_residue_spec) // int import_cif_dictionary(const std::string &cif_file_name, int imol_enc); @@ -1282,8 +1283,8 @@ EMSCRIPTEN_BINDINGS(my_module) { .function("density_fit_analysis",&molecules_container_t::density_fit_analysis) .function("get_number_of_atoms",&molecules_container_t::get_number_of_atoms) //Using allow_raw_pointers(). Perhaps suggests we need to do something different from exposing mmdb pointers to JS. - //.function("get_residue",&molecules_container_t::get_residue, allow_raw_pointers()) - //.function("get_atom",&molecules_container_t::get_atom, allow_raw_pointers()) + .function("get_residue",&molecules_container_t::get_residue, allow_raw_pointers()) + .function("get_atom",&molecules_container_t::get_atom, allow_raw_pointers()) .function("flipPeptide_cid", select_overload(&molecules_container_t::flip_peptide_using_cid)) .function("flipPeptide", select_overload(&molecules_container_t::flip_peptide)) .function("side_chain_180", select_overload (&molecules_container_t::side_chain_180)) @@ -1339,8 +1340,8 @@ EMSCRIPTEN_BINDINGS(my_module) { .function("associate_data_mtz_file_with_map",&molecules_container_t::associate_data_mtz_file_with_map) .function("connect_updating_maps",&molecules_container_t::connect_updating_maps) .function("get_diff_diff_map_peaks", &molecules_container_t::get_diff_diff_map_peaks) - //.function("export_model_molecule_as_gltf", &molecules_container_t::export_model_molecule_as_gltf) - //.function("export_map_molecule_as_gltf", &molecules_container_t::export_map_molecule_as_gltf) + .function("export_model_molecule_as_gltf", &molecules_container_t::export_model_molecule_as_gltf) + .function("export_map_molecule_as_gltf", &molecules_container_t::export_map_molecule_as_gltf) .function("residues_with_missing_atoms",&molecules_container_t::residues_with_missing_atoms) .function("ramachandran_validation",&molecules_container_t::ramachandran_validation) .function("merge_molecules", select_overload >(int,const std::string &)>(&molecules_container_t::merge_molecules)) @@ -1378,7 +1379,6 @@ EMSCRIPTEN_BINDINGS(my_module) { .function("find_water_baddies",&molecules_container_t::find_water_baddies) .function("get_gphl_chem_comp_info",&molecules_container_t::get_gphl_chem_comp_info) .property("use_gemmi", &molecules_container_t::use_gemmi) - //.function("read_ccp4_map",&molecules_container_t::read_ccp4_map) //BAD!!! OH LORDY, WHY THIS ONE????!!!!!!! FIXME !!!!!!!!!!!!!!!!!! ; class_>("molecules_container_js") .constructor() From e1c548793cd9feda98d86a93440d832483cfe08a Mon Sep 17 00:00:00 2001 From: Stuart McNicholas Date: Tue, 19 Mar 2024 15:22:33 +0000 Subject: [PATCH 03/19] Use a lot of memory by default (in this branch). --- wasm_src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wasm_src/CMakeLists.txt b/wasm_src/CMakeLists.txt index 05121c046..99335e9bb 100644 --- a/wasm_src/CMakeLists.txt +++ b/wasm_src/CMakeLists.txt @@ -518,7 +518,7 @@ FILE(COPY ${CMAKE_INSTALL_PREFIX}/share/RDKit/Data/BaseFeatures.fdef DESTINATION #-sALLOW_MEMORY_GROWTH=1 -sINITIAL_MEMORY=512MB -sMAXIMUM_MEMORY=4092MB -sTOTAL_MEMORY=4092MB add_executable(moorhen moorhen-wrappers.cc gemmi-wrappers.cc smilestopdb.cc) -target_link_options(moorhen PRIVATE -sASSERTIONS=2 -fexceptions -pthread -sPTHREAD_POOL_SIZE=32 -sPTHREAD_POOL_SIZE_STRICT=32 -sUSE_PTHREADS=1 -sALLOW_MEMORY_GROWTH=1 --bind -sFORCE_FILESYSTEM=1 -sMODULARIZE=1 -sEXPORT_NAME=createRSRModule -sEXPORTED_RUNTIME_METHODS=['FS','readFile'] --preload-file data --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/coot_env_web.js) +target_link_options(moorhen PRIVATE -sASSERTIONS=2 -fexceptions -pthread -sPTHREAD_POOL_SIZE=32 -sPTHREAD_POOL_SIZE_STRICT=32 -sUSE_PTHREADS=1 -sALLOW_MEMORY_GROWTH=1 -sINITIAL_MEMORY=4096MB -sMAXIMUM_MEMORY=8192MB --bind -sFORCE_FILESYSTEM=1 -sMODULARIZE=1 -sEXPORT_NAME=createRSRModule -sEXPORTED_RUNTIME_METHODS=['FS','readFile'] --preload-file data --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/coot_env_web.js) target_link_directories(moorhen PUBLIC ../ssm ../mmdb2 ../clipper/cif ../clipper/mmdb ../clipper/core ../clipper/contrib ../clipper/ccp4 ../clipper/gemmi ../fftw ../rfftw ../ccp4 ../lib ../install/lib ../privateer) target_link_libraries(moorhen ssm mmdb2 clipper-minimol clipper-phs clipper-mmdb clipper-cif clipper-core clipper-contrib clipper-ccp4 clipper-gemmi fftw rfftw ccp4 coot gsl gslcblas RDKitMolDraw2D RDKitForceFieldHelpers RDKitDescriptors RDKitForceField RDKitSubstructMatch RDKitOptimizer RDKitDistGeomHelpers RDKitDistGeometry RDKitChemReactions RDKitAlignment RDKitEigenSolvers RDKitDepictor RDKitcoordgen RDKitMolChemicalFeatures RDKitPartialCharges RDKitFileParsers RDKitRDGeometryLib RDKitGraphMol RDKitShapeHelpers RDKitFingerprints RDKitMolAlign RDKitMolTransforms RDKitChemTransforms RDKitSmilesParse RDKitFilterCatalog RDKitCatalogs RDKitSubgraphs RDKitRDGeneral RDKitDataStructs RDKitGenericGroups boost_thread boost_serialization gemmi_cpp privateer freetype slicendice_cpp m z idbfs.js) target_include_directories(moorhen PRIVATE ${coot_src} ${coot_src}/ccp4mg-utils ${coot_src}/src ../checkout/boost_1_80_0 ../checkout/clipper/ ../checkout/mmdb2 ../checkout/mmdb2/mmdb2 ../checkout/ssm ../checkout/libccp4/ccp4 ../fftw ../rfftw ../include ../checkout/gemmi/include ../checkout/privateer-wasm/src/privateer/cpp ../checkout/privateer-wasm/src/privateer/cpp/pybind11 ../checkout/privateer-wasm/src/privateer/cpp/third-party/simdjson ../checkout/slicendice_cpp/prog/ ../checkout/rdkit-Release_2023_09_1/External/Eigen/eigen/ ) From 6bb6607e729110a796f0e0d866c8acd9d12e1dba Mon Sep 17 00:00:00 2001 From: stuartjamesmcnicholas <39795550+stuartjamesmcnicholas@users.noreply.github.com> Date: Tue, 19 Mar 2024 15:28:43 +0000 Subject: [PATCH 04/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e74a5f075..c559fa1d9 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Binaries are available on the releases page. Please read the instructions there `source ./emsdk_env.sh` 3. Get the sources: -`git clone https://github.com/moorhen-coot/Moorhen.git` +`git clone -b 64-bit https://github.com/moorhen-coot/Moorhen.git` `cd Moorhen` `./get_sources` From f1da77d644fc1f9888ec589771732c3379a431df Mon Sep 17 00:00:00 2001 From: stuartjamesmcnicholas <39795550+stuartjamesmcnicholas@users.noreply.github.com> Date: Tue, 19 Mar 2024 15:30:22 +0000 Subject: [PATCH 05/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c559fa1d9..a3b49f861 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Binaries are available on the releases page. Please read the instructions there `source ./emsdk_env.sh` 3. Get the sources: -`git clone -b 64-bit https://github.com/moorhen-coot/Moorhen.git` +`git clone -b 64-bit git@github.com:stuartjamesmcnicholas/StuartMoorhenFork.git` `cd Moorhen` `./get_sources` From d8d7e07a6003507fc6bd03999f1190ffce31883e Mon Sep 17 00:00:00 2001 From: Stuart McNicholas Date: Tue, 19 Mar 2024 16:00:28 +0000 Subject: [PATCH 06/19] Once again try to get 64-bit version to compile out-of-the-box. --- initial_build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/initial_build.sh b/initial_build.sh index 5d7e00e8b..afc09f909 100755 --- a/initial_build.sh +++ b/initial_build.sh @@ -37,7 +37,7 @@ cd ${BUILD_DIR} #boost with cmake mkdir -p ${BUILD_DIR}/boost cd ${BUILD_DIR}/boost -emcmake cmake -DCMAKE_C_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/boost -DBOOST_EXCLUDE_LIBRARIES="context;fiber;fiber_numa;asio;log;coroutine;cobalt;nowide" +emcmake cmake -DCMAKE_C_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/boost-1.83.0 -DBOOST_EXCLUDE_LIBRARIES="context;fiber;fiber_numa;asio;log;coroutine;cobalt;nowide" emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} From 7465f35d773390674d0693b866ffc7755f51b6b9 Mon Sep 17 00:00:00 2001 From: Stuart McNicholas Date: Wed, 20 Mar 2024 12:34:26 +0000 Subject: [PATCH 07/19] 64-bit branch now supports building 32 and 64 bit versions; rdkit build fix. --- initial_build.sh | 43 +++++++++++++++++++++++++++++++++++------ wasm_src/CMakeLists.txt | 4 ++++ 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/initial_build.sh b/initial_build.sh index afc09f909..61bd4fe16 100755 --- a/initial_build.sh +++ b/initial_build.sh @@ -24,20 +24,52 @@ echo "Sources are in ${SOURCE_DIR}" echo "Building in ${BUILD_DIR}" echo "Installing in ${INSTALL_DIR}" +MEMORY64=0 + +optspec=":-" +while getopts ':-:' OPT; do + case $OPT in + -) #long option + case $OPTARG in + 64bit) MEMORY64=1;; + *) echo unknown long option: $OPTARG;; + esac;; + *) echo unknown short option: $OPTARG;; + esac +done + +if test x"${MEMORY64}" = x"1"; then + echo "#######################################################" + echo "#######################################################" + echo "Building ** 64-bit ** (large memory) version of Moorhen" + echo "#######################################################" + echo "#######################################################" + echo + echo +else + echo "########################################" + echo "########################################" + echo "Building ** 32-bit ** version of Moorhen" + echo "########################################" + echo "########################################" + echo + echo +fi + mkdir -p ${INSTALL_DIR} #gsl mkdir -p ${BUILD_DIR}/gsl_build cd ${BUILD_DIR}/gsl_build emconfigure ${SOURCE_DIR}/gsl-2.7.1/configure --prefix=${INSTALL_DIR} -emmake make LDFLAGS=-all-static -j ${NUMPROCS} CXXFLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=1" CFLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=1" +emmake make LDFLAGS=-all-static -j ${NUMPROCS} CXXFLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=${MEMORY64}" CFLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=${MEMORY64}" emmake make install cd ${BUILD_DIR} #boost with cmake mkdir -p ${BUILD_DIR}/boost cd ${BUILD_DIR}/boost -emcmake cmake -DCMAKE_C_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/boost-1.83.0 -DBOOST_EXCLUDE_LIBRARIES="context;fiber;fiber_numa;asio;log;coroutine;cobalt;nowide" +emcmake cmake -DCMAKE_C_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/boost-1.83.0 -DBOOST_EXCLUDE_LIBRARIES="context;fiber;fiber_numa;asio;log;coroutine;cobalt;nowide" emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} @@ -46,7 +78,7 @@ cd ${BUILD_DIR} BOOST_CMAKE_STUFF=`for i in ${INSTALL_DIR}/lib/cmake/boost*; do j=${i%-1.83.0}; k=${j#/Users/stuart/Moorhen-64/install/lib/cmake/boost_}; echo -Dboost_${k}_DIR=$i; done` mkdir -p ${BUILD_DIR}/rdkit_build cd ${BUILD_DIR}/rdkit_build -emcmake cmake -DBoost_DIR=${INSTALL_DIR}/lib/cmake/Boost-1.83.0 ${BOOST_CMAKE_STUFF} -DRDK_BUILD_PYTHON_WRAPPERS=OFF -DRDK_INSTALL_STATIC_LIBS=ON -DRDK_INSTALL_INTREE=OFF -DRDK_BUILD_SLN_SUPPORT=OFF -DRDK_TEST_MMFF_COMPLIANCE=OFF -DRDK_BUILD_CPP_TESTS=OFF -DRDK_USE_BOOST_SERIALIZATION=ON -DRDK_BUILD_THREADSAFE_SSS=OFF -DBoost_INCLUDE_DIR=${INSTALL_DIR}/include -DBoost_USE_STATIC_LIBS=ON -DBoost_USE_STATIC_RUNTIME=ON -DBoost_DEBUG=TRUE -DCMAKE_CXX_FLAGS="-s USE_PTHREADS=1 -sMEMORY64=1 -pthread -Wno-enum-constexpr-conversion -D_HAS_AUTO_PTR_ETC=0" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/rdkit -DRDK_OPTIMIZE_POPCNT=OFF -DRDK_INSTALL_COMIC_FONTS=OFF -D CMAKE_C_FLAGS="-sMEMORY64=1 -pthread" -D CMAKE_CXX_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_MODULE_PATH=${INSTALL_DIR}/lib/cmake +emcmake cmake -DBoost_DIR=${INSTALL_DIR}/lib/cmake/Boost-1.83.0 ${BOOST_CMAKE_STUFF} -DRDK_BUILD_PYTHON_WRAPPERS=OFF -DRDK_INSTALL_STATIC_LIBS=ON -DRDK_INSTALL_INTREE=OFF -DRDK_BUILD_SLN_SUPPORT=OFF -DRDK_TEST_MMFF_COMPLIANCE=OFF -DRDK_BUILD_CPP_TESTS=OFF -DRDK_USE_BOOST_SERIALIZATION=ON -DRDK_BUILD_THREADSAFE_SSS=OFF -DBoost_INCLUDE_DIR=${INSTALL_DIR}/include -DBoost_USE_STATIC_LIBS=ON -DBoost_USE_STATIC_RUNTIME=ON -DBoost_DEBUG=TRUE -DCMAKE_CXX_FLAGS="-s USE_PTHREADS=1 -sMEMORY64=${MEMORY64} -pthread -Wno-enum-constexpr-conversion -D_HAS_AUTO_PTR_ETC=0" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/rdkit -DRDK_OPTIMIZE_POPCNT=OFF -DRDK_INSTALL_COMIC_FONTS=OFF -D CMAKE_C_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -D CMAKE_CXX_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_MODULE_PATH=${INSTALL_DIR}/lib/cmake emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} @@ -54,8 +86,7 @@ cd ${BUILD_DIR} #gemmi mkdir -p ${BUILD_DIR}/gemmi_build cd ${BUILD_DIR}/gemmi_build -# -DMEMORY64=1 assumnes small patch to gemmi - need to know correct define created by 64 bit emscripten. //FIXME !!!!!!!!!!! -emcmake cmake -DCMAKE_EXE_LINKER_FLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=1" -DCMAKE_C_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=1 -pthread -DMEMORY64=1" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/gemmi +emcmake cmake -DCMAKE_EXE_LINKER_FLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=${MEMORY64}" -DCMAKE_C_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/gemmi emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} @@ -63,7 +94,7 @@ cd ${BUILD_DIR} #Moorhen mkdir -p ${BUILD_DIR}/moorhen_build cd ${BUILD_DIR}/moorhen_build -emcmake cmake -DCMAKE_EXE_LINKER_FLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=1" -DCMAKE_C_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=1 -pthread" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR} +emcmake cmake -DMEMORY64=${MEMORY64} -DCMAKE_EXE_LINKER_FLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=${MEMORY64}" -DCMAKE_C_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR} emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} diff --git a/wasm_src/CMakeLists.txt b/wasm_src/CMakeLists.txt index 99335e9bb..666b8ff82 100644 --- a/wasm_src/CMakeLists.txt +++ b/wasm_src/CMakeLists.txt @@ -518,7 +518,11 @@ FILE(COPY ${CMAKE_INSTALL_PREFIX}/share/RDKit/Data/BaseFeatures.fdef DESTINATION #-sALLOW_MEMORY_GROWTH=1 -sINITIAL_MEMORY=512MB -sMAXIMUM_MEMORY=4092MB -sTOTAL_MEMORY=4092MB add_executable(moorhen moorhen-wrappers.cc gemmi-wrappers.cc smilestopdb.cc) +if(${MEMORY64} MATCHES "1") target_link_options(moorhen PRIVATE -sASSERTIONS=2 -fexceptions -pthread -sPTHREAD_POOL_SIZE=32 -sPTHREAD_POOL_SIZE_STRICT=32 -sUSE_PTHREADS=1 -sALLOW_MEMORY_GROWTH=1 -sINITIAL_MEMORY=4096MB -sMAXIMUM_MEMORY=8192MB --bind -sFORCE_FILESYSTEM=1 -sMODULARIZE=1 -sEXPORT_NAME=createRSRModule -sEXPORTED_RUNTIME_METHODS=['FS','readFile'] --preload-file data --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/coot_env_web.js) +else() +target_link_options(moorhen PRIVATE -sASSERTIONS=2 -fexceptions -pthread -sPTHREAD_POOL_SIZE=32 -sPTHREAD_POOL_SIZE_STRICT=32 -sUSE_PTHREADS=1 -sALLOW_MEMORY_GROWTH=1 --bind -sFORCE_FILESYSTEM=1 -sMODULARIZE=1 -sEXPORT_NAME=createRSRModule -sEXPORTED_RUNTIME_METHODS=['FS','readFile'] --preload-file data --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/coot_env_web.js) +endif() target_link_directories(moorhen PUBLIC ../ssm ../mmdb2 ../clipper/cif ../clipper/mmdb ../clipper/core ../clipper/contrib ../clipper/ccp4 ../clipper/gemmi ../fftw ../rfftw ../ccp4 ../lib ../install/lib ../privateer) target_link_libraries(moorhen ssm mmdb2 clipper-minimol clipper-phs clipper-mmdb clipper-cif clipper-core clipper-contrib clipper-ccp4 clipper-gemmi fftw rfftw ccp4 coot gsl gslcblas RDKitMolDraw2D RDKitForceFieldHelpers RDKitDescriptors RDKitForceField RDKitSubstructMatch RDKitOptimizer RDKitDistGeomHelpers RDKitDistGeometry RDKitChemReactions RDKitAlignment RDKitEigenSolvers RDKitDepictor RDKitcoordgen RDKitMolChemicalFeatures RDKitPartialCharges RDKitFileParsers RDKitRDGeometryLib RDKitGraphMol RDKitShapeHelpers RDKitFingerprints RDKitMolAlign RDKitMolTransforms RDKitChemTransforms RDKitSmilesParse RDKitFilterCatalog RDKitCatalogs RDKitSubgraphs RDKitRDGeneral RDKitDataStructs RDKitGenericGroups boost_thread boost_serialization gemmi_cpp privateer freetype slicendice_cpp m z idbfs.js) target_include_directories(moorhen PRIVATE ${coot_src} ${coot_src}/ccp4mg-utils ${coot_src}/src ../checkout/boost_1_80_0 ../checkout/clipper/ ../checkout/mmdb2 ../checkout/mmdb2/mmdb2 ../checkout/ssm ../checkout/libccp4/ccp4 ../fftw ../rfftw ../include ../checkout/gemmi/include ../checkout/privateer-wasm/src/privateer/cpp ../checkout/privateer-wasm/src/privateer/cpp/pybind11 ../checkout/privateer-wasm/src/privateer/cpp/third-party/simdjson ../checkout/slicendice_cpp/prog/ ../checkout/rdkit-Release_2023_09_1/External/Eigen/eigen/ ) From 49758d1f7fcda7e7e01e0b3365c21213315e5fba Mon Sep 17 00:00:00 2001 From: stuartjamesmcnicholas <39795550+stuartjamesmcnicholas@users.noreply.github.com> Date: Wed, 20 Mar 2024 13:15:54 +0000 Subject: [PATCH 08/19] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index a3b49f861..d6bbff300 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,11 @@ Binaries are available on the releases page. Please read the instructions there
After first checkout you should run the following script to build: `./initial_build.sh` This should build all dependencies and then `Moorhen`. + +It is also possible to build a 64-bit version of Moorhen which (currently) can address up to 8GB memory: +`./initial_build.sh --64bit` +Note that you need a 64-bit WASM capable web browser to use this. Most browsers are not 64-bit capable by default. Some have +64-bit capability available as an option or in development versions. 6. To run the Moorhen molecular graphics application: `cd baby-gru` From 4c4c9670b68b448327e02768301c2c6ff60aded4 Mon Sep 17 00:00:00 2001 From: stuartjamesmcnicholas <39795550+stuartjamesmcnicholas@users.noreply.github.com> Date: Wed, 20 Mar 2024 13:16:20 +0000 Subject: [PATCH 09/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d6bbff300..53b4ac1de 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ Binaries are available on the releases page. Please read the instructions there This should build all dependencies and then `Moorhen`. It is also possible to build a 64-bit version of Moorhen which (currently) can address up to 8GB memory: -`./initial_build.sh --64bit` +`./initial_build.sh --64bit` Note that you need a 64-bit WASM capable web browser to use this. Most browsers are not 64-bit capable by default. Some have 64-bit capability available as an option or in development versions. From 8e10709c58b4ea6858463d28b8c798af5ea9e18c Mon Sep 17 00:00:00 2001 From: stuartjamesmcnicholas <39795550+stuartjamesmcnicholas@users.noreply.github.com> Date: Wed, 20 Mar 2024 13:17:17 +0000 Subject: [PATCH 10/19] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 53b4ac1de..0c16aa65b 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,6 @@ Binaries are available on the releases page. Please read the instructions there
After first checkout you should run the following script to build: `./initial_build.sh` This should build all dependencies and then `Moorhen`. - It is also possible to build a 64-bit version of Moorhen which (currently) can address up to 8GB memory: `./initial_build.sh --64bit` Note that you need a 64-bit WASM capable web browser to use this. Most browsers are not 64-bit capable by default. Some have From 9b7f43c2e30380bff0b851993986c8ec19572825 Mon Sep 17 00:00:00 2001 From: stuartjamesmcnicholas <39795550+stuartjamesmcnicholas@users.noreply.github.com> Date: Wed, 20 Mar 2024 13:19:41 +0000 Subject: [PATCH 11/19] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0c16aa65b..55aa8171f 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,8 @@ Binaries are available on the releases page. Please read the instructions there
After first checkout you should run the following script to build: `./initial_build.sh` This should build all dependencies and then `Moorhen`. +\ +\ It is also possible to build a 64-bit version of Moorhen which (currently) can address up to 8GB memory: `./initial_build.sh --64bit` Note that you need a 64-bit WASM capable web browser to use this. Most browsers are not 64-bit capable by default. Some have From c6ce26b9ad5310d8263773b8e7f193d849d71e29 Mon Sep 17 00:00:00 2001 From: stuartjamesmcnicholas <39795550+stuartjamesmcnicholas@users.noreply.github.com> Date: Wed, 20 Mar 2024 13:23:30 +0000 Subject: [PATCH 12/19] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 55aa8171f..7cc8aa864 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,8 @@ This should build all dependencies and then `Moorhen`. It is also possible to build a 64-bit version of Moorhen which (currently) can address up to 8GB memory: `./initial_build.sh --64bit` Note that you need a 64-bit WASM capable web browser to use this. Most browsers are not 64-bit capable by default. Some have -64-bit capability available as an option or in development versions. +64-bit capability available as an option or in development versions. +See the `MEMORY64` feature at [https://webassembly.org/features/](https://webassembly.org/features/) 6. To run the Moorhen molecular graphics application: `cd baby-gru` From aad4b92e825e3e93b7a836798502bd6aa4eb439a Mon Sep 17 00:00:00 2001 From: Stuart McNicholas Date: Wed, 20 Mar 2024 13:38:54 +0000 Subject: [PATCH 13/19] Hmm. Really fix RDKit build problem. --- initial_build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/initial_build.sh b/initial_build.sh index 61bd4fe16..9cc1d4b47 100755 --- a/initial_build.sh +++ b/initial_build.sh @@ -75,7 +75,7 @@ emmake make install cd ${BUILD_DIR} #RDKit -BOOST_CMAKE_STUFF=`for i in ${INSTALL_DIR}/lib/cmake/boost*; do j=${i%-1.83.0}; k=${j#/Users/stuart/Moorhen-64/install/lib/cmake/boost_}; echo -Dboost_${k}_DIR=$i; done` +BOOST_CMAKE_STUFF=`for i in ${INSTALL_DIR}/lib/cmake/boost*; do j=${i%-1.83.0}; k=${j#${INSTALL_DIR}/lib/cmake/boost_}; echo -Dboost_${k}_DIR=$i; done` mkdir -p ${BUILD_DIR}/rdkit_build cd ${BUILD_DIR}/rdkit_build emcmake cmake -DBoost_DIR=${INSTALL_DIR}/lib/cmake/Boost-1.83.0 ${BOOST_CMAKE_STUFF} -DRDK_BUILD_PYTHON_WRAPPERS=OFF -DRDK_INSTALL_STATIC_LIBS=ON -DRDK_INSTALL_INTREE=OFF -DRDK_BUILD_SLN_SUPPORT=OFF -DRDK_TEST_MMFF_COMPLIANCE=OFF -DRDK_BUILD_CPP_TESTS=OFF -DRDK_USE_BOOST_SERIALIZATION=ON -DRDK_BUILD_THREADSAFE_SSS=OFF -DBoost_INCLUDE_DIR=${INSTALL_DIR}/include -DBoost_USE_STATIC_LIBS=ON -DBoost_USE_STATIC_RUNTIME=ON -DBoost_DEBUG=TRUE -DCMAKE_CXX_FLAGS="-s USE_PTHREADS=1 -sMEMORY64=${MEMORY64} -pthread -Wno-enum-constexpr-conversion -D_HAS_AUTO_PTR_ETC=0" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/rdkit -DRDK_OPTIMIZE_POPCNT=OFF -DRDK_INSTALL_COMIC_FONTS=OFF -D CMAKE_C_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -D CMAKE_CXX_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_MODULE_PATH=${INSTALL_DIR}/lib/cmake From eb7c85008c940bf7c8f1aef250a4a13243234faa Mon Sep 17 00:00:00 2001 From: Stuart McNicholas Date: Thu, 21 Mar 2024 15:01:28 +0000 Subject: [PATCH 14/19] Attempt to add slice_pae to 64-bit (capable) build. --- initial_build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/initial_build.sh b/initial_build.sh index 272075ae3..96ed3a85d 100755 --- a/initial_build.sh +++ b/initial_build.sh @@ -94,7 +94,7 @@ cd ${BUILD_DIR} #jsoncpp mkdir -p ${BUILD_DIR}/jsoncpp_build cd ${BUILD_DIR}/jsoncpp_build -emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/jsoncpp -DJSONCPP_WITH_TESTS=OFF +emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/jsoncpp -DJSONCPP_WITH_TESTS=OFF -DCMAKE_C_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=${MEMORY64} -pthread" emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} @@ -102,7 +102,7 @@ cd ${BUILD_DIR} #igraph mkdir -p ${BUILD_DIR}/igraph_build cd ${BUILD_DIR}/igraph_build -emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/igraph -DCMAKE_CXX_FLAGS="-pthread" -DCMAKE_C_FLAGS="-pthread" +emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/igraph -DCMAKE_C_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=${MEMORY64} -pthread" emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} From 941586122b40acd9c93dab399df47f8ac2bd56ae Mon Sep 17 00:00:00 2001 From: Stuart McNicholas Date: Thu, 21 Mar 2024 16:17:41 +0000 Subject: [PATCH 15/19] Do not compile igraph or pae_igraph in 64-bit mode. --- initial_build.sh | 4 ++++ slicendice_cpp/CMakeLists.txt | 14 ++++++++++++++ wasm_src/CMakeLists.txt | 4 ++++ wasm_src/moorhen-wrappers.cc | 4 ++++ 4 files changed, 26 insertions(+) diff --git a/initial_build.sh b/initial_build.sh index 96ed3a85d..056a46fd8 100755 --- a/initial_build.sh +++ b/initial_build.sh @@ -99,6 +99,9 @@ emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} +if test x"${MEMORY64}" = x"1"; then + echo "Cannot currently build igraph library with -sMEMORY64=${MEMORY64} -pthread. Skipping igraph ..." +else #igraph mkdir -p ${BUILD_DIR}/igraph_build cd ${BUILD_DIR}/igraph_build @@ -106,6 +109,7 @@ emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/igrap emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} +fi #Moorhen mkdir -p ${BUILD_DIR}/moorhen_build diff --git a/slicendice_cpp/CMakeLists.txt b/slicendice_cpp/CMakeLists.txt index 359ee8244..b85917927 100644 --- a/slicendice_cpp/CMakeLists.txt +++ b/slicendice_cpp/CMakeLists.txt @@ -1,6 +1,19 @@ project(slicendice) +if(${MEMORY64} MATCHES "1") +add_library(slicendice_cpp STATIC +${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/extmath.cpp +${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/dist_metrics.cpp +${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/hierarchy.cpp +${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/agglomerative.cpp +${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/birch.cpp +${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/kmeans.cpp +${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/kmeans_common.cpp +${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/kmeans_elkan.cpp +${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/kmeans_lloyd.cpp +) +else() add_library(slicendice_cpp STATIC ${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/extmath.cpp ${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/dist_metrics.cpp @@ -13,6 +26,7 @@ ${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/kmeans_elkan.cpp ${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/kmeans_lloyd.cpp ${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/pae_igraph.cpp ) +endif() target_include_directories(slicendice_cpp PRIVATE ${CMAKE_SOURCE_DIR}/checkout/rdkit-Release_2023_09_1/External/Eigen/eigen/) diff --git a/wasm_src/CMakeLists.txt b/wasm_src/CMakeLists.txt index 1f98a6a56..aab2dad33 100644 --- a/wasm_src/CMakeLists.txt +++ b/wasm_src/CMakeLists.txt @@ -524,7 +524,11 @@ else() target_link_options(moorhen PRIVATE -sASSERTIONS=2 -fexceptions -pthread -sPTHREAD_POOL_SIZE=32 -sPTHREAD_POOL_SIZE_STRICT=32 -sUSE_PTHREADS=1 -sALLOW_MEMORY_GROWTH=1 --bind -sFORCE_FILESYSTEM=1 -sMODULARIZE=1 -sEXPORT_NAME=createRSRModule -sEXPORTED_RUNTIME_METHODS=['FS','readFile'] --preload-file data --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/coot_env_web.js) endif() target_link_directories(moorhen PUBLIC ../ssm ../mmdb2 ../clipper/cif ../clipper/mmdb ../clipper/core ../clipper/contrib ../clipper/ccp4 ../clipper/gemmi ../fftw ../rfftw ../ccp4 ../lib ../install/lib ../privateer) +if(${MEMORY64} MATCHES "1") +target_link_libraries(moorhen ssm mmdb2 clipper-minimol clipper-phs clipper-mmdb clipper-cif clipper-core clipper-contrib clipper-ccp4 clipper-gemmi fftw rfftw ccp4 coot gsl gslcblas RDKitMolDraw2D RDKitForceFieldHelpers RDKitDescriptors RDKitForceField RDKitSubstructMatch RDKitOptimizer RDKitDistGeomHelpers RDKitDistGeometry RDKitChemReactions RDKitAlignment RDKitEigenSolvers RDKitDepictor RDKitcoordgen RDKitMolChemicalFeatures RDKitPartialCharges RDKitFileParsers RDKitRDGeometryLib RDKitGraphMol RDKitShapeHelpers RDKitFingerprints RDKitMolAlign RDKitMolTransforms RDKitChemTransforms RDKitSmilesParse RDKitFilterCatalog RDKitCatalogs RDKitSubgraphs RDKitRDGeneral RDKitDataStructs RDKitGenericGroups boost_thread boost_serialization gemmi_cpp privateer freetype slicendice_cpp jsoncpp m z idbfs.js) +else() target_link_libraries(moorhen ssm mmdb2 clipper-minimol clipper-phs clipper-mmdb clipper-cif clipper-core clipper-contrib clipper-ccp4 clipper-gemmi fftw rfftw ccp4 coot gsl gslcblas RDKitMolDraw2D RDKitForceFieldHelpers RDKitDescriptors RDKitForceField RDKitSubstructMatch RDKitOptimizer RDKitDistGeomHelpers RDKitDistGeometry RDKitChemReactions RDKitAlignment RDKitEigenSolvers RDKitDepictor RDKitcoordgen RDKitMolChemicalFeatures RDKitPartialCharges RDKitFileParsers RDKitRDGeometryLib RDKitGraphMol RDKitShapeHelpers RDKitFingerprints RDKitMolAlign RDKitMolTransforms RDKitChemTransforms RDKitSmilesParse RDKitFilterCatalog RDKitCatalogs RDKitSubgraphs RDKitRDGeneral RDKitDataStructs RDKitGenericGroups boost_thread boost_serialization gemmi_cpp privateer freetype slicendice_cpp jsoncpp igraph m z idbfs.js) +endif() target_include_directories(moorhen PRIVATE ${coot_src} ${coot_src}/ccp4mg-utils ${coot_src}/src ../checkout/boost_1_80_0 ../checkout/clipper/ ../checkout/mmdb2 ../checkout/mmdb2/mmdb2 ../checkout/ssm ../checkout/libccp4/ccp4 ../fftw ../rfftw ../include ../checkout/gemmi/include ../checkout/privateer-wasm/src/privateer/cpp ../checkout/privateer-wasm/src/privateer/cpp/pybind11 ../checkout/privateer-wasm/src/privateer/cpp/third-party/simdjson ../checkout/slicendice_cpp/prog/ ../checkout/rdkit-Release_2023_09_1/External/Eigen/eigen/ ) target_compile_options(moorhen PUBLIC -DGEMMI_WRITE_IMPLEMENTATION -Wno-deprecated-builtins -Wno-deprecated-declarations -fexceptions -sUSE_PTHREADS=1 -pthread -DFFTW_ENABLE_FLOAT -D_CCP4_WEB_EXAMPLE_) diff --git a/wasm_src/moorhen-wrappers.cc b/wasm_src/moorhen-wrappers.cc index fcedd9dae..f820ec04e 100644 --- a/wasm_src/moorhen-wrappers.cc +++ b/wasm_src/moorhen-wrappers.cc @@ -26,7 +26,9 @@ #include "kmeans.h" #include "agglomerative.h" #include "birch.h" +#if !((__POINTER_WIDTH__==64) && __EMSCRIPTEN__) #include "pae_igraph.h" +#endif #include "Eigen/Dense" #include @@ -254,10 +256,12 @@ class molecules_container_js : public molecules_container_t { Birch birch(nclusters); birch.fit(atomic_matrix); labels = birch.labels_; +#if !((__POINTER_WIDTH__==64) && __EMSCRIPTEN__) } else if (clustering_method == "pae") { PAE pae(nclusters, input_pae); pae.fit(atomic_matrix); labels = pae.labels_; +#endif } else { std::cout << "Clustering method: " << clustering_method << " not yet implemented." << std::endl; } From 02fd4d64782e9202eba78c1dec5cc81ffc528693 Mon Sep 17 00:00:00 2001 From: Stuart McNicholas Date: Thu, 21 Mar 2024 17:11:35 +0000 Subject: [PATCH 16/19] Ug. Compiling igraph with -sMEMORY64=0 changes the integer type to 64 bit. This is not expected. So not passing this flag. This is kinda moot as igraph won't compile with actual 64-bit emscripten. --- initial_build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/initial_build.sh b/initial_build.sh index 056a46fd8..dcb73f15d 100755 --- a/initial_build.sh +++ b/initial_build.sh @@ -105,7 +105,7 @@ else #igraph mkdir -p ${BUILD_DIR}/igraph_build cd ${BUILD_DIR}/igraph_build -emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/igraph -DCMAKE_C_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=${MEMORY64} -pthread" +emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/igraph -DCMAKE_C_FLAGS="-pthread" -DCMAKE_CXX_FLAGS="-pthread" emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} From 117dbdd8fbda7599707ec9ceb9a9885ff0de9858 Mon Sep 17 00:00:00 2001 From: Stuart McNicholas Date: Fri, 22 Mar 2024 10:31:18 +0000 Subject: [PATCH 17/19] Do not use -sMEMORY64=0 to mean 32 bit. This does build 32 bit, but emscripten's CMake config uses it to set 64-bit integer and voidp which causes a mess. --- initial_build.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/initial_build.sh b/initial_build.sh index dcb73f15d..734963f87 100755 --- a/initial_build.sh +++ b/initial_build.sh @@ -46,6 +46,7 @@ if test x"${MEMORY64}" = x"1"; then echo "#######################################################" echo echo + MOORHEN_CMAKE_FLAGS="-sMEMORY64=1 -pthread" else echo "########################################" echo "########################################" @@ -54,6 +55,7 @@ else echo "########################################" echo echo + MOORHEN_CMAKE_FLAGS="-pthread" fi mkdir -p ${INSTALL_DIR} @@ -62,14 +64,14 @@ mkdir -p ${INSTALL_DIR} mkdir -p ${BUILD_DIR}/gsl_build cd ${BUILD_DIR}/gsl_build emconfigure ${SOURCE_DIR}/gsl-2.7.1/configure --prefix=${INSTALL_DIR} -emmake make LDFLAGS=-all-static -j ${NUMPROCS} CXXFLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=${MEMORY64}" CFLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=${MEMORY64}" +emmake make LDFLAGS=-all-static -j ${NUMPROCS} CXXFLAGS="${MOORHEN_CMAKE_FLAGS}" CFLAGS="${MOORHEN_CMAKE_FLAGS}" emmake make install cd ${BUILD_DIR} #boost with cmake mkdir -p ${BUILD_DIR}/boost cd ${BUILD_DIR}/boost -emcmake cmake -DCMAKE_C_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/boost-1.83.0 -DBOOST_EXCLUDE_LIBRARIES="context;fiber;fiber_numa;asio;log;coroutine;cobalt;nowide" +emcmake cmake -DCMAKE_C_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_CXX_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/boost-1.83.0 -DBOOST_EXCLUDE_LIBRARIES="context;fiber;fiber_numa;asio;log;coroutine;cobalt;nowide" emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} @@ -78,7 +80,7 @@ cd ${BUILD_DIR} BOOST_CMAKE_STUFF=`for i in ${INSTALL_DIR}/lib/cmake/boost*; do j=${i%-1.83.0}; k=${j#${INSTALL_DIR}/lib/cmake/boost_}; echo -Dboost_${k}_DIR=$i; done` mkdir -p ${BUILD_DIR}/rdkit_build cd ${BUILD_DIR}/rdkit_build -emcmake cmake -DBoost_DIR=${INSTALL_DIR}/lib/cmake/Boost-1.83.0 ${BOOST_CMAKE_STUFF} -DRDK_BUILD_PYTHON_WRAPPERS=OFF -DRDK_INSTALL_STATIC_LIBS=ON -DRDK_INSTALL_INTREE=OFF -DRDK_BUILD_SLN_SUPPORT=OFF -DRDK_TEST_MMFF_COMPLIANCE=OFF -DRDK_BUILD_CPP_TESTS=OFF -DRDK_USE_BOOST_SERIALIZATION=ON -DRDK_BUILD_THREADSAFE_SSS=OFF -DBoost_INCLUDE_DIR=${INSTALL_DIR}/include -DBoost_USE_STATIC_LIBS=ON -DBoost_USE_STATIC_RUNTIME=ON -DBoost_DEBUG=TRUE -DCMAKE_CXX_FLAGS="-s USE_PTHREADS=1 -sMEMORY64=${MEMORY64} -pthread -Wno-enum-constexpr-conversion -D_HAS_AUTO_PTR_ETC=0" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/rdkit -DRDK_OPTIMIZE_POPCNT=OFF -DRDK_INSTALL_COMIC_FONTS=OFF -D CMAKE_C_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -D CMAKE_CXX_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_MODULE_PATH=${INSTALL_DIR}/lib/cmake +emcmake cmake -DBoost_DIR=${INSTALL_DIR}/lib/cmake/Boost-1.83.0 ${BOOST_CMAKE_STUFF} -DRDK_BUILD_PYTHON_WRAPPERS=OFF -DRDK_INSTALL_STATIC_LIBS=ON -DRDK_INSTALL_INTREE=OFF -DRDK_BUILD_SLN_SUPPORT=OFF -DRDK_TEST_MMFF_COMPLIANCE=OFF -DRDK_BUILD_CPP_TESTS=OFF -DRDK_USE_BOOST_SERIALIZATION=ON -DRDK_BUILD_THREADSAFE_SSS=OFF -DBoost_INCLUDE_DIR=${INSTALL_DIR}/include -DBoost_USE_STATIC_LIBS=ON -DBoost_USE_STATIC_RUNTIME=ON -DBoost_DEBUG=TRUE -DCMAKE_CXX_FLAGS="${MOORHEN_CMAKE_FLAGS} -Wno-enum-constexpr-conversion -D_HAS_AUTO_PTR_ETC=0" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/rdkit -DRDK_OPTIMIZE_POPCNT=OFF -DRDK_INSTALL_COMIC_FONTS=OFF -DCMAKE_C_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_MODULE_PATH=${INSTALL_DIR}/lib/cmake emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} @@ -86,7 +88,7 @@ cd ${BUILD_DIR} #gemmi mkdir -p ${BUILD_DIR}/gemmi_build cd ${BUILD_DIR}/gemmi_build -emcmake cmake -DCMAKE_EXE_LINKER_FLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=${MEMORY64}" -DCMAKE_C_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/gemmi +emcmake cmake -DCMAKE_EXE_LINKER_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_C_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_CXX_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/gemmi emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} @@ -94,18 +96,18 @@ cd ${BUILD_DIR} #jsoncpp mkdir -p ${BUILD_DIR}/jsoncpp_build cd ${BUILD_DIR}/jsoncpp_build -emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/jsoncpp -DJSONCPP_WITH_TESTS=OFF -DCMAKE_C_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=${MEMORY64} -pthread" +emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/jsoncpp -DJSONCPP_WITH_TESTS=OFF -DCMAKE_C_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_CXX_FLAGS="${MOORHEN_CMAKE_FLAGS}" emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} if test x"${MEMORY64}" = x"1"; then - echo "Cannot currently build igraph library with -sMEMORY64=${MEMORY64} -pthread. Skipping igraph ..." + echo "Cannot currently build igraph library with -sMEMORY64=1 -pthread. Skipping igraph ..." else #igraph mkdir -p ${BUILD_DIR}/igraph_build cd ${BUILD_DIR}/igraph_build -emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/igraph -DCMAKE_C_FLAGS="-pthread" -DCMAKE_CXX_FLAGS="-pthread" +emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/igraph -DCMAKE_C_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_CXX_FLAGS="${MOORHEN_CMAKE_FLAGS}" emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} @@ -114,7 +116,7 @@ fi #Moorhen mkdir -p ${BUILD_DIR}/moorhen_build cd ${BUILD_DIR}/moorhen_build -emcmake cmake -DMEMORY64=${MEMORY64} -DCMAKE_EXE_LINKER_FLAGS="-s USE_PTHREADS=1 -pthread -sMEMORY64=${MEMORY64}" -DCMAKE_C_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_CXX_FLAGS="-sMEMORY64=${MEMORY64} -pthread" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR} +emcmake cmake -DMEMORY64=${MEMORY64} -DCMAKE_EXE_LINKER_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_C_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_CXX_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR} emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} @@ -123,7 +125,5 @@ cd ${SOURCE_DIR}/baby-gru/ npm install cd ${BUILD_DIR} -#*This link must be removed before building electron app!* -#Links cause confusion in Linux/Mac, and are followed on Windows making huge packages that take forever to build. cd ${SOURCE_DIR}/baby-gru/public/baby-gru ln -s ${SOURCE_DIR}/checkout/monomers From d412c0d250622fc0ca4df760ba5dcfc41e61c500 Mon Sep 17 00:00:00 2001 From: Stuart McNicholas Date: Fri, 22 Mar 2024 12:18:37 +0000 Subject: [PATCH 18/19] Build igraph and slice pae in 64-bit mode. --- include/igraph_f2c_arith_64.h | 9 +++++++++ initial_build.sh | 14 ++++++++------ slicendice_cpp/CMakeLists.txt | 15 --------------- wasm_src/CMakeLists.txt | 4 ---- wasm_src/moorhen-wrappers.cc | 4 ---- 5 files changed, 17 insertions(+), 29 deletions(-) create mode 100644 include/igraph_f2c_arith_64.h diff --git a/include/igraph_f2c_arith_64.h b/include/igraph_f2c_arith_64.h new file mode 100644 index 000000000..a199f927e --- /dev/null +++ b/include/igraph_f2c_arith_64.h @@ -0,0 +1,9 @@ +#define IEEE_8087 +#define Arith_Kind_ASL 1 +#define Long int +#define Intcast (int)(long) +#define Double_Align +#define X64_bit_pointers +#define NANCHECK +#define QNaN0 0x0 +#define QNaN1 0xfff80000 diff --git a/initial_build.sh b/initial_build.sh index 734963f87..619e6639b 100755 --- a/initial_build.sh +++ b/initial_build.sh @@ -101,17 +101,19 @@ emmake make -j ${NUMPROCS} emmake make install cd ${BUILD_DIR} -if test x"${MEMORY64}" = x"1"; then - echo "Cannot currently build igraph library with -sMEMORY64=1 -pthread. Skipping igraph ..." -else #igraph mkdir -p ${BUILD_DIR}/igraph_build cd ${BUILD_DIR}/igraph_build -emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/igraph -DCMAKE_C_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_CXX_FLAGS="${MOORHEN_CMAKE_FLAGS}" -emmake make -j ${NUMPROCS} +if test x"${MEMORY64}" = x"1"; then +#There is some hoop-jumping to make igraph compile with "-sMEMORY64=1 -pthread" + emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/igraph -DCMAKE_C_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_CXX_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DIEEE754_DOUBLE_ENDIANNESS_MATCHES=ON -DF2C_EXTERNAL_ARITH_HEADER=${SOURCE_DIR}/include/igraph_f2c_arith_64.h + emmake make -j ${NUMPROCS} C_FLAGS="${MOORHEN_CMAKE_FLAGS} -Wno-error=experimental" CXX_FLAGS="${MOORHEN_CMAKE_FLAGS} -Wno-error=experimental" +else + emcmake cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ${SOURCE_DIR}/checkout/igraph -DCMAKE_C_FLAGS="${MOORHEN_CMAKE_FLAGS}" -DCMAKE_CXX_FLAGS="${MOORHEN_CMAKE_FLAGS}" + emmake make -j ${NUMPROCS} +fi emmake make install cd ${BUILD_DIR} -fi #Moorhen mkdir -p ${BUILD_DIR}/moorhen_build diff --git a/slicendice_cpp/CMakeLists.txt b/slicendice_cpp/CMakeLists.txt index b85917927..ee47c3ab9 100644 --- a/slicendice_cpp/CMakeLists.txt +++ b/slicendice_cpp/CMakeLists.txt @@ -1,19 +1,5 @@ project(slicendice) - -if(${MEMORY64} MATCHES "1") -add_library(slicendice_cpp STATIC -${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/extmath.cpp -${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/dist_metrics.cpp -${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/hierarchy.cpp -${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/agglomerative.cpp -${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/birch.cpp -${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/kmeans.cpp -${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/kmeans_common.cpp -${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/kmeans_elkan.cpp -${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/kmeans_lloyd.cpp -) -else() add_library(slicendice_cpp STATIC ${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/extmath.cpp ${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/dist_metrics.cpp @@ -26,7 +12,6 @@ ${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/kmeans_elkan.cpp ${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/kmeans_lloyd.cpp ${CMAKE_SOURCE_DIR}/checkout/slicendice_cpp/prog/pae_igraph.cpp ) -endif() target_include_directories(slicendice_cpp PRIVATE ${CMAKE_SOURCE_DIR}/checkout/rdkit-Release_2023_09_1/External/Eigen/eigen/) diff --git a/wasm_src/CMakeLists.txt b/wasm_src/CMakeLists.txt index aab2dad33..1f98a6a56 100644 --- a/wasm_src/CMakeLists.txt +++ b/wasm_src/CMakeLists.txt @@ -524,11 +524,7 @@ else() target_link_options(moorhen PRIVATE -sASSERTIONS=2 -fexceptions -pthread -sPTHREAD_POOL_SIZE=32 -sPTHREAD_POOL_SIZE_STRICT=32 -sUSE_PTHREADS=1 -sALLOW_MEMORY_GROWTH=1 --bind -sFORCE_FILESYSTEM=1 -sMODULARIZE=1 -sEXPORT_NAME=createRSRModule -sEXPORTED_RUNTIME_METHODS=['FS','readFile'] --preload-file data --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/coot_env_web.js) endif() target_link_directories(moorhen PUBLIC ../ssm ../mmdb2 ../clipper/cif ../clipper/mmdb ../clipper/core ../clipper/contrib ../clipper/ccp4 ../clipper/gemmi ../fftw ../rfftw ../ccp4 ../lib ../install/lib ../privateer) -if(${MEMORY64} MATCHES "1") -target_link_libraries(moorhen ssm mmdb2 clipper-minimol clipper-phs clipper-mmdb clipper-cif clipper-core clipper-contrib clipper-ccp4 clipper-gemmi fftw rfftw ccp4 coot gsl gslcblas RDKitMolDraw2D RDKitForceFieldHelpers RDKitDescriptors RDKitForceField RDKitSubstructMatch RDKitOptimizer RDKitDistGeomHelpers RDKitDistGeometry RDKitChemReactions RDKitAlignment RDKitEigenSolvers RDKitDepictor RDKitcoordgen RDKitMolChemicalFeatures RDKitPartialCharges RDKitFileParsers RDKitRDGeometryLib RDKitGraphMol RDKitShapeHelpers RDKitFingerprints RDKitMolAlign RDKitMolTransforms RDKitChemTransforms RDKitSmilesParse RDKitFilterCatalog RDKitCatalogs RDKitSubgraphs RDKitRDGeneral RDKitDataStructs RDKitGenericGroups boost_thread boost_serialization gemmi_cpp privateer freetype slicendice_cpp jsoncpp m z idbfs.js) -else() target_link_libraries(moorhen ssm mmdb2 clipper-minimol clipper-phs clipper-mmdb clipper-cif clipper-core clipper-contrib clipper-ccp4 clipper-gemmi fftw rfftw ccp4 coot gsl gslcblas RDKitMolDraw2D RDKitForceFieldHelpers RDKitDescriptors RDKitForceField RDKitSubstructMatch RDKitOptimizer RDKitDistGeomHelpers RDKitDistGeometry RDKitChemReactions RDKitAlignment RDKitEigenSolvers RDKitDepictor RDKitcoordgen RDKitMolChemicalFeatures RDKitPartialCharges RDKitFileParsers RDKitRDGeometryLib RDKitGraphMol RDKitShapeHelpers RDKitFingerprints RDKitMolAlign RDKitMolTransforms RDKitChemTransforms RDKitSmilesParse RDKitFilterCatalog RDKitCatalogs RDKitSubgraphs RDKitRDGeneral RDKitDataStructs RDKitGenericGroups boost_thread boost_serialization gemmi_cpp privateer freetype slicendice_cpp jsoncpp igraph m z idbfs.js) -endif() target_include_directories(moorhen PRIVATE ${coot_src} ${coot_src}/ccp4mg-utils ${coot_src}/src ../checkout/boost_1_80_0 ../checkout/clipper/ ../checkout/mmdb2 ../checkout/mmdb2/mmdb2 ../checkout/ssm ../checkout/libccp4/ccp4 ../fftw ../rfftw ../include ../checkout/gemmi/include ../checkout/privateer-wasm/src/privateer/cpp ../checkout/privateer-wasm/src/privateer/cpp/pybind11 ../checkout/privateer-wasm/src/privateer/cpp/third-party/simdjson ../checkout/slicendice_cpp/prog/ ../checkout/rdkit-Release_2023_09_1/External/Eigen/eigen/ ) target_compile_options(moorhen PUBLIC -DGEMMI_WRITE_IMPLEMENTATION -Wno-deprecated-builtins -Wno-deprecated-declarations -fexceptions -sUSE_PTHREADS=1 -pthread -DFFTW_ENABLE_FLOAT -D_CCP4_WEB_EXAMPLE_) diff --git a/wasm_src/moorhen-wrappers.cc b/wasm_src/moorhen-wrappers.cc index da3dcfe90..3b3e51383 100644 --- a/wasm_src/moorhen-wrappers.cc +++ b/wasm_src/moorhen-wrappers.cc @@ -26,9 +26,7 @@ #include "kmeans.h" #include "agglomerative.h" #include "birch.h" -#if !((__POINTER_WIDTH__==64) && __EMSCRIPTEN__) #include "pae_igraph.h" -#endif #include "Eigen/Dense" #include @@ -256,7 +254,6 @@ class molecules_container_js : public molecules_container_t { Birch birch(nclusters); birch.fit(atomic_matrix); labels = birch.labels_; -#if !((__POINTER_WIDTH__==64) && __EMSCRIPTEN__) } else if (clustering_method == "pae") { std::string pae_file_name = generate_rand_str(32); pae_file_name += ".json"; @@ -264,7 +261,6 @@ class molecules_container_js : public molecules_container_t { PAE pae(nclusters, pae_file_name); pae.fit(atomic_matrix); labels = pae.labels_; -#endif } else { std::cout << "Clustering method: " << clustering_method << " not yet implemented." << std::endl; } From 16ae988d882fce199b0810f129c9577e425add6c Mon Sep 17 00:00:00 2001 From: Stuart McNicholas Date: Fri, 22 Mar 2024 14:31:00 +0000 Subject: [PATCH 19/19] Change repo address to main Moorhen repo in order create pull request. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7cc8aa864..bf95eeea9 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Binaries are available on the releases page. Please read the instructions there `source ./emsdk_env.sh` 3. Get the sources: -`git clone -b 64-bit git@github.com:stuartjamesmcnicholas/StuartMoorhenFork.git` +`git clone https://github.com/moorhen-coot/Moorhen.git` `cd Moorhen` `./get_sources`