Build cglm
================================

| **cglm** does not have any external dependencies.

**NOTE:**
If you only need to inline versions, you don't need to build **cglm**, you don't need to link it to your program.
Just import cglm to your project as dependency / external lib by copy-paste then use it as usual

CMake (All platforms):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code-block:: bash
  :linenos:

  $ mkdir build
  $ cd build
  $ cmake .. # [Optional] -DCGLM_SHARED=ON
  $ make
  $ sudo make install # [Optional]

**make** will build cglm to **build** folder.
If you don't want to install **cglm** to your system's folder you can get static and dynamic libs in this folder.

**CMake Options:**

.. code-block:: CMake
  :linenos:

  option(CGLM_SHARED "Shared build" ON)
  option(CGLM_STATIC "Static build" OFF)
  option(CGLM_USE_C99 "" OFF) # C11 
  option(CGLM_USE_TEST "Enable Tests" OFF) # for make check - make test

**Use as header-only library with your CMake project example**
This requires no building or installation of cglm.

.. code-block:: CMake
  :linenos:

  cmake_minimum_required(VERSION 3.8.2)
  
  project(<Your Project Name>)
  
  add_executable(${PROJECT_NAME} src/main.c)
  target_link_libraries(${LIBRARY_NAME} PRIVATE
    cglm_headers)
  
  add_subdirectory(external/cglm/ EXCLUDE_FROM_ALL)

**Use with your CMake project example**

.. code-block:: CMake
  :linenos:

  cmake_minimum_required(VERSION 3.8.2)
  
  project(<Your Project Name>)
  
  add_executable(${PROJECT_NAME} src/main.c)
  target_link_libraries(${LIBRARY_NAME} PRIVATE
    cglm)
  
  add_subdirectory(external/cglm/)

Meson (All platforms):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code-block::
  :linenos:

  $ meson build # [Optional] --default-library=static
  $ cd build
  $ ninja
  $ sudo ninja install # [Optional]

**Meson Options:**

.. code-block:: 
  :linenos:

  c_std=c11
  buildtype=release
  default_library=shared
  enable_tests=false # to run tests: ninja test


**Use with your Meson project**

.. code-block::
  :linenos:

  # Clone cglm or create a cglm.wrap under <source_root>/subprojects
  project('name', 'c')
  
  cglm_dep = dependency('cglm', fallback : 'cglm', 'cglm_dep')
  
  executable('exe', 'src/main.c', dependencies : cglm_dep)


Unix (Autotools):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code-block:: bash
  :linenos:

  $ sh autogen.sh
  $ ./configure
  $ make
  $ make check            # run tests (optional)
  $ [sudo] make install   # install to system (optional)

**make** will build cglm to **.libs** sub folder in project folder.
If you don't want to install **cglm** to your system's folder you can get static and dynamic libs in this folder.

Windows (MSBuild):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Windows related build files, project files are located in `win` folder,
make sure you are inside in cglm/win folder.

Code Analysis are enabled, it may take awhile to build.

.. code-block:: bash
  :linenos:

  $ cd win
  $ .\build.bat

if *msbuild* is not worked (because of multi versions of Visual Studio)
then try to build with *devenv*:

.. code-block:: bash
  :linenos:

  $ devenv cglm.sln /Build Release

Currently tests are not available on Windows.

Documentation (Sphinx):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**cglm** uses sphinx framework for documentation, it allows lot of formats for documentation. To see all options see sphinx build page:

https://www.sphinx-doc.org/en/master/man/sphinx-build.html

Example build:

.. code-block:: bash
  :linenos:

  $ cd cglm/docs
  $ sphinx-build source build
