From 00ecbb0ee2a4cc3649e7fce53f931f2620f61c2b Mon Sep 17 00:00:00 2001 From: sonoro1234 Date: Fri, 14 Jun 2024 16:25:20 +0200 Subject: [PATCH] backend_test: make glfw examples work with dynamic and static linking --- backend_test/example_glfw_dx11/CMakeLists.txt | 25 +++++++++------ backend_test/example_glfw_dx11/README.md | 2 ++ .../example_glfw_opengl3/CMakeLists.txt | 32 ++++++++++++------- backend_test/example_glfw_opengl3/README.md | 4 +++ 4 files changed, 43 insertions(+), 20 deletions(-) create mode 100644 backend_test/example_glfw_opengl3/README.md diff --git a/backend_test/example_glfw_dx11/CMakeLists.txt b/backend_test/example_glfw_dx11/CMakeLists.txt index 71682aa..3e65bd6 100644 --- a/backend_test/example_glfw_dx11/CMakeLists.txt +++ b/backend_test/example_glfw_dx11/CMakeLists.txt @@ -4,6 +4,9 @@ if(WIN32) # to mingw work as all the others set(CMAKE_SHARED_LIBRARY_PREFIX "") endif(WIN32) +#run in build dir +set (CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR}) + set (CMAKE_CXX_STANDARD 11) # general settings @@ -74,18 +77,25 @@ FetchContent_GetProperties(glfw) if (NOT glfw_POPULATED) set(FETCHCONTENT_QUIET NO) FetchContent_Populate(glfw) + set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) - add_subdirectory(${glfw_SOURCE_DIR} ${glfw_BINARY_DIR}) + if (NOT STATIC_BUILD) + set(BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE) + endif() + add_subdirectory(${glfw_SOURCE_DIR} ${glfw_BINARY_DIR} EXCLUDE_FROM_ALL) endif() +install(TARGETS glfw RUNTIME DESTINATION ${CMAKE_CURRENT_BINARY_DIR} + LIBRARY DESTINATION ${CMAKE_CURRENT_BINARY_DIR} +) +#FIND_PACKAGE(glfw3 PATHS "C:/LuaGL/gitsources/BUILDS/GLFW/install") -# glfw/imgui gets confused if it is not statically built. -IF (WIN32) - add_library(cimgui STATIC ${IMGUI_SOURCES}) -ELSE() +if (NOT STATIC_BUILD) add_library(cimgui SHARED ${IMGUI_SOURCES}) -ENDIF() +else() + add_library(cimgui STATIC ${IMGUI_SOURCES}) +endif() target_link_libraries(cimgui ${IMGUI_LIBRARIES} glfw) @@ -94,9 +104,6 @@ target_link_libraries(cimgui ${IMGUI_LIBRARIES} glfw) include_directories(../../generator/output/) add_executable(${PROJECT_NAME} main.c) target_compile_definitions(${PROJECT_NAME} PUBLIC -DCIMGUI_USE_DX11 -DCIMGUI_USE_GLFW) -if (MINGW) - #target_link_options(${PROJECT_NAME} PRIVATE "-mconsole") -endif() target_link_libraries(${PROJECT_NAME} d3d11 d3dcompiler.lib cimgui) diff --git a/backend_test/example_glfw_dx11/README.md b/backend_test/example_glfw_dx11/README.md index 00786c2..2847783 100644 --- a/backend_test/example_glfw_dx11/README.md +++ b/backend_test/example_glfw_dx11/README.md @@ -1,4 +1,6 @@ This example needs dx11 in generation before compile. (add dx11 to generator.bat(sh) and generate) +`STATIC_BUILD` is the cmake variable to do static linking + Only tested with VC nmake. \ No newline at end of file diff --git a/backend_test/example_glfw_opengl3/CMakeLists.txt b/backend_test/example_glfw_opengl3/CMakeLists.txt index fb0e940..8399799 100644 --- a/backend_test/example_glfw_opengl3/CMakeLists.txt +++ b/backend_test/example_glfw_opengl3/CMakeLists.txt @@ -4,6 +4,9 @@ if(WIN32) # to mingw work as all the others set(CMAKE_SHARED_LIBRARY_PREFIX "") endif(WIN32) +#run in build dir +set (CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR}) + set (CMAKE_CXX_STANDARD 11) # general settings @@ -32,7 +35,6 @@ set(IMGUI_SOURCES ${TABLES_SOURCE} ) -set(IMGUI_SOURCES_sdl) set(IMGUI_LIBRARIES ) if (WIN32) @@ -70,23 +72,34 @@ include(FetchContent) FetchContent_Declare( glfw URL https://github.com/glfw/glfw/archive/refs/tags/${GLFW_VERSION}.tar.gz) + #GIT_REPOSITORY https://github.com/glfw/glfw ) FetchContent_GetProperties(glfw) if (NOT glfw_POPULATED) set(FETCHCONTENT_QUIET NO) FetchContent_Populate(glfw) + set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) - add_subdirectory(${glfw_SOURCE_DIR} ${glfw_BINARY_DIR}) + if (NOT STATIC_BUILD) + set(BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE) + endif() + add_subdirectory(${glfw_SOURCE_DIR} ${glfw_BINARY_DIR} EXCLUDE_FROM_ALL) endif() +#if dynamic glfw then install +install(TARGETS glfw RUNTIME DESTINATION ${CMAKE_CURRENT_BINARY_DIR} + LIBRARY DESTINATION ${CMAKE_CURRENT_BINARY_DIR} +) +#FIND_PACKAGE(glfw3 PATHS "C:/LuaGL/gitsources/BUILDS/GLFW/install" REQUIRED) -# glfw/imgui gets confused if it is not statically built. -IF (WIN32) - add_library(cimgui STATIC ${IMGUI_SOURCES}) -ELSE() + +if (NOT STATIC_BUILD) add_library(cimgui SHARED ${IMGUI_SOURCES}) -ENDIF() +else() + add_library(cimgui STATIC ${IMGUI_SOURCES}) +endif() + target_link_libraries(cimgui ${IMGUI_LIBRARIES} glfw) @@ -95,9 +108,6 @@ target_link_libraries(cimgui ${IMGUI_LIBRARIES} glfw) include_directories(../../generator/output/) add_executable(${PROJECT_NAME} main.c) target_compile_definitions(${PROJECT_NAME} PUBLIC -DCIMGUI_USE_OPENGL3 -DCIMGUI_USE_GLFW) -if (MINGW) - target_link_options(${PROJECT_NAME} PRIVATE "-mconsole") -endif() -target_link_libraries(${PROJECT_NAME} ${IMGUI_SDL_LIBRARY} cimgui) +target_link_libraries(${PROJECT_NAME} cimgui) diff --git a/backend_test/example_glfw_opengl3/README.md b/backend_test/example_glfw_opengl3/README.md new file mode 100644 index 0000000..9c52d63 --- /dev/null +++ b/backend_test/example_glfw_opengl3/README.md @@ -0,0 +1,4 @@ + +To build use `cmake path_to_example_glfw_opengl3` and then `make install` + +`STATIC_BUILD` is a cmake variable if you want to do static linking. \ No newline at end of file