parent
cf6185bb50
commit
92ac7e5cf8
@ -0,0 +1,368 @@ |
|||||||
|
# require version 3.10 or higher |
||||||
|
cmake_minimum_required(VERSION 3.10) |
||||||
|
|
||||||
|
# |
||||||
|
# Project |
||||||
|
# |
||||||
|
# - dictates the output executable filename |
||||||
|
# |
||||||
|
project(Crawler) |
||||||
|
|
||||||
|
add_compile_options("-s" "USE_FREETYPE=1") |
||||||
|
add_compile_options("-O2") |
||||||
|
|
||||||
|
# Options you can set via command-line |
||||||
|
option(HAS_TERMINAL "Show a terminal window for STDOUT/STDERR" ON) |
||||||
|
option(USE_ALSA "Force using ALSA as audio backend (Linux-only)") |
||||||
|
option(USE_PULSEAUDIO "Force using PulseAudio as audio backend (Linux-only)") |
||||||
|
option(USE_SDL2_MIXER "Force using SDL2_mixer as audio backend") |
||||||
|
|
||||||
|
# |
||||||
|
# C_CXX_SOURCES_DIR |
||||||
|
# |
||||||
|
# - the place where your C/C++ source files are located |
||||||
|
# |
||||||
|
set(C_CXX_SOURCES_DIR "Crawler") |
||||||
|
|
||||||
|
# |
||||||
|
# C_CXX_HEADERS_DIR |
||||||
|
# |
||||||
|
# - the place where your C/C++ header files are located |
||||||
|
# |
||||||
|
set(C_CXX_HEADERS_DIR "Crawler") |
||||||
|
|
||||||
|
# |
||||||
|
# ASSETS_DIR |
||||||
|
# |
||||||
|
# - the place where your pictures, sound files, etc.. live |
||||||
|
# |
||||||
|
set(ASSETS_DIR "Crawler/assets") |
||||||
|
|
||||||
|
########################################################################## |
||||||
|
# DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING!! # |
||||||
|
########################################################################## |
||||||
|
|
||||||
|
# Set C++ Standards |
||||||
|
set(CMAKE_CXX_STANDARD 20) |
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON) |
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF) |
||||||
|
|
||||||
|
# Build utilizing 8 cores simultaneously. |
||||||
|
set(CMAKE_BUILD_PARALLEL_LEVEL 8) |
||||||
|
|
||||||
|
# output executable basename |
||||||
|
set(OutputExecutable "${CMAKE_PROJECT_NAME}") |
||||||
|
|
||||||
|
###################################################################### |
||||||
|
# Directories |
||||||
|
|
||||||
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") |
||||||
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") |
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") |
||||||
|
|
||||||
|
# We need to specify the output for each configuration to make it work |
||||||
|
# on Visual Studio solutions. |
||||||
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/lib") |
||||||
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/lib") |
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/bin") |
||||||
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/lib") |
||||||
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/lib") |
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/bin") |
||||||
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/lib") |
||||||
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/lib") |
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/bin") |
||||||
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_PROFILE "${CMAKE_BINARY_DIR}/lib") |
||||||
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_PROFILE "${CMAKE_BINARY_DIR}/lib") |
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_PROFILE "${CMAKE_BINARY_DIR}/bin") |
||||||
|
|
||||||
|
set(SOURCE_DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${ASSETS_DIR}) |
||||||
|
set(SOURCE_CXX_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${C_CXX_HEADERS_DIR}) |
||||||
|
set(SOURCE_CXX_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${C_CXX_SOURCES_DIR}) |
||||||
|
|
||||||
|
# Source Files are Curated Here |
||||||
|
file( |
||||||
|
GLOB SOURCE_CXX_FILES |
||||||
|
"${SOURCE_CXX_SRC_DIR}/*.cpp" |
||||||
|
) |
||||||
|
|
||||||
|
# Search in the "cmake" directory for additional CMake modules. |
||||||
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) |
||||||
|
|
||||||
|
# Executable aka binary output |
||||||
|
add_executable(${OutputExecutable} ${SOURCE_CXX_FILES}) |
||||||
|
|
||||||
|
###################################################################### |
||||||
|
# MacOS |
||||||
|
###################################################################### |
||||||
|
|
||||||
|
|
||||||
|
if(APPLE) |
||||||
|
|
||||||
|
# OpenGL |
||||||
|
set(OpenGL_GL_PREFERENCE LEGACY) |
||||||
|
find_package(OpenGL REQUIRED) |
||||||
|
include_directories(${OpenGL_INCLUDE_DIRS}) |
||||||
|
target_link_libraries(${OutputExecutable} ${OpenGL_LIBRARIES} OpenGL::GL) |
||||||
|
|
||||||
|
# Carbon |
||||||
|
FIND_LIBRARY(CARBON_LIBRARY Carbon) |
||||||
|
target_link_libraries(${OutputExecutable} ${CARBON_LIBRARY}) |
||||||
|
|
||||||
|
# GLUT |
||||||
|
find_package(GLUT REQUIRED) |
||||||
|
target_link_libraries(${OutputExecutable} ${GLUT_LIBRARIES}) |
||||||
|
|
||||||
|
# Threads |
||||||
|
find_package(Threads REQUIRED) |
||||||
|
target_link_libraries(${OutputExecutable} Threads::Threads) |
||||||
|
include_directories(${Threads_INCLUDE_DIRS}) |
||||||
|
|
||||||
|
# SDL2_mixer |
||||||
|
set(USE_SDL2_MIXER ON) |
||||||
|
|
||||||
|
find_package(PNG REQUIRED) |
||||||
|
target_link_libraries(${OutputExecutable} PNG::PNG) |
||||||
|
include_directories(${PNG_INCLUDE_DIRS}) |
||||||
|
|
||||||
|
endif() # APPLE |
||||||
|
|
||||||
|
###################################################################### |
||||||
|
# Windows: MinGW |
||||||
|
###################################################################### |
||||||
|
if(WIN32 AND MINGW) |
||||||
|
|
||||||
|
# OpenGL |
||||||
|
set(OpenGL_GL_PREFERENCE LEGACY) |
||||||
|
find_package(OpenGL REQUIRED) |
||||||
|
include_directories(${OpenGL_INCLUDE_DIRS}) |
||||||
|
target_link_libraries(${OutputExecutable} ${OpenGL_LIBRARIES} OpenGL::GL) |
||||||
|
|
||||||
|
if (NOT HAS_TERMINAL) |
||||||
|
target_link_libraries(${OutputExecutable} -mwindows -municode) |
||||||
|
endif (NOT HAS_TERMINAL) |
||||||
|
|
||||||
|
# GDI+ |
||||||
|
set(GDIPLUS_LIBRARY gdiplus) |
||||||
|
target_link_libraries(${OutputExecutable} ${GDIPLUS_LIBRARY}) |
||||||
|
|
||||||
|
# Shlwapi |
||||||
|
set(SHLWAPI_LIBRARY shlwapi) |
||||||
|
target_link_libraries(${OutputExecutable} ${SHLWAPI_LIBRARY}) |
||||||
|
|
||||||
|
# Dwmapi |
||||||
|
set(DWMAPI_LIBRARY dwmapi) |
||||||
|
target_link_libraries(${OutputExecutable} ${DWMAPI_LIBRARY}) |
||||||
|
|
||||||
|
if(NOT USE_SDL2_MIXER) |
||||||
|
|
||||||
|
# winmm |
||||||
|
set(WINMM_LIBRARY winmm) |
||||||
|
target_link_libraries(${OutputExecutable} ${WINMM_LIBRARY}) |
||||||
|
|
||||||
|
endif() # NOT USE_SDL2_MIXER |
||||||
|
|
||||||
|
|
||||||
|
# stdc++fs |
||||||
|
target_link_libraries(${OutputExecutable} stdc++fs) |
||||||
|
|
||||||
|
endif() |
||||||
|
|
||||||
|
###################################################################### |
||||||
|
# Windows: Visual Studio / MSVC |
||||||
|
###################################################################### |
||||||
|
if(WIN32 AND MSVC) |
||||||
|
|
||||||
|
# OpenGL |
||||||
|
set(OpenGL_GL_PREFERENCE LEGACY) |
||||||
|
find_package(OpenGL REQUIRED) |
||||||
|
include_directories(${OpenGL_INCLUDE_DIRS}) |
||||||
|
target_link_libraries(${OutputExecutable} ${OpenGL_LIBRARIES} OpenGL::GL) |
||||||
|
|
||||||
|
# set the startup project to the target executable instead of ALL_BUILD |
||||||
|
set_property( |
||||||
|
DIRECTORY |
||||||
|
${CMAKE_CURRENT_SOURCE_DIR} |
||||||
|
PROPERTY |
||||||
|
VS_STARTUP_PROJECT |
||||||
|
${OutputExecutable} |
||||||
|
) |
||||||
|
|
||||||
|
# set working directory for Visual Studio Debugger |
||||||
|
set_target_properties( |
||||||
|
${OutputExecutable} PROPERTIES |
||||||
|
VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/bin" |
||||||
|
) |
||||||
|
|
||||||
|
# set subsytem, console if HAS_TERMINAL is true. windows if not |
||||||
|
if (HAS_TERMINAL) |
||||||
|
target_link_options(${OutputExecutable} PRIVATE "/SUBSYSTEM:CONSOLE") |
||||||
|
else () |
||||||
|
target_link_options(${OutputExecutable} PRIVATE "/SUBSYSTEM:WINDOWS") |
||||||
|
endif () |
||||||
|
|
||||||
|
# GDI+ |
||||||
|
set(GDIPLUS_LIBRARY gdiplus) |
||||||
|
target_link_libraries(${OutputExecutable} ${GDIPLUS_LIBRARY}) |
||||||
|
|
||||||
|
# Shlwapi |
||||||
|
set(SHLWAPI_LIBRARY shlwapi) |
||||||
|
target_link_libraries(${OutputExecutable} ${SHLWAPI_LIBRARY}) |
||||||
|
|
||||||
|
# Dwmapi |
||||||
|
set(DWMAPI_LIBRARY dwmapi) |
||||||
|
target_link_libraries(${OutputExecutable} ${DWMAPI_LIBRARY}) |
||||||
|
|
||||||
|
if(NOT USE_SDL2_MIXER) |
||||||
|
|
||||||
|
# winmm |
||||||
|
set(WINMM_LIBRARY winmm) |
||||||
|
target_link_libraries(${OutputExecutable} ${WINMM_LIBRARY}) |
||||||
|
|
||||||
|
endif() |
||||||
|
|
||||||
|
endif() # Visual Studio / MSVC |
||||||
|
|
||||||
|
###################################################################### |
||||||
|
# Linux: using anything? |
||||||
|
###################################################################### |
||||||
|
if(UNIX AND NOT APPLE AND NOT EMSCRIPTEN) |
||||||
|
|
||||||
|
# OpenGL |
||||||
|
set(OpenGL_GL_PREFERENCE LEGACY) |
||||||
|
find_package(OpenGL REQUIRED) |
||||||
|
include_directories(${OpenGL_INCLUDE_DIRS}) |
||||||
|
target_link_libraries(${OutputExecutable} ${OpenGL_LIBRARIES} OpenGL::GL) |
||||||
|
|
||||||
|
# X11 |
||||||
|
find_package(X11 REQUIRED) |
||||||
|
target_link_libraries(${OutputExecutable} X11::X11) |
||||||
|
|
||||||
|
include_directories(${X11_INCLUDE_DIRS}) |
||||||
|
|
||||||
|
# Threads |
||||||
|
find_package(Threads REQUIRED) |
||||||
|
target_link_libraries(${OutputExecutable} Threads::Threads) |
||||||
|
include_directories(${Threads_INCLUDE_DIRS}) |
||||||
|
|
||||||
|
# TODO: sanity checks |
||||||
|
|
||||||
|
if(USE_ALSA) |
||||||
|
|
||||||
|
# ALSA |
||||||
|
find_package(ALSA REQUIRED) |
||||||
|
target_link_libraries(${OutputExecutable} ALSA::ALSA) |
||||||
|
include_directories(${ALSA_INCLUDE_DIRS}) |
||||||
|
add_compile_definitions(SOUNDWAVE_USING_ALSA=1) |
||||||
|
|
||||||
|
elseif(USE_SDL2_MIXER) |
||||||
|
|
||||||
|
# Because SDL2_mixer can be used on multiple platforms, we |
||||||
|
# defer it's inclusion until outside of the platform/toolchain |
||||||
|
# selection logic. |
||||||
|
|
||||||
|
else() # PulseAudio is Default |
||||||
|
|
||||||
|
# PulseAudio |
||||||
|
find_package(PulseAudio REQUIRED) |
||||||
|
target_link_libraries(${OutputExecutable} ${PULSEAUDIO_LIBRARY} pulse-simple) |
||||||
|
include_directories(${PULSEAUDIO_INCLUDE_DIR}) |
||||||
|
|
||||||
|
add_compile_definitions(SOUNDWAVE_USING_PULSE=1) |
||||||
|
|
||||||
|
endif() |
||||||
|
|
||||||
|
find_package(PNG REQUIRED) |
||||||
|
target_link_libraries(${OutputExecutable} PNG::PNG) |
||||||
|
include_directories(${PNG_INCLUDE_DIRS}) |
||||||
|
|
||||||
|
# stdc++fs |
||||||
|
target_link_libraries(${OutputExecutable} stdc++fs) |
||||||
|
|
||||||
|
endif() # Linux |
||||||
|
|
||||||
|
###################################################################### |
||||||
|
# Emscripten |
||||||
|
###################################################################### |
||||||
|
if (EMSCRIPTEN) |
||||||
|
|
||||||
|
# Generate an HTML file |
||||||
|
set(CMAKE_EXECUTABLE_SUFFIX .html) |
||||||
|
|
||||||
|
# Build Cache: SDL2_mixer, libpng, zlib |
||||||
|
execute_process(COMMAND "${EMSCRIPTEN_ROOT_PATH}/embuilder${EMCC_SUFFIX}" build sdl2_mixer freetype libpng zlib) |
||||||
|
|
||||||
|
if(EXISTS "${SOURCE_DATA_DIR}" AND IS_DIRECTORY "${SOURCE_DATA_DIR}") |
||||||
|
target_link_options( |
||||||
|
${OutputExecutable} |
||||||
|
PRIVATE |
||||||
|
-sALLOW_MEMORY_GROWTH=1 |
||||||
|
-sMAX_WEBGL_VERSION=2 |
||||||
|
-sMIN_WEBGL_VERSION=2 |
||||||
|
-sUSE_LIBPNG=1 |
||||||
|
-sUSE_FREETYPE=1 |
||||||
|
-sLLD_REPORT_UNDEFINED |
||||||
|
-sFETCH=1 |
||||||
|
-std=c++20 |
||||||
|
--proxy-to-worker |
||||||
|
-O2 |
||||||
|
--preload-file ${SOURCE_DATA_DIR}@assets) |
||||||
|
else() |
||||||
|
target_link_options( |
||||||
|
${OutputExecutable} |
||||||
|
PRIVATE |
||||||
|
-sALLOW_MEMORY_GROWTH=1 |
||||||
|
-sMAX_WEBGL_VERSION=2 |
||||||
|
-sMIN_WEBGL_VERSION=2 |
||||||
|
-sUSE_LIBPNG=1 |
||||||
|
-sUSE_FREETYPE=1 |
||||||
|
-sFETCH=1 |
||||||
|
-std=c++20 |
||||||
|
--proxy-to-worker |
||||||
|
-O2 |
||||||
|
-sLLD_REPORT_UNDEFINED) |
||||||
|
endif() |
||||||
|
|
||||||
|
endif() # Emscripten |
||||||
|
|
||||||
|
|
||||||
|
if(USE_SDL2_MIXER AND NOT EMSCRIPTEN) |
||||||
|
|
||||||
|
# SDL2_mixer |
||||||
|
find_package(SDL2_mixer REQUIRED) |
||||||
|
target_link_libraries(${OutputExecutable} SDL2_mixer::SDL2_mixer) |
||||||
|
|
||||||
|
add_compile_definitions(SOUNDWAVE_USING_SDLMIXER=1) |
||||||
|
|
||||||
|
endif() # USE_SDL2_MIXER |
||||||
|
|
||||||
|
|
||||||
|
###################################################################### |
||||||
|
# Set include directory |
||||||
|
###################################################################### |
||||||
|
if(IS_DIRECTORY ${SOURCE_CXX_INCLUDE_DIR}) |
||||||
|
include_directories(${SOURCE_CXX_INCLUDE_DIR}) |
||||||
|
endif() |
||||||
|
|
||||||
|
|
||||||
|
###################################################################### |
||||||
|
# Copy assets/ directory target |
||||||
|
###################################################################### |
||||||
|
|
||||||
|
set(DATA_OUTPUT_DIR ${CMAKE_BINARY_DIR}/bin/${ASSETS_DIR}) |
||||||
|
|
||||||
|
file(GLOB_RECURSE src_data_files |
||||||
|
RELATIVE ${SOURCE_DATA_DIR}/ "${SOURCE_DATA_DIR}/*.*" "${SOURCE_DATA_DIR}/*") |
||||||
|
foreach(fn ${src_data_files}) |
||||||
|
add_custom_command( |
||||||
|
OUTPUT ${DATA_OUTPUT_DIR}/${fn} |
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${SOURCE_DATA_DIR}/${fn} ${DATA_OUTPUT_DIR}/${fn} |
||||||
|
MAIN_DEPENDENCY ${SOURCE_DATA_DIR}/${fn}) |
||||||
|
list(APPEND out_data_files ${DATA_OUTPUT_DIR}/${fn}) |
||||||
|
endforeach() |
||||||
|
|
||||||
|
add_custom_target(copy_data DEPENDS ${out_data_files}) |
||||||
|
|
||||||
|
# Copy Asset Files, if not Emscripten |
||||||
|
if (NOT EMSCRIPTEN) |
||||||
|
add_dependencies(${OutputExecutable} copy_data) |
||||||
|
endif() |
Before Width: | Height: | Size: 16 MiB After Width: | Height: | Size: 16 MiB |
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -0,0 +1,3 @@ |
|||||||
|
clear |
||||||
|
emcmake cmake . |
||||||
|
cmake --build . -j 8 |
@ -0,0 +1 @@ |
|||||||
|
emrun bin/index.html |
Loading…
Reference in new issue