diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 9f2f851..76e1807 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -11,33 +11,45 @@ env: jobs: build: - # The CMake configure and build commands are platform agnostic and should work equally - # well on Windows or Mac. You can convert this to a matrix build if you need - # cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: - os: [ ubuntu-latest, windows-latest ] + config: + # - os: ubuntu-latest + # vcpkg_triplet: x64-linux-release + - os: ubuntu-latest + vcpkg_triplet: x64-linux + # - os: windows-latest + # vcpkg_triplet: x64-windows-release + - os: windows-latest + vcpkg_triplet: x64-windows + + runs-on: ${{ matrix.config.os }} steps: - uses: actions/checkout@v2 with: + ref: ${{ github.ref }} submodules: recursive + - name: Install libs + run: sudo apt install -y libflac-dev libfreetype6-dev libgl1-mesa-dev libopenal-dev libudev-dev libvorbis-dev libx11-dev libxcursor-dev libxi-dev libxrandr-dev + if: ${{ matrix.config.os == 'ubuntu-latest' }} + + - name: vcpkg + uses: johnwason/vcpkg-action@v4 + with: + pkgs: sfml gtest glog + triplet: ${{ matrix.config.vcpkg_triplet }} + cache-key: ${{ matrix.config.os }} + token: ${{ github.token }} + - name: Configure CMake - # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. - # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=${{ matrix.config.vcpkg_triplet }} - name: Build - # Build your program with the given configuration run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - name: Test working-directory: ${{github.workspace}}/build - # Execute tests defined by the CMake configuration. - # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail run: ctest -C ${{env.BUILD_TYPE}} - diff --git a/.gitmodules b/.gitmodules index 2a80f1f..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +0,0 @@ -[submodule "glog"] - path = glog - url = https://github.com/google/glog.git -[submodule "googletest"] - path = googletest - url = https://github.com/google/googletest.git diff --git a/CMakeLists.txt b/CMakeLists.txt index cb735c0..4b49210 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,28 +1,69 @@ cmake_minimum_required(VERSION 3.10.2) -if(WIN32 AND DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE) - set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" - CACHE STRING "") -endif() +################################################################################ +# vcpkg +################################################################################ +include (${CMAKE_SOURCE_DIR}/cmake/vcpkg.cmake) +################################################################################ +# Project +################################################################################ project(SolitaireGame VERSION 0.1.0) -set(BUILD_SHARED_LIBS OFF) -option(BUILD_TESTING OFF) -option(WITH_GFLAGS OFF) -add_compile_options(-DHAVE_SNPRINTF) -set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) -if (MSVC) - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") -endif() +set(CMAKE_CXX_STANDARD 11) -add_subdirectory(glog) -include_directories(glog) +################################################################################ +# External libraries +################################################################################ +find_package(glog CONFIG REQUIRED) +find_package(GTest CONFIG REQUIRED) +find_package(SFML COMPONENTS system window graphics CONFIG REQUIRED) -enable_testing() -add_subdirectory(googletest) +################################################################################ +# Sources +################################################################################ +set(coregame_dir src/CoreGame/) +set(engine_dir src/Engine/) +set(utils_dir src/Utils/) -add_subdirectory(src) +file(GLOB_RECURSE common_sources ${engine_dir}*.cpp ${utils_dir}*.cpp ${coregame_dir}*.cpp) +file(GLOB_RECURSE common_headers ${engine_dir}*.h ${utils_dir}*.h ${coregame_dir}*.h) +file(GLOB_RECURSE src_sources src/*.cpp) +file(GLOB_RECURSE src_headers src/*.h) +set(sources ${src_sources} ${src_headers} ${common_sources} ${common_headers}) + +################################################################################ +# Executable +################################################################################ +add_executable(${PROJECT_NAME} ${sources}) + +target_link_libraries(${PROJECT_NAME} PRIVATE + glog::glog + GTest::gmock GTest::gtest GTest::gmock_main GTest::gtest_main + sfml-system sfml-graphics sfml-window +) + +################################################################################ +# Resources +################################################################################ +include (${CMAKE_SOURCE_DIR}/cmake/copy_res.cmake) +################################################################################ +# - Blueprints +################################################################################ + +set(BLUEPRINTS_DIR Blueprints) +# file(GLOB blueprints ${BLUEPRINTS_DIR}/*.*) +CopyResources(${BLUEPRINTS_DIR}/*.* $) + +################################################################################ +# - Fonts +################################################################################ +set(FONT_DIR Font) +# file(GLOB fonts ${FONT_DIR}/*.*) +CopyResources(${FONT_DIR}/*.* $) + +################################################################################ +# SubProjects +################################################################################ add_subdirectory(SolitaireTest) diff --git a/SolitaireTest/CMakeLists.txt b/SolitaireTest/CMakeLists.txt index e6a5adc..eb5463f 100644 --- a/SolitaireTest/CMakeLists.txt +++ b/SolitaireTest/CMakeLists.txt @@ -1,34 +1,22 @@ cmake_minimum_required(VERSION 3.10.2) +################################################################################ +# Project +################################################################################ project(SolitaireTest) -if (MSVC) - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") -endif() +set(CMAKE_CXX_STANDARD 11) -find_library(GTEST_LIB gtestd ${CMAKE_BINARY_DIR}/lib/Debug) - -if(GTEST_LIB) - message("Gtest library found") -else() - message("Gtest library not found") - set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) -endif() - -message("CMAKE_BINARY_DIR = " ${CMAKE_BINARY_DIR}) -include_directories("${CMAKE_BINARY_DIR}/googletest") - -if (CMAKE_VERSION VERSION_LESS 2.8.11) - - include_directories("${gtest_SOURCE_DIR}/include" - "${gmock_SOURCE_DIR}/include") - - message(gtest_SOURCE_DIR ${gtest_SOURCE_DIR}) - message(gmock_SOURCE_DIR ${gmock_SOURCE_DIR}) - -endif() +################################################################################ +# External libraries +################################################################################ +find_package(glog CONFIG REQUIRED) +find_package(GTest CONFIG REQUIRED) +find_package(SFML COMPONENTS system window graphics CONFIG REQUIRED) +################################################################################ +# Sources +################################################################################ set(engine_dir_test ../src/Engine/) set(utils_dir_test ../src/Utils/) @@ -45,20 +33,18 @@ set(sources_test ${common_headers_test} ) -find_package( - SFML 2.5 - COMPONENTS system window graphics - REQUIRED) - - -find_library(GLOG_LIB glogd ${CMAKE_BINARY_DIR}/glog/Debug) -if(GLOG_LIB) - message ("GLOG_TEST FOUND!!!") -else() - message ("GLOG_TEST NOT FOUND!!!") -endif() - +################################################################################ +# Executable +################################################################################ add_executable(testmain ${sources_test}) -target_link_libraries(testmain gtest gmock_main gtest_main glog sfml-system sfml-window - sfml-graphics) +target_link_libraries(testmain PRIVATE + glog::glog + GTest::gmock GTest::gtest GTest::gmock_main GTest::gtest_main + sfml-system sfml-graphics sfml-window +) + +################################################################################ +# Tests +################################################################################ +enable_testing() add_test(NAME testmain COMMAND testmain) \ No newline at end of file diff --git a/cmake/copy_res.cmake b/cmake/copy_res.cmake new file mode 100644 index 0000000..7a268e8 --- /dev/null +++ b/cmake/copy_res.cmake @@ -0,0 +1,15 @@ +################################################################################ +# CopyResources +################################################################################ +function(CopyResources src_dir dest_dir) + file(GLOB files ${src_dir}) + + foreach(item IN LISTS files) + get_filename_component(dest_filename ${item} NAME) + + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${item} + ${dest_dir}/${dest_filename} + ) + endforeach() +endfunction() \ No newline at end of file diff --git a/cmake/vcpkg.cmake b/cmake/vcpkg.cmake new file mode 100644 index 0000000..e00b1cd --- /dev/null +++ b/cmake/vcpkg.cmake @@ -0,0 +1,7 @@ +################################################################################ +# vcpkg +################################################################################ +if(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE) + set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" + CACHE STRING "") +endif() \ No newline at end of file diff --git a/glog b/glog deleted file mode 160000 index 6e46c12..0000000 --- a/glog +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6e46c125e3718ce64570883e2ca558b3c853a125 diff --git a/googletest b/googletest deleted file mode 160000 index 4ec4cd2..0000000 --- a/googletest +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4ec4cd23f486bf70efcc5d2caa40f24368f752e3 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index 192a19f..0000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,61 +0,0 @@ -cmake_minimum_required(VERSION 3.0) - -set(CMAKE_CXX_STANDARD 11) - -set(coregame_dir CoreGame/) -set(engine_dir Engine/) -set(utils_dir Utils/) - -file(GLOB_RECURSE common_sources ${engine_dir}*.cpp ${utils_dir}*.cpp ${coregame_dir}*.cpp) -file(GLOB_RECURSE common_headers ${engine_dir}*.h ${utils_dir}*.h ${coregame_dir}*.h) - -file(GLOB_RECURSE src_sources *.cpp) -file(GLOB_RECURSE src_headers *.h) - -# set(SFML_STATIC_LIBRARIES TRUE) - -# set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/libs/SFML-2.5.1-windows-vc15-64-bit/") - - -find_package( - SFML 2.5 - COMPONENTS system window graphics - REQUIRED) - -set(sources ${src_sources} ${src_headers} ${common_sources} ${common_headers}) - -add_executable(${PROJECT_NAME} ${sources}) - -find_library(GLOG_LIB glogd ${CMAKE_BINARY_DIR}/glog/Debug) -if(GLOG_LIB) - message("GLOG FOUND!!!") -else() - message("GLOG NOT FOUND!!!") -endif() - -target_link_libraries(${PROJECT_NAME} glog sfml-system sfml-window - sfml-graphics) - -set(BLUEPRINTS_DIR ../Blueprints) -file(GLOB blueprints ${BLUEPRINTS_DIR}/*.*) - -foreach(item IN LISTS blueprints) - get_filename_component(dest_filename ${item} NAME) - - add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${item} - $/${dest_filename} - ) -endforeach() - -set(FONT_DIR ../Font) -file(GLOB font ${FONT_DIR}/*.*) - -foreach(item IN LISTS font) - get_filename_component(dest_filename ${item} NAME) - - add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${item} - $/${dest_filename} - ) -endforeach() \ No newline at end of file