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} # 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 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 R3_SRC_TOOLS_DIR: (PROJECT_SOURCE_DIR "/src/tools") R3_SRCS_CORE: file/glob (PROJECT_SOURCE_DIR "/src/core/*.c") 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 [ (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 [ (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 [ (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 [ (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 [ (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 [ (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") # -- 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 ;-- Until construction syntax allows arbitrary words, we'll need to add an ;-- option for filenames... r3: add/executable [ R3_SRCS ;/FILENAME "3r" ;-- for example ] 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] ]