fixed export
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
build/
|
build/
|
||||||
build-desktop/
|
build-desktop/
|
||||||
build-web/
|
build-web/
|
||||||
|
dist/
|
||||||
bin/
|
bin/
|
||||||
web/
|
web/
|
||||||
debug/
|
debug/
|
||||||
|
|||||||
+88
-112
@@ -1,144 +1,119 @@
|
|||||||
cmake_minimum_required(VERSION 4.4.0)
|
cmake_minimum_required(VERSION 3.25)
|
||||||
|
|
||||||
project(my_app LANGUAGES CXX)
|
project(varicle LANGUAGES CXX)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 23)
|
set(CMAKE_CXX_STANDARD 23)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
# ------------------------------------------------------------------------------
|
||||||
# Default install location: <your-project-folder>/dist
|
# 1. Platform & Dist Paths
|
||||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/dist" CACHE PATH "Local export directory" FORCE)
|
# ------------------------------------------------------------------------------
|
||||||
|
if(BUILD_FOR_WEB OR EMSCRIPTEN)
|
||||||
|
set(DIST_PLATFORM "web")
|
||||||
|
else()
|
||||||
|
set(DIST_PLATFORM "desktop")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
file( GLOB_RECURSE
|
# Automatically route 'cmake --install' into 'dist/desktop' or 'dist/web'
|
||||||
SRC
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||||
CONFIGURE
|
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/dist/${DIST_PLATFORM}" CACHE PATH "Dist directory" FORCE)
|
||||||
"src/*cpp"
|
endif()
|
||||||
"src/*.hpp"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------------------
|
|
||||||
# Subdirectories
|
|
||||||
#------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
set(BUILD_EXAMPLES OFF)
|
|
||||||
add_subdirectory(vendor/raylib)
|
|
||||||
add_subdirectory(vendor/asset-packer)
|
|
||||||
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------------------
|
|
||||||
# GUI
|
|
||||||
#------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#ImGui
|
|
||||||
set(IMGUI_DIR "${CMAKE_CURRENT_SOURCE_DIR}/vendor/imgui")
|
|
||||||
|
|
||||||
add_library(imgui STATIC
|
|
||||||
${IMGUI_DIR}/imgui.cpp
|
|
||||||
${IMGUI_DIR}/imgui_demo.cpp
|
|
||||||
${IMGUI_DIR}/imgui_draw.cpp
|
|
||||||
${IMGUI_DIR}/imgui_tables.cpp
|
|
||||||
${IMGUI_DIR}/imgui_widgets.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories(imgui PUBLIC ${IMGUI_DIR})
|
|
||||||
|
|
||||||
# rlImGui
|
|
||||||
set(RLIMGUI_DIR "${CMAKE_CURRENT_SOURCE_DIR}/vendor/rlImGui")
|
|
||||||
|
|
||||||
add_library(rlImGui STATIC
|
|
||||||
${RLIMGUI_DIR}/rlImGui.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories(rlImGui PUBLIC ${RLIMGUI_DIR})
|
|
||||||
target_link_libraries(rlImGui PUBLIC imgui raylib)
|
|
||||||
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------------------
|
|
||||||
# Framework Library
|
|
||||||
#------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
file( GLOB_RECURSE
|
# ------------------------------------------------------------------------------
|
||||||
ENGINE_SRC
|
# 2. Vendored Dependencies (Internal)
|
||||||
CONFIGURE
|
# ------------------------------------------------------------------------------
|
||||||
"src/engine/*cpp"
|
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
||||||
"src/engine/*.hpp"
|
add_subdirectory(vendor/raylib)
|
||||||
|
add_subdirectory(vendor/asset-packer)
|
||||||
|
|
||||||
|
file(GLOB IMGUI_SOURCES "vendor/imgui/*.cpp")
|
||||||
|
file(GLOB IMGUI_HEADERS "vendor/imgui/*.h")
|
||||||
|
file(GLOB RLIMGUI_HEADERS "vendor/rlImGui/*.h")
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# 3. Main Framework Target (Single Monolithic Library)
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
file(GLOB_RECURSE ENGINE_SRC "src/engine/*.cpp")
|
||||||
|
|
||||||
|
# Put ImGui, rlImGui, and Engine sources ALL into one binary!
|
||||||
|
add_library(${PROJECT_NAME}_lib STATIC
|
||||||
|
${ENGINE_SRC}
|
||||||
|
${IMGUI_SOURCES}
|
||||||
|
vendor/rlImGui/rlImGui.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}_lib ${ENGINE_SRC})
|
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME}_lib PROPERTIES OUTPUT_NAME "varicle")
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}_lib PROPERTIES
|
target_include_directories(${PROJECT_NAME}_lib PUBLIC
|
||||||
OUTPUT_NAME "varicle"
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
|
||||||
)
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/vendor/imgui>
|
||||||
target_include_directories(${PROJECT_NAME}_lib PUBLIC src vendor/entt)
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/vendor/rlImGui>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/vendor/entt>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/vendor/json>
|
||||||
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||||
|
)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME}_lib PUBLIC
|
target_link_libraries(${PROJECT_NAME}_lib PUBLIC
|
||||||
AssetPacker::assetpacker
|
AssetPacker::assetpacker
|
||||||
rlImGui
|
|
||||||
imgui
|
|
||||||
raylib
|
raylib
|
||||||
)
|
)
|
||||||
|
|
||||||
## Get Metadata
|
# ------------------------------------------------------------------------------
|
||||||
install(TARGETS ${PROJECT_NAME}_lib
|
# 4. Clean Export & Install
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Install engine library + raylib
|
||||||
|
install(TARGETS ${PROJECT_NAME}_lib assetpacker_lib
|
||||||
EXPORT ${PROJECT_NAME}Targets
|
EXPORT ${PROJECT_NAME}Targets
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # Static libs (.a / .lib)
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # Shared libs (.so / .dylib)
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # Windows DLLs (.dll)
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/engine
|
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
## Headers
|
# Copy header files straight into dist/include for consumer projects
|
||||||
# Engine
|
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src/" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp")
|
||||||
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/engine/
|
install(FILES ${IMGUI_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/imgui )
|
||||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/engine
|
install(FILES ${RLIMGUI_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rlImGui )
|
||||||
FILES_MATCHING PATTERN "*.hpp"
|
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/vendor/entt/entt" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp")
|
||||||
)
|
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/vendor/json/json.hpp" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/json )
|
||||||
|
|
||||||
# Entt
|
# Standard CMake package export
|
||||||
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/vendor/entt/
|
install(EXPORT ${PROJECT_NAME}Targets
|
||||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/entt
|
FILE ${PROJECT_NAME}Targets.cmake
|
||||||
FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h"
|
NAMESPACE ${PROJECT_NAME}::
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# install(EXPORT ${PROJECT_NAME}Targets
|
# ------------------------------------------------------------------------------
|
||||||
# FILE ${PROJECT_NAME}Targets.cmake
|
# 5. Standalone Sandbox App / Executable
|
||||||
# NAMESPACE ${PROJECT_NAME}::
|
# ------------------------------------------------------------------------------
|
||||||
# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
|
file(GLOB_RECURSE APP_SRC "src/*.cpp")
|
||||||
# )
|
add_executable(${PROJECT_NAME} ${APP_SRC})
|
||||||
|
|
||||||
#------------------------------------------------------------------------------------------
|
target_link_libraries(${PROJECT_NAME} PRIVATE ${PROJECT_NAME}_lib)
|
||||||
# Executable
|
|
||||||
#------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
add_executable(${PROJECT_NAME} ${SRC})
|
if(EMSCRIPTEN)
|
||||||
|
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "index" SUFFIX ".html")
|
||||||
|
target_link_options(${PROJECT_NAME} PRIVATE
|
||||||
# Export ImGui headers so anything linking to 'imgui' gets them automatically
|
"-sUSE_GLFW=3"
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE vendor/entt src)
|
"-sASYNCIFY"
|
||||||
|
"--shell-file" "${CMAKE_CURRENT_SOURCE_DIR}/html/shell_custom.html"
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE
|
)
|
||||||
AssetPacker::assetpacker
|
endif()
|
||||||
rlImGui
|
|
||||||
imgui
|
|
||||||
raylib
|
|
||||||
)
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------------------
|
|
||||||
# Make Assets
|
|
||||||
#------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
# #------------------------------------------------------------------------------------------
|
||||||
|
# # Make Assets
|
||||||
|
# #------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
set(BUILD_ASSET_DIR "${CMAKE_CURRENT_BINARY_DIR}/assets")
|
set(BUILD_ASSET_DIR "${CMAKE_CURRENT_BINARY_DIR}/assets")
|
||||||
set(PACKED_DATA_FILE "${CMAKE_CURRENT_BINARY_DIR}/data.dat")
|
set(PACKED_DATA_FILE "${CMAKE_CURRENT_BINARY_DIR}/data.dat")
|
||||||
|
#
|
||||||
add_custom_target( pack-asset
|
add_custom_target( pack-asset
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/assets"
|
"${CMAKE_CURRENT_SOURCE_DIR}/assets"
|
||||||
@@ -161,9 +136,9 @@ add_custom_target( pack-asset
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# # ------------------------------------------------------------------------------
|
||||||
# WebAssembly / Emscripten Configurations
|
# # WebAssembly / Emscripten Configurations
|
||||||
# ------------------------------------------------------------------------------
|
# # ------------------------------------------------------------------------------
|
||||||
|
|
||||||
if(EMSCRIPTEN)
|
if(EMSCRIPTEN)
|
||||||
# Output an HTML page instead of a raw binary
|
# Output an HTML page instead of a raw binary
|
||||||
@@ -183,11 +158,12 @@ if(EMSCRIPTEN)
|
|||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
add_custom_target( run
|
add_custom_target( run
|
||||||
COMMAND ${PROJECT_NAME}
|
COMMAND ${PROJECT_NAME}
|
||||||
DEPENDS ${PROJECT_NAME}
|
DEPENDS ${PROJECT_NAME}
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
enable_testing()
|
# enable_testing()
|
||||||
add_subdirectory(tests)
|
# add_subdirectory(tests)
|
||||||
|
|||||||
@@ -0,0 +1,284 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.25)
|
||||||
|
|
||||||
|
project(varicle LANGUAGES CXX)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 23)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||||
|
# Default install location: <your-project-folder>/dist
|
||||||
|
set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/dist" CACHE PATH "Local export directory" FORCE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file( GLOB_RECURSE
|
||||||
|
SRC
|
||||||
|
CONFIGURE
|
||||||
|
"src/*cpp"
|
||||||
|
"src/*.hpp"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------------------
|
||||||
|
# DiSt
|
||||||
|
#------------------------------------------------------------------------------------------
|
||||||
|
if(BUILD_FOR_WEB OR EMSCRIPTEN)
|
||||||
|
set(DIST_PLATFORM "web")
|
||||||
|
else()
|
||||||
|
set(DIST_PLATFORM "desktop")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(DIST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dist/${DIST_PLATFORM}")
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------------------
|
||||||
|
# Subdirectories
|
||||||
|
#------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
set(BUILD_EXAMPLES OFF)
|
||||||
|
add_subdirectory(vendor/raylib)
|
||||||
|
add_subdirectory(vendor/asset-packer)
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------------------
|
||||||
|
# HEADERS AND SOURCE FILES
|
||||||
|
#------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ImGui
|
||||||
|
set(IMGUI_DIR "${CMAKE_CURRENT_SOURCE_DIR}/vendor/imgui")
|
||||||
|
|
||||||
|
add_library(imgui STATIC
|
||||||
|
${IMGUI_DIR}/imgui.cpp
|
||||||
|
${IMGUI_DIR}/imgui_demo.cpp
|
||||||
|
${IMGUI_DIR}/imgui_draw.cpp
|
||||||
|
${IMGUI_DIR}/imgui_tables.cpp
|
||||||
|
${IMGUI_DIR}/imgui_widgets.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
# target_include_directories(imgui PUBLIC ${IMGUI_DIR})
|
||||||
|
|
||||||
|
file(GLOB IMGUI_HEADERS
|
||||||
|
CONFIGURE_DEPENDS
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/vendor/imgui/*.h"
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(imgui PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/vendor/imGui>
|
||||||
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
target_sources(imgui INTERFACE
|
||||||
|
FILE_SET HEADERS
|
||||||
|
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/vendor/
|
||||||
|
FILES ${IMGUI_HEADERS}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# rlImGui
|
||||||
|
|
||||||
|
file(GLOB RLIMGUI_HEADERS
|
||||||
|
CONFIGURE_DEPENDS
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/vendor/rlImGui/*.h"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(RLIMGUI_DIR "${CMAKE_CURRENT_SOURCE_DIR}/vendor/rlImGui")
|
||||||
|
|
||||||
|
add_library(rlImGui STATIC
|
||||||
|
${RLIMGUI_DIR}/rlImGui.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
# target_include_directories(rlImGui PUBLIC ${RLIMGUI_DIR})
|
||||||
|
|
||||||
|
target_link_libraries(rlImGui PUBLIC imgui raylib)
|
||||||
|
|
||||||
|
|
||||||
|
target_include_directories(rlImGui PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/vendor/rlImGui>
|
||||||
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(rlImGui INTERFACE
|
||||||
|
FILE_SET HEADERS
|
||||||
|
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/vendor/
|
||||||
|
FILES ${RLIMGUI_HEADERS}
|
||||||
|
)
|
||||||
|
#------------------------------------------------------------------------------------------
|
||||||
|
# Framework Library
|
||||||
|
#------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
|
file( GLOB_RECURSE
|
||||||
|
ENGINE_SRC
|
||||||
|
CONFIGURE
|
||||||
|
"src/engine/*cpp"
|
||||||
|
"src/engine/*.hpp"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(${PROJECT_NAME}_lib ${ENGINE_SRC})
|
||||||
|
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME}_lib PROPERTIES
|
||||||
|
OUTPUT_NAME "varicle"
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}_lib PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/vendor/entt>
|
||||||
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}_lib PUBLIC
|
||||||
|
AssetPacker::assetpacker
|
||||||
|
rlImGui
|
||||||
|
imgui
|
||||||
|
raylib
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(${PROJECT_NAME}_lib PUBLIC
|
||||||
|
FILE_SET HEADERS
|
||||||
|
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/
|
||||||
|
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/engine
|
||||||
|
)
|
||||||
|
|
||||||
|
# FRAMEWORK DEPENDECIES
|
||||||
|
|
||||||
|
#entt
|
||||||
|
|
||||||
|
add_library(entt INTERFACE)
|
||||||
|
|
||||||
|
target_include_directories(entt INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/vendor/entt>
|
||||||
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(entt INTERFACE
|
||||||
|
FILE_SET HEADERS
|
||||||
|
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/vendor/entt
|
||||||
|
FILES ${CMAKE_CURRENT_SOURCE_DIR}/vendor/entt/entt/entt.hpp
|
||||||
|
)
|
||||||
|
|
||||||
|
#json
|
||||||
|
add_library(json INTERFACE)
|
||||||
|
|
||||||
|
target_include_directories(json INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/vendor/json>
|
||||||
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>/json
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(json INTERFACE
|
||||||
|
FILE_SET HEADERS
|
||||||
|
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/vendor/json
|
||||||
|
FILES ${CMAKE_CURRENT_SOURCE_DIR}/vendor/json/json.hpp
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
install(TARGETS ${PROJECT_NAME}_lib raylib entt json assetpacker_lib imgui rlImGui
|
||||||
|
EXPORT ${PROJECT_NAME}Targets
|
||||||
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # Static libs (.a / .lib)
|
||||||
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # Shared libs (.so / .dylib)
|
||||||
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # Windows DLLs (.dll)
|
||||||
|
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/engine
|
||||||
|
FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
install(EXPORT ${PROJECT_NAME}Targets
|
||||||
|
FILE ${PROJECT_NAME}Targets.cmake
|
||||||
|
NAMESPACE ${PROJECT_NAME}::
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# 2. GENERATE the Config file (THIS IS THE MISSING PIECE!)
|
||||||
|
configure_package_config_file(
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/varicleConfig.cmake.in"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/varicleConfig.cmake"
|
||||||
|
INSTALL_DESTINATION lib/cmake/varicle
|
||||||
|
)
|
||||||
|
|
||||||
|
# 3. INSTALL the Config file alongside varicleTargets.cmake
|
||||||
|
install(FILES
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/varicleConfig.cmake"
|
||||||
|
DESTINATION lib/cmake/varicle
|
||||||
|
)
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------------------
|
||||||
|
# Executable
|
||||||
|
#------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
add_executable(${PROJECT_NAME} ${SRC})
|
||||||
|
|
||||||
|
|
||||||
|
# Export ImGui headers so anything linking to 'imgui' gets them automatically
|
||||||
|
target_include_directories(${PROJECT_NAME} PRIVATE vendor/entt src)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||||
|
AssetPacker::assetpacker
|
||||||
|
rlImGui
|
||||||
|
imgui
|
||||||
|
raylib
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------------------
|
||||||
|
# Make Assets
|
||||||
|
#------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
set(BUILD_ASSET_DIR "${CMAKE_CURRENT_BINARY_DIR}/assets")
|
||||||
|
set(PACKED_DATA_FILE "${CMAKE_CURRENT_BINARY_DIR}/data.dat")
|
||||||
|
|
||||||
|
add_custom_target( pack-asset
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/assets"
|
||||||
|
"${BUILD_ASSET_DIR}"
|
||||||
|
|
||||||
|
|
||||||
|
# 2. Pass relative paths to assetpacker!
|
||||||
|
# Because WORKING_DIRECTORY is ${CMAKE_CURRENT_BINARY_DIR},
|
||||||
|
# 'assets' resolves to './assets' and 'data.dat' resolves to './data.dat'
|
||||||
|
|
||||||
|
# Set execution context so relative paths inside assetpacker work
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
||||||
|
|
||||||
|
COMMAND AssetPacker::packer "assets/"
|
||||||
|
|
||||||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/assets" AssetPacker::packer
|
||||||
|
COMMENT "Copying assets folder and packing via relative paths..."
|
||||||
|
VERBATIM
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# WebAssembly / Emscripten Configurations
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if(EMSCRIPTEN)
|
||||||
|
# Output an HTML page instead of a raw binary
|
||||||
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
|
OUTPUT_NAME "index"
|
||||||
|
SUFFIX ".html"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Pass Emscripten linker flags
|
||||||
|
target_link_options(${PROJECT_NAME} PRIVATE
|
||||||
|
"-sUSE_GLFW=3" # Needed for Raylib web builds
|
||||||
|
"-sASYNCIFY" # Allows main loop to yield to the browser
|
||||||
|
"--shell-file" "${CMAKE_CURRENT_SOURCE_DIR}/html/shell_custom.html" # (Optional) Custom HTML shell
|
||||||
|
# Pre-pack your assets directory into the WebAssembly virtual filesystem
|
||||||
|
"--preload-file" "${CMAKE_CURRENT_BINARY_DIR}/data.dat@/data.dat"
|
||||||
|
)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_target( run
|
||||||
|
COMMAND ${PROJECT_NAME}
|
||||||
|
DEPENDS ${PROJECT_NAME}
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
enable_testing()
|
||||||
|
add_subdirectory(tests)
|
||||||
@@ -7,7 +7,7 @@ foreach(TEST_FILE ${TEST_SOURCES})
|
|||||||
|
|
||||||
# Create individual target for this specific test
|
# Create individual target for this specific test
|
||||||
add_executable(${TEST_NAME} ${TEST_FILE})
|
add_executable(${TEST_NAME} ${TEST_FILE})
|
||||||
target_link_libraries(${TEST_NAME} PRIVATE my_app_lib)
|
target_link_libraries(${TEST_NAME} PRIVATE varicle_lib)
|
||||||
|
|
||||||
# Register each as an individual test with CTest
|
# Register each as an individual test with CTest
|
||||||
add_test(NAME ${TEST_NAME} COMMAND ${TEST_NAME})
|
add_test(NAME ${TEST_NAME} COMMAND ${TEST_NAME})
|
||||||
|
|||||||
Vendored
+1
-1
Submodule vendor/asset-packer updated: 674c7d1dae...46c3aae3e2
Reference in New Issue
Block a user