Skip to content

Instantly share code, notes, and snippets.

@hostilefork
Last active August 29, 2015 14:07
Show Gist options
  • Save hostilefork/c086c1549cfccae7fc92 to your computer and use it in GitHub Desktop.
Save hostilefork/c086c1549cfccae7fc92 to your computer and use it in GitHub Desktop.

Revisions

  1. hostilefork revised this gist Jul 11, 2015. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions 1-rebol.reb
    Original file line number Diff line number Diff line change
    @@ -101,14 +101,14 @@ if R3_WIN32 [
    add/definitions {-D_FILE_OFFSET_BITS=64}

    either MSVC [
    # Definitions
    ;-- Definitions
    add/definitions {-D_CRT_SECURE_NO_WARNINGS}

    # Compiler/linker flags
    ;-- Compiler/linker flags
    CMAKE_EXE_LINKER_FLAGS: (CMAKE_EXE_LINKER_FLAGS space "/subsystem:windows")
    CMAKE_EXE_LINKER_FLAGS: (CMAKE_EXE_LINKER_FLAGS space "/stack:4194300")

    # LIBRARIES
    ;-- LIBRARIES
    R3_LIBS: ["comdlg32.lib" "wsock32.lib"]
    ] [
    ;-- MinGW-specific settings (@@ Use more specific test.)
  2. hostilefork renamed this gist Jul 11, 2015. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  3. hostilefork revised this gist Oct 3, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion 1-rebol.rmake
    Original file line number Diff line number Diff line change
    @@ -89,7 +89,7 @@ if R3_OSX [
    ]


    if R3_WIN32
    if R3_WIN32 [
    R3_TARGET: "3.1"

    ;-- Host sources
  4. hostilefork revised this gist Oct 3, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion 1-rebol.rmake
    Original file line number Diff line number Diff line change
    @@ -109,7 +109,7 @@ if R3_WIN32
    CMAKE_EXE_LINKER_FLAGS: (CMAKE_EXE_LINKER_FLAGS space "/stack:4194300")

    # LIBRARIES
    R3_LIBS: [%comdlg32.lib %wsock32.lib]
    R3_LIBS: ["comdlg32.lib" "wsock32.lib"]
    ] [
    ;-- MinGW-specific settings (@@ Use more specific test.)
    ;-- Compiler/linker flags
  5. hostilefork revised this gist Oct 3, 2014. 1 changed file with 311 additions and 245 deletions.
    556 changes: 311 additions & 245 deletions 1-rebol.rmake
    Original file line number Diff line number Diff line change
    @@ -1,266 +1,332 @@
    cmake_minimum_required(VERSION 2.8)

    project(rebol3)

    # -- Target platform detection

    if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    set(R3_OSX on)
    elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
    set(R3_WIN32 on)
    elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    set(R3_LINUX on)
    endif()

    # -- Common R3 build configuration

    add_definitions(-DREB_CORE)
    add_definitions(-DREB_EXE)

    include_directories(${PROJECT_SOURCE_DIR}/src/include)

    add_subdirectory(${PROJECT_SOURCE_DIR}/src/core)
    add_subdirectory(${PROJECT_SOURCE_DIR}/src/os)

    # Rebol 3 command used for bootstrap (in the "prepare" target).
    find_program(R3_MAKE r3-make)
    set(R3_MAKE_CMD ${R3_MAKE} -qs)

    # -- Platform-specific configuration

    if(R3_OSX)
    set(R3_TARGET "2.5")
    # Host sources
    set(R3_HOST_SUBDIR "posix")
    # Definitions
    add_definitions(-DTO_OSXI)
    add_definitions(-D_FILE_OFFSET_BITS=64)
    # Compiler/linker flags
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch i386")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-pointer-sign")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-common")
    # Libraries
    find_library(LIBM m)
    set(R3_LIBS ${LIBM})
    endif()

    if(R3_WIN32)
    set(R3_TARGET "3.1")
    # Host sources
    set(R3_HOST_SUBDIR "win32")
    # Definitions
    add_definitions(-DTO_WIN32)
    add_definitions(-DUNICODE)
    add_definitions(-D_FILE_OFFSET_BITS=64)
    if(NOT MSVC) # MinGW-specific settings (@@ Use more specific test.)
    # Compiler/linker flags
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
    set(CMAKE_EXE_LINKER_FLAGS "-Wl,--stack=4194300")
    # Libraries
    find_library(LIBCOMDLG32 comdlg32)
    find_library(LIBWSOCK32 wsock32)
    set(R3_LIBS ${LIBCOMDLG32} ${LIBWSOCK32})
    elseif(MSVC) # MSVC-specific settings
    Rebmake [
    Title: "Rebol Dialected Experiment to represent CMake files"

    ;; See:
    ;; http://curecode.org/rebol3/ticket.rsp?id=2177
    ;; http://browsenpm.org/package.json#dependencies
    Needs: [
    1.0
    cmake 2.8
    ]

    ;; http://www.cmake.org/cmake/help/v3.0/command/project.html
    Title: "rebol3"
    Languages: [c]
    ]

    ;;; Target platform detection

    case [
    CMAKE_SYSTEM_NAME = "Darwin" [
    R3_OSX: on
    ]

    CMAKE_SYSTEM_NAME = "Windows" [
    R3_WIN32: on
    ]

    CMAKE_SYSTEM_NAME = "Linux" [
    R3_LINUX: on
    ]
    ]

    add/definitions {-DREB_CORE}
    add/definitions {-DREB_EXE}

    ;; Current thinking is that parentheses run a COMBINE on the contents.
    ;; So could also have written:
    ;;
    ;; add/definitions ({-DREB_CORE} space {-DREB_EXE})
    ;;
    ;; or just one string...
    ;;
    ;; add/definitions {-DREB_CORE -DREB_EXE}

    include/directories (PROJECT_SOURCE_DIR %/src/include)

    add/subdirectory (PROJECT_SOURCE_DIR "/src/core")
    add/subdirectory (PROJECT_SOURCE_DIR "/src/os")

    ;-- Rebol 3 command used for bootstrap (in the "prepare" target).
    R3_MAKE: find/program [
    "r3-make" ;-- or list of names...
    ; /HINTS path1 path2 ... ENV var
    ; /PATHS path1 path2 ... ENV var
    ; /PATH-SUFFIXES suffix1 suffix2 ... ;-- Is SUFFIXES enough?
    ; /DOC "cache documentation string"
    ; /DEFAULT-PATH no ;-- as opposed to NO_DEFAULT_PATH
    ; /CMAKE-ENVIRONMENT-PATH no
    ; /CMAKE-PATH no
    ; /SYSTEM-ENVIRONMENT-PATH no
    ; /CMAKE-SYSTEM-PATH no
    ; /CMAKE_FIND_ROOT_PATH both, only, no ???
    ]

    R3_MAKE_CMD: (R3_MAKE space {-qs})

    ;-- Platform-specific configuration

    if R3_OSX [
    R3_TARGET: "2.5"

    ; Host sources
    R3_HOST_SUBDIR: "posix"

    ; Definitions
    add/definitions {-DTO_OSXI}
    add/definitions {-D_FILE_OFFSET_BITS=64}

    ; Compiler/linker flags
    CMAKE_C_FLAGS: (CMAKE_C_FLAGS space {-arch i386})
    CMAKE_C_FLAGS: (CMAKE_C_FLAGS space {-Wno-pointer-sign})
    CMAKE_C_FLAGS: (CMAKE_C_FLAGS space {-fPIC})
    CMAKE_C_FLAGS: (CMAKE_C_FLAGS space {-fvisibility=hidden})
    CMAKE_C_FLAGS: (CMAKE_C_FLAGS space {-fno-common})

    ; Libraries
    LIBM: find/library "m"
    R3_LIBS: LIBM
    ]


    if R3_WIN32
    R3_TARGET: "3.1"

    ;-- Host sources
    R3_HOST_SUBDIR: "win32"

    ;-- Definitions
    add/definitions {-DTO_WIN32}
    add/definitions {-DUNICODE}
    add/definitions {-D_FILE_OFFSET_BITS=64}

    either MSVC [
    # Definitions
    add_definitions(-D_CRT_SECURE_NO_WARNINGS)
    add/definitions {-D_CRT_SECURE_NO_WARNINGS}

    # Compiler/linker flags
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /subsystem:windows")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /stack:4194300")
    CMAKE_EXE_LINKER_FLAGS: (CMAKE_EXE_LINKER_FLAGS space "/subsystem:windows")
    CMAKE_EXE_LINKER_FLAGS: (CMAKE_EXE_LINKER_FLAGS space "/stack:4194300")

    # LIBRARIES
    set(R3_LIBS comdlg32.lib wsock32.lib)
    endif()
    endif()

    if(R3_LINUX)
    set(R3_TARGET "4.4")
    # Host sources
    set(R3_HOST_SUBDIR "posix")
    # Definitions
    add_definitions(-DTO_LINUX)
    add_definitions(-D_FILE_OFFSET_BITS=64)
    # Compiler/linker flags
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
    # Libraries
    find_library(LIBDL dl)
    find_library(LIBM m)
    set(R3_LIBS ${LIBDL} ${LIBM})
    endif()

    add_subdirectory(${PROJECT_SOURCE_DIR}/src/os/${R3_HOST_SUBDIR})
    R3_LIBS: [%comdlg32.lib %wsock32.lib]
    ] [
    ;-- MinGW-specific settings (@@ Use more specific test.)
    ;-- Compiler/linker flags
    CMAKE_C_FLAGS: (CMAKE_C_FLAGS space {-O2})
    CMAKE_EXE_LINKER_FLAGS: {-Wl,--stack=4194300}

    ;-- Libraries
    LIBCOMDLG32: find/library "comdlg32"
    LIBWSOCK32: find/library "wsock32"
    R3_LIBS: [LIBCOMDLG32 LIBWSOCK32]
    ]
    ]

    if R3_LINUX [
    R3_TARGET: "4.4"

    ; Host sources
    R3_HOST_SUBDIR: "posix"

    ;-- Definitions
    add/definitions {-DTO_LINUX}
    add/definitions {-D_FILE_OFFSET_BITS=64}

    ;-- Compiler/linker flags
    CMAKE_C_FLAGS: (CMAKE_C_FLAGS space {-m32})
    CMAKE_C_FLAGS: (CMAKE_C_FLAGS space {-O2})
    CMAKE_C_FLAGS: (CMAKE_C_FLAGS space {-fvisibility=hidden})

    ;-- Libraries
    LIBDL: find/library "dl"
    LIBM: find/library "m"
    R3_LIBS: [LIBDL LIBM]
    ]

    add/subdirectory (PROJECT_SOURCE_DIR "/src/os/" R3_HOST_SUBDIR)

    # -- Generated files

    set(R3_SRC_TOOLS_DIR ${PROJECT_SOURCE_DIR}/src/tools)
    R3_SRC_TOOLS_DIR: (PROJECT_SOURCE_DIR "/src/tools")

    file(GLOB R3_SRCS_CORE "${PROJECT_SOURCE_DIR}/src/core/*.c")
    R3_SRCS_CORE: file/glob (PROJECT_SOURCE_DIR "/src/core/*.c")

    file(GLOB R3_SRCS_MEZZ_BOOT # Basically mirroring src/mezz/boot-files.r
    "${PROJECT_SOURCE_DIR}/src/mezz/base-*.r"
    "${PROJECT_SOURCE_DIR}/src/mezz/sys-*.r"
    "${PROJECT_SOURCE_DIR}/src/mezz/mezz-*.r"
    "${PROJECT_SOURCE_DIR}/src/mezz/prot-*.r"
    )
    R3_SRCS_MEZZ_BOOT: file/glob [ ;-- Basically mirroring src/mezz/boot-files.r
    (PROJECT_SOURCE_DIR "/src/mezz/base-*.r")
    (PROJECT_SOURCE_DIR "/src/mezz/sys-*.r")
    (PROJECT_SOURCE_DIR "/src/mezz/mezz-*.r")
    (PROJECT_SOURCE_DIR "/src/mezz/prot-*.r")
    ]

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-boot.r 0.${R3_TARGET}
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/include/tmp-evaltypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-maketypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-comptypes.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-types.h
    ${PROJECT_SOURCE_DIR}/src/include/ext-types.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-exttypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-bootdefs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-sysobj.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-dialect.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-evtypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-errnums.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-portmodes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-sysctx.h
    ${PROJECT_SOURCE_DIR}/src/boot/boot-code.r
    ${PROJECT_SOURCE_DIR}/src/core/b-boot.c
    ${PROJECT_SOURCE_DIR}/src/include/tmp-boot.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/tools/systems.r
    ${PROJECT_SOURCE_DIR}/src/boot/version.r
    ${PROJECT_SOURCE_DIR}/src/boot/types.r
    ${PROJECT_SOURCE_DIR}/src/boot/types-ext.r
    ${PROJECT_SOURCE_DIR}/src/boot/strings.r
    ${PROJECT_SOURCE_DIR}/src/boot/words.r
    ${PROJECT_SOURCE_DIR}/src/boot/modes.r
    ${PROJECT_SOURCE_DIR}/src/boot/actions.r
    ${PROJECT_SOURCE_DIR}/src/boot/sysobj.r
    ${PROJECT_SOURCE_DIR}/src/boot/platforms.r
    ${PROJECT_SOURCE_DIR}/src/boot/errors.r
    ${PROJECT_SOURCE_DIR}/src/mezz/boot-files.r
    ${R3_SRCS_MEZZ_BOOT}
    ${PROJECT_SOURCE_DIR}/src/boot/booters.r
    ${PROJECT_SOURCE_DIR}/src/boot/natives.r
    ${PROJECT_SOURCE_DIR}/src/boot/typespec.r
    ${PROJECT_SOURCE_DIR}/src/boot/root.r
    ${PROJECT_SOURCE_DIR}/src/boot/task.r
    ${PROJECT_SOURCE_DIR}/src/boot/ops.r
    add/custom-command [
    (R3_MAKE_CMD space [R3_SRC_TOOLS_DIR "/make-boot.r"] space ["0." R3_TARGET])
    /OUTPUT
    (PROJECT_SOURCE_DIR "/src/include/tmp-evaltypes.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-maketypes.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-comptypes.h")
    (PROJECT_SOURCE_DIR "/src/include/reb-types.h")
    (PROJECT_SOURCE_DIR "/src/include/ext-types.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-exttypes.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-bootdefs.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-sysobj.h")
    (PROJECT_SOURCE_DIR "/src/include/reb-dialect.h")
    (PROJECT_SOURCE_DIR "/src/include/reb-evtypes.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-errnums.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-portmodes.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-sysctx.h")
    (PROJECT_SOURCE_DIR "/src/boot/boot-code.r")
    (PROJECT_SOURCE_DIR "/src/core/b-boot.c")
    (PROJECT_SOURCE_DIR "/src/include/tmp-boot.h")
    /DEPENDS
    (PROJECT_SOURCE_DIR "/src/tools/form-header.r")
    (PROJECT_SOURCE_DIR "/src/tools/systems.r")
    (PROJECT_SOURCE_DIR "/src/boot/version.r")
    (PROJECT_SOURCE_DIR "/src/boot/types.r")
    (PROJECT_SOURCE_DIR "/src/boot/types-ext.r")
    (PROJECT_SOURCE_DIR "/src/boot/strings.r")
    (PROJECT_SOURCE_DIR "/src/boot/words.r")
    (PROJECT_SOURCE_DIR "/src/boot/modes.r")
    (PROJECT_SOURCE_DIR "/src/boot/actions.r")
    (PROJECT_SOURCE_DIR "/src/boot/sysobj.r")
    (PROJECT_SOURCE_DIR "/src/boot/platforms.r")
    (PROJECT_SOURCE_DIR "/src/boot/errors.r")
    (PROJECT_SOURCE_DIR "/src/mezz/boot-files.r")
    R3_SRCS_MEZZ_BOOT
    (PROJECT_SOURCE_DIR "/src/boot/booters.r")
    (PROJECT_SOURCE_DIR "/src/boot/natives.r")
    (PROJECT_SOURCE_DIR "/src/boot/typespec.r")
    (PROJECT_SOURCE_DIR "/src/boot/root.r")
    (PROJECT_SOURCE_DIR "/src/boot/task.r")
    (PROJECT_SOURCE_DIR "/src/boot/ops.r")
    )

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-headers.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/include/tmp-funcs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-funcargs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-strings.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${R3_SRCS_CORE}
    ${PROJECT_SOURCE_DIR}/src/boot/actions.r
    ${PROJECT_SOURCE_DIR}/src/boot/natives.r
    ${PROJECT_SOURCE_DIR}/src/core/a-constants.c
    )
    add/custom-command [
    (R3_MAKE_CMD space [R3_SRC_TOOLS_DIR "/make-headers.r"])
    /OUTPUT
    (PROJECT_SOURCE_DIR "/src/include/tmp-funcs.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-funcargs.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-strings.h")
    /DEPENDS
    (PROJECT_SOURCE_DIR "/src/tools/form-header.r")
    R3_SRCS_CORE
    (PROJECT_SOURCE_DIR "/src/boot/actions.r")
    (PROJECT_SOURCE_DIR "/src/boot/natives.r")
    (PROJECT_SOURCE_DIR "/src/core/a-constants.c")
    ]

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-host-ext.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-graphics.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-draw.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-shape.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-text.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/boot/graphics.r
    ${PROJECT_SOURCE_DIR}/src/mezz/view-funcs.r
    ${PROJECT_SOURCE_DIR}/src/boot/draw.r
    ${PROJECT_SOURCE_DIR}/src/boot/shape.r
    ${PROJECT_SOURCE_DIR}/src/boot/text.r
    )
    add/custom-command [
    (R3_MAKE_CMD space [R3_SRC_TOOLS_DIR "/make-host-ext.r"])
    /OUTPUT
    (PROJECT_SOURCE_DIR "/src/include/host-ext-graphics.h")
    (PROJECT_SOURCE_DIR "/src/include/host-ext-draw.h")
    (PROJECT_SOURCE_DIR "/src/include/host-ext-shape.h")
    (PROJECT_SOURCE_DIR "/src/include/host-ext-text.h")
    /DEPENDS
    (PROJECT_SOURCE_DIR "/src/tools/form-header.r")
    (PROJECT_SOURCE_DIR "/src/boot/graphics.r")
    (PROJECT_SOURCE_DIR "/src/mezz/view-funcs.r")
    (PROJECT_SOURCE_DIR "/src/boot/draw.r")
    (PROJECT_SOURCE_DIR "/src/boot/shape.r")
    (PROJECT_SOURCE_DIR "/src/boot/text.r")
    ]

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-host-init.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/boot/host-init.r
    ${PROJECT_SOURCE_DIR}/src/include/host-init.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/mezz/prot-http.r
    )
    add/custom-command [
    (R3_MAKE_CMD space [R3_SRC_TOOLS_DIR "/make-host-init.r"])
    /OUTPUT
    (PROJECT_SOURCE_DIR "/src/boot/host-init.r")
    (PROJECT_SOURCE_DIR "/src/include/host-init.h")
    /DEPENDS
    (PROJECT_SOURCE_DIR "/src/tools/form-header.r")
    (PROJECT_SOURCE_DIR "/src/mezz/prot-http.r")
    ]

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-os-ext.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/include/host-lib.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/boot/version.r
    ${PROJECT_SOURCE_DIR}/src/tools/systems.r
    ${PROJECT_SOURCE_DIR}/src/os/host-device.c
    ${PROJECT_SOURCE_DIR}/src/os/${R3_HOST_SUBDIR}/host-lib.c
    ${PROJECT_SOURCE_DIR}/src/os/${R3_HOST_SUBDIR}/host-window.c
    )
    add/custom-command [
    (R3_MAKE_CMD space [R3_SRC_TOOLS_DIR "/make-os-ext.r"])
    /OUTPUT
    (PROJECT_SOURCE_DIR "/src/include/host-lib.h")
    /DEPENDS
    (PROJECT_SOURCE_DIR "/src/tools/form-header.r")
    (PROJECT_SOURCE_DIR "/src/boot/version.r")
    (PROJECT_SOURCE_DIR "/src/tools/systems.r")
    (PROJECT_SOURCE_DIR "/src/os/host-device.c")
    (PROJECT_SOURCE_DIR "/src/os/${R3_HOST_SUBDIR}/host-lib.c")
    (PROJECT_SOURCE_DIR "/src/os/${R3_HOST_SUBDIR}/host-window.c")
    ]

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-reb-lib.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/reb-lib-doc.txt
    ${PROJECT_SOURCE_DIR}/src/include/reb-lib.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-lib-lib.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/boot/version.r
    ${PROJECT_SOURCE_DIR}/src/core/a-lib.c
    ${PROJECT_SOURCE_DIR}/src/core/f-extension.c
    )
    add/custom-command [
    (R3_MAKE_CMD space [R3_SRC_TOOLS_DIR "/make-reb-lib.r"])
    /OUTPUT
    (PROJECT_SOURCE_DIR "/src/reb-lib-doc.txt")
    (PROJECT_SOURCE_DIR "/src/include/reb-lib.h")
    (PROJECT_SOURCE_DIR "/src/include/reb-lib-lib.h")
    /DEPENDS
    (PROJECT_SOURCE_DIR "/src/tools/form-header.r")
    (PROJECT_SOURCE_DIR "/src/boot/version.r")
    (PROJECT_SOURCE_DIR "/src/core/a-lib.c")
    (PROJECT_SOURCE_DIR "/src/core/f-extension.c")
    ]

    prepare: add/custom-target [
    /ALL
    /DEPENDS
    ; -- boot
    (PROJECT_SOURCE_DIR "/src/include/tmp-evaltypes.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-maketypes.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-comptypes.h")
    (PROJECT_SOURCE_DIR "/src/include/reb-types.h")
    (PROJECT_SOURCE_DIR "/src/include/ext-types.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-exttypes.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-bootdefs.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-sysobj.h")
    (PROJECT_SOURCE_DIR "/src/include/reb-dialect.h")
    (PROJECT_SOURCE_DIR "/src/include/reb-evtypes.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-errnums.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-portmodes.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-sysctx.h")
    ;(PROJECT_SOURCE_DIR "/src/boot/boot-code.r") ; unused
    (PROJECT_SOURCE_DIR "/src/core/b-boot.c")
    (PROJECT_SOURCE_DIR "/src/include/tmp-boot.h")

    ;-- headers
    (PROJECT_SOURCE_DIR "/src/include/tmp-funcs.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-funcargs.h")
    (PROJECT_SOURCE_DIR "/src/include/tmp-strings.h")

    ;-- host-ext
    (PROJECT_SOURCE_DIR "/src/include/host-ext-graphics.h")
    (PROJECT_SOURCE_DIR "/src/include/host-ext-draw.h")
    (PROJECT_SOURCE_DIR "/src/include/host-ext-shape.h")
    (PROJECT_SOURCE_DIR "/src/include/host-ext-text.h")

    ; -- host-init
    ;(PROJECT_SOURCE_DIR "/src/boot/host-init.r") ;--unused
    (PROJECT_SOURCE_DIR "/src/include/host-init.h")

    ; -- os-ext
    (PROJECT_SOURCE_DIR "/src/include/host-lib.h")

    add_custom_target(prepare ALL
    DEPENDS
    # -- boot
    ${PROJECT_SOURCE_DIR}/src/include/tmp-evaltypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-maketypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-comptypes.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-types.h
    ${PROJECT_SOURCE_DIR}/src/include/ext-types.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-exttypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-bootdefs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-sysobj.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-dialect.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-evtypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-errnums.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-portmodes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-sysctx.h
    #${PROJECT_SOURCE_DIR}/src/boot/boot-code.r # unused
    ${PROJECT_SOURCE_DIR}/src/core/b-boot.c
    ${PROJECT_SOURCE_DIR}/src/include/tmp-boot.h
    # -- headers
    ${PROJECT_SOURCE_DIR}/src/include/tmp-funcs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-funcargs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-strings.h
    # -- host-ext
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-graphics.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-draw.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-shape.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-text.h
    # -- host-init
    #${PROJECT_SOURCE_DIR}/src/boot/host-init.r # unused
    ${PROJECT_SOURCE_DIR}/src/include/host-init.h
    # -- os-ext
    ${PROJECT_SOURCE_DIR}/src/include/host-lib.h
    # -- reb-lib
    ${PROJECT_SOURCE_DIR}/src/reb-lib-doc.txt
    ${PROJECT_SOURCE_DIR}/src/include/reb-lib.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-lib-lib.h
    )
    (PROJECT_SOURCE_DIR "/src/reb-lib-doc.txt")
    (PROJECT_SOURCE_DIR "/src/include/reb-lib.h")
    (PROJECT_SOURCE_DIR "/src/include/reb-lib-lib.h)
    ]

    ;-- Build targets

    # -- Build targets
    ;-- Until construction syntax allows arbitrary words, we'll need to add an
    ;-- option for filenames...
    r3: add/executable [
    R3_SRCS
    ;/FILENAME "3r" ;-- for example
    ]

    add_executable(r3 ${R3_SRCS})
    target_link_libraries(r3 ${R3_LIBS})
    target/link-libraries 'r3 R3_LIBS

    # -- Additional platform-specific configuration
    ;-- Additional platform-specific configuration

    if(MSVC)
    # Add target-level dependency from `r3` to `prepare`, as VS (and/or CMake's
    # VS generator) can't handle file-level cross-target dependencies properly.
    add_dependencies(r3 prepare)
    endif()
    if MSVC [
    ; Add target-level dependency from `r3` to `prepare`, as VS (and/or CMake's
    ; VS generator) can't handle file-level cross-target dependencies properly.
    add/dependencies 'r3 [prepare]
    ]
  6. hostilefork revised this gist Oct 2, 2014. 2 changed files with 0 additions and 0 deletions.
    File renamed without changes.
    File renamed without changes.
  7. hostilefork revised this gist Oct 2, 2014. 1 changed file with 266 additions and 0 deletions.
    266 changes: 266 additions & 0 deletions rebol.cmake
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,266 @@
    cmake_minimum_required(VERSION 2.8)

    project(rebol3)

    # -- Target platform detection

    if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    set(R3_OSX on)
    elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
    set(R3_WIN32 on)
    elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    set(R3_LINUX on)
    endif()

    # -- Common R3 build configuration

    add_definitions(-DREB_CORE)
    add_definitions(-DREB_EXE)

    include_directories(${PROJECT_SOURCE_DIR}/src/include)

    add_subdirectory(${PROJECT_SOURCE_DIR}/src/core)
    add_subdirectory(${PROJECT_SOURCE_DIR}/src/os)

    # Rebol 3 command used for bootstrap (in the "prepare" target).
    find_program(R3_MAKE r3-make)
    set(R3_MAKE_CMD ${R3_MAKE} -qs)

    # -- Platform-specific configuration

    if(R3_OSX)
    set(R3_TARGET "2.5")
    # Host sources
    set(R3_HOST_SUBDIR "posix")
    # Definitions
    add_definitions(-DTO_OSXI)
    add_definitions(-D_FILE_OFFSET_BITS=64)
    # Compiler/linker flags
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch i386")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-pointer-sign")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-common")
    # Libraries
    find_library(LIBM m)
    set(R3_LIBS ${LIBM})
    endif()

    if(R3_WIN32)
    set(R3_TARGET "3.1")
    # Host sources
    set(R3_HOST_SUBDIR "win32")
    # Definitions
    add_definitions(-DTO_WIN32)
    add_definitions(-DUNICODE)
    add_definitions(-D_FILE_OFFSET_BITS=64)
    if(NOT MSVC) # MinGW-specific settings (@@ Use more specific test.)
    # Compiler/linker flags
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
    set(CMAKE_EXE_LINKER_FLAGS "-Wl,--stack=4194300")
    # Libraries
    find_library(LIBCOMDLG32 comdlg32)
    find_library(LIBWSOCK32 wsock32)
    set(R3_LIBS ${LIBCOMDLG32} ${LIBWSOCK32})
    elseif(MSVC) # MSVC-specific settings
    # Definitions
    add_definitions(-D_CRT_SECURE_NO_WARNINGS)
    # Compiler/linker flags
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /subsystem:windows")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /stack:4194300")
    # LIBRARIES
    set(R3_LIBS comdlg32.lib wsock32.lib)
    endif()
    endif()

    if(R3_LINUX)
    set(R3_TARGET "4.4")
    # Host sources
    set(R3_HOST_SUBDIR "posix")
    # Definitions
    add_definitions(-DTO_LINUX)
    add_definitions(-D_FILE_OFFSET_BITS=64)
    # Compiler/linker flags
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
    # Libraries
    find_library(LIBDL dl)
    find_library(LIBM m)
    set(R3_LIBS ${LIBDL} ${LIBM})
    endif()

    add_subdirectory(${PROJECT_SOURCE_DIR}/src/os/${R3_HOST_SUBDIR})

    # -- Generated files

    set(R3_SRC_TOOLS_DIR ${PROJECT_SOURCE_DIR}/src/tools)

    file(GLOB R3_SRCS_CORE "${PROJECT_SOURCE_DIR}/src/core/*.c")

    file(GLOB R3_SRCS_MEZZ_BOOT # Basically mirroring src/mezz/boot-files.r
    "${PROJECT_SOURCE_DIR}/src/mezz/base-*.r"
    "${PROJECT_SOURCE_DIR}/src/mezz/sys-*.r"
    "${PROJECT_SOURCE_DIR}/src/mezz/mezz-*.r"
    "${PROJECT_SOURCE_DIR}/src/mezz/prot-*.r"
    )

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-boot.r 0.${R3_TARGET}
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/include/tmp-evaltypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-maketypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-comptypes.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-types.h
    ${PROJECT_SOURCE_DIR}/src/include/ext-types.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-exttypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-bootdefs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-sysobj.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-dialect.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-evtypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-errnums.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-portmodes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-sysctx.h
    ${PROJECT_SOURCE_DIR}/src/boot/boot-code.r
    ${PROJECT_SOURCE_DIR}/src/core/b-boot.c
    ${PROJECT_SOURCE_DIR}/src/include/tmp-boot.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/tools/systems.r
    ${PROJECT_SOURCE_DIR}/src/boot/version.r
    ${PROJECT_SOURCE_DIR}/src/boot/types.r
    ${PROJECT_SOURCE_DIR}/src/boot/types-ext.r
    ${PROJECT_SOURCE_DIR}/src/boot/strings.r
    ${PROJECT_SOURCE_DIR}/src/boot/words.r
    ${PROJECT_SOURCE_DIR}/src/boot/modes.r
    ${PROJECT_SOURCE_DIR}/src/boot/actions.r
    ${PROJECT_SOURCE_DIR}/src/boot/sysobj.r
    ${PROJECT_SOURCE_DIR}/src/boot/platforms.r
    ${PROJECT_SOURCE_DIR}/src/boot/errors.r
    ${PROJECT_SOURCE_DIR}/src/mezz/boot-files.r
    ${R3_SRCS_MEZZ_BOOT}
    ${PROJECT_SOURCE_DIR}/src/boot/booters.r
    ${PROJECT_SOURCE_DIR}/src/boot/natives.r
    ${PROJECT_SOURCE_DIR}/src/boot/typespec.r
    ${PROJECT_SOURCE_DIR}/src/boot/root.r
    ${PROJECT_SOURCE_DIR}/src/boot/task.r
    ${PROJECT_SOURCE_DIR}/src/boot/ops.r
    )

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-headers.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/include/tmp-funcs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-funcargs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-strings.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${R3_SRCS_CORE}
    ${PROJECT_SOURCE_DIR}/src/boot/actions.r
    ${PROJECT_SOURCE_DIR}/src/boot/natives.r
    ${PROJECT_SOURCE_DIR}/src/core/a-constants.c
    )

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-host-ext.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-graphics.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-draw.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-shape.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-text.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/boot/graphics.r
    ${PROJECT_SOURCE_DIR}/src/mezz/view-funcs.r
    ${PROJECT_SOURCE_DIR}/src/boot/draw.r
    ${PROJECT_SOURCE_DIR}/src/boot/shape.r
    ${PROJECT_SOURCE_DIR}/src/boot/text.r
    )

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-host-init.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/boot/host-init.r
    ${PROJECT_SOURCE_DIR}/src/include/host-init.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/mezz/prot-http.r
    )

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-os-ext.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/include/host-lib.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/boot/version.r
    ${PROJECT_SOURCE_DIR}/src/tools/systems.r
    ${PROJECT_SOURCE_DIR}/src/os/host-device.c
    ${PROJECT_SOURCE_DIR}/src/os/${R3_HOST_SUBDIR}/host-lib.c
    ${PROJECT_SOURCE_DIR}/src/os/${R3_HOST_SUBDIR}/host-window.c
    )

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-reb-lib.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/reb-lib-doc.txt
    ${PROJECT_SOURCE_DIR}/src/include/reb-lib.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-lib-lib.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/boot/version.r
    ${PROJECT_SOURCE_DIR}/src/core/a-lib.c
    ${PROJECT_SOURCE_DIR}/src/core/f-extension.c
    )

    add_custom_target(prepare ALL
    DEPENDS
    # -- boot
    ${PROJECT_SOURCE_DIR}/src/include/tmp-evaltypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-maketypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-comptypes.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-types.h
    ${PROJECT_SOURCE_DIR}/src/include/ext-types.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-exttypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-bootdefs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-sysobj.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-dialect.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-evtypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-errnums.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-portmodes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-sysctx.h
    #${PROJECT_SOURCE_DIR}/src/boot/boot-code.r # unused
    ${PROJECT_SOURCE_DIR}/src/core/b-boot.c
    ${PROJECT_SOURCE_DIR}/src/include/tmp-boot.h
    # -- headers
    ${PROJECT_SOURCE_DIR}/src/include/tmp-funcs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-funcargs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-strings.h
    # -- host-ext
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-graphics.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-draw.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-shape.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-text.h
    # -- host-init
    #${PROJECT_SOURCE_DIR}/src/boot/host-init.r # unused
    ${PROJECT_SOURCE_DIR}/src/include/host-init.h
    # -- os-ext
    ${PROJECT_SOURCE_DIR}/src/include/host-lib.h
    # -- reb-lib
    ${PROJECT_SOURCE_DIR}/src/reb-lib-doc.txt
    ${PROJECT_SOURCE_DIR}/src/include/reb-lib.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-lib-lib.h
    )

    # -- Build targets

    add_executable(r3 ${R3_SRCS})
    target_link_libraries(r3 ${R3_LIBS})

    # -- Additional platform-specific configuration

    if(MSVC)
    # Add target-level dependency from `r3` to `prepare`, as VS (and/or CMake's
    # VS generator) can't handle file-level cross-target dependencies properly.
    add_dependencies(r3 prepare)
    endif()
  8. hostilefork created this gist Oct 2, 2014.
    266 changes: 266 additions & 0 deletions rebol.rmake
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,266 @@
    cmake_minimum_required(VERSION 2.8)

    project(rebol3)

    # -- Target platform detection

    if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    set(R3_OSX on)
    elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
    set(R3_WIN32 on)
    elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    set(R3_LINUX on)
    endif()

    # -- Common R3 build configuration

    add_definitions(-DREB_CORE)
    add_definitions(-DREB_EXE)

    include_directories(${PROJECT_SOURCE_DIR}/src/include)

    add_subdirectory(${PROJECT_SOURCE_DIR}/src/core)
    add_subdirectory(${PROJECT_SOURCE_DIR}/src/os)

    # Rebol 3 command used for bootstrap (in the "prepare" target).
    find_program(R3_MAKE r3-make)
    set(R3_MAKE_CMD ${R3_MAKE} -qs)

    # -- Platform-specific configuration

    if(R3_OSX)
    set(R3_TARGET "2.5")
    # Host sources
    set(R3_HOST_SUBDIR "posix")
    # Definitions
    add_definitions(-DTO_OSXI)
    add_definitions(-D_FILE_OFFSET_BITS=64)
    # Compiler/linker flags
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch i386")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-pointer-sign")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-common")
    # Libraries
    find_library(LIBM m)
    set(R3_LIBS ${LIBM})
    endif()

    if(R3_WIN32)
    set(R3_TARGET "3.1")
    # Host sources
    set(R3_HOST_SUBDIR "win32")
    # Definitions
    add_definitions(-DTO_WIN32)
    add_definitions(-DUNICODE)
    add_definitions(-D_FILE_OFFSET_BITS=64)
    if(NOT MSVC) # MinGW-specific settings (@@ Use more specific test.)
    # Compiler/linker flags
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
    set(CMAKE_EXE_LINKER_FLAGS "-Wl,--stack=4194300")
    # Libraries
    find_library(LIBCOMDLG32 comdlg32)
    find_library(LIBWSOCK32 wsock32)
    set(R3_LIBS ${LIBCOMDLG32} ${LIBWSOCK32})
    elseif(MSVC) # MSVC-specific settings
    # Definitions
    add_definitions(-D_CRT_SECURE_NO_WARNINGS)
    # Compiler/linker flags
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /subsystem:windows")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /stack:4194300")
    # LIBRARIES
    set(R3_LIBS comdlg32.lib wsock32.lib)
    endif()
    endif()

    if(R3_LINUX)
    set(R3_TARGET "4.4")
    # Host sources
    set(R3_HOST_SUBDIR "posix")
    # Definitions
    add_definitions(-DTO_LINUX)
    add_definitions(-D_FILE_OFFSET_BITS=64)
    # Compiler/linker flags
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
    # Libraries
    find_library(LIBDL dl)
    find_library(LIBM m)
    set(R3_LIBS ${LIBDL} ${LIBM})
    endif()

    add_subdirectory(${PROJECT_SOURCE_DIR}/src/os/${R3_HOST_SUBDIR})

    # -- Generated files

    set(R3_SRC_TOOLS_DIR ${PROJECT_SOURCE_DIR}/src/tools)

    file(GLOB R3_SRCS_CORE "${PROJECT_SOURCE_DIR}/src/core/*.c")

    file(GLOB R3_SRCS_MEZZ_BOOT # Basically mirroring src/mezz/boot-files.r
    "${PROJECT_SOURCE_DIR}/src/mezz/base-*.r"
    "${PROJECT_SOURCE_DIR}/src/mezz/sys-*.r"
    "${PROJECT_SOURCE_DIR}/src/mezz/mezz-*.r"
    "${PROJECT_SOURCE_DIR}/src/mezz/prot-*.r"
    )

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-boot.r 0.${R3_TARGET}
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/include/tmp-evaltypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-maketypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-comptypes.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-types.h
    ${PROJECT_SOURCE_DIR}/src/include/ext-types.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-exttypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-bootdefs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-sysobj.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-dialect.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-evtypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-errnums.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-portmodes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-sysctx.h
    ${PROJECT_SOURCE_DIR}/src/boot/boot-code.r
    ${PROJECT_SOURCE_DIR}/src/core/b-boot.c
    ${PROJECT_SOURCE_DIR}/src/include/tmp-boot.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/tools/systems.r
    ${PROJECT_SOURCE_DIR}/src/boot/version.r
    ${PROJECT_SOURCE_DIR}/src/boot/types.r
    ${PROJECT_SOURCE_DIR}/src/boot/types-ext.r
    ${PROJECT_SOURCE_DIR}/src/boot/strings.r
    ${PROJECT_SOURCE_DIR}/src/boot/words.r
    ${PROJECT_SOURCE_DIR}/src/boot/modes.r
    ${PROJECT_SOURCE_DIR}/src/boot/actions.r
    ${PROJECT_SOURCE_DIR}/src/boot/sysobj.r
    ${PROJECT_SOURCE_DIR}/src/boot/platforms.r
    ${PROJECT_SOURCE_DIR}/src/boot/errors.r
    ${PROJECT_SOURCE_DIR}/src/mezz/boot-files.r
    ${R3_SRCS_MEZZ_BOOT}
    ${PROJECT_SOURCE_DIR}/src/boot/booters.r
    ${PROJECT_SOURCE_DIR}/src/boot/natives.r
    ${PROJECT_SOURCE_DIR}/src/boot/typespec.r
    ${PROJECT_SOURCE_DIR}/src/boot/root.r
    ${PROJECT_SOURCE_DIR}/src/boot/task.r
    ${PROJECT_SOURCE_DIR}/src/boot/ops.r
    )

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-headers.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/include/tmp-funcs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-funcargs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-strings.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${R3_SRCS_CORE}
    ${PROJECT_SOURCE_DIR}/src/boot/actions.r
    ${PROJECT_SOURCE_DIR}/src/boot/natives.r
    ${PROJECT_SOURCE_DIR}/src/core/a-constants.c
    )

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-host-ext.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-graphics.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-draw.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-shape.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-text.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/boot/graphics.r
    ${PROJECT_SOURCE_DIR}/src/mezz/view-funcs.r
    ${PROJECT_SOURCE_DIR}/src/boot/draw.r
    ${PROJECT_SOURCE_DIR}/src/boot/shape.r
    ${PROJECT_SOURCE_DIR}/src/boot/text.r
    )

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-host-init.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/boot/host-init.r
    ${PROJECT_SOURCE_DIR}/src/include/host-init.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/mezz/prot-http.r
    )

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-os-ext.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/include/host-lib.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/boot/version.r
    ${PROJECT_SOURCE_DIR}/src/tools/systems.r
    ${PROJECT_SOURCE_DIR}/src/os/host-device.c
    ${PROJECT_SOURCE_DIR}/src/os/${R3_HOST_SUBDIR}/host-lib.c
    ${PROJECT_SOURCE_DIR}/src/os/${R3_HOST_SUBDIR}/host-window.c
    )

    add_custom_command(
    COMMAND ${R3_MAKE_CMD} ${R3_SRC_TOOLS_DIR}/make-reb-lib.r
    OUTPUT
    ${PROJECT_SOURCE_DIR}/src/reb-lib-doc.txt
    ${PROJECT_SOURCE_DIR}/src/include/reb-lib.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-lib-lib.h
    DEPENDS
    ${PROJECT_SOURCE_DIR}/src/tools/form-header.r
    ${PROJECT_SOURCE_DIR}/src/boot/version.r
    ${PROJECT_SOURCE_DIR}/src/core/a-lib.c
    ${PROJECT_SOURCE_DIR}/src/core/f-extension.c
    )

    add_custom_target(prepare ALL
    DEPENDS
    # -- boot
    ${PROJECT_SOURCE_DIR}/src/include/tmp-evaltypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-maketypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-comptypes.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-types.h
    ${PROJECT_SOURCE_DIR}/src/include/ext-types.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-exttypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-bootdefs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-sysobj.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-dialect.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-evtypes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-errnums.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-portmodes.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-sysctx.h
    #${PROJECT_SOURCE_DIR}/src/boot/boot-code.r # unused
    ${PROJECT_SOURCE_DIR}/src/core/b-boot.c
    ${PROJECT_SOURCE_DIR}/src/include/tmp-boot.h
    # -- headers
    ${PROJECT_SOURCE_DIR}/src/include/tmp-funcs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-funcargs.h
    ${PROJECT_SOURCE_DIR}/src/include/tmp-strings.h
    # -- host-ext
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-graphics.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-draw.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-shape.h
    ${PROJECT_SOURCE_DIR}/src/include/host-ext-text.h
    # -- host-init
    #${PROJECT_SOURCE_DIR}/src/boot/host-init.r # unused
    ${PROJECT_SOURCE_DIR}/src/include/host-init.h
    # -- os-ext
    ${PROJECT_SOURCE_DIR}/src/include/host-lib.h
    # -- reb-lib
    ${PROJECT_SOURCE_DIR}/src/reb-lib-doc.txt
    ${PROJECT_SOURCE_DIR}/src/include/reb-lib.h
    ${PROJECT_SOURCE_DIR}/src/include/reb-lib-lib.h
    )

    # -- Build targets

    add_executable(r3 ${R3_SRCS})
    target_link_libraries(r3 ${R3_LIBS})

    # -- Additional platform-specific configuration

    if(MSVC)
    # Add target-level dependency from `r3` to `prepare`, as VS (and/or CMake's
    # VS generator) can't handle file-level cross-target dependencies properly.
    add_dependencies(r3 prepare)
    endif()