mirror of
https://github.com/OpenRCT2/OpenRCT2.git
synced 2025-01-23 02:41:58 -05:00
f0c1ea1d37
* Split FileStream declarations and definitions * Split JobPool declarations and definitions * Split StringBuilder declarations and definitions * Split StringReader declarations and definitions * Split ZoomLevel declarations and definitions * Fix missing include in FileClassifier.cpp * Remove pragma once from source files * Fix missing include in StringBuilder.h * Update Xcode project * Fix compilation of tests Co-authored-by: Michael Steenbeek <m.o.steenbeek@gmail.com>
105 lines
5.4 KiB
CMake
105 lines
5.4 KiB
CMake
# CMAKE project for testpaint
|
|
cmake_minimum_required(VERSION 2.6)
|
|
if (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)
|
|
message(FATAL_ERROR "Building in-source is not supported! Create a build dir and remove ${CMAKE_SOURCE_DIR}/CMakeCache.txt")
|
|
endif ()
|
|
|
|
set(OPENRCT2_EXE "${ROOT_DIR}/openrct2.exe")
|
|
add_custom_command(
|
|
OUTPUT openrct2_text
|
|
COMMAND dd if="${OPENRCT2_EXE}" of="${CMAKE_BINARY_DIR}/openrct2_text" bs=4096 skip=1 count=1187
|
|
DEPENDS ${OPENRCT2_EXE}
|
|
)
|
|
add_custom_command(
|
|
OUTPUT openrct2_data
|
|
COMMAND dd if="${OPENRCT2_EXE}" of="${CMAKE_BINARY_DIR}/openrct2_data" bs=4096 skip=1188 count=318
|
|
COMMAND dd if=/dev/zero of="${CMAKE_BINARY_DIR}/openrct2_data" bs=4096 seek=318 count=2630 conv=notrunc
|
|
COMMAND dd if="${OPENRCT2_EXE}" of="${CMAKE_BINARY_DIR}/openrct2_data" bs=4096 skip=1506 seek=2948 count=1 conv=notrunc
|
|
DEPENDS ${OPENRCT2_EXE}
|
|
)
|
|
add_custom_target(segfiles DEPENDS openrct2_text openrct2_data)
|
|
if (NOT USE_MMAP AND FORCE32)
|
|
set(OBJ_FORMAT "elf32-i386")
|
|
set(LINKER_SCRIPT "ld_script_i386.xc")
|
|
if (APPLE)
|
|
set(RCT2_SEGMENT_LINKER_FLAGS "-sectcreate rct2_text __text ${CMAKE_BINARY_DIR}/openrct2_text -sectcreate rct2_data __data ${CMAKE_BINARY_DIR}/openrct2_data -segaddr rct2_data 0x8a4000 -segprot rct2_data rwx rwx -segaddr rct2_text 0x401000 -segprot rct2_text rwx rwx -segaddr __TEXT 0x2000000 -read_only_relocs suppress")
|
|
else ()
|
|
# For Linux we have to use objcopy to wrap regular binaries into a linkable
|
|
# format. We use specific section names which are then referenced in a
|
|
# bespoke linker script so they can be placed at predefined VMAs.
|
|
add_custom_command(
|
|
OUTPUT openrct2_text_section.o
|
|
COMMAND objcopy --input binary --output ${OBJ_FORMAT} --binary-architecture i386 openrct2_text openrct2_text_section.o --rename-section .data=.rct2_text,contents,alloc,load,readonly,code
|
|
DEPENDS segfiles
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
)
|
|
add_custom_command(
|
|
OUTPUT openrct2_data_section.o
|
|
COMMAND objcopy --input binary --output ${OBJ_FORMAT} --binary-architecture i386 openrct2_data openrct2_data_section.o --rename-section .data=.rct2_data,contents,alloc,load,readonly,data
|
|
DEPENDS segfiles
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
)
|
|
add_custom_target(linkable_sections DEPENDS openrct2_text_section.o openrct2_data_section.o)
|
|
set_source_files_properties(
|
|
openrct2_text_section.o openrct2_data_section.o
|
|
PROPERTIES
|
|
EXTERNAL_OBJECT true
|
|
GENERATED true
|
|
)
|
|
# can't use GLOB here, as the files don't exist yet at cmake-time
|
|
set(RCT2_SECTIONS "${CMAKE_BINARY_DIR}/openrct2_data_section.o" "${CMAKE_BINARY_DIR}/openrct2_text_section.o")
|
|
set(RCT2_SEGMENT_LINKER_FLAGS "-Wl,-T,\"${ROOT_DIR}/distribution/linux/${LINKER_SCRIPT}\"")
|
|
endif ()
|
|
endif ()
|
|
|
|
set(OPENRCT2_SRCPATH "${ROOT_DIR}/src/openrct2")
|
|
file(GLOB_RECURSE ORCT2_RIDE_SOURCES "${OPENRCT2_SRCPATH}/ride/*/*.cpp")
|
|
file(GLOB_RECURSE ORCT2_RIDE_DEP_SOURCES
|
|
"${OPENRCT2_SRCPATH}/Diagnostic.cpp"
|
|
"${OPENRCT2_SRCPATH}/paint/PaintHelpers.cpp"
|
|
"${OPENRCT2_SRCPATH}/paint/tile_element/Paint.TileElement.cpp"
|
|
"${OPENRCT2_SRCPATH}/ride/RideData.cpp"
|
|
"${OPENRCT2_SRCPATH}/ride/TrackData.cpp"
|
|
"${OPENRCT2_SRCPATH}/ride/TrackPaint.cpp"
|
|
"${OPENRCT2_SRCPATH}/core/Console.cpp"
|
|
"${OPENRCT2_SRCPATH}/core/Diagnostics.cpp"
|
|
"${OPENRCT2_SRCPATH}/core/Guard.cpp"
|
|
"${OPENRCT2_SRCPATH}/core/String.cpp"
|
|
"${OPENRCT2_SRCPATH}/Diagnostic.cpp"
|
|
"${OPENRCT2_SRCPATH}/interface/ZoomLevel.cpp"
|
|
"${OPENRCT2_SRCPATH}/localisation/ConversionTables.cpp"
|
|
"${OPENRCT2_SRCPATH}/localisation/Convert.cpp"
|
|
"${OPENRCT2_SRCPATH}/localisation/FormatCodes.cpp"
|
|
"${OPENRCT2_SRCPATH}/localisation/UTF8.cpp"
|
|
"${OPENRCT2_SRCPATH}/util/Util.cpp"
|
|
"${OPENRCT2_SRCPATH}/Version.cpp"
|
|
)
|
|
file(GLOB_RECURSE ORCT2_TESTPAINT_SOURCES "${CMAKE_CURRENT_LIST_DIR}/*.c"
|
|
"${CMAKE_CURRENT_LIST_DIR}/*.cpp"
|
|
"${CMAKE_CURRENT_LIST_DIR}/*.h")
|
|
|
|
# Disable optimizations for addresses.c for all compilers, to allow optimized
|
|
# builds without need for -fno-omit-frame-pointer
|
|
set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/addresses.c PROPERTIES COMPILE_FLAGS -O0)
|
|
|
|
add_executable(testpaint EXCLUDE_FROM_ALL ${ORCT2_RIDE_SOURCES} ${ORCT2_RIDE_DEP_SOURCES} ${ORCT2_TESTPAINT_SOURCES} ${RCT2_SECTIONS})
|
|
SET_CHECK_CXX_FLAGS(testpaint)
|
|
target_compile_options(testpaint PRIVATE -Wno-old-style-cast)
|
|
target_include_directories(testpaint PRIVATE "${ROOT_DIR}/src/")
|
|
target_link_libraries(testpaint z)
|
|
|
|
if (NOT MINGW AND NOT MSVC)
|
|
# For unicode code page conversion
|
|
find_package(ICU 59.0 REQUIRED COMPONENTS uc)
|
|
target_link_libraries(testpaint ${ICU_LIBRARIES})
|
|
target_include_directories(testpaint SYSTEM PUBLIC ${ICU_INCLUDE_DIRS})
|
|
endif ()
|
|
|
|
# Only use custom linker script for 32 bit builds. For 64 bit builds, it should still _compile_.
|
|
if (FORCE32)
|
|
set_target_properties(testpaint PROPERTIES LINK_FLAGS ${RCT2_SEGMENT_LINKER_FLAGS})
|
|
else ()
|
|
set(TESTPAINT_64BIT_FLAGS "-Wno-int-to-pointer-cast -fpermissive -Wno-error")
|
|
endif ()
|
|
set_target_properties(testpaint PROPERTIES COMPILE_FLAGS "-DNO_VEHICLES -D__TESTPAINT__ -Wno-unused ${TESTPAINT_64BIT_FLAGS} -DDISABLE_HTTP")
|
|
add_dependencies(testpaint segfiles)
|