diff --git a/CMakeLists.txt b/CMakeLists.txt index a8086b5..1ca40b7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,13 +8,14 @@ set(CMAKE_CXX_STANDARD 20) project(ModulesRoot) -include(CMakeOptions.txt) +include(CMakeOptions.cmake) +include(Externals/CMakeExternals.cmake) add_subdirectory(Modules) add_subdirectory(Containers) add_subdirectory(Math) # add_subdirectory(Language) -add_subdirectory(Externals) +# add_subdirectory(Externals) add_subdirectory(Connection) add_subdirectory(Graphics) add_subdirectory(DataAnalysis) diff --git a/CMakeOptions.txt b/CMakeOptions.cmake similarity index 100% rename from CMakeOptions.txt rename to CMakeOptions.cmake diff --git a/Externals/CMakeExternals.cmake b/Externals/CMakeExternals.cmake new file mode 100644 index 0000000..e2dbe1c --- /dev/null +++ b/Externals/CMakeExternals.cmake @@ -0,0 +1,44 @@ +# find_package(ALSA REQUIRED) + +if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + message("Configuring for windows...") + message("Libraries path is - ${WINDOWS_LIBRARIES}") + set(CMAKE_PREFIX_PATH "${WINDOWS_LIBRARIES}") +endif() + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/Externals") + +set(IMGUI_SRC_DIR "${CMAKE_SOURCE_DIR}/Externals/imgui") + +set(OpenGL_GL_PREFERENCE LEGACY) +#set(OIDN_DEVICE_CPU ON) +#set(OIDN_STATIC_LIB ON) +#add_subdirectory(oidn) + +find_package(OpenGL REQUIRED) +find_package(GLEW REQUIRED) +find_package(PortAudio REQUIRED) +find_package(OpenImageDenoise REQUIRED) +find_package(ImGui REQUIRED) +find_package(Lua REQUIRED) +find_package(glfw3 REQUIRED) + +#add_subdirectory(unittest-cpp) +add_subdirectory(Externals/lalr) +target_compile_options(UnitTest++ PUBLIC -Wno-error) + + +#add_subdirectory(Externals/glfw) + + +project(Nanovg) +set(${PROJECT_NAME}_SOURCES + Externals/nanovg/src/nanovg.c +) + +add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_SOURCES}) +target_include_directories(${PROJECT_NAME} PUBLIC ./Externals/nanovg/src/ ./Externals/nanovg/obsolete/) + +project(ImageIO) +add_library(${PROJECT_NAME} INTERFACE) +target_include_directories(${PROJECT_NAME} INTERFACE ./Externals/imageIO/) diff --git a/Externals/CMakeLists.txt b/Externals/CMakeLists.txt deleted file mode 100644 index ce5f9b4..0000000 --- a/Externals/CMakeLists.txt +++ /dev/null @@ -1,94 +0,0 @@ -# find_package(ALSA REQUIRED) - -if(CMAKE_SYSTEM_NAME STREQUAL "Windows") - message("Configuring for windows...") - message("Libraries path is - ${WINDOWS_LIBRARIES}") - - set(CMAKE_PREFIX_PATH "${WINDOWS_LIBRARIES}/glew-2.1.0") - find_package(GLEW REQUIRED) - set(GLEW_LIB ${GLEW_STATIC_LIBRARY_RELEASE} opengl32.lib PARENT_SCOPE) - - # Your relative paths - set(RELATIVE_INCLUDE_DIR "${WINDOWS_LIBRARIES}/portaudio/include") - set(RELATIVE_LIB "${WINDOWS_LIBRARIES}/portaudio_build/Debug/portaudio.lib") - - # Convert to absolute paths - get_filename_component(ABSOLUTE_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${RELATIVE_INCLUDE_DIR}" ABSOLUTE) - get_filename_component(ABSOLUTE_LIB "${CMAKE_CURRENT_SOURCE_DIR}/${RELATIVE_LIB}" ABSOLUTE) - - # Set absolute paths with respect to the parent scope - set(PORTAUDIO_INCLUDE_DIR "${ABSOLUTE_INCLUDE_DIR}" PARENT_SCOPE) - set(PORTAUDIO_LIB "${ABSOLUTE_LIB}" PARENT_SCOPE) -else() - find_package(GLEW REQUIRED) - set(GLEW_LIB ${GLEW_LIBRARIES} GL PARENT_SCOPE) - - set(PORTAUDIO_LIB portaudio PARENT_SCOPE) -endif() - -#add_subdirectory(glew/build/cmake/) -#target_compile_definitions(glew_s PUBLIC GLEW_NO_GLU) - -#add_subdirectory(unittest-cpp) -add_subdirectory(lalr) -if(CMAKE_SYSTEM_NAME STREQUAL "Windows") -else() - target_compile_options(UnitTest++ PUBLIC -Wno-error) -endif() - - -add_subdirectory(glfw) - -project(Imgui) -set(${PROJECT_NAME}_SOURCES - imgui/imgui.cpp - imgui/imgui_draw.cpp - imgui/imgui_tables.cpp - imgui/imgui_widgets.cpp - imgui/imgui_demo.cpp - - imgui/backends/imgui_impl_glfw.cpp - imgui/backends/imgui_impl_opengl3.cpp -) - -add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_SOURCES}) -include_directories(${PROJECT_NAME} ./glfw/include) -target_include_directories(${PROJECT_NAME} PUBLIC ./imgui/ ./imgui/backends/) - -project(Nanovg) -set(${PROJECT_NAME}_SOURCES - nanovg/src/nanovg.c -) - -add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_SOURCES}) -target_include_directories(${PROJECT_NAME} PUBLIC ./nanovg/src/ ./nanovg/obsolete/) - -project(Lua) - -# Add the Lua source files -#file(GLOB ${PROJECT_NAME}_SOURCES "./lua/luaone.c") -# list(FILTER ${PROJECT_NAME}_SOURCES EXCLUDE REGEX "./lua/lua.c$") - -# Create the Lua library -add_library(${PROJECT_NAME} STATIC "lua/onelua.c") - -target_compile_definitions(${PROJECT_NAME} PUBLIC MAKE_LIB) - -# Include directories for Lua headers -target_include_directories(${PROJECT_NAME} PUBLIC "./lua") - -# Set compilation options, e.g., for compilation with C99 -set_target_properties(${PROJECT_NAME} PROPERTIES - C_STANDARD 99 - C_STANDARD_REQUIRED ON -) - -project(ImageIO) -add_library(${PROJECT_NAME} INTERFACE) -target_include_directories(${PROJECT_NAME} INTERFACE ./imageIO/) - - -#set(OIDN_DEVICE_CPU ON) -#set(OIDN_STATIC_LIB ON) -#add_subdirectory(oidn) -find_package(OpenImageDenoise REQUIRED) diff --git a/Externals/FindImGui.cmake b/Externals/FindImGui.cmake new file mode 100644 index 0000000..38193da --- /dev/null +++ b/Externals/FindImGui.cmake @@ -0,0 +1,25 @@ +project(ImGui) + + +set(${PROJECT_NAME}_SOURCES + ${IMGUI_SRC_DIR}/imgui.cpp + ${IMGUI_SRC_DIR}/imgui_draw.cpp + ${IMGUI_SRC_DIR}/imgui_tables.cpp + ${IMGUI_SRC_DIR}/imgui_widgets.cpp + ${IMGUI_SRC_DIR}/imgui_demo.cpp + + ${IMGUI_SRC_DIR}/backends/imgui_impl_glfw.cpp + ${IMGUI_SRC_DIR}/backends/imgui_impl_opengl3.cpp +) + +set(${PROJECT_NAME}_INCLUDES + ${IMGUI_SRC_DIR} + ${IMGUI_SRC_DIR}/backends/ +) + +add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_SOURCES}) +target_include_directories(${PROJECT_NAME} PUBLIC ${${PROJECT_NAME}_INCLUDES}) + +#include_directories(${PROJECT_NAME} ././glfw/include) + +add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) diff --git a/Externals/FindPortAudio.cmake b/Externals/FindPortAudio.cmake new file mode 100644 index 0000000..ddeb1ae --- /dev/null +++ b/Externals/FindPortAudio.cmake @@ -0,0 +1,35 @@ +# - Find PortAudio includes and libraries +# +# PORTAUDIO_FOUND - True if PORTAUDIO_INCLUDE_DIR & PORTAUDIO_LIBRARY +# are found +# PORTAUDIO_LIBRARIES - Set when PORTAUDIO_LIBRARY is found +# PORTAUDIO_INCLUDE_DIRS - Set when PORTAUDIO_INCLUDE_DIR is found +# +# PORTAUDIO_INCLUDE_DIR - where to find portaudio.h, etc. +# PORTAUDIO_LIBRARY - the portaudio library +# + +find_path(PORTAUDIO_INCLUDE_DIR + NAMES portaudio.h + DOC "The PortAudio include directory" +) + +find_library(PORTAUDIO_LIBRARY + NAMES portaudio + DOC "The PortAudio library" +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(PortAudio + REQUIRED_VARS PORTAUDIO_LIBRARY PORTAUDIO_INCLUDE_DIR +) + +# Create an imported target for PortAudio +add_library(PortAudio::PortAudio UNKNOWN IMPORTED) +set_target_properties(PortAudio::PortAudio PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${PORTAUDIO_INCLUDE_DIR}" + IMPORTED_LOCATION "${PORTAUDIO_LIBRARY}" +) + +# Provide the information to the user +mark_as_advanced(PORTAUDIO_INCLUDE_DIR PORTAUDIO_LIBRARY) \ No newline at end of file diff --git a/Externals/glfw b/Externals/glfw deleted file mode 160000 index b35641f..0000000 --- a/Externals/glfw +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b35641f4a3c62aa86a0b3c983d163bc0fe36026d diff --git a/Externals/lua b/Externals/lua deleted file mode 160000 index 6baee9e..0000000 --- a/Externals/lua +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6baee9ef9d5657ab582c8a4b9f885ec58ed502d0 diff --git a/Graphics/CMakeLists.txt b/Graphics/CMakeLists.txt index 1159d2a..9b2e894 100644 --- a/Graphics/CMakeLists.txt +++ b/Graphics/CMakeLists.txt @@ -1,23 +1,19 @@ project(Graphics) ### ---------------------- Externals --------------------- ### -set(BINDINGS_INCLUDE ../Externals/glfw/include ${GLEW_INCLUDE_DIR}) -set(BINDINGS_LIBS glfw Imgui Nanovg ${GLEW_LIB}) +set(EXTERNAL_TARGETS glfw GLEW::glew OpenGL::GL ImGui::ImGui Nanovg) ### ---------------------- Static Library --------------------- ### file(GLOB SOURCES "./private/*.cpp") file(GLOB HEADERS "./public/*.hpp") add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) target_include_directories(${PROJECT_NAME} PUBLIC ./public/) -target_include_directories(${PROJECT_NAME} PRIVATE ${BINDINGS_INCLUDE}) target_link_libraries(${PROJECT_NAME} PUBLIC Math) -target_link_libraries(${PROJECT_NAME} PRIVATE ${BINDINGS_LIBS}) +target_link_libraries(${PROJECT_NAME} PRIVATE ${EXTERNAL_TARGETS}) ### -------------------------- Examples -------------------------- ### add_executable(Example${PROJECT_NAME} ./examples/Example.cpp) -target_link_libraries(Example${PROJECT_NAME} ${PROJECT_NAME} ${BINDINGS_LIBS}) -target_include_directories(Example${PROJECT_NAME} PRIVATE ${BINDINGS_INCLUDE}) +target_link_libraries(Example${PROJECT_NAME} ${PROJECT_NAME} ${EXTERNAL_TARGETS}) -file(COPY "examples/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/") - +file(COPY "examples/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/") \ No newline at end of file diff --git a/LibraryViewer/CMakeLists.txt b/LibraryViewer/CMakeLists.txt index becb208..1184f3c 100644 --- a/LibraryViewer/CMakeLists.txt +++ b/LibraryViewer/CMakeLists.txt @@ -1,8 +1,7 @@ project(LibraryViewer) ### ---------------------- Externals --------------------- ### -set(BINDINGS_INCLUDE ../Externals/glfw/include ${GLEW_INCLUDE_DIR} ${PORTAUDIO_INCLUDE_DIR}) -set(BINDINGS_LIBS glfw Imgui ${GLEW_LIB} ${ALSA_LIBRARY} ${PORTAUDIO_LIB}) +set(EXTERNAL_TARGETS glfw Imgui GLEW::glew OpenGL::GL PortAudio::PortAudio) ### ---------------------- Static Library --------------------- ### file(GLOB SOURCES "./private/*.cpp" "./private/*/*.cpp") @@ -10,9 +9,10 @@ file(GLOB HEADERS "./public/*.hpp" "./public/*/*.hpp" "./applications/*.hpp") add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) -target_include_directories(${PROJECT_NAME} PUBLIC ./public/ ${BINDINGS_INCLUDE} ./ext/) +target_include_directories(${PROJECT_NAME} PUBLIC ./public/ ./ext/) + target_link_libraries(${PROJECT_NAME} PUBLIC Graphics Connection Widgets) -target_link_libraries(${PROJECT_NAME} PUBLIC ${BINDINGS_LIBS}) +target_link_libraries(${PROJECT_NAME} PRIVATE ${EXTERNAL_TARGETS}) file(COPY "library" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}") file(COPY "applications/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")