ref: 79f293c3d70f58a7810ed36d6ef28353595011f2
parent: 8c765883fb21e117ee32a6602a4fe3c2f9657feb
parent: 819c36943e7d950a078563051ccc07796408b042
author: Eldred Habert <[email protected]>
date: Mon Jul 20 12:02:47 EDT 2020
Merge pull request #529 from JL2210/cmake Add CMake build system
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,9 @@
*.o
*.exe
.checkpatch-camelcase.*
+CMakeCache.txt
+CMakeFiles
+cmake_install.cmake
test/pokecrystal
test/pokered
--- /dev/null
+++ b/CMakeLists.txt
@@ -1,0 +1,71 @@
+#
+# This file is part of RGBDS.
+#
+# Copyright (c) 2020 RGBDS contributors.
+#
+# SPDX-License-Identifier: MIT
+#
+
+cmake_minimum_required(VERSION 2.8.8)
+
+cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
+
+set(RGBDS_VER 0.4.0)
+set(RGBDS_DESC "Rednex Game Boy Development System")
+
+if(CMAKE_VERSION VERSION_LESS 3.0)
+ project(rgbds C)
+ set(PROJECT_VERSION "${RGBDS_VER}")
+else()
+ if(CMAKE_VERSION VERSION_LESS 3.9)
+ project(rgbds VERSION "${RGBDS_VER}"
+ LANGUAGES C)
+ else()
+ project(rgbds VERSION "${RGBDS_VER}"
+ DESCRIPTION "${RGBDS_DESC}"
+ LANGUAGES C)
+ endif()
+endif()
+
+if(CMAKE_VERSION VERSION_LESS 3.9)
+ set(PROJECT_DESCRIPTION "${RGBDS_DESC}")
+endif()
+
+set(DEFAULT_BUILD_TYPE "Release")
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}")
+endif()
+
+# get real path of source and binary directories
+get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH)
+get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH)
+
+# reject in-source builds, may conflict with Makefile
+if(srcdir STREQUAL bindir)
+ message("RGBDS should not be built in the source directory.")
+ message("Instead, create a separate build directory and specify to CMake the path to the source directory.")
+ message(FATAL_ERROR "Terminating configuration")
+endif()
+
+find_package(PNG 1.6 REQUIRED)
+find_package(BISON REQUIRED)
+find_package(FLEX)
+
+include_directories("${PROJECT_SOURCE_DIR}/include")
+
+if(MSVC)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W1 /MP -D_CRT_SECURE_NO_WARNINGS")
+else()
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -pedantic")
+endif()
+
+if(CMAKE_VERSION VERSION_LESS 3.12)
+ add_definitions(-DBUILD_VERSION_STRING="${PROJECT_VERSION}")
+else()
+ add_compile_definitions(BUILD_VERSION_STRING="${PROJECT_VERSION}")
+endif()
+
+set(CMAKE_C_STANDARD 11)
+set(CMAKE_C_STANDARD_REQUIRED True)
+
+add_subdirectory(src)
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -1,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()