mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
66f6bbde6c | ||
|
|
4054d9a190 | ||
|
|
c1112f0063 | ||
|
|
b62e922f32 | ||
|
|
3c53bed709 | ||
|
|
a2b6d71558 | ||
|
|
fdfceb9f5b | ||
|
|
d273daecfe | ||
|
|
92b75a1345 | ||
|
|
640795a771 | ||
|
|
cad265ebcd | ||
|
|
387c33fb4d | ||
|
|
77585de397 | ||
|
|
a9b06e4b35 | ||
|
|
7976ac78f2 | ||
|
|
208f8073ad | ||
|
|
009fb966a6 | ||
|
|
09fd9f86b9 | ||
|
|
2ff4ae0b4c | ||
|
|
aa0a195e98 |
@@ -1,5 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.8.2)
|
||||
project(cglm VERSION 0.7.7 LANGUAGES C)
|
||||
project(cglm VERSION 0.7.8 LANGUAGES C)
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_C_STANDARD_REQUIRED YES)
|
||||
@@ -22,7 +22,7 @@ if(CGLM_USE_C99)
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
add_definitions(-DNDEBUG -D_WINDOWS -D_USRDLL -DCGLM_EXPORTS -DCGLM_DLL)
|
||||
add_definitions(-DNDEBUG -D_WINDOWS -D_USRDLL)
|
||||
add_compile_options(/W3 /Ox /Gy /Oi /TC)
|
||||
|
||||
# Ref: https://skia.googlesource.com/third_party/sdl/+/refs/heads/master/CMakeLists.txt#225
|
||||
@@ -75,6 +75,12 @@ add_library(${PROJECT_NAME}
|
||||
src/affine2d.c
|
||||
)
|
||||
|
||||
if(CGLM_SHARED)
|
||||
add_definitions(-DCGLM_EXPORTS)
|
||||
else()
|
||||
target_compile_definitions(${PROJECT_NAME} PUBLIC -DCGLM_STATIC)
|
||||
endif()
|
||||
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
VERSION ${PROJECT_VERSION}
|
||||
SOVERSION ${PROJECT_VERSION_MAJOR})
|
||||
|
||||
30
README.md
30
README.md
@@ -25,6 +25,7 @@ you have the latest version
|
||||
- **[new option]** by starting v0.4.5, you can disable alignment requirement, check options in docs.
|
||||
- **[major change]** by starting v0.5.0, vec3 functions use **glm_vec3_** namespace, it was **glm_vec_** until v0.5.0
|
||||
- **[major change]** by starting v0.5.1, built-in alignment is removed from **vec3** and **mat3** types
|
||||
- **[major change]** by starting v0.7.3, inline print functions are disabled in release/production mode to eliminate print costs (see options in documentation). Print output also improved. You can disable colors if you need (see documentation)
|
||||
|
||||
#### Note for C++ developers:
|
||||
If you are not aware of the original GLM library yet, you may also want to look at:
|
||||
@@ -183,6 +184,35 @@ add_subdirectory(external/cglm/)
|
||||
# or you can use find_package to configure cglm
|
||||
```
|
||||
|
||||
### Meson (All platforms)
|
||||
|
||||
```bash
|
||||
$ meson build # [Optional] --default-library=static
|
||||
$ cd build
|
||||
$ ninja
|
||||
$ sudo ninja install # [Optional]
|
||||
```
|
||||
|
||||
##### Meson options with Defaults:
|
||||
|
||||
```meson
|
||||
c_std=c11
|
||||
buildtype=release
|
||||
default_library=shared
|
||||
enable_tests=false # to run tests: ninja test
|
||||
```
|
||||
#### Use with your Meson project
|
||||
* Example:
|
||||
```meson
|
||||
# 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)
|
||||
|
||||
```bash
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
#*****************************************************************************
|
||||
|
||||
AC_PREREQ([2.69])
|
||||
AC_INIT([cglm], [0.7.7], [info@recp.me])
|
||||
AC_INIT([cglm], [0.7.8], [info@recp.me])
|
||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects serial-tests])
|
||||
|
||||
# Don't use the default cflags (-O2 -g), we set ours manually in Makefile.am.
|
||||
|
||||
@@ -47,6 +47,41 @@ If you don't want to install **cglm** to your system's folder you can get static
|
||||
|
||||
add_subdirectory(external/cglm/)
|
||||
|
||||
Meson (All platforms):
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code-block:: bash
|
||||
:linenos:
|
||||
|
||||
$ meson build # [Optional] --default-library=static
|
||||
$ cd build
|
||||
$ ninja
|
||||
$ sudo ninja install # [Optional]
|
||||
|
||||
**Meson Options:**
|
||||
|
||||
.. code-block:: CMake
|
||||
:linenos:
|
||||
|
||||
c_std=c11
|
||||
buildtype=release
|
||||
default_library=shared
|
||||
enable_tests=false # to run tests: ninja test
|
||||
|
||||
|
||||
**Use with your CMake project example**
|
||||
|
||||
.. code-block:: CMake
|
||||
: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):
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@@ -62,9 +62,9 @@ author = u'Recep Aslantas'
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = u'0.7.7'
|
||||
version = u'0.7.8'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = u'0.7.7'
|
||||
release = u'0.7.8'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
||||
@@ -18,7 +18,7 @@ versor: 16 byte
|
||||
By starting **v0.4.5** cglm provides an option to disable alignment requirement.
|
||||
To enable this option define **CGLM_ALL_UNALIGNED** macro before all headers.
|
||||
You can define it in Xcode, Visual Studio (or other IDEs) or you can also prefer
|
||||
to define it in build system. If you use pre-compiled verisons then you
|
||||
to define it in build system. If you use pre-compiled versions then you
|
||||
have to compile cglm with **CGLM_ALL_UNALIGNED** macro.
|
||||
|
||||
**VERY VERY IMPORTANT:** If you use cglm in multiple projects and
|
||||
@@ -55,11 +55,20 @@ Print Options
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
1. **CGLM_DEFINE_PRINTS**
|
||||
2. **CGLM_NO_PRINTS_NOOP**
|
||||
2. **CGLM_NO_PRINTS_NOOP** (use CGLM_DEFINE_PRINTS)
|
||||
|
||||
Inline prints are only enabled in DEBUG mode and if **CGLM_DEFINE_PRINTS** is defined.
|
||||
If DEBUG is not enabled then print function bodies will be emptied to eliminate print function calls.
|
||||
You can disable this feature too by defining **CGLM_NO_PRINTS_NOOP** macro top of cglm headers.
|
||||
Inline prints are only enabled in **DEBUG** mode or if **CGLM_DEFINE_PRINTS** is defined.
|
||||
**glmc_** versions will always print too.
|
||||
|
||||
Because **cglm** tried to enable print functions in debug mode and disable them in
|
||||
release/production mode to eliminate printing costs when we do not need them.
|
||||
|
||||
**cglm** checks **DEBUG** or **_DEBUG** macros to test debug mode, if these are not working for you then you can use
|
||||
**CGLM_DEFINE_PRINTS** to force enable, or create a PR to introduce new macro to test against debugging mode.
|
||||
|
||||
If DEBUG mode is not enabled then print functions will be emptied to eliminate print function calls.
|
||||
You can disable this feature too by defining **CGLM_DEFINE_PRINTS** macro top of cglm header
|
||||
or in project/build settings...
|
||||
|
||||
3. **CGLM_PRINT_PRECISION** 5
|
||||
|
||||
@@ -71,3 +80,6 @@ if a number is greater than this value then %g will be used, since this is short
|
||||
|
||||
5. **CGLM_PRINT_COLOR** "\033[36m"
|
||||
6. **CGLM_PRINT_COLOR_RESET** "\033[0m"
|
||||
|
||||
You can disable colorful print output by defining **CGLM_PRINT_COLOR** and **CGLM_PRINT_COLOR_RESET** as empty macro.
|
||||
Because some terminals may not support colors.
|
||||
|
||||
@@ -23,7 +23,9 @@
|
||||
#include <stdbool.h>
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
# ifdef CGLM_DLL
|
||||
# ifdef CGLM_STATIC
|
||||
# define CGLM_EXPORT
|
||||
# elif defined(CGLM_EXPORTS)
|
||||
# define CGLM_EXPORT __declspec(dllexport)
|
||||
# else
|
||||
# define CGLM_EXPORT __declspec(dllimport)
|
||||
|
||||
@@ -15,20 +15,49 @@
|
||||
CGLM_INLINE void glm_versor_print(versor vec, FILE *ostream);
|
||||
*/
|
||||
|
||||
/*
|
||||
cglm tried to enable print functions in debug mode and disable them in
|
||||
release/production mode to eliminate printing costs.
|
||||
|
||||
if you need to force enable then define CGLM_DEFINE_PRINTS macro not DEBUG one
|
||||
|
||||
Print functions are enabled if:
|
||||
|
||||
- DEBUG or _DEBUG macro is defined (mostly defined automatically in debugging)
|
||||
- CGLM_DEFINE_PRINTS macro is defined including release/production
|
||||
which makes enabled printing always
|
||||
- glmc_ calls for io are always prints
|
||||
|
||||
*/
|
||||
|
||||
/* DEPRECATED: CGLM_NO_PRINTS_NOOP (use CGLM_DEFINE_PRINTS) */
|
||||
|
||||
#ifndef cglm_io_h
|
||||
#define cglm_io_h
|
||||
#if defined(DEBUG) || defined(_DEBUG) \
|
||||
|| defined(CGLM_DEFINE_PRINTS) || defined(CGLM_LIB_SRC)
|
||||
|| defined(CGLM_DEFINE_PRINTS) || defined(CGLM_LIB_SRC) \
|
||||
|| defined(CGLM_NO_PRINTS_NOOP)
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define CGLM_PRINT_PRECISION 5
|
||||
#define CGLM_PRINT_MAX_TO_SHORT 1e5
|
||||
#define CGLM_PRINT_COLOR "\033[36m"
|
||||
#define CGLM_PRINT_COLOR_RESET "\033[0m"
|
||||
#ifndef CGLM_PRINT_PRECISION
|
||||
# define CGLM_PRINT_PRECISION 5
|
||||
#endif
|
||||
|
||||
#ifndef CGLM_PRINT_MAX_TO_SHORT
|
||||
# define CGLM_PRINT_MAX_TO_SHORT 1e5
|
||||
#endif
|
||||
|
||||
#ifndef CGLM_PRINT_COLOR
|
||||
# define CGLM_PRINT_COLOR "\033[36m"
|
||||
#endif
|
||||
|
||||
#ifndef CGLM_PRINT_COLOR_RESET
|
||||
# define CGLM_PRINT_COLOR_RESET "\033[0m"
|
||||
#endif
|
||||
|
||||
CGLM_INLINE
|
||||
void
|
||||
@@ -293,7 +322,7 @@ glm_aabb_print(vec3 bbox[2],
|
||||
#undef m
|
||||
}
|
||||
|
||||
#elif !defined(CGLM_NO_PRINTS_NOOP)
|
||||
#else
|
||||
|
||||
#include "common.h"
|
||||
|
||||
@@ -301,15 +330,15 @@ glm_aabb_print(vec3 bbox[2],
|
||||
#include <stdlib.h>
|
||||
|
||||
/* NOOP: Remove print from DEBUG */
|
||||
#define glm_mat4_print(...)
|
||||
#define glm_mat3_print(...)
|
||||
#define glm_mat2_print(...)
|
||||
#define glm_vec4_print(...)
|
||||
#define glm_vec3_print(...)
|
||||
#define glm_ivec3_print(...)
|
||||
#define glm_vec2_print(...)
|
||||
#define glm_versor_print(...)
|
||||
#define glm_aabb_print(...)
|
||||
#define glm_mat4_print(v, s) (void)v; (void)s;
|
||||
#define glm_mat3_print(v, s) (void)v; (void)s;
|
||||
#define glm_mat2_print(v, s) (void)v; (void)s;
|
||||
#define glm_vec4_print(v, s) (void)v; (void)s;
|
||||
#define glm_vec3_print(v, s) (void)v; (void)s;
|
||||
#define glm_ivec3_print(v, s) (void)v; (void)s;
|
||||
#define glm_vec2_print(v, s) (void)v; (void)s;
|
||||
#define glm_versor_print(v, s) (void)v; (void)s;
|
||||
#define glm_aabb_print(v, t, s) (void)v; (void)t; (void)s;
|
||||
|
||||
#endif
|
||||
#endif /* cglm_io_h */
|
||||
|
||||
@@ -10,6 +10,6 @@
|
||||
|
||||
#define CGLM_VERSION_MAJOR 0
|
||||
#define CGLM_VERSION_MINOR 7
|
||||
#define CGLM_VERSION_PATCH 7
|
||||
#define CGLM_VERSION_PATCH 8
|
||||
|
||||
#endif /* cglm_version_h */
|
||||
|
||||
107
meson.build
Normal file
107
meson.build
Normal file
@@ -0,0 +1,107 @@
|
||||
project('cglm', 'c',
|
||||
version : '0.7.8',
|
||||
license : 'mit',
|
||||
default_options : [
|
||||
'c_std=c11',
|
||||
'werror=true',
|
||||
'warning_level=2',
|
||||
'buildtype=release'
|
||||
]
|
||||
)
|
||||
|
||||
cc = meson.get_compiler('c')
|
||||
|
||||
cglm_deps = cc.find_library('m', required : false)
|
||||
|
||||
cglm_args = []
|
||||
build_args = []
|
||||
|
||||
if get_option('default_library') == 'static'
|
||||
cglm_args = '-DCGLM_STATIC'
|
||||
endif
|
||||
|
||||
if host_machine.system() == 'windows'
|
||||
build_args = '-DCGLM_EXPORTS'
|
||||
endif
|
||||
|
||||
cglm_inc = include_directories('include')
|
||||
|
||||
cglm_src = files(
|
||||
'src/affine.c',
|
||||
'src/affine2d.c',
|
||||
'src/bezier.c',
|
||||
'src/box.c',
|
||||
'src/cam.c',
|
||||
'src/curve.c',
|
||||
'src/ease.c',
|
||||
'src/euler.c',
|
||||
'src/frustum.c',
|
||||
'src/io.c',
|
||||
'src/mat2.c',
|
||||
'src/mat3.c',
|
||||
'src/mat4.c',
|
||||
'src/plane.c',
|
||||
'src/project.c',
|
||||
'src/quat.c',
|
||||
'src/ray.c',
|
||||
'src/sphere.c',
|
||||
'src/vec2.c',
|
||||
'src/vec3.c',
|
||||
'src/vec4.c'
|
||||
)
|
||||
|
||||
install_subdir('include/cglm', install_dir : get_option('includedir'))
|
||||
|
||||
cglm_lib = library('cglm',
|
||||
cglm_src,
|
||||
install : true,
|
||||
dependencies : cglm_deps,
|
||||
c_args : [ build_args, cglm_args ]
|
||||
)
|
||||
|
||||
cglm_dep = declare_dependency(
|
||||
link_with : cglm_lib,
|
||||
dependencies : cglm_deps,
|
||||
compile_args : cglm_args,
|
||||
include_directories : cglm_inc,
|
||||
version : meson.project_version()
|
||||
)
|
||||
|
||||
if meson.version().version_compare('>= 0.54.0')
|
||||
meson.override_dependency('cglm', cglm_dep)
|
||||
endif
|
||||
|
||||
|
||||
pkg = import('pkgconfig')
|
||||
|
||||
pkg.generate(
|
||||
name : 'cglm',
|
||||
libraries : cglm_lib,
|
||||
extra_cflags : cglm_args,
|
||||
version : meson.project_version(),
|
||||
url : 'https://github.com/recp/cglm',
|
||||
description : 'OpenGL Mathematics (glm) for C'
|
||||
)
|
||||
|
||||
if get_option('build_tests') == true
|
||||
|
||||
test_src = files(
|
||||
'test/runner.c',
|
||||
'test/src/test_euler.c',
|
||||
'test/src/test_bezier.c',
|
||||
'test/src/test_cam.c',
|
||||
'test/src/test_struct.c',
|
||||
'test/src/test_clamp.c',
|
||||
'test/src/test_common.c',
|
||||
'test/src/tests.c'
|
||||
)
|
||||
|
||||
test_exe = executable('tests',
|
||||
test_src,
|
||||
dependencies : cglm_dep,
|
||||
c_args : '-DGLM_TESTS_NO_COLORFUL_OUTPUT'
|
||||
)
|
||||
|
||||
test('cglm.tests', test_exe)
|
||||
|
||||
endif
|
||||
1
meson_options.txt
Normal file
1
meson_options.txt
Normal file
@@ -0,0 +1 @@
|
||||
option('build_tests', type : 'boolean', value : false, description : 'Build tests')
|
||||
@@ -18,7 +18,11 @@ set(TEST_RUNNER_PARAMS "")
|
||||
add_executable(${TEST_MAIN} ${TESTFILES})
|
||||
target_compile_definitions(${TEST_MAIN} PRIVATE CGLM_DEFINE_PRINTS=1)
|
||||
|
||||
target_link_libraries(${TEST_MAIN} PRIVATE cglm m)
|
||||
if(NOT MSVC)
|
||||
target_link_libraries(${TEST_MAIN} PRIVATE m)
|
||||
endif()
|
||||
|
||||
target_link_libraries(${TEST_MAIN} PRIVATE cglm)
|
||||
target_include_directories(${TEST_MAIN} PRIVATE
|
||||
${CMAKE_CURRENT_LIST_DIR}/include
|
||||
${CMAKE_CURRENT_LIST_DIR}/src
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
# define _CRT_SECURE_NO_WARNINGS /* for windows */
|
||||
#endif
|
||||
|
||||
#ifndef _GNU_SOURCE
|
||||
# define _GNU_SOURCE /* for drand48() */
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -18,6 +18,8 @@ main(int argc, const char * argv[]) {
|
||||
test_status_t st;
|
||||
int32_t i, count, passed, failed, maxlen;
|
||||
double start, end, elapsed, total;
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
passed = failed = maxlen = 0;
|
||||
total = 0.0;
|
||||
|
||||
@@ -209,7 +209,7 @@
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;CGLM_EXPORTS;CGLM_DLL;%(PreprocessorDefinitions);CGLM_DLL</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;CGLM_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
<PrecompiledHeaderFile />
|
||||
@@ -225,7 +225,7 @@
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;CGLM_EXPORTS;CGLM_DLL;%(PreprocessorDefinitions);CGLM_DLL</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;CGLM_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
@@ -246,7 +246,7 @@
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;CGLM_EXPORTS;CGLM_DLL;%(PreprocessorDefinitions);CGLM_DLL</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;CGLM_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<PrecompiledHeaderFile />
|
||||
<CompileAs>CompileAsC</CompileAs>
|
||||
@@ -266,7 +266,7 @@
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;CGLM_EXPORTS;CGLM_DLL;%(PreprocessorDefinitions);CGLM_DLL</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;CGLM_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<PrecompiledHeaderFile />
|
||||
<CompileAs>CompileAsC</CompileAs>
|
||||
|
||||
Reference in New Issue
Block a user