ref: 79f293c3d70f58a7810ed36d6ef28353595011f2
parent: 8c765883fb21e117ee32a6602a4fe3c2f9657feb
parent: 819c36943e7d950a078563051ccc07796408b042
author: Eldred Habert <eldredhabert0@gmail.com>
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()
--
⑨