cmake for freepascal

Today, we are going to learn how to use cmake for freepascal on a macOS.

cmake_minimum_required(VERSION 3.8)
project(ringsce)

# Set the path to your Free Pascal compiler
set(FPC_PATH "/opt/homebrew/bin/fpc")

# Set the path to your C++ compiler (e.g., Clang)
set(CXX_COMPILER "/usr/bin/clang++")

# Find Lua
find_package(Lua 5.4 REQUIRED)

if (Lua_FOUND)
    message("Lua found: ${Lua_INCLUDE_DIR}")
    include_directories(${Lua_INCLUDE_DIR})
    #target_link_libraries(ringsce ${Lua_LIBRARIES})
else()
    message("Lua not found")
endif()


# Set the path to your Free Pascal source files
set(FPC_SOURCE_FILES
    components/hud/hud.pas
    components/firstsetup.pas
    components/udp/udp.pas
    components/window/window.pas
    # Add more Pascal source files if needed
)

# Set the path to your C++ source files
set(CXX_SOURCE_FILES
    your_cpp_source_file1.cpp
    your_cpp_source_file2.cpp
    # Add more C++ source files if needed
)

# Add the subdirectory containing the Free Pascal source files
add_subdirectory(ringsce-editor)


# Compile your Free Pascal files
foreach(SOURCE_FILE ${FPC_SOURCE_FILES})
    get_filename_component(FILE_NAME ${SOURCE_FILE} NAME_WE)
    add_custom_command(
        OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.o
        COMMAND ${FPC_PATH} -Mobjfpc -Scghi -Cg -O1 ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE_FILE}
        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE_FILE}
        COMMENT "Compiling ${SOURCE_FILE}"
        ERROR_VARIABLE FPC_COMPILE_ERROR
    )
    list(APPEND OBJECT_FILES ${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.o)
    if(FPC_COMPILE_ERROR)
        message(FATAL_ERROR "Compilation of ${SOURCE_FILE} failed: ${FPC_COMPILE_ERROR}")
    endif()
endforeach()

# Compile your C++ files
foreach(SOURCE_FILE ${CXX_SOURCE_FILES})
    get_filename_component(FILE_NAME ${SOURCE_FILE} NAME_WE)
    add_custom_command(
        OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.o
        COMMAND ${CXX_COMPILER} -c ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE_FILE} -o ${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.o
        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE_FILE}
        COMMENT "Compiling ${SOURCE_FILE}"
        ERROR_VARIABLE CXX_COMPILE_ERROR
    )
    list(APPEND OBJECT_FILES ${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.o)
    if(CXX_COMPILE_ERROR)
        message(FATAL_ERROR "Compilation of ${SOURCE_FILE} failed: ${CXX_COMPILE_ERROR}")
    endif()
endforeach()

# Link all object files to create the executable
add_custom_target(${PROJECT_NAME} ALL DEPENDS ${OBJECT_FILES})

# Add a custom command to copy the executable to the desired location
add_custom_command(
    TARGET ${PROJECT_NAME}
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_NAME} ${CMAKE_CURRENT_BINARY_DIR}/your_executable_name
    COMMENT "Copying executable to the binary directory"
)
mkdir build && cd build
cd build
cmake ../

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

2 × 3 =

coder by Gleentech
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.