changeset 53:92b87bf82dd8

WIP on the build system, everything seems to work, need to check Windows now
author Louis Opter <louis@lse.epitech.net>
date Thu, 26 Jan 2012 18:50:49 +0100
parents 0ca794649028
children 1f78508dbaa2
files maintainers_refactor_the_build_system_to_allow_standalone_rathaxes_projects_with_cmake.patch
diffstat 1 files changed, 66 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- 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