diff --git a/CMakeLists.txt b/CMakeLists.txt index 23ecc05892..94eae1699a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,44 +18,6 @@ cmake_minimum_required(VERSION 2.8) project(Retro) -include(CMakeParseArguments) - -function(add_application name) - set(options DEBUGBREAK CONSOLE) - set(oneValueArgs TYPE CREATOR) - set(multiValueArgs FILES MAKEAPPL_ARGS) - cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) - - list(APPEND ARGS_FILES ${ARGS_UNPARSED_ARGUMENTS}) - - set(files) - foreach(f ${ARGS_FILES}) - list(APPEND files "${CMAKE_CURRENT_SOURCE_DIR}/${f}") - endforeach() - - add_executable(${name} ${files}) - - if(${ARGS_DEBUGBREAK}) - list(APPEND ARGS_MAKEAPPL_ARGS -b) - endif() - if(${ARGS_CONSOLE}) - target_link_libraries(${name} RetroConsole) - endif() - - - if(TARGET libretro) - set_target_properties(${name} PROPERTIES LINK_DEPENDS libretro) - endif(TARGET libretro) - - set_target_properties(${name} PROPERTIES OUTPUT_NAME ${name}.flt) - - add_custom_command( - OUTPUT ${name}.bin ${name} ${name}.dsk - COMMAND ${MAKE_APPL} ${ARGS_MAKEAPPL_ARGS} -c "${name}.flt" -o "${name}" - DEPENDS ${name}) - add_custom_target(${name}_APPL ALL DEPENDS ${name}.bin) -endfunction() - if(CMAKE_SYSTEM_NAME MATCHES Retro68) add_subdirectory(libretro) @@ -67,6 +29,12 @@ add_subdirectory(TestApps) add_subdirectory(Raytracer) add_subdirectory(Launcher) else() + +configure_file(cmake/retro68.toolchain.cmake.in cmake/retro68.toolchain.cmake @ONLY) + +install(DIRECTORY cmake/ DESTINATION cmake FILES_MATCHING PATTERN "*.cmake") +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/retro68.toolchain.cmake DESTINATION cmake) + add_subdirectory(ResourceFiles) add_subdirectory(MakeAPPL) add_subdirectory(ASFilter) diff --git a/HelloWorld/CMakeLists.txt b/HelloWorld/CMakeLists.txt new file mode 100644 index 0000000000..c810f7a018 --- /dev/null +++ b/HelloWorld/CMakeLists.txt @@ -0,0 +1,11 @@ +# cmake \ +# -DCMAKE_TOOLCHAIN_FILE=$SRC/retro68.toolchain.cmake \ +# -DRETRO68_ROOT=$PREFIX \ +# -DCMAKE_BUILD_TYPE=Release + +cmake_minimum_required(VERSION 2.8) + +add_application(HelloWorld + hello.c + CONSOLE + ) diff --git a/HelloWorld/Makefile b/HelloWorld/Makefile new file mode 100644 index 0000000000..b62121380e --- /dev/null +++ b/HelloWorld/Makefile @@ -0,0 +1,15 @@ +# path to RETRO68 +RETRO68=../../Retro68-build/toolchain + +PREFIX=$(RETRO68)/m68k-unknown-elf +CC=$(RETRO68)/bin/m68k-unknown-elf-gcc +CXX=$(RETRO68)/bin/m68k-unknown-elf-g++ +MAKEAPPL=$(RETRO68)/bin/MakeAPPL + +LDFLAGS=-lRetroConsole + +HelloWorld.bin HelloWorld.APPL HelloWorld.dsk: HelloWorld.flt + $(MAKEAPPL) -c HelloWorld.flt -o HelloWorld + +HelloWorld.flt: hello.o + $(CXX) $< -o $@ $(LDFLAGS) # C++ used for linking because RetroConsole needs it diff --git a/HelloWorld/hello.c b/HelloWorld/hello.c new file mode 100644 index 0000000000..1dbd3ac56d --- /dev/null +++ b/HelloWorld/hello.c @@ -0,0 +1,28 @@ +/* + Copyright 2014 Wolfgang Thaller. + + This file is part of Retro68. + + Retro68 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Retro68 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Retro68. If not, see . +*/ + +#include + +int main(int argc, char** argv) +{ + printf("Hello, world.\n"); + printf("\n(Press Return)\n"); + getchar(); + return 0; +} diff --git a/build-toolchain.sh b/build-toolchain.sh index 541af35aba..f8c96047e8 100644 --- a/build-toolchain.sh +++ b/build-toolchain.sh @@ -66,19 +66,18 @@ cd build-host cmake ${SRC} -DCMAKE_INSTALL_PREFIX=$PREFIX cd .. +make -C build-host install + # create an empty libretrocrt.a so that cmake's compiler test doesn't fail $PREFIX/bin/m68k-unknown-elf-ar cqs $PREFIX/m68k-unknown-elf/lib/libretrocrt.a # the real libretrocrt.a is built and installed by `make -C build-target install` later mkdir -p build-target cd build-target -cmake ${SRC} -DCMAKE_INSTALL_PREFIX=$PREFIX/m68k-unknown-elf \ - -DCMAKE_TOOLCHAIN_FILE=$SRC/retro68.toolchain.cmake \ - -DRETRO68_ROOT=$PREFIX \ +cmake ${SRC} -DCMAKE_TOOLCHAIN_FILE=$PREFIX/cmake/retro68.toolchain.cmake \ -DCMAKE_BUILD_TYPE=Release cd .. -make -C build-host install if test ! -e $PREFIX/bin/m68k-unknown-elf-as.real; then mv $PREFIX/bin/m68k-unknown-elf-as $PREFIX/bin/m68k-unknown-elf-as.real diff --git a/cmake/add_application.cmake b/cmake/add_application.cmake new file mode 100644 index 0000000000..1ce8478192 --- /dev/null +++ b/cmake/add_application.cmake @@ -0,0 +1,46 @@ +include(CMakeParseArguments) + +cmake_policy(PUSH) +cmake_policy(SET CMP0012 NEW) + +function(add_application name) + + set(options DEBUGBREAK CONSOLE) + set(oneValueArgs TYPE CREATOR) + set(multiValueArgs FILES MAKEAPPL_ARGS) + cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) + + list(APPEND ARGS_FILES ${ARGS_UNPARSED_ARGUMENTS}) + + set(files) + foreach(f ${ARGS_FILES}) + list(APPEND files "${CMAKE_CURRENT_SOURCE_DIR}/${f}") + endforeach() + + add_executable(${name} ${files}) + + if(${ARGS_DEBUGBREAK}) + list(APPEND ARGS_MAKEAPPL_ARGS -b) + endif() + if(${ARGS_CONSOLE}) + target_link_libraries(${name} RetroConsole) + + # RetroConsole library uses C++: + set_target_properties(${name} PROPERTIES LINKER_LANGUAGE CXX) + endif() + + + if(TARGET libretro) + set_target_properties(${name} PROPERTIES LINK_DEPENDS libretro) + endif(TARGET libretro) + + set_target_properties(${name} PROPERTIES OUTPUT_NAME ${name}.flt) + + add_custom_command( + OUTPUT ${name}.bin ${name} ${name}.dsk + COMMAND ${MAKE_APPL} ${ARGS_MAKEAPPL_ARGS} -c "${name}.flt" -o "${name}" + DEPENDS ${name}) + add_custom_target(${name}_APPL ALL DEPENDS ${name}.bin) +endfunction() + +cmake_policy(POP) \ No newline at end of file diff --git a/retro68.toolchain.cmake b/cmake/retro68.toolchain.cmake.in similarity index 86% rename from retro68.toolchain.cmake rename to cmake/retro68.toolchain.cmake.in index a2478b5ddd..0f029a0018 100644 --- a/retro68.toolchain.cmake +++ b/cmake/retro68.toolchain.cmake.in @@ -18,7 +18,7 @@ set( CMAKE_SYSTEM_NAME Retro68 ) set( CMAKE_SYSTEM_VERSION 1) -set( RETRO68_ROOT "" CACHE PATH "path to root of Retro68 Toolchain" ) +set( RETRO68_ROOT "@CMAKE_INSTALL_PREFIX@" CACHE PATH "path to root of Retro68 Toolchain" ) set( CMAKE_INSTALL_PREFIX "${RETRO68_ROOT}/m68k-unknown-elf/" CACHE PATH "installation prefix" ) set( MAKE_APPL "${RETRO68_ROOT}/bin/MakeAPPL" ) @@ -27,3 +27,5 @@ set( REZ "${RETRO68_ROOT}/bin/Rez" ) set( CMAKE_C_COMPILER "${RETRO68_ROOT}/bin/m68k-unknown-elf-gcc" ) set( CMAKE_CXX_COMPILER "${RETRO68_ROOT}/bin/m68k-unknown-elf-g++" ) +list( APPEND CMAKE_MODULE_PATH "${RETRO68_ROOT}/cmake" ) +include(add_application)