mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-29 22:37:50 +00:00
Add CMake build system
This should hopefully work torwards compatibility with more systems. I've tried to make this as general as possible but some small assumptions about the compiler are made. I've also tried to recreate the build process as closely as possible, but I had to change some things slightly to work with CMake (version strings, mainly). For now, it doesn't allow in-source builds, as that could overwrite the Makefile. This adds: - Support for more build systems - Automatic dependency generation - Performance gains (especially when using i.e. Ninja) Defaults to Release build.
This commit is contained in:
99
src/CMakeLists.txt
Normal file
99
src/CMakeLists.txt
Normal file
@@ -0,0 +1,99 @@
|
||||
#
|
||||
# This file is part of RGBDS.
|
||||
#
|
||||
# Copyright (c) 2020 RGBDS contributors.
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
set(common_src
|
||||
"extern/err.c"
|
||||
"extern/getopt.c"
|
||||
"version.c"
|
||||
)
|
||||
|
||||
BISON_TARGET(ASMy "asm/asmy.y"
|
||||
"${PROJECT_SOURCE_DIR}/src/asm/asmy.c"
|
||||
DEFINES_FILE "${PROJECT_SOURCE_DIR}/src/asm/asmy.h"
|
||||
)
|
||||
|
||||
# Lexer is not present yet
|
||||
if(False) # FLEX_FOUND
|
||||
FLEX_TARGET(Lexer "asm/lexer.l"
|
||||
"${PROJECT_SOURCE_DIR}/src/asm/lexer.c"
|
||||
)
|
||||
ADD_FLEX_BISON_DEPENDENCY(Lexer ASMy)
|
||||
set(Lexer_SOURCE "${FLEX_Lexer_OUTPUTS}")
|
||||
else()
|
||||
set(Lexer_SOURCE "asm/lexer.c")
|
||||
endif()
|
||||
|
||||
set(rgbasm_src
|
||||
"${BISON_ASMy_OUTPUT_SOURCE}"
|
||||
"${Lexer_SOURCE}"
|
||||
"asm/charmap.c"
|
||||
"asm/fstack.c"
|
||||
"asm/globlex.c"
|
||||
"asm/macro.c"
|
||||
"asm/main.c"
|
||||
"asm/math.c"
|
||||
"asm/output.c"
|
||||
"asm/rpn.c"
|
||||
"asm/section.c"
|
||||
"asm/symbol.c"
|
||||
"asm/util.c"
|
||||
"asm/warning.c"
|
||||
"extern/utf8decoder.c"
|
||||
"hashmap.c"
|
||||
"linkdefs.c"
|
||||
)
|
||||
|
||||
set(rgbfix_src
|
||||
"fix/main.c"
|
||||
)
|
||||
|
||||
set(rgbgfx_src
|
||||
"gfx/gb.c"
|
||||
"gfx/main.c"
|
||||
"gfx/makepng.c"
|
||||
)
|
||||
|
||||
set(rgblink_src
|
||||
"link/assign.c"
|
||||
"link/main.c"
|
||||
"link/object.c"
|
||||
"link/output.c"
|
||||
"link/patch.c"
|
||||
"link/script.c"
|
||||
"link/section.c"
|
||||
"link/symbol.c"
|
||||
"hashmap.c"
|
||||
"linkdefs.c"
|
||||
)
|
||||
|
||||
foreach(PROG "asm" "fix" "gfx" "link")
|
||||
add_executable(rgb${PROG}
|
||||
${rgb${PROG}_src}
|
||||
${common_src}
|
||||
)
|
||||
endforeach()
|
||||
|
||||
if(CMAKE_VERSION VERSION_LESS 2.8.12)
|
||||
add_definitions(${PNG_DEFINITIONS})
|
||||
include_directories(${PNG_INCLUDE_DIRS})
|
||||
target_link_libraries(rgbgfx ${PNG_LIBRARIES})
|
||||
else()
|
||||
target_compile_definitions(rgbgfx PRIVATE ${PNG_DEFINITIONS})
|
||||
target_include_directories(rgbgfx PRIVATE ${PNG_INCLUDE_DIRS})
|
||||
target_link_libraries(rgbgfx PRIVATE ${PNG_LIBRARIES})
|
||||
endif()
|
||||
|
||||
include(CheckLibraryExists)
|
||||
check_library_exists("m" "sin" "" HAS_LIBM)
|
||||
if(HAS_LIBM)
|
||||
if(CMAKE_VERSION VERSION_LESS 2.8.12)
|
||||
target_link_libraries(rgbasm LINK_PRIVATE "m")
|
||||
else()
|
||||
target_link_libraries(rgbasm PRIVATE "m")
|
||||
endif()
|
||||
endif()
|
||||
Reference in New Issue
Block a user