Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide an installable shared library #127

Open
emersion opened this issue Oct 14, 2020 · 5 comments
Open

Provide an installable shared library #127

emersion opened this issue Oct 14, 2020 · 5 comments
Assignees

Comments

@emersion
Copy link

emersion commented Oct 14, 2020

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.

@jkuhlmann
Copy link
Owner

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 jkuhlmann self-assigned this Oct 23, 2020
@emersion
Copy link
Author

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.)

@SpaceIm
Copy link

SpaceIm commented Feb 1, 2021

Here is a simple CMakeLists I've written for conan package manager (with few modifications: conan-io/conan-center-index#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.

@emersion
Copy link
Author

emersion commented Jul 2, 2021

@jkuhlmann, what do you think?

@RealAstolfo
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants