Implemented cmake for parallel building in emscripten/linux
This commit is contained in:
parent
cf6185bb50
commit
92ac7e5cf8
4
.gitignore
vendored
4
.gitignore
vendored
@ -377,3 +377,7 @@ Crawler/pixelGameEngine_wasm.o
|
||||
*.tiled-session
|
||||
/Crawler/Crawler.tiled-session
|
||||
/Crawler/assets/discordAPI.txt
|
||||
/CMakeFiles
|
||||
/CMakeCache.txt
|
||||
/cmake_install.cmake
|
||||
/Makefile
|
||||
|
368
CMakeLists.txt
Normal file
368
CMakeLists.txt
Normal file
@ -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()
|
@ -2,29 +2,7 @@ January 1st
|
||||
===========
|
||||
The Hub / NPC Interactions
|
||||
Save/Load Game
|
||||
- Save Inventory Items/Equips
|
||||
- Player Base Level/Stats/Accumulated Exp
|
||||
- Unlock Progress
|
||||
- World Map Location
|
||||
- Chapter #
|
||||
- Gold
|
||||
- Save File Name
|
||||
- Game Play Time
|
||||
|
||||
Load Game Screen:
|
||||
Save File Name
|
||||
Game Play Time
|
||||
Chapter #
|
||||
Level / Class
|
||||
|
||||
- Start a New Game File
|
||||
- Load a Game (Load list displays save files in reverse chronological order based on last access)
|
||||
- Playing Online (Save File Codes? Download save files? Provide a save file server?)
|
||||
|
||||
PC Version:
|
||||
NEW GAME -> Ask for Save File Name -> Saves the Game -> Starts the Game
|
||||
LOAD GAME -> Show Available Files -> Click to Load -> Start Game
|
||||
EMSCRIPTEN Version:
|
||||
EMSCRIPTEN Version: ???
|
||||
NEW GAME -> Ask for a User ID -> Ask for a Save File Name -> Saves the Game -> Starts the Game
|
||||
LOAD GAME -> Ask for a User ID -> Shows Available Files -> Click to Load -> Start Game
|
||||
|
||||
|
BIN
Crawler/pge.data
BIN
Crawler/pge.data
Binary file not shown.
Before Width: | Height: | Size: 16 MiB After Width: | Height: | Size: 16 MiB |
File diff suppressed because one or more lines are too long
BIN
Crawler/pge.wasm
BIN
Crawler/pge.wasm
Binary file not shown.
3
emscripten_build.ps1
Normal file
3
emscripten_build.ps1
Normal file
@ -0,0 +1,3 @@
|
||||
clear
|
||||
emcmake cmake .
|
||||
cmake --build . -j 8
|
1
emscripten_run.ps1
Normal file
1
emscripten_run.ps1
Normal file
@ -0,0 +1 @@
|
||||
emrun bin/index.html
|
Loading…
x
Reference in New Issue
Block a user