reorganize CMake toolchain file, add standalone example

This commit is contained in:
Wolfgang Thaller 2015-07-16 01:26:11 +02:00
parent 0561012bb6
commit 140fe2caef
7 changed files with 112 additions and 43 deletions

View File

@ -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)

11
HelloWorld/CMakeLists.txt Normal file
View File

@ -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
)

15
HelloWorld/Makefile Normal file
View File

@ -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

28
HelloWorld/hello.c Normal file
View File

@ -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 <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
int main(int argc, char** argv)
{
printf("Hello, world.\n");
printf("\n(Press Return)\n");
getchar();
return 0;
}

View File

@ -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

View File

@ -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)

View File

@ -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)