COSC-3P93-Project/Step 3/CMakeLists.txt

88 lines
3.0 KiB
CMake

cmake_minimum_required(VERSION 3.22)
project(Step_3)
set(CMAKE_CXX_STANDARD 20)
option(EnableDebugMenu "Enable the debug utils" OFF)
option(COMPILE_GUI "Enable compilation of the GUI utils" OFF)
option(COMPILE_OPENCL "Enable compilation of the OpenCL GPU Compute." OFF)
# used to debug memory related issues
if ((CMAKE_BUILD_TYPE MATCHES Debug))
if (UNIX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -g")
add_compile_options(-fsanitize=address)
add_link_options(-fsanitize=address)
endif()
set(COMPILER_DEBUG_ENABLED true)
else()
set(COMPILER_DEBUG_ENABLED false)
endif()
set(COMPILER_DEBUG_ENABLED_BOOL true)
if(EnableDebugMenu MATCHES ON)
message("debug mode")
set(DEBUG_ENABLED true)
else()
message("release mode")
set(DEBUG_ENABLED false)
endif(EnableDebugMenu MATCHES ON)
set(DEBUG_ENABLED_BOOL true)
#config stuff
configure_file(include/engine/config.h.in config.h @ONLY)
# include the config file
include_directories(${CMAKE_CURRENT_BINARY_DIR})
# enables AVX instructions. if you have issues, try disabling this.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
#Setup project source compilation
set(engine_source_dir "${PROJECT_SOURCE_DIR}/src/engine")
file(GLOB_RECURSE engine_source_files "${engine_source_dir}/*.cpp" "${engine_source_dir}/*.c")
# only want to attempt to compile graphics if user requests it
# plus we can only compile on X11 supported systems, so basically unix
if (COMPILE_GUI MATCHES ON AND UNIX)
message("Compiling with GUI.")
find_package(OpenGL REQUIRED)
find_package(X11)
if(NOT X11_FOUND)
message("X11 wasn't found on your system. Do you have the development libs? sudo apt install libx11-dev")
endif()
include_directories(${X11_INCLUDE_DIR})
set(graphics_source_dir "${PROJECT_SOURCE_DIR}/src/graphics")
file(GLOB_RECURSE graphics_source_files "${graphics_source_dir}/*.cpp" "${graphics_source_dir}/*.c")
endif()
# Windows should be able to handle opencl no problem.
# i decided that i wanted to use opencl due to it having a much nicer c99 language.
if (COMPILE_OPENCL MATCHES ON)
find_package(OpenCL)
if(NOT OpenCL_FOUND)
message("Unable to find OpenCL on your system. Do you have the required libs?")
endif()
include_directories(${OpenCL_INCLUDE_DIRS})
set(opencl_source_dir "${PROJECT_SOURCE_DIR}/src/opencl")
file(GLOB_RECURSE opencl_source_files "${opencl_source_dir}/*.cpp" "${opencl_source_dir}/*.c")
endif()
#Setup project header files
include_directories(${PROJECT_SOURCE_DIR}/include)
add_executable(${PROJECT_NAME} ${engine_source_files} ${graphics_source_files} ${opencl_source_files})
target_link_libraries(${PROJECT_NAME} pthread)
if (COMPILE_GUI MATCHES ON AND UNIX)
target_link_libraries(${PROJECT_NAME} OpenGL::GL OpenGL::GLU OpenGL::GLX)
target_link_libraries(${PROJECT_NAME} ${X11_LIBRARIES})
endif()
if (COMPILE_OPENCL MATCHES ON)
target_link_libraries(${PROJECT_NAME} ${OpenCL_LIBRARIES})
endif()