# HG changeset patch # User Louis Opter # Date 1327600249 -3600 # Node ID 92b87bf82dd86bb08d927ff31e9e956a7fe75119 # Parent 0ca7946490286dad414b60f7ebd963cac4703a86 WIP on the build system, everything seems to work, need to check Windows now diff -r 0ca794649028 -r 92b87bf82dd8 maintainers_refactor_the_build_system_to_allow_standalone_rathaxes_projects_with_cmake.patch --- a/maintainers_refactor_the_build_system_to_allow_standalone_rathaxes_projects_with_cmake.patch Thu Jan 26 17:26:47 2012 +0100 +++ b/maintainers_refactor_the_build_system_to_allow_standalone_rathaxes_projects_with_cmake.patch Thu Jan 26 18:50:49 2012 +0100 @@ -15,9 +15,12 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -27,27 +27,17 @@ +@@ -25,29 +25,19 @@ + # FILE(REMOVE "CMakeCache.txt") doesn't work so include it into the snippet. + ENDIF (${RATHAXES_SOURCE_DIR} STREQUAL ${RATHAXES_BINARY_DIR}) - SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${RATHAXES_SOURCE_DIR}/maintainers/CMakeScripts) +-SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${RATHAXES_SOURCE_DIR}/maintainers/CMakeScripts) ++LIST(APPEND CMAKE_MODULE_PATH ${RATHAXES_SOURCE_DIR}/maintainers/CMakeScripts) +INCLUDE(UseRathaxes) FIND_PACKAGE(LATEX) @@ -47,7 +50,7 @@ diff --git a/maintainers/CMakeLists.txt b/maintainers/CMakeLists.txt --- a/maintainers/CMakeLists.txt +++ b/maintainers/CMakeLists.txt -@@ -10,6 +10,6 @@ +@@ -10,6 +10,10 @@ INSTALL(PROGRAMS ${CODEWORKER_BINARY_PATH} DESTINATION lib/rathaxes/) @@ -55,6 +58,24 @@ +# Generate the install rules for the rathaxes binaries ADD_SUBDIRECTORY(bin) ++ ++# Install the Rathaxes CMakeScripts library ++ ++ADD_SUBDIRECTORY(CMakeScripts) +diff --git a/maintainers/CMakeScripts/CMakeLists.txt b/maintainers/CMakeScripts/CMakeLists.txt +new file mode 100644 +--- /dev/null ++++ b/maintainers/CMakeScripts/CMakeLists.txt +@@ -0,0 +1,9 @@ ++# CMakeScripts ++INSTALL(FILES ++ FindCodeWorker.cmake ++ FindRathaxes.cmake ++ FindLinuxKBuildDir.cmake ++ DESTINATION share/rathaxes/CMakeScripts/) ++ ++# Templates used by the CMakeScripts ++INSTALL(DIRECTORY Templates DESTINATION share/rathaxes/CMakeScripts/) diff --git a/maintainers/CMakeScripts/FindCodeWorker.cmake b/maintainers/CMakeScripts/FindCodeWorker.cmake --- a/maintainers/CMakeScripts/FindCodeWorker.cmake +++ b/maintainers/CMakeScripts/FindCodeWorker.cmake @@ -67,6 +88,18 @@ ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux" AND CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") ENDIF (UNIX) ELSE (${CODEWORKER_DL_RETURN} EQUAL 0) +diff --git a/maintainers/CMakeScripts/FindLinuxKBuildDir.cmake b/maintainers/CMakeScripts/FindLinuxKBuildDir.cmake +--- a/maintainers/CMakeScripts/FindLinuxKBuildDir.cmake ++++ b/maintainers/CMakeScripts/FindLinuxKBuildDir.cmake +@@ -34,6 +34,8 @@ + SET(LINUX_KBUILD_DIR "${KDIR}" CACHE PATH "Path to the Linux KBuild directory (usually /lib/modules/`uname -r`/build/)") + ENDIF (LINUX_KBUILD_DIR_MAKEFILE) + ENDIF (IS_DIRECTORY "${KDIR}") ++ELSE (NOT LINUX_KBUILD_DIR) ++ SET(LINUXKBUILDDIR_FIND_QUIETLY TRUE) + ENDIF (NOT LINUX_KBUILD_DIR) + + INCLUDE(FindPackageHandleStandardArgs) diff --git a/maintainers/CMakeScripts/FindRathaxes.cmake b/maintainers/CMakeScripts/FindRathaxes.cmake new file mode 100644 --- /dev/null @@ -93,20 +126,19 @@ diff --git a/maintainers/CMakeScripts/UseRathaxes.cmake b/maintainers/CMakeScripts/UseRathaxes.cmake --- a/maintainers/CMakeScripts/UseRathaxes.cmake +++ b/maintainers/CMakeScripts/UseRathaxes.cmake -@@ -1,3 +1,12 @@ -+# CMake library to easily make Rathaxes projects. +@@ -1,3 +1,11 @@ ++# CMake library to easily work on Rathaxes projects. +# -+# This library depends on: -+# - FindCodeWorker.cmake; -+# - FindRathaxes.cmake; -+# - FindLinuxKBuildDir.cmake (could be made optional). ++# Simply INCLUDE() it in your Rathaxes project. Obviously you need to have ++# Rathaxes installed to use it (unless you are a Rathaxes developer and ++# directly working on Rathaxes itself). + +# Functions #################################################################### + FUNCTION(_RTX_PARSE_OPTIONS ARGS RTI_OUT BLT_OUT SYSTEM_OUT) SET(OPTIONS "RTI" "BLT" "SYSTEM") SET(FILE_LISTS ${RTI_OUT} ${BLT_OUT} ${SYSTEM_OUT}) -@@ -38,13 +47,13 @@ +@@ -38,13 +46,13 @@ SYSTEMS) # [in] name of each target system FOREACH(RTI ${RTI_FILES}) LIST(APPEND ${REGISTER_COMMANDS_OUT} @@ -122,7 +154,7 @@ "blt-register" "${CMAKE_CURRENT_SOURCE_DIR}/${BLT}") ENDFOREACH(BLT ${BLT_FILES}) -@@ -53,7 +62,7 @@ +@@ -53,7 +61,7 @@ # At some point I guess we will use different directories instead of # different file names. LIST(APPEND ${GENERATE_COMMANDS_OUT} @@ -131,7 +163,7 @@ "generate" "/o" "${OUT_NAME}_${OS}.c" "${OS}" "${CMAKE_CURRENT_SOURCE_DIR}/${RTX_FILE}") ENDFOREACH(OS ${SYSTEMS}) -@@ -85,13 +94,6 @@ +@@ -85,13 +93,6 @@ # At some point we will certainly have our own language definition for CMake # but let's start with simpler things. FUNCTION(ADD_RATHAXES_SOURCES OUT_NAME RTX_FILE) @@ -145,7 +177,7 @@ LIST(REMOVE_ITEM ARGV ${OUT_NAME} ${RTX_FILE}) # We have to expand ARGV inside quotes, so it expand as a single LIST -@@ -118,7 +120,7 @@ +@@ -118,7 +119,7 @@ # that should be rebuilt automatically when its sources change. STRING(REPLACE ";" ", " SYSTEMS "${SYSTEMS}") ADD_CUSTOM_COMMAND(OUTPUT ${OUTPUTS} @@ -154,7 +186,7 @@ ${REGISTER_COMMANDS} ${GENERATE_COMMANDS} COMMENT "Building Rathaxes target ${OUT_NAME} for ${SYSTEMS}" -@@ -188,8 +190,7 @@ +@@ -188,8 +189,7 @@ # Generate the Linux Makefile to build a Linux kernel module SET(MODULE_MAKEFILE "${MODULE_BUILD_DIR}/Makefile") SET(LKM_OBJECTS "${RATHAXES_SOURCE}_${SYSTEM}.o") @@ -164,7 +196,7 @@ SET(KERNEL_OBJECT_NAME "${RATHAXES_SOURCE}_${SYSTEM}.ko") ADD_CUSTOM_COMMAND(OUTPUT "${KERNEL_OBJECT_NAME}" -@@ -216,11 +217,9 @@ +@@ -216,11 +216,9 @@ # Generate the Windows Makefile to build a Windows kernel module SET(MODULE_SOURCES "${MODULE_BUILD_DIR}/sources") SET(LKM_SOURCES "${RATHAXES_SOURCE}_${SYSTEM}.c") @@ -178,11 +210,23 @@ SET(KERNEL_OBJECT_NAME "${RATHAXES_SOURCE}_${SYSTEM}.sys") ADD_CUSTOM_COMMAND(OUTPUT "${KERNEL_OBJECT_NAME}" -@@ -237,3 +236,47 @@ +@@ -237,3 +235,59 @@ MESSAGE(STATUS "Don't know how to build kernel modules for ${SYSTEM} (yet)") ENDIF (${SYSTEM} MATCHES "Linux") ENDFUNCTION(ADD_RATHAXES_LKM NAME RATHAXES_SOURCE) + ++# Like FIND_PACKAGE but also search in the Rathaxes directories. Usage: ++# ++# FIND_RATHAXES_PACKAGE(PACKAGE [REQUIRED]) ++FUNCTION(FIND_RATHAXES_PACKAGE NAME) ++ FOREACH(I ${CMAKE_SYSTEM_PREFIX_PATH}) ++ LIST(APPEND CMAKE_MODULE_PATH ${I}/share/rathaxes/CMakeScripts) ++ ENDFOREACH(I ${CMAKE_SYSTEM_PREFIX_PATH}) ++ # The environment variable is set by rathaxesvars.bat on Windows ++ LIST(APPEND CMAKE_MODULE_PATH $ENV{RATHAXES_PATH}/usr/) ++ FIND_PACKAGE(${NAME} ${ARGV2}) ++ENDFUNCTION(FIND_RATHAXES_PACKAGE NAME) ++ +# Code ######################################################################### + +# Inside a FUNCTION OR MACRO CMAKE_CURRENT_LIST_{DIR,FILE} return the path of @@ -197,7 +241,7 @@ +# point to the compiler files within the repository. +# Else use the "system" rathaxes binary. +IF (${PROJECT_NAME} STREQUAL RATHAXES) -+ FIND_PACKAGE(CodeWorker REQUIRED) ++ FIND_RATHAXES_PACKAGE(CodeWorker REQUIRED) + + SET(_USE_RATHAXES_CODEWORKER_COMMAND + ${CODEWORKER_BINARY_PATH} "-nologo" @@ -207,14 +251,14 @@ + "-args" "${CMAKE_SOURCE_DIR}/rathaxes/" "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/RathaxesCache/" + CACHE INTERNAL "CodeWorker command to -manually- invoke the Rathaxes compiler") +ELSE (${PROJECT_NAME} STREQUAL RATHAXES) -+ FIND_PACKAGE(Rathaxes REQUIRED) ++ FIND_RATHAXES_PACKAGE(Rathaxes REQUIRED) + + SET(_USE_RATHAXES_CODEWORKER_COMMAND ${RATHAXES_BINARY_PATH} CACHE INTERNAL "Rathaxes command") +ENDIF (${PROJECT_NAME} STREQUAL RATHAXES) + +# Only do this on Linux, as far as I know nobody compiles Linux from another OS. +IF (CMAKE_SYSTEM_NAME MATCHES "Linux") -+ FIND_PACKAGE(LinuxKBuildDir) ++ FIND_RATHAXES_PACKAGE(LinuxKBuildDir) + IF (LINUX_KBUILD_DIR) + MESSAGE(STATUS "No valid Linux build tree found, Linux kernel modules will not be built") + ENDIF (LINUX_KBUILD_DIR) @@ -288,7 +332,7 @@ diff --git a/rathaxes/CMakeLists.txt b/rathaxes/CMakeLists.txt --- a/rathaxes/CMakeLists.txt +++ b/rathaxes/CMakeLists.txt -@@ -26,4 +26,22 @@ +@@ -26,4 +26,17 @@ INSTALL(DIRECTORY compiler DESTINATION lib/rathaxes PATTERN compiler/tests EXCLUDE) @@ -302,16 +346,11 @@ +INSTALL(FILES samples/SamplesCMakeLists.txt + DESTINATION share/doc/rathaxes/samples + RENAME CMakeLists.txt) -+# CMakeScripts ++ ++# UseRathaxes.cmake +INSTALL(FILES + ${RATHAXES_SOURCE_DIR}/maintainers/CMakeScripts/UseRathaxes.cmake -+ ${RATHAXES_SOURCE_DIR}/maintainers/CMakeScripts/FindCodeWorker.cmake -+ ${RATHAXES_SOURCE_DIR}/maintainers/CMakeScripts/FindRathaxes.cmake -+ ${RATHAXES_SOURCE_DIR}/maintainers/CMakeScripts/FindLinuxKBuildDir.cmake + DESTINATION share/doc/rathaxes/samples/CMakeScripts/) -+# Templates used by the CMakeScripts -+INSTALL(DIRECTORY ${RATHAXES_SOURCE_DIR}/maintainers/CMakeScripts/Templates -+ DESTINATION share/doc/rathaxes/samples/CMakeScripts/Template/) diff --git a/rathaxes/samples/SamplesCMakeLists.txt b/rathaxes/samples/SamplesCMakeLists.txt new file mode 100644 --- /dev/null