initial commit

This commit is contained in:
Nicole O'Connor 2024-01-01 20:08:41 -08:00
commit 31c56d972c
7 changed files with 193 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
build/**

39
CMakeLists.txt Normal file
View File

@ -0,0 +1,39 @@
cmake_minimum_required(VERSION 3.16)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
include(Colours)
include(Binaries)
project(bootlatch VERSION 0.1)
string(TIMESTAMP BUILD_TIME)
execute_process(COMMAND conan install ${CMAKE_SOURCE_DIR} --output-folder=${CMAKE_BINARY_DIR} --build missing)
include(${CMAKE_BINARY_DIR}/conan_toolchain.cmake)
set(CMAKE_CXX_STANDARD 17)
# nlohmann/json
find_package(nlohmann_json)
include_directories(${nlohmann_json_INCLUDE_DIR})
include_directories(include)
include_directories(ext_include)
include_directories(${CMAKE_BINARY_DIR}/include)
# docs
find_package(Doxygen)
if (DOXYGEN_FOUND)
configure_file(${CMAKE_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
add_custom_target(doc
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating documentation with doxygen"
VERBATIM)
endif()
build_executable(TARGET bootlatch
SUBDIRS bootlatch)
install(TARGETS bootlatch RUNTIME)

80
cmake/Binaries.cmake Normal file
View File

@ -0,0 +1,80 @@
include(GenerateExportHeader)
link_directories(${CMAKE_CURRENT_BINARY_DIR})
set(BUILD_SHARED_LIBS ON)
if (MSVC)
add_compile_options("/utf-8")
endif()
function(build_library)
set(multiValueArgs SUBDIRS DEPENDS LIBRARIES)
set(oneValueArgs TARGET)
cmake_parse_arguments(build_library "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(target ${build_library_TARGET})
set(targetsources)
foreach(subdir ${build_library_SUBDIRS})
set(found_files)
file(GLOB_RECURSE found_files RELATIVE "${CMAKE_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/src/${subdir}/*.cpp")
set(targetsources ${targetsources} ${found_files})
endforeach()
if (MSVC AND EXISTS "${CMAKE_SOURCE_DIR}/res/${target}.rc")
set(targetsources ${targetsources} "res/${target}.rc")
endif()
add_library(${target} SHARED ${targetsources})
if (MSVC)
set_target_properties(${target} PROPERTIES PREFIX "")
set_target_properties(${target} PROPERTIES LINK_FLAGS "/MAP")
GENERATE_EXPORT_HEADER(${target}
BASE_NAME ${target}
EXPORT_MACRO_NAME ${target}_EXPORT
EXPORT_FILE_NAME include/${target}_Export.h
STATIC_DEFINE ${target}_BUILT_AS_STATIC)
endif()
if (build_library_LIBRARIES)
foreach (library ${build_library_LIBRARIES})
target_link_libraries(${target} ${library})
endforeach()
endif()
if (build_library_DEPENDS)
add_dependencies(${target} ${build_library_DEPENDS})
endif()
endfunction()
function(build_executable)
set(multiValueArgs SUBDIRS DEPENDS LIBRARIES)
set(oneValueArgs TARGET)
cmake_parse_arguments(build_executable "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(target ${build_executable_TARGET})
set(targetsources)
foreach(subdir ${build_executable_SUBDIRS})
set(found_files)
file(GLOB_RECURSE found_files RELATIVE "${CMAKE_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/src/${subdir}/*.cpp")
set(targetsources ${targetsources} ${found_files})
endforeach()
if (MSVC AND EXISTS "${CMAKE_SOURCE_DIR}/res/${target}.rc")
set(targetsources ${targetsources} "res/${target}.rc")
endif()
add_executable(${target} ${targetsources})
if (MSVC)
# tells MSVC to use int main() but still hide the console window
set_target_properties(${target} PROPERTIES LINK_FLAGS "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
endif()
if (build_executable_LIBRARIES)
foreach (library ${build_executable_LIBRARIES})
target_link_libraries(${target} ${library})
endforeach()
endif()
if (build_executable_DEPENDS)
add_dependencies(${target} ${build_executable_DEPENDS})
endif()
endfunction()

24
cmake/Colours.cmake Normal file
View File

@ -0,0 +1,24 @@
# basically an assembled version of https://stackoverflow.com/questions/18968979/how-to-get-colorized-output-with-cmake
# spelled with a u because the guy in the answer seemed to insist on it
if(NOT MSVC)
string(ASCII 27 Esc)
set(ColourReset "${Esc}[0m")
set(ColourBold "${Esc}[1m")
set(Red "${Esc}[0;31m")
set(Green "${Esc}[0;32m")
set(Yellow "${Esc}[0;33m")
set(Blue "${Esc}[0;34m")
set(Magenta "${Esc}[0;35m")
set(Cyan "${Esc}[0;36m")
set(White "${Esc}[0;37m")
set(BoldRed "${Esc}[1;31m")
set(BoldGreen "${Esc}[1;32m")
set(BoldYellow "${Esc}[1;33m")
set(BoldBlue "${Esc}[1;34m")
set(BoldMagenta "${Esc}[1;35m")
set(BoldCyan "${Esc}[1;36m")
set(BoldWhite "${Esc}[1;37m")
endif()

37
cmake/Qt.cmake Normal file
View File

@ -0,0 +1,37 @@
set(QT_VERSION_STR "5.15.2")
set(CMAKE_PREFIX_PATH "C:\\Qt\\${QT_VERSION_STR}\\msvc2019_64")
find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
set(QT_UIC_EXECUTABLE "C:\\Qt\\${QT_VERSION_STR}\\msvc2019_64\\bin\\uic.exe")
file(STRINGS "${CMAKE_SOURCE_DIR}/res/moc.txt" mocfiles)
set(mocdeps)
foreach(moctgt ${mocfiles})
string(REPLACE "include/" "include/moc/" outfile ${moctgt})
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${outfile}"
COMMAND moc ${CMAKE_SOURCE_DIR}/${moctgt} -o ${CMAKE_CURRENT_BINARY_DIR}/${outfile}
COMMENT "Running moc for ${outfile}..."
DEPENDS "${CMAKE_SOURCE_DIR}/${moctgt}")
set (mocdeps ${mocdeps} ${outfile})
endforeach()
file(GLOB_RECURSE uilist RELATIVE "${CMAKE_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/res/ui/*.ui")
set(uicsources)
foreach(uifile ${uilist})
string(REGEX REPLACE "res/ui/" "" uiname ${uifile})
string(REGEX REPLACE ".ui\$" "" uiname ${uiname})
string(REGEX REPLACE "/" "_" uiname ${uiname})
# res/ui/dlg/license.ui should result in ${uiname} being "dlg_license" at this point
set(headerfile "${CMAKE_CURRENT_BINARY_DIR}/include/ui_${uiname}.h")
add_custom_command(OUTPUT "${headerfile}" PRE_BUILD
COMMAND ${QT_UIC_EXECUTABLE} -o "${headerfile}" "${CMAKE_SOURCE_DIR}/${uifile}"
DEPENDS "${CMAKE_SOURCE_DIR}/${uifile}"
COMMENT "Qt UIC: ${BoldCyan}${uifile}${ColourReset}")
set(uicsources ${uicsources} "${headerfile}")
endforeach()
add_custom_target(qtgenerated DEPENDS ${mocdeps} ${uicsources})

6
conanfile.txt Normal file
View File

@ -0,0 +1,6 @@
[requires]
nlohmann_json/3.11.2
[generators]
CMakeDeps
CMakeToolchain

View File

@ -0,0 +1,6 @@
#include <iostream>
int main(int argc, char* argv[]) {
std::cout << "It works!" << std::endl;
return 0;
}