metalnes/CMakeLists.txt
2022-02-24 19:33:07 -08:00

204 lines
5 KiB
CMake

cmake_minimum_required(VERSION 3.1)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_BUILD_TYPE RelWithDebInfo )
project(MetalNes LANGUAGES C CXX)
set(APP_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/app)
set(COMMON_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/source)
set(EXTERNAL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external)
set(IMGUI_SOURCE_DIR ${EXTERNAL_DIR}/imgui)
set(DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/data)
add_subdirectory(${EXTERNAL_DIR}/hlsl2glslfork)
set(IMGUI_SOURCE
${IMGUI_SOURCE_DIR}/imgui.cpp
${IMGUI_SOURCE_DIR}/imgui_draw.cpp
${IMGUI_SOURCE_DIR}/imgui_widgets.cpp
${IMGUI_SOURCE_DIR}/imgui_demo.cpp
${IMGUI_SOURCE_DIR}/imgui_tables.cpp
)
set(TRIANGLE_SOURCE
${EXTERNAL_DIR}/triangle/triangle.c
${EXTERNAL_DIR}/triangle/tricall.c
)
set(COMMON_SOURCE
${COMMON_SOURCE_DIR}/Core/Matrix.cpp
${COMMON_SOURCE_DIR}/Core/File.cpp
${COMMON_SOURCE_DIR}/Core/DateTime.cpp
${COMMON_SOURCE_DIR}/Core/Log.cpp
${COMMON_SOURCE_DIR}/Core/Path.cpp
${COMMON_SOURCE_DIR}/Core/StopWatch.cpp
${COMMON_SOURCE_DIR}/Core/String.cpp
${COMMON_SOURCE_DIR}/metalnes/audio_device.cpp
${COMMON_SOURCE_DIR}/metalnes/chiprender.cpp
${COMMON_SOURCE_DIR}/metalnes/logger.cpp
${COMMON_SOURCE_DIR}/metalnes/nesdisasm.cpp
${COMMON_SOURCE_DIR}/metalnes/nesrom.cpp
${COMMON_SOURCE_DIR}/metalnes/raster_device.cpp
${COMMON_SOURCE_DIR}/metalnes/serializer.cpp
${COMMON_SOURCE_DIR}/metalnes/system.cpp
${COMMON_SOURCE_DIR}/metalnes/triangulate.cpp
${COMMON_SOURCE_DIR}/metalnes/wire_defs.cpp
${COMMON_SOURCE_DIR}/metalnes/wire_gui.cpp
${COMMON_SOURCE_DIR}/metalnes/wire_module.cpp
${COMMON_SOURCE_DIR}/metalnes/wire_node_resolver.cpp
${COMMON_SOURCE_DIR}/render/context.cpp
${COMMON_SOURCE_DIR}/imgui_support.cpp
${COMMON_SOURCE_DIR}/Application.cpp
${COMMON_SOURCE_DIR}/UnitTests.cpp
${COMMON_SOURCE_DIR}/AudioFileWriter.cpp
)
if (APPLE)
set(PLATFORM_SOURCE
${COMMON_SOURCE_DIR}/Platform/OSX/CoreAudio.mm
)
elseif (UNIX)
set(PLATFORM_SOURCE
)
elseif (WIN32)
set(PLATFORM_SOURCE
)
else()
message(FATAL_ERROR "Target platform not supported")
endif()
include_directories(
${COMMON_SOURCE_DIR}
)
if (APPLE)
add_executable(MetalNes
${TRIANGLE_SOURCE}
${IMGUI_SOURCE}
${COMMON_SOURCE}
${PLATFORM_SOURCE}
# ${APP_SOURCE_DIR}/OSX/main.mm
${APP_SOURCE_DIR}/Linux/main.cpp
)
target_link_libraries(
MetalNes
hlsl2glsl
"-framework CoreGraphics"
"-framework Foundation"
"-framework AppKit"
"-framework AudioToolbox"
"-framework CoreAudio"
"-framework Metal"
"-framework MetalKit"
"-framework GameController"
)
set_property (TARGET MetalNes APPEND_STRING PROPERTY COMPILE_FLAGS "-fobjc-arc")
elseif (EMSCRIPTEN)
include_directories(
${INCLUDE_DIRS}
)
SET(APP_NAME ${CMAKE_PROJECT_NAME} )
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s USE_ZLIB -Wno-deprecated-register -Wno-version-check")
add_executable(MetalNes
${TRIANGLE_SOURCE}
${IMGUI_SOURCE}
${COMMON_SOURCE}
${PLATFORM_SOURCE}
# ${COMMON_SOURCE_DIR}/Platform/OSX/main.mm
${APP_SOURCE_DIR}/Linux/main.cpp
${COMMON_SOURCE_DIR}/render/gles/context_gles.cpp
# ${APP_SOURCE_DIR}/emscripten/emscripten_main.cpp
)
# Include libraries needed for lib
target_link_libraries(${APP_NAME}
${LIBS}
hlsl2glsl
)
# set(SHELL_FILE ${CMAKE_SOURCE_DIR}/app/emscripten/shell_minimal.html )
set(SHELL_FILE ${CMAKE_SOURCE_DIR}/app/emscripten/emscripten_shell.html )
set_target_properties(${APP_NAME} PROPERTIES LINK_FLAGS
"--preload-file ${CMAKE_SOURCE_DIR}/data@/assets \
--shell-file ${SHELL_FILE} \
-emrun \
-s TOTAL_MEMORY=536870912 \
-s LLD_REPORT_UNDEFINED \
-s NO_EXIT_RUNTIME=0 \
-s DEMANGLE_SUPPORT=1 \
-s WASM=1 \
-s ASSERTIONS=1 \
-s USE_WEBGL2=1 \
-s USE_SDL=2 \
-s MIN_WEBGL_VERSION=2 \
-s MAX_WEBGL_VERSION=2 \
-s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1 \
-mnontrapping-fptoint \
-lopenal"
)
set(CMAKE_EXECUTABLE_SUFFIX ".html")
# set_target_properties(${APP_NAME} PROPERTIES OUTPUT_NAME "metalnes.html")
elseif (UNIX)
target_link_libraries(
MetalNes
hlsl2glsl
pthread
)
elseif (WIN32)
target_link_libraries(
MetalNes
hlsl2glsl
)
else()
message(FATAL_ERROR "Target platform not supported")
endif()