Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
cmake_minimum_required(VERSION 3.19)

# set the project name and version
project(sokol VERSION 0.0.1 LANGUAGES C)
string(TOLOWER "${PROJECT_NAME}" PROJECT_LOWER_NAME)

set(CMAKE_C_STANDARD 90)
set(CMAKE_VERBOSE_MAKEFILE ON)

add_library("${PROJECT_LOWER_NAME}_compiler_flags" INTERFACE)
target_compile_features("${PROJECT_LOWER_NAME}_compiler_flags" INTERFACE "c_std_90")

# add compiler warning flags just when building this project via
# the BUILD_INTERFACE genex
set(gcc_like "$<COMPILE_LANG_AND_ID:C,CXX,ARMClang,AppleClang,Clang,GNU>")
set(msvc "$<COMPILE_LANG_AND_ID:C,CXX,MSVC>")
target_compile_options(
"${PROJECT_LOWER_NAME}_compiler_flags"
INTERFACE
"$<${gcc_like}:$<BUILD_INTERFACE:-Wshadow;-Wformat=2;-Wall>>"
"$<${msvc}:$<BUILD_INTERFACE:-W3;-WX;-Zi;-permissive->>"
)

# control where the static and shared libraries are built so that on windows
# we don't need to tinker with the path to run the executable
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")

option(BUILD_SHARED_LIBS "Build using shared libraries" ON)

if(APPLE)
set(CMAKE_INSTALL_RPATH "@executable_path/../lib")
elseif(UNIX)
set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib")
endif()

# configure a header file to pass the version number only
configure_file(
"${PROJECT_NAME}Config.h.in"
"${PROJECT_NAME}Config.h"
)

set(original_deps "sokol" "util")
foreach (_lib ${original_deps})
add_subdirectory("${_lib}")
message(STATUS "Built ${_lib}")
endforeach ()

#set_target_properties(
# "${PROJECT_NAME}"
# PROPERTIES
# LINKER_LANGUAGE
# C
#)
#
## add the binary tree to the search path for include files
## so that we will find "${PROJECT_NAME}Config.h"
#target_include_directories(
# "${PROJECT_NAME}"
# PUBLIC
# "${PROJECT_BINARY_DIR}"
#)
45 changes: 45 additions & 0 deletions sokol/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
get_filename_component(LIBRARY_NAME "${CMAKE_CURRENT_SOURCE_DIR}" NAME)
string(REPLACE " " "_" LIBRARY_NAME "${LIBRARY_NAME}")

set(Header_Files
"../sokol_app.h"
"../sokol_args.h"
"../sokol_audio.h"
"../sokol_fetch.h"
"../sokol_gfx.h"
"../sokol_glue.h"
"../sokol_time.h")

source_group("Header Files" FILES "${Header_Files}")

add_library("${LIBRARY_NAME}" INTERFACE "${Header_Files}")

target_include_directories(
"${LIBRARY_NAME}"
INTERFACE
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<INSTALL_INTERFACE:include>"
)

target_link_libraries("${LIBRARY_NAME}" INTERFACE "${PROJECT_LOWER_NAME}_compiler_flags")

set_target_properties(
"${LIBRARY_NAME}"
PROPERTIES
LINKER_LANGUAGE
C
)

# setup the version numbering
set_property(TARGET "${LIBRARY_NAME}" PROPERTY VERSION "1.0.0")
set_property(TARGET "${LIBRARY_NAME}" PROPERTY SOVERSION "1")

# install rules
set(installable_libs "${LIBRARY_NAME}" "${PROJECT_LOWER_NAME}_compiler_flags")
if (TARGET "${DEPENDANT_LIBRARY}")
list(APPEND installable_libs "${DEPENDANT_LIBRARY}")
endif ()
install(TARGETS ${installable_libs}
DESTINATION "bin"
EXPORT "${LIBRARY_NAME}Targets")
install(FILES "${Header_Files}" DESTINATION "include")
4 changes: 4 additions & 0 deletions sokolConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

@PACKAGE_INIT@

include ( "${CMAKE_CURRENT_LIST_DIR}/versionsTargets.cmake" )
9 changes: 9 additions & 0 deletions sokolConfig.h.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#ifndef SOKOL_CONFIG_H
#define SOKOL_CONFIG_H

/* the configured options and settings for sokol */
#define SOKOL_VERSION_MAJOR @sokol_VERSION_MAJOR@
#define SOKOL_VERSION_MINOR @sokol_VERSION_MINOR@
#define SOKOL_VERSION_PATCH @sokol_VERSION_PATCH@

#endif /* SOKOL_CONFIG_H */
52 changes: 52 additions & 0 deletions util/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
get_filename_component(LIBRARY_NAME "${CMAKE_CURRENT_SOURCE_DIR}" NAME)
string(REPLACE " " "_" LIBRARY_NAME "${LIBRARY_NAME}")

set(Header_Files
"sokol_color.h"
"sokol_debugtext.h"
"sokol_fontstash.h"
"sokol_gfx_imgui.h"
"sokol_gl.h"
"sokol_imgui.h"
"sokol_memtrack.h"
"sokol_nuklear.h"
"sokol_shape.h")

source_group("Header Files" FILES "${Header_Files}")

add_library("${LIBRARY_NAME}" INTERFACE "${Header_Files}")

target_include_directories(
"${LIBRARY_NAME}"
INTERFACE
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<INSTALL_INTERFACE:include>"
)

target_link_libraries("${LIBRARY_NAME}" INTERFACE "${PROJECT_LOWER_NAME}_compiler_flags")

#if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
# find_library(CORE_FOUNDATION_LIBRARY CoreFoundation ONLY)
# target_link_libraries("${LIBRARY_NAME}" PUBLIC "${CORE_FOUNDATION_LIBRARY}")
#endif ()

set_target_properties(
"${LIBRARY_NAME}"
PROPERTIES
LINKER_LANGUAGE
C
)

# setup the version numbering
set_property(TARGET "${LIBRARY_NAME}" PROPERTY VERSION "1.0.0")
set_property(TARGET "${LIBRARY_NAME}" PROPERTY SOVERSION "1")

# install rules
set(installable_libs "${LIBRARY_NAME}" "${PROJECT_LOWER_NAME}_compiler_flags")
if (TARGET "${DEPENDANT_LIBRARY}")
list(APPEND installable_libs "${DEPENDANT_LIBRARY}")
endif ()
install(TARGETS ${installable_libs}
DESTINATION "bin"
EXPORT "${LIBRARY_NAME}Targets")
install(FILES "${Header_Files}" DESTINATION "include")