cgltf icon indicating copy to clipboard operation
cgltf copied to clipboard

Provide an installable shared library

Open emersion opened this issue 4 years ago • 5 comments

I understand that for some people a single-header "library" is easier to use, but for some use-cases a proper shared library would be better. Would this be something you'd like to consider?

I think it would basically boil down to a simple .c file with CGLTF_IMPLEMENTATION defined compiled to a shared library.

I'm willing to contribute and maintain the shared library, if that helps.

emersion avatar Oct 14 '20 09:10 emersion

Like you're saying, that is something that is pretty easy to do. It mostly comes done to maintaining the build configurations for the different target platforms. What would your approach to that be?

jkuhlmann avatar Oct 23 '20 10:10 jkuhlmann

My approach would be to add a very basic Meson build file that can optionally be used by downstream projects (as a subproject) and distributions to use cgltf without having to copy-paste header files around.

The Meson file could look like this: https://git.sr.ht/~emersion/cgltf/tree/master/meson.build

(If you don't like Meson, could use something else.)

emersion avatar Oct 23 '20 10:10 emersion

Here is a simple CMakeLists I've written for conan package manager (with few modifications: https://github.com/conan-io/conan-center-index/pull/4449).

It assumes that cgltf.c and cgltf_write.c are available in the same directory (with proper definition and inclusion of respective headers).

Handles static/shared libs (through BUILD_SHARED_LIBS global variable: https://cmake.org/cmake/help/v3.0/variable/BUILD_SHARED_LIBS.html), and allows shared with Visual Studio.

cmake_minimum_required(VERSION 3.4)
project(cgltf C)

add_library(${PROJECT_NAME} cgltf.c cgltf_write.c)
set_target_properties(${PROJECT_NAME}
  PROPERTIES
    C_STANDARD 99
    WINDOWS_EXPORT_ALL_SYMBOLS ON
)

include(GNUInstallDirs)
install(
  TARGETS ${PROJECT_NAME}
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(FILES cgltf.h cgltf_write.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

With few more lines, it could install CMake config file with imported targets, and create a pkgconfig file.

SpaceIm avatar Feb 01 '21 17:02 SpaceIm

@jkuhlmann, what do you think?

emersion avatar Jul 02 '21 11:07 emersion

i would argue a simple bash script and batch script for windows would be the best option for a project this simple, this way no one needs to install any 3rd party tools just to get a header file in their /usr/include lol

RealAstolfo avatar Mar 26 '22 01:03 RealAstolfo