To obtain the source-code of the latest stable version (or previous releases) of XtalOpt see the download page.
A C++ compiler with C++11 support is necessary to compile the program, e.g., MSVC versions 2015 or later.
Moreover, compiling XtalOpt requires the following dependencies:
(1) git (any version),
(2) cmake (any version)
(3) Qt framework (version 5.2.1 or later of Qt5),
(4) Qwt libraries (version 6.1.3 or later, and compiled with the same version of the installed
Qt),
(5) Eigen library (version 3 or later),
(6) libssh and openssh (this is not required if you disable the ssh; which is enabled by
default).
The MSVC compiler can be downloaded and installed from its website.
Required dependencies can be downloaded and installed from their website or existing package managers. For
instance, Qt can be downloaded from its website, and the Eigen and libssh may be
installed using the vcpkg.
Once the compiler and Qt are available, the Qwt can be
easily built from source. As an example, on our system (with the "MSVC
2017" compiler and Qt 5.12.12 installed), we were able to build Qwt by simply running the
following batch file in "Qt 5.12.12 (MSVC 2017 64-bit)" command prompt in the root of the Qwt source-code. The
Qwt was then installed in its default location "C:\Qwt-6.2.0".
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64 set PATH="C:\Qt\Qt5.12.12\5.12.12\msvc2017_64\bin";%PATH% qmake qwt.pro nmake nmake install
A few comments about installing dependencies:
About Eigen library: In principle the Eigen library does not need to be installed!
One can simply download its source-code, unpack it at the desired location, and point the cmake to
that path.
Dependencies installed using vcpkg: After installing packages with vcpkg, we needed
to:
(1) Appy the user-wide integration for the installed packages,
(2) When running cmake, add the "-DCMAKE_TOOLCHAIN_FILE" with the path to the
vcpkg.cmake (suggested by the package itself), and add the path to "installed" directory in
the vcpkg location to the "-DCMAKE_PREFIX_PATH" flag.
For more information, especially updates on integration details, see the vcpkg website.
Once all required packages are installed, the user should create a "build" directory in the root of the XtalOpt source-code directory. In the "build" directory, then one can configure the build using
cmake .. [-G <generator-name>]
If the dependencies are installed in standard locations or available through environment variables, there is a chance that cmake will find them (or at least some of them!). If the configuration fails, however, you may inspect the output of the cmake command to see what are the missing libraries/packages. You need to redo the build with providing the correct path to required dependencies using the appropriate configuration flags:
cmake .. [-G <generator-name>] [-D<flag1>=<value1> -D<flag2>=<value2> ...]
To our experience, those which are most likely to be a source of trouble (along with their corresponding cmake flags) are as follows:
Package | cmake flag | Value |
Qt5 directory | -DCMAKE_PREFIX_PATH | <path to Qt5 installation>/lib/cmake/Qt5 |
Qwt include directory | -DQWT_INCLUDE_DIR | <path to Qwt installation>/lib/qwt.framework/Headers |
Qwt library | -DQWT_LIBRARY | <path to Qwt installation>/lib/qwt.framework/qwt |
Eigen include directory | -DEIGEN3_INCLUDE_DIR | <path to Eigen installation> OR "the parent folder of the Eigen/ subfolder" |
libssh include directory | -DLIBSSH_INCLUDE_DIRS | <path to libssh installation>/include |
libssh library | -DLIBSSH_LIBRARIES | <path to libssh installation>/lib/<libssh library filename> |
After configuring the build, you can compile the code with
the "make" (or "nmake" in the case of MSVC) command.
Upon successful compilation, there should be a directory named "bin" in the build directory which
contains the xtalopt.exe file. Note that this executable will run successfully only if all required
".dll" files are present in the same "bin" directory. Basically, you can manually find and
copy those libraries there. However, the proper (and easy) way would be to configure the build for
installation before compiling it (see the next section).
Installing the code will create a standalone directory in which the XtalOpt executable and required libraries
are properly collected. In order to configure the code for installation, you should add the
"-DBUILD_INDEPENDENT_PACKAGE=ON" and "-DCMAKE_BUILD_TYPE=Release" configuration flags to the cmake command.
Note that the default installation location is the "C:/Program Files (x86)/XtalOpt/bin" directory.
Writing files to that location requires administrative privileges, i.e., the command prompt must be started
with "Run as Administrator". Alternatively, you can specify another location which does not require such
privileges. To do so, you can add the "-DCMAKE_INSTALL_PREFIX=<desired/path/for/installation>" flag
to the cmake command.
Finally, after compiling the code with the above installation-related cmake flags, you need to run
"make install" (or, "nmake install" for MSVC compiler). If everything goes well, you will
find the XtalOpt executable along with required libraries collected in the "bin/" directory in the
installation location.
The details of the cmake and make/nmake setup would depend on the compiler and the installed
dependencies. With that in mind, we are providing the following batch file just
as an example of a possible setup to build the code on Windows operating system.
In the reference system, the "MSVC 2017 64-bit" compiler, Qt 5.12.12, and Qwt 6.2.0 were installed. Eigen and
libssh dependencies were installed using vcpkg package manager. The following batch file was run
inside the build directory (located in the root of the XtalOpt source-code) in the developer command
prompt, i.e., "x64 Native Tools Command Prompt for VS 2017". At the end, XtalOpt was installed in
"C:\xtalopt_windows" directory.
@echo off REM Written by Patrick Avery REM ***NOTE: This script was used in "x64 Native Tools Command Prompt for VS 2017"*** REM ***NOTE: Run this script inside the build folder in the source directory*** REM ********************************************************* REM **** Set all variables to their correct directories **** REM ********************************************************* set qt5dir=C:\Qt\Qt5.12.12\5.12.12\msvc2017_64 set qwtdir=C:\Qwt-6.2.0 set insdir=C:\xtalopt_windows REM ********************************************************* REM **** Configure the build **** REM ********************************************************* cmake .. -G "NMake Makefiles" ^ -DCMAKE_PREFIX_PATH="%qt5dir%;C:\Develop\vcpkg\installed\arm64-windows" ^ -DQWT_LIBRARY=%qwtdir%\lib\qwt.lib ^ -DQWT_INCLUDE_DIR=%qwtdir%\include ^ -DBUILD_INDEPENDENT_PACKAGE=ON ^ -DCMAKE_BUILD_TYPE=Release ^ -DCMAKE_INSTALL_PREFIX=%insdir% ^ -DCMAKE_TOOLCHAIN_FILE="C:\Develop\vcpkg\scripts\buildsystems\vcpkg.cmake" ^ -DHAVE_EXECINFO_H=OFF REM ********************************************************* REM **** Compile XtalOpt **** REM ********************************************************* nmake REM ********************************************************* REM **** Install XtalOpt **** REM ********************************************************* nmake install
By default, XtalOpt is ssh-enabled to facilitate a remote server access. That's, to let you running XtalOpt on your personal computer while the structure optimizations are performed on a remote server. If you don't need this option and plan to use the code only on your computer, then the ssh feature can be disabled by setting "-DENABLE_SSH=OFF" at the configuration time. In that case, all ssh-related configuration flags are irrelevant and can be removed, and XtalOpt build does not depend on libssh.